From 195d08f45428284e67ff5313bfa67288e3295b6c Mon Sep 17 00:00:00 2001 From: liujiangnan <695541723@qq.com> Date: Tue, 3 Sep 2019 21:08:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=84=9A=E6=89=8B=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 13 + .gitignore | 46 + angular.json | 136 + browserslist | 12 + e2e/protractor.conf.js | 32 + e2e/src/app.e2e-spec.ts | 23 + e2e/src/app.po.ts | 11 + e2e/tsconfig.json | 13 + karma.conf.js | 32 + package-lock.json | 15007 +++++ package.json | 77 + src/app/app.component.html | 3 + src/app/app.component.scss | 0 src/app/app.component.ts | 29 + src/app/app.module.ts | 45 + .../audio-recorder.component.html | 62 + .../audio-recorder.component.scss | 104 + .../audio-recorder.component.ts | 229 + .../lesson-title-config.component.html | 112 + .../lesson-title-config.component.scss | 319 + .../lesson-title-config.component.ts | 280 + .../player-content-wrapper.component.html | 8 + .../player-content-wrapper.component.scss | 54 + .../player-content-wrapper.component.ts | 55 + src/app/form/form.component.html | 14 + src/app/form/form.component.scss | 20 + src/app/form/form.component.ts | 46 + src/app/play/play.component.html | 50 + src/app/play/play.component.scss | 116 + src/app/play/play.component.ts | 154 + src/app/style/colors.scss | 16 + src/app/style/common_mixin.scss | 21 + src/assets/.gitkeep | 0 src/assets/20-9.png | Bin 0 -> 12954 bytes src/assets/all-letters/bg.png | Bin 0 -> 370592 bytes src/assets/all-letters/bg2.png | Bin 0 -> 377538 bytes src/assets/all-letters/letter-audios/a.mp3 | Bin 0 -> 14834 bytes src/assets/all-letters/letter-audios/b.mp3 | Bin 0 -> 15990 bytes src/assets/all-letters/letter-audios/c.mp3 | Bin 0 -> 13299 bytes src/assets/all-letters/letter-audios/d.mp3 | Bin 0 -> 14835 bytes src/assets/all-letters/letter-audios/e.mp3 | Bin 0 -> 13299 bytes src/assets/all-letters/letter-audios/f.mp3 | Bin 0 -> 13299 bytes src/assets/all-letters/letter-audios/g.mp3 | Bin 0 -> 13299 bytes src/assets/all-letters/letter-audios/h.mp3 | Bin 0 -> 12147 bytes src/assets/all-letters/letter-audios/i.mp3 | Bin 0 -> 13299 bytes src/assets/all-letters/letter-audios/j.mp3 | Bin 0 -> 15220 bytes src/assets/all-letters/letter-audios/k.mp3 | Bin 0 -> 12915 bytes src/assets/all-letters/letter-audios/l.mp3 | Bin 0 -> 17142 bytes src/assets/all-letters/letter-audios/m.mp3 | Bin 0 -> 18678 bytes src/assets/all-letters/letter-audios/n.mp3 | Bin 0 -> 16759 bytes src/assets/all-letters/letter-audios/o.mp3 | Bin 0 -> 15221 bytes src/assets/all-letters/letter-audios/p.mp3 | Bin 0 -> 12916 bytes src/assets/all-letters/letter-audios/q.mp3 | Bin 0 -> 14836 bytes src/assets/all-letters/letter-audios/r.mp3 | Bin 0 -> 15991 bytes src/assets/all-letters/letter-audios/s.mp3 | Bin 0 -> 15991 bytes src/assets/all-letters/letter-audios/t.mp3 | Bin 0 -> 12148 bytes src/assets/all-letters/letter-audios/u.mp3 | Bin 0 -> 13300 bytes src/assets/all-letters/letter-audios/v.mp3 | Bin 0 -> 16759 bytes src/assets/all-letters/letter-audios/w.mp3 | Bin 0 -> 15991 bytes src/assets/all-letters/letter-audios/x.mp3 | Bin 0 -> 14068 bytes src/assets/all-letters/letter-audios/y.mp3 | Bin 0 -> 15221 bytes src/assets/all-letters/letter-audios/z.mp3 | Bin 0 -> 15221 bytes src/assets/all-letters/letter-detail/100.png | Bin 0 -> 14331 bytes src/assets/all-letters/letter-detail/101.png | Bin 0 -> 17176 bytes src/assets/all-letters/letter-detail/102.png | Bin 0 -> 14179 bytes src/assets/all-letters/letter-detail/103.png | Bin 0 -> 16478 bytes src/assets/all-letters/letter-detail/104.png | Bin 0 -> 15057 bytes src/assets/all-letters/letter-detail/105.png | Bin 0 -> 12911 bytes src/assets/all-letters/letter-detail/106.png | Bin 0 -> 15671 bytes src/assets/all-letters/letter-detail/107.png | Bin 0 -> 14864 bytes src/assets/all-letters/letter-detail/108.png | Bin 0 -> 12223 bytes src/assets/all-letters/letter-detail/109.png | Bin 0 -> 17312 bytes src/assets/all-letters/letter-detail/110.png | Bin 0 -> 16010 bytes src/assets/all-letters/letter-detail/111.png | Bin 0 -> 16242 bytes src/assets/all-letters/letter-detail/112.png | Bin 0 -> 14481 bytes src/assets/all-letters/letter-detail/113.png | Bin 0 -> 13571 bytes src/assets/all-letters/letter-detail/114.png | Bin 0 -> 12753 bytes src/assets/all-letters/letter-detail/115.png | Bin 0 -> 16777 bytes src/assets/all-letters/letter-detail/116.png | Bin 0 -> 13239 bytes src/assets/all-letters/letter-detail/117.png | Bin 0 -> 14170 bytes src/assets/all-letters/letter-detail/118.png | Bin 0 -> 13543 bytes src/assets/all-letters/letter-detail/119.png | Bin 0 -> 15821 bytes src/assets/all-letters/letter-detail/120.png | Bin 0 -> 14171 bytes src/assets/all-letters/letter-detail/121.png | Bin 0 -> 14163 bytes src/assets/all-letters/letter-detail/122.png | Bin 0 -> 11837 bytes src/assets/all-letters/letter-detail/65.png | Bin 0 -> 14791 bytes src/assets/all-letters/letter-detail/66.png | Bin 0 -> 17127 bytes src/assets/all-letters/letter-detail/67.png | Bin 0 -> 16533 bytes src/assets/all-letters/letter-detail/68.png | Bin 0 -> 15651 bytes src/assets/all-letters/letter-detail/69.png | Bin 0 -> 11688 bytes src/assets/all-letters/letter-detail/70.png | Bin 0 -> 12238 bytes src/assets/all-letters/letter-detail/71.png | Bin 0 -> 17556 bytes src/assets/all-letters/letter-detail/72.png | Bin 0 -> 14331 bytes src/assets/all-letters/letter-detail/73.png | Bin 0 -> 11176 bytes src/assets/all-letters/letter-detail/74.png | Bin 0 -> 11590 bytes src/assets/all-letters/letter-detail/75.png | Bin 0 -> 18576 bytes src/assets/all-letters/letter-detail/76.png | Bin 0 -> 12192 bytes src/assets/all-letters/letter-detail/77.png | Bin 0 -> 20634 bytes src/assets/all-letters/letter-detail/78.png | Bin 0 -> 17929 bytes src/assets/all-letters/letter-detail/79.png | Bin 0 -> 18273 bytes src/assets/all-letters/letter-detail/80.png | Bin 0 -> 15315 bytes src/assets/all-letters/letter-detail/81.png | Bin 0 -> 18100 bytes src/assets/all-letters/letter-detail/82.png | Bin 0 -> 16898 bytes src/assets/all-letters/letter-detail/83.png | Bin 0 -> 18630 bytes src/assets/all-letters/letter-detail/84.png | Bin 0 -> 12128 bytes src/assets/all-letters/letter-detail/85.png | Bin 0 -> 17095 bytes src/assets/all-letters/letter-detail/86.png | Bin 0 -> 16492 bytes src/assets/all-letters/letter-detail/87.png | Bin 0 -> 18597 bytes src/assets/all-letters/letter-detail/88.png | Bin 0 -> 17235 bytes src/assets/all-letters/letter-detail/89.png | Bin 0 -> 15065 bytes src/assets/all-letters/letter-detail/90.png | Bin 0 -> 13852 bytes src/assets/all-letters/letter-detail/97.png | Bin 0 -> 18849 bytes src/assets/all-letters/letter-detail/98.png | Bin 0 -> 15108 bytes src/assets/all-letters/letter-detail/99.png | Bin 0 -> 16171 bytes src/assets/all-letters/letter-imgs/100.png | Bin 0 -> 10512 bytes src/assets/all-letters/letter-imgs/101.png | Bin 0 -> 7977 bytes src/assets/all-letters/letter-imgs/102.png | Bin 0 -> 8214 bytes src/assets/all-letters/letter-imgs/103.png | Bin 0 -> 8385 bytes src/assets/all-letters/letter-imgs/104.png | Bin 0 -> 8021 bytes src/assets/all-letters/letter-imgs/105.png | Bin 0 -> 8679 bytes src/assets/all-letters/letter-imgs/106.png | Bin 0 -> 10485 bytes src/assets/all-letters/letter-imgs/107.png | Bin 0 -> 8343 bytes src/assets/all-letters/letter-imgs/108.png | Bin 0 -> 7827 bytes src/assets/all-letters/letter-imgs/109.png | Bin 0 -> 9001 bytes src/assets/all-letters/letter-imgs/110.png | Bin 0 -> 7932 bytes src/assets/all-letters/letter-imgs/111.png | Bin 0 -> 9017 bytes src/assets/all-letters/letter-imgs/112.png | Bin 0 -> 8187 bytes src/assets/all-letters/letter-imgs/113.png | Bin 0 -> 8221 bytes src/assets/all-letters/letter-imgs/114.png | Bin 0 -> 10219 bytes src/assets/all-letters/letter-imgs/115.png | Bin 0 -> 10482 bytes src/assets/all-letters/letter-imgs/116.png | Bin 0 -> 7977 bytes src/assets/all-letters/letter-imgs/117.png | Bin 0 -> 8642 bytes src/assets/all-letters/letter-imgs/118.png | Bin 0 -> 10249 bytes src/assets/all-letters/letter-imgs/119.png | Bin 0 -> 9442 bytes src/assets/all-letters/letter-imgs/120.png | Bin 0 -> 10409 bytes src/assets/all-letters/letter-imgs/121.png | Bin 0 -> 8128 bytes src/assets/all-letters/letter-imgs/122.png | Bin 0 -> 7930 bytes src/assets/all-letters/letter-imgs/65.png | Bin 0 -> 8155 bytes src/assets/all-letters/letter-imgs/66.png | Bin 0 -> 8068 bytes src/assets/all-letters/letter-imgs/67.png | Bin 0 -> 8448 bytes src/assets/all-letters/letter-imgs/68.png | Bin 0 -> 9453 bytes src/assets/all-letters/letter-imgs/69.png | Bin 0 -> 8788 bytes src/assets/all-letters/letter-imgs/70.png | Bin 0 -> 9108 bytes src/assets/all-letters/letter-imgs/71.png | Bin 0 -> 9375 bytes src/assets/all-letters/letter-imgs/72.png | Bin 0 -> 9268 bytes src/assets/all-letters/letter-imgs/73.png | Bin 0 -> 9305 bytes src/assets/all-letters/letter-imgs/74.png | Bin 0 -> 9374 bytes src/assets/all-letters/letter-imgs/75.png | Bin 0 -> 8251 bytes src/assets/all-letters/letter-imgs/76.png | Bin 0 -> 8531 bytes src/assets/all-letters/letter-imgs/77.png | Bin 0 -> 8476 bytes src/assets/all-letters/letter-imgs/78.png | Bin 0 -> 10530 bytes src/assets/all-letters/letter-imgs/79.png | Bin 0 -> 9086 bytes src/assets/all-letters/letter-imgs/80.png | Bin 0 -> 8203 bytes src/assets/all-letters/letter-imgs/81.png | Bin 0 -> 9635 bytes src/assets/all-letters/letter-imgs/82.png | Bin 0 -> 8431 bytes src/assets/all-letters/letter-imgs/83.png | Bin 0 -> 8497 bytes src/assets/all-letters/letter-imgs/84.png | Bin 0 -> 8011 bytes src/assets/all-letters/letter-imgs/85.png | Bin 0 -> 8928 bytes src/assets/all-letters/letter-imgs/86.png | Bin 0 -> 9329 bytes src/assets/all-letters/letter-imgs/87.png | Bin 0 -> 9012 bytes src/assets/all-letters/letter-imgs/88.png | Bin 0 -> 9632 bytes src/assets/all-letters/letter-imgs/89.png | Bin 0 -> 10479 bytes src/assets/all-letters/letter-imgs/90.png | Bin 0 -> 9281 bytes src/assets/all-letters/letter-imgs/97.png | Bin 0 -> 7948 bytes src/assets/all-letters/letter-imgs/98.png | Bin 0 -> 8104 bytes src/assets/all-letters/letter-imgs/99.png | Bin 0 -> 7875 bytes src/assets/libs/audio-recorder/lame.min.js | 308 + src/assets/libs/audio-recorder/recorder.js | 141 + src/assets/libs/audio-recorder/worker.js | 108 + .../libs/service-worker/cache-service.js | 535 + src/assets/libs/video-js-7.0.0/video-js.css | 1699 + .../libs/video-js-7.0.0/video-js.min.css | 1 + src/assets/libs/video-js-7.0.0/video.js | 47623 ++++++++++++++++ src/assets/libs/video-js-7.0.0/video.min.js | 12 + src/environments/environment.prod.ts | 3 + src/environments/environment.ts | 16 + src/favicon.ico | Bin 0 -> 5430 bytes src/index.html | 21 + src/main.ts | 12 + src/polyfills.ts | 63 + src/styles.scss | 1 + src/test.ts | 20 + tsconfig.app.json | 18 + tsconfig.json | 27 + tsconfig.spec.json | 18 + tslint.json | 92 + 186 files changed, 67857 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 angular.json create mode 100644 browserslist create mode 100644 e2e/protractor.conf.js create mode 100644 e2e/src/app.e2e-spec.ts create mode 100644 e2e/src/app.po.ts create mode 100644 e2e/tsconfig.json create mode 100644 karma.conf.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/app/app.component.html create mode 100644 src/app/app.component.scss create mode 100644 src/app/app.component.ts create mode 100644 src/app/app.module.ts create mode 100644 src/app/common/audio-recorder/audio-recorder.component.html create mode 100644 src/app/common/audio-recorder/audio-recorder.component.scss create mode 100644 src/app/common/audio-recorder/audio-recorder.component.ts create mode 100644 src/app/common/lesson-title-config/lesson-title-config.component.html create mode 100644 src/app/common/lesson-title-config/lesson-title-config.component.scss create mode 100644 src/app/common/lesson-title-config/lesson-title-config.component.ts create mode 100644 src/app/common/player-content-wrapper/player-content-wrapper.component.html create mode 100644 src/app/common/player-content-wrapper/player-content-wrapper.component.scss create mode 100644 src/app/common/player-content-wrapper/player-content-wrapper.component.ts create mode 100644 src/app/form/form.component.html create mode 100644 src/app/form/form.component.scss create mode 100644 src/app/form/form.component.ts create mode 100644 src/app/play/play.component.html create mode 100644 src/app/play/play.component.scss create mode 100644 src/app/play/play.component.ts create mode 100644 src/app/style/colors.scss create mode 100644 src/app/style/common_mixin.scss create mode 100644 src/assets/.gitkeep create mode 100644 src/assets/20-9.png create mode 100644 src/assets/all-letters/bg.png create mode 100755 src/assets/all-letters/bg2.png create mode 100755 src/assets/all-letters/letter-audios/a.mp3 create mode 100755 src/assets/all-letters/letter-audios/b.mp3 create mode 100755 src/assets/all-letters/letter-audios/c.mp3 create mode 100755 src/assets/all-letters/letter-audios/d.mp3 create mode 100755 src/assets/all-letters/letter-audios/e.mp3 create mode 100755 src/assets/all-letters/letter-audios/f.mp3 create mode 100755 src/assets/all-letters/letter-audios/g.mp3 create mode 100755 src/assets/all-letters/letter-audios/h.mp3 create mode 100755 src/assets/all-letters/letter-audios/i.mp3 create mode 100755 src/assets/all-letters/letter-audios/j.mp3 create mode 100755 src/assets/all-letters/letter-audios/k.mp3 create mode 100755 src/assets/all-letters/letter-audios/l.mp3 create mode 100755 src/assets/all-letters/letter-audios/m.mp3 create mode 100755 src/assets/all-letters/letter-audios/n.mp3 create mode 100755 src/assets/all-letters/letter-audios/o.mp3 create mode 100755 src/assets/all-letters/letter-audios/p.mp3 create mode 100755 src/assets/all-letters/letter-audios/q.mp3 create mode 100755 src/assets/all-letters/letter-audios/r.mp3 create mode 100755 src/assets/all-letters/letter-audios/s.mp3 create mode 100755 src/assets/all-letters/letter-audios/t.mp3 create mode 100755 src/assets/all-letters/letter-audios/u.mp3 create mode 100755 src/assets/all-letters/letter-audios/v.mp3 create mode 100755 src/assets/all-letters/letter-audios/w.mp3 create mode 100755 src/assets/all-letters/letter-audios/x.mp3 create mode 100755 src/assets/all-letters/letter-audios/y.mp3 create mode 100755 src/assets/all-letters/letter-audios/z.mp3 create mode 100644 src/assets/all-letters/letter-detail/100.png create mode 100644 src/assets/all-letters/letter-detail/101.png create mode 100644 src/assets/all-letters/letter-detail/102.png create mode 100644 src/assets/all-letters/letter-detail/103.png create mode 100644 src/assets/all-letters/letter-detail/104.png create mode 100644 src/assets/all-letters/letter-detail/105.png create mode 100644 src/assets/all-letters/letter-detail/106.png create mode 100644 src/assets/all-letters/letter-detail/107.png create mode 100644 src/assets/all-letters/letter-detail/108.png create mode 100644 src/assets/all-letters/letter-detail/109.png create mode 100644 src/assets/all-letters/letter-detail/110.png create mode 100644 src/assets/all-letters/letter-detail/111.png create mode 100644 src/assets/all-letters/letter-detail/112.png create mode 100644 src/assets/all-letters/letter-detail/113.png create mode 100644 src/assets/all-letters/letter-detail/114.png create mode 100644 src/assets/all-letters/letter-detail/115.png create mode 100644 src/assets/all-letters/letter-detail/116.png create mode 100644 src/assets/all-letters/letter-detail/117.png create mode 100644 src/assets/all-letters/letter-detail/118.png create mode 100644 src/assets/all-letters/letter-detail/119.png create mode 100644 src/assets/all-letters/letter-detail/120.png create mode 100644 src/assets/all-letters/letter-detail/121.png create mode 100644 src/assets/all-letters/letter-detail/122.png create mode 100644 src/assets/all-letters/letter-detail/65.png create mode 100644 src/assets/all-letters/letter-detail/66.png create mode 100644 src/assets/all-letters/letter-detail/67.png create mode 100644 src/assets/all-letters/letter-detail/68.png create mode 100644 src/assets/all-letters/letter-detail/69.png create mode 100644 src/assets/all-letters/letter-detail/70.png create mode 100644 src/assets/all-letters/letter-detail/71.png create mode 100644 src/assets/all-letters/letter-detail/72.png create mode 100644 src/assets/all-letters/letter-detail/73.png create mode 100644 src/assets/all-letters/letter-detail/74.png create mode 100644 src/assets/all-letters/letter-detail/75.png create mode 100644 src/assets/all-letters/letter-detail/76.png create mode 100644 src/assets/all-letters/letter-detail/77.png create mode 100644 src/assets/all-letters/letter-detail/78.png create mode 100644 src/assets/all-letters/letter-detail/79.png create mode 100644 src/assets/all-letters/letter-detail/80.png create mode 100644 src/assets/all-letters/letter-detail/81.png create mode 100644 src/assets/all-letters/letter-detail/82.png create mode 100644 src/assets/all-letters/letter-detail/83.png create mode 100644 src/assets/all-letters/letter-detail/84.png create mode 100644 src/assets/all-letters/letter-detail/85.png create mode 100644 src/assets/all-letters/letter-detail/86.png create mode 100644 src/assets/all-letters/letter-detail/87.png create mode 100644 src/assets/all-letters/letter-detail/88.png create mode 100644 src/assets/all-letters/letter-detail/89.png create mode 100644 src/assets/all-letters/letter-detail/90.png create mode 100644 src/assets/all-letters/letter-detail/97.png create mode 100644 src/assets/all-letters/letter-detail/98.png create mode 100644 src/assets/all-letters/letter-detail/99.png create mode 100644 src/assets/all-letters/letter-imgs/100.png create mode 100644 src/assets/all-letters/letter-imgs/101.png create mode 100644 src/assets/all-letters/letter-imgs/102.png create mode 100644 src/assets/all-letters/letter-imgs/103.png create mode 100644 src/assets/all-letters/letter-imgs/104.png create mode 100644 src/assets/all-letters/letter-imgs/105.png create mode 100644 src/assets/all-letters/letter-imgs/106.png create mode 100644 src/assets/all-letters/letter-imgs/107.png create mode 100644 src/assets/all-letters/letter-imgs/108.png create mode 100644 src/assets/all-letters/letter-imgs/109.png create mode 100644 src/assets/all-letters/letter-imgs/110.png create mode 100644 src/assets/all-letters/letter-imgs/111.png create mode 100644 src/assets/all-letters/letter-imgs/112.png create mode 100644 src/assets/all-letters/letter-imgs/113.png create mode 100644 src/assets/all-letters/letter-imgs/114.png create mode 100644 src/assets/all-letters/letter-imgs/115.png create mode 100644 src/assets/all-letters/letter-imgs/116.png create mode 100644 src/assets/all-letters/letter-imgs/117.png create mode 100644 src/assets/all-letters/letter-imgs/118.png create mode 100644 src/assets/all-letters/letter-imgs/119.png create mode 100644 src/assets/all-letters/letter-imgs/120.png create mode 100644 src/assets/all-letters/letter-imgs/121.png create mode 100644 src/assets/all-letters/letter-imgs/122.png create mode 100644 src/assets/all-letters/letter-imgs/65.png create mode 100644 src/assets/all-letters/letter-imgs/66.png create mode 100644 src/assets/all-letters/letter-imgs/67.png create mode 100644 src/assets/all-letters/letter-imgs/68.png create mode 100644 src/assets/all-letters/letter-imgs/69.png create mode 100644 src/assets/all-letters/letter-imgs/70.png create mode 100644 src/assets/all-letters/letter-imgs/71.png create mode 100644 src/assets/all-letters/letter-imgs/72.png create mode 100644 src/assets/all-letters/letter-imgs/73.png create mode 100644 src/assets/all-letters/letter-imgs/74.png create mode 100644 src/assets/all-letters/letter-imgs/75.png create mode 100644 src/assets/all-letters/letter-imgs/76.png create mode 100644 src/assets/all-letters/letter-imgs/77.png create mode 100644 src/assets/all-letters/letter-imgs/78.png create mode 100644 src/assets/all-letters/letter-imgs/79.png create mode 100644 src/assets/all-letters/letter-imgs/80.png create mode 100644 src/assets/all-letters/letter-imgs/81.png create mode 100644 src/assets/all-letters/letter-imgs/82.png create mode 100644 src/assets/all-letters/letter-imgs/83.png create mode 100644 src/assets/all-letters/letter-imgs/84.png create mode 100644 src/assets/all-letters/letter-imgs/85.png create mode 100644 src/assets/all-letters/letter-imgs/86.png create mode 100644 src/assets/all-letters/letter-imgs/87.png create mode 100644 src/assets/all-letters/letter-imgs/88.png create mode 100644 src/assets/all-letters/letter-imgs/89.png create mode 100644 src/assets/all-letters/letter-imgs/90.png create mode 100644 src/assets/all-letters/letter-imgs/97.png create mode 100644 src/assets/all-letters/letter-imgs/98.png create mode 100644 src/assets/all-letters/letter-imgs/99.png create mode 100755 src/assets/libs/audio-recorder/lame.min.js create mode 100755 src/assets/libs/audio-recorder/recorder.js create mode 100755 src/assets/libs/audio-recorder/worker.js create mode 100644 src/assets/libs/service-worker/cache-service.js create mode 100644 src/assets/libs/video-js-7.0.0/video-js.css create mode 100644 src/assets/libs/video-js-7.0.0/video-js.min.css create mode 100644 src/assets/libs/video-js-7.0.0/video.js create mode 100644 src/assets/libs/video-js-7.0.0/video.min.js create mode 100644 src/environments/environment.prod.ts create mode 100644 src/environments/environment.ts create mode 100644 src/favicon.ico create mode 100644 src/index.html create mode 100644 src/main.ts create mode 100644 src/polyfills.ts create mode 100644 src/styles.scss create mode 100644 src/test.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.spec.json create mode 100644 tslint.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e89330a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..86d943a --- /dev/null +++ b/.gitignore @@ -0,0 +1,46 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..2633fea --- /dev/null +++ b/angular.json @@ -0,0 +1,136 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "ng-one": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/ng-one", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "aot": false, + "assets": [ + "src/favicon.ico", + "src/assets", + { "glob": "**/*", "input": "src/assets/libs/service-worker/", "output": "/" }, + { + "glob": "**/*", + "input": "./node_modules/@ant-design/icons-angular/src/inline-svg/", + "output": "/assets/" + }, + { + "glob": "**/*", + "input": "./dist/game/", + "output": "/assets/cocos/" + } + ], + "styles": [ + "src/styles.scss", + "./node_modules/ng-zorro-antd/ng-zorro-antd.min.css", + "./node_modules/font-awesome/css/font-awesome.css", + "./node_modules/bootstrap/dist/css/bootstrap.min.css", + "./node_modules/animate.css/animate.min.css" + ], + "scripts": [ + "src/assets/libs/audio-recorder/lame.min.js", + "src/assets/libs/audio-recorder/worker.js", + "src/assets/libs/audio-recorder/recorder.js" + ] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "ng-one:build" + }, + "configurations": { + "production": { + "browserTarget": "ng-one:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "ng-one:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "tsconfig.app.json", + "tsconfig.spec.json", + "e2e/tsconfig.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "ng-one:serve" + }, + "configurations": { + "production": { + "devServerTarget": "ng-one:serve:production" + } + } + } + } + }}, + "defaultProject": "ng-one" +} \ No newline at end of file diff --git a/browserslist b/browserslist new file mode 100644 index 0000000..8084853 --- /dev/null +++ b/browserslist @@ -0,0 +1,12 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js new file mode 100644 index 0000000..73e4e68 --- /dev/null +++ b/e2e/protractor.conf.js @@ -0,0 +1,32 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + 'browserName': 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; \ No newline at end of file diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..8879545 --- /dev/null +++ b/e2e/src/app.e2e-spec.ts @@ -0,0 +1,23 @@ +import { AppPage } from './app.po'; +import { browser, logging } from 'protractor'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getTitleText()).toEqual('Welcome to ng-one!'); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); + }); +}); diff --git a/e2e/src/app.po.ts b/e2e/src/app.po.ts new file mode 100644 index 0000000..5776aa9 --- /dev/null +++ b/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo() { + return browser.get(browser.baseUrl) as Promise<any>; + } + + getTitleText() { + return element(by.css('app-root h1')).getText() as Promise<string>; + } +} diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json new file mode 100644 index 0000000..39b800f --- /dev/null +++ b/e2e/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..4a9333c --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, './coverage/ng-one'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3a19fdb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,15007 @@ +{ + "name": "ng-template-generator", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.11.4.tgz", + "integrity": "sha512-2zi6S9tPlk52vyqN67IvFoeNgd0uxtrPlwl3TdvJ3wrH7sYGJnkQ+EzAE7cKUGWAV989BbNtx2YxhRDHnN21Fg==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.1.4", + "rxjs": "6.3.3" + }, + "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular-devkit/build-angular": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.11.4.tgz", + "integrity": "sha512-5WQAQB4heDqAotqjU3Tl8Ons0S/e16dKwVkQFdqfKPyBgmu4CyUH35eTV+i6i7un1Elg65U5GnA4MiUtApqVyw==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.11.4", + "@angular-devkit/build-optimizer": "0.11.4", + "@angular-devkit/build-webpack": "0.11.4", + "@angular-devkit/core": "7.1.4", + "@ngtools/webpack": "7.1.4", + "ajv": "6.5.3", + "autoprefixer": "9.3.1", + "circular-dependency-plugin": "5.0.2", + "clean-css": "4.2.1", + "copy-webpack-plugin": "4.5.4", + "file-loader": "2.0.0", + "glob": "7.1.3", + "istanbul": "0.4.5", + "istanbul-instrumenter-loader": "3.0.1", + "karma-source-map-support": "1.3.0", + "less": "3.8.1", + "less-loader": "4.1.0", + "license-webpack-plugin": "2.0.2", + "loader-utils": "1.1.0", + "mini-css-extract-plugin": "0.4.4", + "minimatch": "3.0.4", + "node-sass": "4.10.0", + "opn": "5.3.0", + "parse5": "4.0.0", + "portfinder": "1.0.17", + "postcss": "7.0.5", + "postcss-import": "12.0.0", + "postcss-loader": "3.0.0", + "raw-loader": "0.5.1", + "rxjs": "6.3.3", + "sass-loader": "7.1.0", + "semver": "5.5.1", + "source-map-loader": "0.2.4", + "source-map-support": "0.5.9", + "speed-measure-webpack-plugin": "1.2.3", + "stats-webpack-plugin": "0.7.0", + "style-loader": "0.23.1", + "stylus": "0.54.5", + "stylus-loader": "3.0.2", + "terser-webpack-plugin": "1.1.0", + "tree-kill": "1.2.0", + "webpack": "4.23.1", + "webpack-dev-middleware": "3.4.0", + "webpack-dev-server": "3.1.10", + "webpack-merge": "4.1.4", + "webpack-sources": "1.3.0", + "webpack-subresource-integrity": "1.1.0-rc.6" + }, + "dependencies": { + "@webassemblyjs/ast": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.10.tgz", + "integrity": "sha512-wTUeaByYN2EA6qVqhbgavtGc7fLTOx0glG2IBsFlrFG51uXIGlYBTyIZMf4SPLo3v1bgV/7lBN3l7Z0R6Hswew==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/wast-parser": "1.7.10" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.10.tgz", + "integrity": "sha512-gMsGbI6I3p/P1xL2UxqhNh1ga2HCsx5VBB2i5VvJFAaqAjd2PBTRULc3BpTydabUQEGlaZCzEUQhLoLG7TvEYQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.10.tgz", + "integrity": "sha512-DoYRlPWtuw3yd5BOr9XhtrmB6X1enYF0/54yNvQWGXZEPDF5PJVNI7zQ7gkcKfTESzp8bIBWailaFXEK/jjCsw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.10.tgz", + "integrity": "sha512-+RMU3dt/dPh4EpVX4u5jxsOlw22tp3zjqE0m3ftU2tsYxnPULb4cyHlgaNd2KoWuwasCQqn8Mhr+TTdbtj3LlA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.10.tgz", + "integrity": "sha512-UiytbpKAULOEab2hUZK2ywXen4gWJVrgxtwY3Kn+eZaaSWaRM8z/7dAXRSoamhKFiBh1uaqxzE/XD9BLlug3gw==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.7.10" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.10.tgz", + "integrity": "sha512-w2vDtUK9xeSRtt5+RnnlRCI7wHEvLjF0XdnxJpgx+LJOvklTZPqWkuy/NhwHSLP19sm9H8dWxKeReMR7sCkGZA==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.10.tgz", + "integrity": "sha512-yE5x/LzZ3XdPdREmJijxzfrf+BDRewvO0zl8kvORgSWmxpRrkqY39KZSq6TSgIWBxkK4SrzlS3BsMCv2s1FpsQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.10.tgz", + "integrity": "sha512-u5qy4SJ/OrxKxZqJ9N3qH4ZQgHaAzsopsYwLvoWJY6Q33r8PhT3VPyNMaJ7ZFoqzBnZlCcS/0f4Sp8WBxylXfg==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.10.tgz", + "integrity": "sha512-Ecvww6sCkcjatcyctUrn22neSJHLN/TTzolMGG/N7S9rpbsTZ8c6Bl98GpSpV77EvzNijiNRHBG0+JO99qKz6g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-buffer": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/wasm-gen": "1.7.10" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.10.tgz", + "integrity": "sha512-HRcWcY+YWt4+s/CvQn+vnSPfRaD4KkuzQFt5MNaELXXHSjelHlSEA8ZcqT69q0GTIuLWZ6JaoKar4yWHVpZHsQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.10.tgz", + "integrity": "sha512-og8MciYlA8hvzCLR71hCuZKPbVBfLQeHv7ImKZ4nlyxrYbG7uJHYtHiHu6OV9SqrGuD03H/HtXC4Bgdjfm9FHw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/utf8": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.10.tgz", + "integrity": "sha512-Ng6Pxv6siyZp635xCSnH3mKmIFgqWPCcGdoo0GBYgyGdxu7cUj4agV7Uu1a8REP66UYUFXJLudeGgd4RvuJAnQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.10.tgz", + "integrity": "sha512-e9RZFQlb+ZuYcKRcW9yl+mqX/Ycj9+3/+ppDI8nEE/NCY6FoK8f3dKBcfubYV/HZn44b+ND4hjh+4BYBt+sDnA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-buffer": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/helper-wasm-section": "1.7.10", + "@webassemblyjs/wasm-gen": "1.7.10", + "@webassemblyjs/wasm-opt": "1.7.10", + "@webassemblyjs/wasm-parser": "1.7.10", + "@webassemblyjs/wast-printer": "1.7.10" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.10.tgz", + "integrity": "sha512-M0lb6cO2Y0PzDye/L39PqwV+jvO+2YxEG5ax+7dgq7EwXdAlpOMx1jxyXJTScQoeTpzOPIb+fLgX/IkLF8h2yw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/ieee754": "1.7.10", + "@webassemblyjs/leb128": "1.7.10", + "@webassemblyjs/utf8": "1.7.10" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.10.tgz", + "integrity": "sha512-R66IHGCdicgF5ZliN10yn5HaC7vwYAqrSVJGjtJJQp5+QNPBye6heWdVH/at40uh0uoaDN/UVUfXK0gvuUqtVg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-buffer": "1.7.10", + "@webassemblyjs/wasm-gen": "1.7.10", + "@webassemblyjs/wasm-parser": "1.7.10" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.10.tgz", + "integrity": "sha512-AEv8mkXVK63n/iDR3T693EzoGPnNAwKwT3iHmKJNBrrALAhhEjuPzo/lTE4U7LquEwyvg5nneSNdTdgrBaGJcA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-api-error": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/ieee754": "1.7.10", + "@webassemblyjs/leb128": "1.7.10", + "@webassemblyjs/utf8": "1.7.10" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.10.tgz", + "integrity": "sha512-YTPEtOBljkCL0VjDp4sHe22dAYSm3ZwdJ9+2NTGdtC7ayNvuip1wAhaAS8Zt9Q6SW9E5Jf5PX7YE3XWlrzR9cw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/floating-point-hex-parser": "1.7.10", + "@webassemblyjs/helper-api-error": "1.7.10", + "@webassemblyjs/helper-code-frame": "1.7.10", + "@webassemblyjs/helper-fsm": "1.7.10", + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.10.tgz", + "integrity": "sha512-mJ3QKWtCchL1vhU/kZlJnLPuQZnlDOdZsyP0bbLWPGdYsQDnSBvyTLhzwBA3QAMlzEL9V4JHygEmK6/OTEyytA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/wast-parser": "1.7.10", + "@xtuc/long": "4.2.1" + } + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "dev": true + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "cacache": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", + "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz", + "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==", + "dev": true, + "requires": { + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.8.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + } + }, + "webpack": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.23.1.tgz", + "integrity": "sha512-iE5Cu4rGEDk7ONRjisTOjVHv3dDtcFfwitSxT7evtYj/rANJpt1OuC/Kozh1pBa99AUBr1L/LsaNB+D9Xz3CEg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-module-context": "1.7.10", + "@webassemblyjs/wasm-edit": "1.7.10", + "@webassemblyjs/wasm-parser": "1.7.10", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + }, + "dependencies": { + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-sources": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "@angular-devkit/build-optimizer": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.11.4.tgz", + "integrity": "sha512-tAAWWFCcl918Q1JivlLvLFer8Qm4/THWbEneMwk5fQvG6/NgJLoa3itP/MCUq4qL6YHmp2DWkdWnWfRQCgHeFA==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "source-map": "0.5.6", + "typescript": "3.1.6", + "webpack-sources": "1.2.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "typescript": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", + "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", + "dev": true + }, + "webpack-sources": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz", + "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.11.4.tgz", + "integrity": "sha512-4nEDXSbv3oDu27Rw5s2DMKmcOZYVAt76bryVF2SycSkDq3eAIiqmgw3G3CJJ4LTulXzDpaIpk02MvgbYkX+hvw==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.11.4", + "@angular-devkit/core": "7.1.4", + "rxjs": "6.3.3" + }, + "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular-devkit/core": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.4.tgz", + "integrity": "sha512-3cBVHjSQjMyE/mIyOX82ekdybNRQlN+kUfmdZS6oVW9aV48vdxcVbEGdl8t1H4enMf89u8kXiAAET9jFaqWopg==", + "dev": true, + "requires": { + "ajv": "6.5.3", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + }, + "dependencies": { + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.9.tgz", + "integrity": "sha512-xzROGCYp7aQbeJ3V6YC0MND7wKEAdWqmm/GaCufEk0dDS8ZGe0sQhcM2oBRa2nQqGQNeThFIH51kx+FayrJP0w==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.9", + "rxjs": "6.3.3" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", + "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@angular/animations": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.15.tgz", + "integrity": "sha512-8oBt3HLgd2+kyJHUgsd7OzKCCss67t2sch15XNoIWlOLfxclqU+EfFE6t/vCzpT8/+lpZS6LU9ZrTnb+UBj5jg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/cdk": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.3.7.tgz", + "integrity": "sha512-xbXxhHHKGkVuW6K7pzPmvpJXIwpl0ykBnvA2g+/7Sgy5Pd35wCC+UtHD9RYczDM/mkygNxMQtagyCErwFnDtQA==", + "requires": { + "parse5": "^5.0.0", + "tslib": "^1.7.1" + } + }, + "@angular/cli": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.9.tgz", + "integrity": "sha512-7oJj7CKDlFUbQav1x1CV4xKKcbt0pnxY4unKcm7Q1tVXhu8bU2bc3cDA0aJnbofcYb6TJcd/C2qHgCt78q7edA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/core": "7.3.9", + "@angular-devkit/schematics": "7.3.9", + "@schematics/angular": "7.3.9", + "@schematics/update": "0.13.9", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "inquirer": "6.2.1", + "npm-package-arg": "6.1.0", + "open": "6.0.0", + "pacote": "9.4.0", + "semver": "5.6.0", + "symbol-observable": "1.2.0" + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.9.tgz", + "integrity": "sha512-EAFtCs9dsGhpMRC45PoYsrkiExpWz9Ax15qXfzwdDRacz5DmdOVt+QpkLW1beUOwiyj/bhFyj23eaONK2RTn/w==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.9", + "rxjs": "6.3.3" + } + }, + "@angular-devkit/core": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", + "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@angular/common": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.15.tgz", + "integrity": "sha512-2b5JY2HWVHCf3D1GZjmde7jdAXSTXkYtmjLtA9tQkjOOTr80eHpNSujQqnzb97dk9VT9OjfjqTQd7K3pxZz8jw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/compiler": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.15.tgz", + "integrity": "sha512-5yb4NcLk8GuXkYf7Dcor4XkGueYp4dgihzDmMjYDUrV0NPhubKlr+SwGtLOtzgRBWJ1I2bO0S3zwa0q0OgIPOw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/compiler-cli": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.15.tgz", + "integrity": "sha512-+AsfyKawmj/sa+m4Pz8VSRFbCfx/3IOjAuuEjhopbyr154YpPDSu8NTbcwzq3yfbVcPwK4/4exmbQzpsndaCTg==", + "dev": true, + "requires": { + "canonical-path": "1.0.0", + "chokidar": "^2.1.1", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.7.2", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "shelljs": "^0.8.1", + "source-map": "^0.6.1", + "tslib": "^1.9.0", + "yargs": "9.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "@angular/core": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.15.tgz", + "integrity": "sha512-XsuYm0jEU/mOqwDOk2utThv8J9kESkAerfuCHClE9rB2TtHUOGCfekF7lJWqjjypu6/J9ygoPFo7hdAE058ZGg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/flex-layout": { + "version": "7.0.0-beta.24", + "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-7.0.0-beta.24.tgz", + "integrity": "sha512-ll6sK0nLGxqI/f5+z4jbd+pve1QITzgehv2AuGvfSDgIjPMeqUDB5YZqQmIGM/dQRk/vIio5KCW5LQPJWzMMYQ==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/forms": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.15.tgz", + "integrity": "sha512-p0kcIQLtBBC1qeTA6M3nOuXf/k91E80FKquVM9zEsO2kDjI0oZJVfFYL2UMov5samlJOPN+t6lRHEIUa7ApPsw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/http": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.2.15.tgz", + "integrity": "sha512-TR7PEdmLWNIre3Zn8lvyb4lSrvPUJhKLystLnp4hBMcWsJqq5iK8S3bnlR4viZ9HMlf7bW7+Hm4SI6aB3tdUtw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/language-service": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.2.15.tgz", + "integrity": "sha512-Ig5Jr7mnDelaZvSbUd9YhI5am3q1ku9xelAuwvtyDKvQJeKQj3BtTagcOgWrnQBfrJ/FsA/M5Zo48ncSsV0tqQ==", + "dev": true + }, + "@angular/material": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-7.3.7.tgz", + "integrity": "sha512-Eq+7frkeNGkLOfEtmkmJgR+AgoWajOipXZWWfCSamNfpCcPof82DwvGOpAmgGni9FuN2XFQdqP5MoaffQzIvUA==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/platform-browser": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.15.tgz", + "integrity": "sha512-aYgmPsbC9Tvp9vmKWD8voeAp4crwCay7/D6lM3ClEe2EeK934LuEXq3/uczMrFVbnIX7BBIo8fh03Tl7wbiGPw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.15.tgz", + "integrity": "sha512-UL2PqhzXMD769NQ6Lh6pxlBDKvN9Qol3XLRFil80lwJ1GRW16ITeYbCamcafIH2GOyd88IhmYcbMfUQ/6q4MMQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/platform-server": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-7.2.15.tgz", + "integrity": "sha512-a7XhYlbmQ7pN6liFq8WqdX4GNoxCIXhlZqotZkfwJDsDy2E2yyvVx6BYCEOnSRvO9xXwfyBXiLfZ4Y2A7xeCoQ==", + "requires": { + "domino": "^2.1.0", + "tslib": "^1.9.0", + "xhr2": "^0.1.4" + } + }, + "@angular/router": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.15.tgz", + "integrity": "sha512-qAubRJRQanguUqJQ76J9GSZ4JFtoyhJKRmX5P23ANZJXpB6YLzF2fJmOGi+E6cV8F0tKBMEq1pjxFTisx0MXwQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@ant-design/colors": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-3.2.1.tgz", + "integrity": "sha512-ibJybOcR1+h2IEr0Yxx4y/Wcz8obEtKvl2EYvxh8ugMkYniGSItpLKGzKNyyqzOaum5jb6fVCyH1aR9VkdpFRA==", + "requires": { + "tinycolor2": "^1.4.1" + } + }, + "@ant-design/icons-angular": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons-angular/-/icons-angular-2.1.0.tgz", + "integrity": "sha512-FDOtuxPKm2CaxWBWFqP2a5abtrrlVz8HzBdLEJJD68bW9ombWQKH71ZMp1Iw53Koqn1KTUCy0jPqSuSwx5wcrA==", + "requires": { + "@ant-design/colors": "^3.1.0", + "tslib": "^1.9.0" + } + }, + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/generator": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", + "dev": true, + "requires": { + "@babel/types": "^7.5.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", + "dev": true + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@ngtools/webpack": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.1.4.tgz", + "integrity": "sha512-8A15TPJzg3g7yI70QvBzJ253P32WAgCVre9nMaDdd22UmlbvN8Ke4RuQY7vYVTECLL+bWpFJEFXL+ThzCRUgeA==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.1.4", + "enhanced-resolve": "4.1.0", + "rxjs": "6.3.3", + "tree-kill": "1.2.0", + "webpack-sources": "1.2.0" + }, + "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "webpack-sources": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz", + "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "@schematics/angular": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.9.tgz", + "integrity": "sha512-B3lytFtFeYNLfWdlrIzvy3ulFRccD2/zkoL0734J+DAGfUz7vbysJ50RwYL46sQUcKdZdvb48ktfu1S8yooP6Q==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.9", + "@angular-devkit/schematics": "7.3.9", + "typescript": "3.2.4" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", + "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "typescript": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "dev": true + } + } + }, + "@schematics/update": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.9.tgz", + "integrity": "sha512-4MQcaKFxhMzZyE//+DknDh3h3duy3avg2oxSHxdwXlCZ8Q92+4lpegjJcSRiqlEwO4qeJ5XnrjrvzfIiaIZOmA==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.9", + "@angular-devkit/schematics": "7.3.9", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "pacote": "9.4.0", + "rxjs": "6.3.3", + "semver": "5.6.0", + "semver-intersect": "1.4.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", + "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@tweenjs/tween.js": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-17.4.0.tgz", + "integrity": "sha512-J3fzl1F6wvh8KXVVcIuHN12xi1ZDcPA/0Vix+ZcJYwZWVHUwfIqfvzYXXEw7ybeev6477KCTt9fKydU+ajUqcg==" + }, + "@types/jasmine": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.4.0.tgz", + "integrity": "sha512-6pUnBg6DuSB55xnxJ5+gW9JOkFrPsXkYAuqqEE8oyrpgDiPQ+TZ+1Zt4S+CHcRJcxyNYXeIXG4vHSzdF6y9Uvw==", + "dev": true + }, + "@types/jasminewd2": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.6.tgz", + "integrity": "sha512-2ZOKrxb8bKRmP/po5ObYnRDgFE4i+lQiEB27bAMmtMWLgJSqlIDqlLx6S0IRorpOmOPRQ6O80NujTmQAtBkeNw==", + "dev": true, + "requires": { + "@types/jasmine": "*" + } + }, + "@types/node": { + "version": "10.14.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.17.tgz", + "integrity": "sha512-p/sGgiPaathCfOtqu2fx5Mu1bcjuP8ALFg4xpGgNkcin7LwRyzUKniEHBKdcE1RPsenq5JVPIpMTJSygLboygQ==", + "dev": true + }, + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.16.tgz", + "integrity": "sha512-lMC2G0ItF2xv4UCiwbJGbnJlIuUixHrioOhNGHSCsYCJ8l4t9hMCUimCytvFv7qy6AfSzRxhRHoGa+UqaqwyeA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, + "requires": { + "acorn": "^5.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } + } + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + }, + "adm-zip": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + }, + "ali-oss": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ali-oss/-/ali-oss-6.1.1.tgz", + "integrity": "sha512-+BKZlX/+aPjFF8al0fS5j93ynWlKy779p/i1nVxElUjyQA457ccbhoQTUKL6cbr8EMetIAUHnhS9XTI4RgW1PA==", + "requires": { + "address": "^1.0.0", + "agentkeepalive": "^3.4.1", + "any-promise": "^1.3.0", + "bowser": "^1.6.0", + "co-defer": "^1.0.0", + "copy-to": "^2.0.1", + "dateformat": "^2.0.0", + "debug": "^2.2.0", + "destroy": "^1.0.4", + "end-or-error": "^1.0.1", + "get-ready": "^1.0.0", + "humanize-ms": "^1.2.0", + "is-type-of": "^1.0.0", + "jstoxml": "^0.2.3", + "merge-descriptors": "^1.0.1", + "mime": "^1.3.4", + "mz-modules": "^2.1.0", + "platform": "^1.3.1", + "sdk-base": "^2.0.1", + "stream-http": "2.8.2", + "stream-wormhole": "^1.0.4", + "urllib": "^2.33.1", + "utility": "^1.8.0", + "xml2js": "^0.4.16" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "angular-cropperjs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/angular-cropperjs/-/angular-cropperjs-1.0.1.tgz", + "integrity": "sha512-ojDuXzpMo10aKgDn5lPAiWxHmrOdnLVxCL1SbSkIWy73BafhVzOm8xJiP+Ijg8Bt4WuZOhEHoJ9AEo4+2yxaJQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "angular2-draggable": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/angular2-draggable/-/angular2-draggable-2.3.2.tgz", + "integrity": "sha512-rw2O/icgVang8uSVIU7nmm59f1DceSAUQkOuSGYnKbv/h8EbhJ9099sCjh/I5LymZBza1XPKeFZofIvhekdE+A==", + "requires": { + "tslib": "^1.9.0" + } + }, + "angular2-fontawesome": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/angular2-fontawesome/-/angular2-fontawesome-5.2.1.tgz", + "integrity": "sha512-aS6Y8dBLFdSx4yqyqIQDujIKAHJjqvdaD/y3/qDPE/pHYd/HBZZMLBlHcVuocraA5TuPBWBxF1w9NxT+3J54nQ==" + }, + "angularx-qrcode": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-1.6.4.tgz", + "integrity": "sha512-B0w/2+0V6G1yTOfknq7NQJ2iVQBN81aZkQ5nNYjjukVxDRshPQkah0hijxmgMyweXrlqr29qxNPcyRiKvLFebg==", + "requires": { + "qrcodejs2": "0.0.2" + } + }, + "animate.css": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-3.7.2.tgz", + "integrity": "sha512-0bE8zYo7C0KvgOYrSVfrzkbYk6IOTVPNqkiHg2cbyF4Pq/PXzilz4BRWA3hwEUBoMp5VBgrC29lQIZyhRWdBTw==" + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "app-root-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", + "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==", + "dev": true + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true, + "optional": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", + "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==" + }, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "optional": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.3.1.tgz", + "integrity": "sha512-DY9gOh8z3tnCbJ13JIWaeQsoYncTGdsrgCceBaQSIL4nvdrLxgbRSBPevg2XbX7u4QCSfLheSJEEIUUSlkbx6Q==", + "dev": true, + "requires": { + "browserslist": "^4.3.3", + "caniuse-lite": "^1.0.30000898", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.5", + "postcss-value-parser": "^3.3.1" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "binary-search-tree": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz", + "integrity": "sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q=", + "requires": { + "underscore": "~1.4.4" + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "optional": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "bootstrap": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", + "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" + }, + "bowser": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-image-compression": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/browser-image-compression/-/browser-image-compression-1.0.6.tgz", + "integrity": "sha512-gb++v1g26BgV/I9qrdXNzirFLDGcOiPmobVxuTJymNTFHbbxJnZ74o1GRoYHjDTgOt1Iypqh4Wk1K03C8tjXHQ==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", + "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000989", + "electron-to-chromium": "^1.3.247", + "node-releases": "^1.1.29" + } + }, + "browserstack": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", + "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true, + "optional": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", + "dev": true + }, + "canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-dependency-plugin": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz", + "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==", + "dev": true + }, + "circular-json": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", + "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "co-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/co-defer/-/co-defer-1.0.0.tgz", + "integrity": "sha1-Pkp4eo7tawoh7ih8CU9+jeDTyBg=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.5.0.tgz", + "integrity": "sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==", + "dev": true, + "requires": { + "app-root-path": "^2.1.0", + "css-selector-tokenizer": "^0.7.0", + "cssauron": "^1.4.0", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "^4.5.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "compare-versions": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.1.tgz", + "integrity": "sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "dev": true, + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "^0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true, + "optional": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "copy-webpack-plugin": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.4.tgz", + "integrity": "sha512-0lstlEyj74OAtYMrDxlNZsU7cwFijAI3Ofz2fD6Mpo9r4xCv4yegfa3uHIKvZY1NSuOtE9nvG6TAhJ+uz9gDaQ==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "globby": "^7.1.1", + "is-glob": "^4.0.0", + "loader-utils": "^1.1.0", + "minimatch": "^3.0.4", + "p-limit": "^1.0.0", + "serialize-javascript": "^1.4.0" + }, + "dependencies": { + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cropperjs": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.4.1.tgz", + "integrity": "sha512-PzKN8nVbFCxw5vp4nLMtsMcBcRtBJzliPZMr9HpbJ75vZuTK3mSbimKEfmxXmJwiF+ngp/JVd1wh5F7z3h4lUg==" + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-element-queries": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-element-queries/-/css-element-queries-1.2.1.tgz", + "integrity": "sha512-hiI1tSzf+U/gE13qhfwnCvN90Ay0THnE+mT3pjN/c/mvFmEUHZVNrvMJrrkw2ppOzkl69FdgH2ZGZENYQUaN2A==" + }, + "css-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + } + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "X.X.X" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "optional": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.1.tgz", + "integrity": "sha512-OkVVLrerfAKZlW2ZZ3Ve2y65jgiWqBKsTfUIAFbn8nVbPcCZg6l6gikKlEYv0kXcmzqGm6mFq/Jf2vriuEkv8A==", + "requires": { + "@types/node": "^8.0.7" + }, + "dependencies": { + "@types/node": { + "version": "8.10.53", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.53.tgz", + "integrity": "sha512-aOmXdv1a1/vYUn1OT1CED8ftbkmmYbKhKGSyMDeJiidLvKRKvZUQOdXwG/wcNY7T1Qb0XTlVdiYjIq00U7pLrQ==" + } + } + }, + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" + }, + "date-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decimal.js": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", + "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "default-gateway": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", + "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "ip-regex": "^2.1.0" + } + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "default-user-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", + "integrity": "sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=", + "requires": { + "os-name": "~1.0.3" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "requires": { + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "digest-header": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-0.0.1.tgz", + "integrity": "sha1-Ecz23uxXZqw3l0TZAcEsuklRS+Y=", + "requires": { + "utility": "0.1.11" + }, + "dependencies": { + "utility": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/utility/-/utility-0.1.11.tgz", + "integrity": "sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=", + "requires": { + "address": ">=0.0.1" + } + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domino": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.3.tgz", + "integrity": "sha512-EwjTbUv1Q/RLQOdn9k7ClHutrQcWGsfXaRQNOnM/KgK4xDBoLFEcIRFuBSxAx13Vfa63X029gXYrNFrSy+DOSg==" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.251", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.251.tgz", + "integrity": "sha512-C5oOBdqJTYago4PBeew9duLqWZ3SlDnTRM+PMIgZd/ILFrT5AfaAGd3jRNEfuPklFHFqOjfwbCvXpyzEYb5sXg==", + "dev": true + }, + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "end-or-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/end-or-error/-/end-or-error-1.0.1.tgz", + "integrity": "sha1-3HpiEP5403L+4kqLSJnb0VVBTcs=" + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" + }, + "dependencies": { + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" + }, + "dependencies": { + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", + "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.8.1.tgz", + "integrity": "sha512-micCIbldHioIegeKs41DoH0KS3AXfFzgS30qVkM6z/XOE/GJgvmsoc839NUqa1B9udYe9dQxgv7KFwng6+p/dw==", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formstream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/formstream/-/formstream-1.1.0.tgz", + "integrity": "sha1-UfOXDyYTbrCtRDBN5M67UCB7RHk=", + "requires": { + "destroy": "^1.0.4", + "mime": "^1.3.4", + "pause-stream": "~0.0.11" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "dev": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "optional": true, + "requires": { + "globule": "^1.0.0" + } + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-ready": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-ready/-/get-ready-1.0.0.tgz", + "integrity": "sha1-+RgX8emt7P6hOlYq38jeiDqzR4I=" + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-uri": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.3.tgz", + "integrity": "sha512-x5j6Ks7FOgLD/GlvjKwgu7wdmMR55iuRHhn8hj/+gA+eSbxQvZ+AEomq+3MgVEZj1vpi738QahGbCCSIDtXtkw==", + "requires": { + "data-uri-to-buffer": "2", + "debug": "4", + "extend": "~3.0.2", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "optional": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "http-proxy-middleware": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", + "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "dev": true, + "requires": { + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "https-proxy-agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", + "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true, + "optional": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "optional": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + } + } + }, + "install": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/install/-/install-0.12.2.tgz", + "integrity": "sha512-+7thTb4Rpvs9mnlhHKGZFJbGOO6kyMgy+gg0sgM5vFzIFK0wrCYXqdlaM71Bi289DTuPHf61puMFsaZBcwDIrg==" + }, + "internal-ip": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", + "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", + "dev": true, + "requires": { + "default-gateway": "^2.6.0", + "ipaddr.js": "^1.5.2" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-class-hotfix": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz", + "integrity": "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-type-of": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-type-of/-/is-type-of-1.2.1.tgz", + "integrity": "sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA==", + "requires": { + "core-util-is": "^1.0.2", + "is-class-hotfix": "~0.0.6", + "isstream": "~0.1.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true, + "optional": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-api": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.6.tgz", + "integrity": "sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "compare-versions": "^3.4.0", + "fileset": "^2.0.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "minimatch": "^3.0.4", + "once": "^1.4.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-instrumenter-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", + "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", + "dev": true, + "requires": { + "convert-source-map": "^1.5.0", + "istanbul-lib-instrument": "^1.7.3", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + }, + "dependencies": { + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + } + } + }, + "jasmine-core": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.4.0.tgz", + "integrity": "sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg==", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", + "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "dev": true, + "requires": { + "colors": "1.1.2" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "js-base64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "dev": true, + "optional": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jstoxml": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jstoxml/-/jstoxml-0.2.4.tgz", + "integrity": "sha1-/z+2eFaIOgMpU8fOjOdIYhD0hEc=" + }, + "jszip": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz", + "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + }, + "dependencies": { + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + } + } + }, + "karma": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.4.tgz", + "integrity": "sha512-31Vo8Qr5glN+dZEVIpnPCxEGleqE0EY6CtC2X9TagRV3rRQ3SNrvfhddICkJgUK3AgqpeKSZau03QumTGhGoSw==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^2.0.3", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "flatted": "^2.0.0", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.5", + "log4js": "^3.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-cli": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-2.0.0.tgz", + "integrity": "sha512-1Kb28UILg1ZsfqQmeELbPzuEb5C6GZJfVIk0qOr8LNYQuYWmAaqP16WpbpKEjhejDrDYyYOwwJXSZO6u7q5Pvw==", + "requires": { + "resolve": "^1.3.3" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.6.tgz", + "integrity": "sha512-WFh77RI8bMIKdOvI/1/IBmgnM+Q7NOLhnwG91QJrM8lW+CIXCjTzhhUsT/svLvAkLmR10uWY4RyYbHMLkTglvg==", + "dev": true, + "requires": { + "istanbul-api": "^2.1.6", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-2.0.1.tgz", + "integrity": "sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA==", + "dev": true, + "requires": { + "jasmine-core": "^3.3" + } + }, + "karma-jasmine-html-reporter": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.4.2.tgz", + "integrity": "sha512-7g0gPj8+9JepCNJR9WjDyQ2RkZ375jpdurYQyAYv8PorUCadepl8vrD6LmMqOGcM17cnrynBawQYZHaumgDjBw==", + "dev": true + }, + "karma-source-map-support": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.3.0.tgz", + "integrity": "sha512-HcPqdAusNez/ywa+biN4EphGz62MmQyPggUsDfsHqa7tSe4jdsxgvTKuDfIazjL+IOxpVWyT7Pr4dhAV+sxX5Q==", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "ko-sleep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ko-sleep/-/ko-sleep-1.0.3.tgz", + "integrity": "sha1-KKKgoUhei39BX/SI3uF9JHiKsII=", + "requires": { + "ms": "^2.0.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "less": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/less/-/less-3.8.1.tgz", + "integrity": "sha512-8HFGuWmL3FhQR0aH89escFNBQH/nEiYPP2ltDFdQw2chE28Yx2E3lhAIq9Y2saYwLSwa699s4dBVEfCY8Drf7Q==", + "dev": true, + "requires": { + "clone": "^2.1.2", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.4.1", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "^2.83.0", + "source-map": "~0.6.0" + } + }, + "less-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", + "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "license-webpack-plugin": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.0.2.tgz", + "integrity": "sha512-GsomZw5VoT20ST8qH2tOjBgbyhn6Pgs9M94g0mbvfBIV1VXufm1iKY+4dbgfTObj1Mp6nSRE3Zf74deOZr0KwA==", + "dev": true, + "requires": { + "webpack-sources": "^1.2.0" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "~3.0.5" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "optional": true + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "localforage": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.3.tgz", + "integrity": "sha512-1TulyYfc4udS7ECSBT2vwJksWbkwwTX8BzeUIiq8Y07Riy7bDAAnxDaPU/tWyOVmQAcWJIEIFP9lPfBGqVoPgQ==", + "requires": { + "lie": "3.1.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true, + "optional": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "optional": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "log4js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", + "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", + "dev": true, + "requires": { + "circular-json": "^0.5.5", + "date-format": "^1.2.0", + "debug": "^3.1.0", + "rfdc": "^1.1.2", + "streamroller": "0.7.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "loglevel": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", + "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lottie-web": { + "version": "5.5.8", + "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.5.8.tgz", + "integrity": "sha512-FBQG08X6ifTn6gt8c1m/d7eZC50nyFwmEUVlt/d/seZIAuy8StB1fRqdaUk3xMCDMr+RtPzsBtOXQ6iDhHT+XA==" + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "optional": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "magic-string": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", + "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "make-fetch-happen": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.2.tgz", + "integrity": "sha512-YMJrAjHSb/BordlsDEcVcPyTbiJKkzqMf48N8dAJZT9Zjctrkb6Yg4TY9Sq2AwSIQJFn5qBBKVTYt3vP5FMIHA==", + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^11.3.3", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + }, + "dependencies": { + "cacache": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", + "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "optional": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "optional": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.4.tgz", + "integrity": "sha512-o+Jm+ocb0asEngdM6FsZWtZsRzA8koFUudIDwYUfl94M3PejPHG7Vopw5hN9V8WsMkSFpm3tZP3Fesz89EyrfQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.5.0.tgz", + "integrity": "sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "mz-modules": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mz-modules/-/mz-modules-2.1.0.tgz", + "integrity": "sha512-sjk8lcRW3vrVYnZ+W+67L/2rL+jbO5K/N6PFGIcLWTiYytNr22Ah9FDXFs+AQntTM1boZcoHi5qS+CV1seuPog==", + "requires": { + "glob": "^7.1.2", + "ko-sleep": "^1.0.3", + "mkdirp": "^0.5.1", + "pump": "^3.0.0", + "rimraf": "^2.6.1" + } + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "nedb": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz", + "integrity": "sha1-DjUCzYLABNU1WkPJ5VV3vXvZHYg=", + "requires": { + "async": "0.2.10", + "binary-search-tree": "0.2.5", + "localforage": "^1.3.0", + "mkdirp": "~0.5.1", + "underscore": "~1.4.4" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" + }, + "ng-lottie": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ng-lottie/-/ng-lottie-0.3.2.tgz", + "integrity": "sha512-mALF+5PIp9r2/2N7XQTHK1VWckWLboBZNfe/31a4hmF6sKabTAXlG/VBU+ghWZwZ/pljzVzb5S4WRWXX6guyUA==", + "requires": { + "lottie-web": "^5.1.3" + } + }, + "ng-zorro-antd": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/ng-zorro-antd/-/ng-zorro-antd-7.5.1.tgz", + "integrity": "sha512-0V/LoARoluFjiPUX4Q7x+G7hVA+k+x4g4OyYaLLUAoPpK3o1kriR3VzjdKsuKl73gBoRHHq4SNDRSiqzfOWDeA==", + "requires": { + "@angular/cdk": "^7.0.0", + "@ant-design/icons-angular": "^2.1.0", + "date-fns": "^1.29.0", + "tslib": "^1.9.0" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "optional": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + } + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "node-releases": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.29.tgz", + "integrity": "sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "node-sass": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.10.0.tgz", + "integrity": "sha512-fDQJfXszw6vek63Fe/ldkYXmRYK/QS6NbvM3i5oEo9ntPDy4XX7BcKZyTKv+/kSSxRtXXc7l+MSwEmYc0CSy6Q==", + "dev": true, + "optional": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "optional": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npm": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.11.2.tgz", + "integrity": "sha512-OAkXqI4bm5MUvqVvqe6rxCXmJqrln8VDlkdftpOoayHKazz8IOCJAiCuKmz0TchL224EAKeG86umuD6RYNpuEg==", + "requires": { + "JSONStream": "^1.3.5", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "^2.0.0", + "archy": "~1.0.0", + "bin-links": "^1.1.3", + "bluebird": "^3.5.5", + "byte-size": "^5.0.1", + "cacache": "^12.0.3", + "call-limit": "^1.1.1", + "chownr": "^1.1.2", + "ci-info": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.1", + "cmd-shim": "^3.0.3", + "columnify": "~1.5.4", + "config-chain": "^1.1.12", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.2.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.8.2", + "iferr": "^1.0.2", + "imurmurhash": "*", + "infer-owner": "^1.0.4", + "inflight": "~1.0.6", + "inherits": "^2.0.4", + "ini": "^1.3.5", + "init-package-json": "^1.10.3", + "is-cidr": "^3.0.0", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^4.0.3", + "libnpm": "^3.0.1", + "libnpmaccess": "^3.0.2", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "libnpx": "^10.2.0", + "lock-verify": "^2.1.0", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^5.1.1", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "~0.5.1", + "move-concurrently": "^1.0.1", + "node-gyp": "^5.0.3", + "nopt": "~4.0.1", + "normalize-package-data": "^2.5.0", + "npm-audit-report": "^1.3.2", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-lifecycle": "^3.1.3", + "npm-package-arg": "^6.1.1", + "npm-packlist": "^1.4.4", + "npm-pick-manifest": "^3.0.0", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.0", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.1", + "osenv": "^0.1.5", + "pacote": "^9.5.8", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.8.2", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "^1.0.3", + "read-installed": "~4.0.3", + "read-package-json": "^2.1.0", + "read-package-tree": "^5.3.1", + "readable-stream": "^3.4.0", + "readdir-scoped-modules": "^1.1.0", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "^2.6.3", + "safe-buffer": "^5.1.2", + "semver": "^5.7.1", + "sha": "^3.0.0", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.1", + "stringify-package": "^1.0.0", + "tar": "^4.4.10", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "^1.1.1", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.7.0", + "write-file-atomic": "^2.4.3" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.5", + "bundled": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "agent-base": { + "version": "4.3.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "bundled": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "5.5.2", + "bundled": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "2.0.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "asap": { + "version": "2.0.6", + "bundled": true + }, + "asn1": { + "version": "0.2.4", + "bundled": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true + }, + "aws-sign2": { + "version": "0.7.0", + "bundled": true + }, + "aws4": { + "version": "1.8.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.3", + "bundled": true, + "requires": { + "bluebird": "^3.5.3", + "cmd-shim": "^3.0.0", + "gentle-fs": "^2.0.1", + "graceful-fs": "^4.1.15", + "write-file-atomic": "^2.3.0" + } + }, + "bluebird": { + "version": "3.5.5", + "bundled": true + }, + "boxen": { + "version": "1.3.0", + "bundled": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "bundled": true + }, + "builtins": { + "version": "1.0.3", + "bundled": true + }, + "byline": { + "version": "5.0.0", + "bundled": true + }, + "byte-size": { + "version": "5.0.1", + "bundled": true + }, + "cacache": { + "version": "12.0.3", + "bundled": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "call-limit": { + "version": "1.1.1", + "bundled": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "chalk": { + "version": "2.4.1", + "bundled": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.2", + "bundled": true + }, + "ci-info": { + "version": "2.0.0", + "bundled": true + }, + "cidr-regex": { + "version": "2.0.10", + "bundled": true, + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true + }, + "cli-columns": { + "version": "3.1.2", + "bundled": true, + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.5.1", + "bundled": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "bundled": true + }, + "cmd-shim": { + "version": "3.0.3", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "co": { + "version": "4.6.0", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "color-convert": { + "version": "1.9.1", + "bundled": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true + }, + "colors": { + "version": "1.3.3", + "bundled": true, + "optional": true + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "bundled": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "concat-stream": { + "version": "1.6.2", + "bundled": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "bundled": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "bundled": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "bundled": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "bundled": true + } + } + }, + "crypto-random-string": { + "version": "1.0.0", + "bundled": true + }, + "cyclist": { + "version": "0.2.2", + "bundled": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "bundled": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true + }, + "detect-newline": { + "version": "2.1.0", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "bundled": true + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true + }, + "duplexify": { + "version": "3.6.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "env-paths": { + "version": "1.0.0", + "bundled": true + }, + "err-code": { + "version": "1.1.2", + "bundled": true + }, + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "bundled": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "bundled": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "bundled": true + }, + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.2", + "bundled": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "bundled": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "bundled": true + }, + "figgy-pudding": { + "version": "3.5.1", + "bundled": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.2", + "bundled": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-minipass": { + "version": "1.2.6", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "genfun": { + "version": "5.0.0", + "bundled": true + }, + "gentle-fs": { + "version": "2.2.1", + "bundled": true, + "requires": { + "aproba": "^1.1.2", + "chownr": "^1.1.2", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "infer-owner": "^1.0.4", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "bundled": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "bundled": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + } + } + }, + "graceful-fs": { + "version": "4.2.2", + "bundled": true + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + }, + "har-validator": { + "version": "5.1.0", + "bundled": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "bundled": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true + }, + "has-symbols": { + "version": "1.0.0", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.8.2", + "bundled": true, + "requires": { + "lru-cache": "^5.1.1" + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "bundled": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.2", + "bundled": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "bundled": true + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "infer-owner": { + "version": "1.0.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "init-package-json": { + "version": "1.10.3", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true + }, + "ip": { + "version": "1.1.5", + "bundled": true + }, + "ip-regex": { + "version": "2.1.0", + "bundled": true + }, + "is-callable": { + "version": "1.1.4", + "bundled": true + }, + "is-ci": { + "version": "1.1.0", + "bundled": true, + "requires": { + "ci-info": "^1.0.0" + }, + "dependencies": { + "ci-info": { + "version": "1.6.0", + "bundled": true + } + } + }, + "is-cidr": { + "version": "3.0.0", + "bundled": true, + "requires": { + "cidr-regex": "^2.0.10" + } + }, + "is-date-object": { + "version": "1.0.1", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true + }, + "is-obj": { + "version": "1.0.1", + "bundled": true + }, + "is-path-inside": { + "version": "1.0.1", + "bundled": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true + }, + "is-regex": { + "version": "1.0.4", + "bundled": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "is-symbol": { + "version": "1.0.2", + "bundled": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "libcipm": { + "version": "4.0.3", + "bundled": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "ini": "^1.3.5", + "lock-verify": "^2.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^9.1.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" + } + }, + "libnpm": { + "version": "3.0.1", + "bundled": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.3", + "find-npm-prefix": "^1.0.2", + "libnpmaccess": "^3.0.2", + "libnpmconfig": "^1.2.1", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmpublish": "^1.1.2", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "lock-verify": "^2.0.2", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.0", + "npmlog": "^4.1.2", + "pacote": "^9.5.3", + "read-package-json": "^2.0.13", + "stringify-package": "^1.0.0" + } + }, + "libnpmaccess": { + "version": "3.0.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmconfig": { + "version": "1.2.1", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "bundled": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "bundled": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "bundled": true + } + } + }, + "libnpmhook": { + "version": "5.0.3", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmorg": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmpublish": { + "version": "1.1.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + } + }, + "libnpmsearch": { + "version": "2.0.2", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmteam": { + "version": "1.0.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpx": { + "version": "10.2.0", + "bundled": true, + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lock-verify": { + "version": "2.1.0", + "bundled": true, + "requires": { + "npm-package-arg": "^6.1.0", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "bundled": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "lowercase-keys": { + "version": "1.0.1", + "bundled": true + }, + "lru-cache": { + "version": "5.1.1", + "bundled": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "5.0.0", + "bundled": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "meant": { + "version": "1.0.1", + "bundled": true + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mime-db": { + "version": "1.35.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.19", + "bundled": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.3.3", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + } + } + }, + "ms": { + "version": "2.1.1", + "bundled": true + }, + "mute-stream": { + "version": "0.0.7", + "bundled": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "5.0.3", + "bundled": true, + "requires": { + "env-paths": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^4.4.8", + "which": "1" + }, + "dependencies": { + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "bundled": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "npm-audit-report": { + "version": "1.3.2", + "bundled": true, + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.0", + "bundled": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "3.1.3", + "bundled": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true + }, + "npm-package-arg": { + "version": "6.1.1", + "bundled": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.4", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.0", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "4.0.2", + "bundled": true, + "requires": { + "aproba": "^1.1.2 || 2", + "figgy-pudding": "^3.4.1", + "npm-registry-fetch": "^4.0.0" + } + }, + "npm-registry-fetch": { + "version": "4.0.0", + "bundled": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.0", + "bundled": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.9.0", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "object-keys": { + "version": "1.0.12", + "bundled": true + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.1", + "bundled": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true + }, + "package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "9.5.8", + "bundled": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^3.0.0", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "minipass": { + "version": "2.3.5", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true + }, + "path-parse": { + "version": "1.0.6", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "pify": { + "version": "3.0.0", + "bundled": true + }, + "prepend-http": { + "version": "1.0.4", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "bundled": true + }, + "protoduck": { + "version": "5.0.1", + "bundled": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "prr": { + "version": "1.0.1", + "bundled": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "psl": { + "version": "1.1.29", + "bundled": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "bundled": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "query-string": { + "version": "6.8.2", + "bundled": true, + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "bundled": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true + } + } + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.3", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.1.0", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "bundled": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "3.4.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "bundled": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "bundled": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true + }, + "retry": { + "version": "0.12.0", + "bundled": true + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "semver": { + "version": "5.7.1", + "bundled": true + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "sha": { + "version": "3.0.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "slash": { + "version": "1.0.0", + "bundled": true + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "smart-buffer": { + "version": "4.0.2", + "bundled": true + }, + "socks": { + "version": "2.3.2", + "bundled": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "4.0.2" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "bundled": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "bundled": true + }, + "split-on-first": { + "version": "1.1.0", + "bundled": true + }, + "sshpk": { + "version": "1.14.2", + "bundled": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.0", + "bundled": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.2.0", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-package": { + "version": "1.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "supports-color": { + "version": "5.4.0", + "bundled": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.10", + "bundled": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "minipass": { + "version": "2.3.5", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "yallist": { + "version": "3.0.3", + "bundled": true + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "through": { + "version": "2.3.8", + "bundled": true + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "timed-out": { + "version": "4.0.1", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "tough-cookie": { + "version": "2.4.3", + "bundled": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.1", + "bundled": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true + }, + "update-notifier": { + "version": "2.5.0", + "bundled": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "util-extend": { + "version": "1.0.3", + "bundled": true + }, + "util-promisify": { + "version": "2.1.0", + "bundled": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.2", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.7.0", + "bundled": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.4.3", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true + }, + "yargs": { + "version": "11.0.0", + "bundled": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "bundled": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", + "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz", + "integrity": "sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-registry-fetch": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.1.tgz", + "integrity": "sha512-VQCEZlydXw4AwLROAXWUR7QDfe2Y8Id/vpAgp6TI1/H78a4SiQ1kQrKZALm5/zxM5n4HIi+aYb+idUAV/RuY0Q==", + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^4.0.2", + "npm-package-arg": "^6.1.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + } + } + }, + "open": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.0.0.tgz", + "integrity": "sha512-/yb5mVZBz7mHLySMiSj2DcLtMBbFPJk5JBKEkHVZFxZAPzeg3L026O0T+lbdz1B2nyDnkClRSwRQJdeVUIF7zw==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "optional": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", + "integrity": "sha1-GzefZINa98Wn9JizV8uVIVwVnt8=", + "requires": { + "osx-release": "^1.0.0", + "win-release": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "osx-release": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", + "integrity": "sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=", + "requires": { + "minimist": "^1.1.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pac-proxy-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.0.tgz", + "integrity": "sha512-AOUX9jES/EkQX2zRz0AW7lSx9jD//hQS8wFXBvcnd/J2Py9KaMJMqV/LPqJssj1tgGufotb2mmopGPR15ODv1Q==", + "requires": { + "agent-base": "^4.2.0", + "debug": "^3.1.0", + "get-uri": "^2.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "pac-resolver": "^3.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "pac-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", + "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", + "requires": { + "co": "^4.6.0", + "degenerator": "^1.0.4", + "ip": "^1.1.5", + "netmask": "^1.0.6", + "thunkify": "^2.1.2" + } + }, + "pacote": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.4.0.tgz", + "integrity": "sha512-WQ1KL/phGMkedYEQx9ODsjj7xvwLSpdFJJdEXrLyw5SILMxcTNt5DTxT2Z93fXuLFYJBlZJdnwdalrQdB/rX5w==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^11.3.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^4.0.1", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^2.2.3", + "npm-registry-fetch": "^3.8.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.8", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "cacache": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", + "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "tar": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "optional": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "requires": { + "through": "~2.3" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "platform": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", + "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" + }, + "portfinder": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.17.tgz", + "integrity": "sha512-syFcRIRzVI1BoEFOCaAiizwDolh1S1YXSodsVhncbhjzjZQulhczNRbqnUl9N31Q4dKGOXsNDqxC2BWBgSMqeQ==", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.5.tgz", + "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.5.0" + } + }, + "postcss-import": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.0.tgz", + "integrity": "sha512-3KqKRZcaZAvxbY8DVLdd81tG5uKzbUQuiWIvy0o0fzEC42bKacqPYFWbfCQyw6L4LWUaqPz/idvIdbhpgQ32eQ==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + } + }, + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "protractor": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.2.tgz", + "integrity": "sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA==", + "dev": true, + "requires": { + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "^3.0.0", + "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "2.8.0", + "jasminewd2": "^2.1.0", + "optimist": "~0.6.0", + "q": "1.4.1", + "saucelabs": "^1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "^12.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "webdriver-manager": { + "version": "12.1.6", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.6.tgz", + "integrity": "sha512-B1mOycNCrbk7xODw7Jgq/mdD3qzPxMaTsnKIQDy2nXlQoyjTrJTTD0vRpEZI9b8RibPEyQvh9zIZ0M1mpOxS3w==", + "dev": true, + "requires": { + "adm-zip": "^0.4.9", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + } + } + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "proxy-agent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.0.tgz", + "integrity": "sha512-IkbZL4ClW3wwBL/ABFD2zJ8iP84CY0uKMvBPk/OceQe/cEjrxzN1pMHsLwhbzUoRhG9QbSxYC+Z7LBkTiBNvrA==", + "requires": { + "agent-base": "^4.2.0", + "debug": "^3.1.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "pac-proxy-agent": "^3.0.0", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.1.tgz", + "integrity": "sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qrcodejs2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/qrcodejs2/-/qrcodejs2-0.0.2.tgz", + "integrity": "sha1-Rlr+Xjnxn6zsuTLBH3oYYQkUauE=" + }, + "qs": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.8.0.tgz", + "integrity": "sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "optional": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "optional": true + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "optional": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "optional": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "optional": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "optional": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2" + } + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + }, + "rfdc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "rxjs-compat": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.5.2.tgz", + "integrity": "sha512-TRMkTp4FgSxE2HtGvxmgRukh3JqdFM7ejAj1Ti/VdodbPGfWvZR5+KdLKRV9jVDFyu2SknM8RD+PR54KGnoLjg==" + }, + "rxjs-tslint": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/rxjs-tslint/-/rxjs-tslint-0.1.7.tgz", + "integrity": "sha512-NnOfqutNfdT7VQnQm32JLYh2gDZjc0gdWZFtrxf/czNGkLKJ1nOO6jbKAFI09W0f9lCtv6P2ozxjbQH8TSPPFQ==", + "requires": { + "chalk": "^2.4.0", + "optimist": "^0.6.1", + "tslint": "^5.9.1", + "tsutils": "^2.25.0", + "typescript": ">=2.8.3" + }, + "dependencies": { + "typescript": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.2.tgz", + "integrity": "sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw==" + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + } + }, + "sass-loader": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", + "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "dev": true, + "requires": { + "clone-deep": "^2.0.1", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "neo-async": "^2.5.0", + "pify": "^3.0.0", + "semver": "^5.5.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "optional": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "sdk-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sdk-base/-/sdk-base-2.0.1.tgz", + "integrity": "sha1-ukAonovfJy7RHdnql+r5jgNtJMY=", + "requires": { + "get-ready": "~1.0.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "requires": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "dependencies": { + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } + } + }, + "selfsigned": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "dev": true, + "requires": { + "node-forge": "0.7.5" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", + "dev": true, + "requires": { + "semver": "^5.0.0" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.0.tgz", + "integrity": "sha512-UkGlcYMtw4d9w7YfCtJFgdRTps8N4L0A48R+SmcGL57ki1+yHwJXnalk5bjgrw+ljv6SfzjzPjhohod2qllg/Q==" + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "dev": true, + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "smart-buffer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", + "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "socks": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "4.0.2" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-loader": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", + "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", + "dev": true, + "requires": { + "async": "^2.5.0", + "loader-utils": "^1.1.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + } + } + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "sourcemap-codec": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", + "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==", + "dev": true + }, + "spark-md5": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", + "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" + } + }, + "spdy-transport": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.1.tgz", + "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" + } + }, + "speed-measure-webpack-plugin": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-p+taQ69VkRUXYMoZOx2nxV/Tz8tt79ahctoZJyJDHWP7fEYvwFNf5Pd73k5kZ6auu0pTsPNLEUwWpM8mCk85Zw==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stats-webpack-plugin": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/stats-webpack-plugin/-/stats-webpack-plugin-0.7.0.tgz", + "integrity": "sha512-NT0YGhwuQ0EOX+uPhhUcI6/+1Sq/pMzNuSCBVT4GbFl/ac6I/JZefBcjlECNfAb1t3GOx5dEj1Z7x0cAxeeVLQ==", + "dev": true, + "requires": { + "lodash": "^4.17.4" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz", + "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "stream-wormhole": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stream-wormhole/-/stream-wormhole-1.1.0.tgz", + "integrity": "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==" + }, + "streamroller": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "dev": true, + "requires": { + "date-format": "^1.2.0", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "readable-stream": "^2.3.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "optional": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "optional": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "style-loader": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", + "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0" + } + }, + "stylus": { + "version": "0.54.5", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, + "requires": { + "css-parse": "1.7.x", + "debug": "*", + "glob": "7.0.x", + "mkdirp": "0.5.x", + "sax": "0.5.x", + "source-map": "0.1.x" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "stylus-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "when": "~3.6.x" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "optional": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "terser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.1.tgz", + "integrity": "sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" + }, + "thunky": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tree-kill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", + "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true, + "optional": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.2" + } + }, + "ts-node": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.1.tgz", + "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "chalk": "^2.3.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.3", + "yn": "^2.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "tslint": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.19.0.tgz", + "integrity": "sha512-1LwwtBxfRJZnUvoS9c0uj8XQtAnyhWr9KlNvDIdB+oXyT+VpsOAaEhEgKi1HrZ8rq0ki/AAnbGSv4KM6/AfVZw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "requires": { + "tslib": "^1.8.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.1.tgz", + "integrity": "sha512-Veu0w4dTc/9wlWNf2jeRInNodKlcdLgemvPsrNpfu5Pq39sgfFjvIIgTsvUHCoLBnMhPoUA+tFxsXjU6VexVRQ==", + "dev": true + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + } + }, + "uglifyjs-webpack-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", + "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" + }, + "unescape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", + "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", + "requires": { + "extend-shallow": "^2.0.1" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "urllib": { + "version": "2.34.1", + "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.34.1.tgz", + "integrity": "sha512-oprAn7mvU10+cId+x6aI/EmpQnn7izTM9QEqTb88l8o7EIW+thYJN4RvpU5wBQh702epQmXveMiUDn+4TDwm9Q==", + "requires": { + "any-promise": "^1.3.0", + "content-type": "^1.0.2", + "debug": "^2.6.9", + "default-user-agent": "^1.0.0", + "digest-header": "^0.0.1", + "ee-first": "~1.1.1", + "formstream": "^1.1.0", + "humanize-ms": "^1.2.0", + "iconv-lite": "^0.4.15", + "ip": "^1.1.5", + "proxy-agent": "^3.1.0", + "pump": "^3.0.0", + "qs": "^6.4.0", + "statuses": "^1.3.1", + "utility": "^1.16.1" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utility": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/utility/-/utility-1.16.1.tgz", + "integrity": "sha512-atm+llzKSZpKnsV8LgnsOMdTQNoee9D7gH8yIN86MzahugAstSZFSUdsjCk1KSvK7n7bigM9XFSOQYYuVjvcaw==", + "requires": { + "copy-to": "^2.0.1", + "escape-html": "^1.0.3", + "mkdirp": "^0.5.1", + "mz": "^2.7.0", + "unescape": "^1.0.1" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", + "dev": true, + "requires": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + } + }, + "webpack": { + "version": "4.39.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.3.tgz", + "integrity": "sha512-BXSI9M211JyCVc3JxHWDpze85CvjC842EvpRsVTc/d15YJGlox7GIDd38kJgWrb3ZluyvIjgenbLDMBQPDcxYQ==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "~0.1.7", + "source-map": "~0.4.1" + }, + "dependencies": { + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", + "dev": true, + "requires": { + "memory-fs": "~0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.10.tgz", + "integrity": "sha512-RqOAVjfqZJtQcB0LmrzJ5y4Jp78lv9CK0MZ1YJDTaTmedMZ9PU9FLMQNrMCfVu8hHzaVLVOJKBlGEHMN10z+ww==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^2.0.0", + "internal-ip": "^3.0.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", + "webpack-dev-middleware": "3.4.0", + "webpack-log": "^2.0.0", + "yargs": "12.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true + }, + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.4.tgz", + "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==", + "dev": true, + "requires": { + "lodash": "^4.17.5" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "webpack-subresource-integrity": { + "version": "1.1.0-rc.6", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.1.0-rc.6.tgz", + "integrity": "sha512-Az7y8xTniNhaA0620AV1KPwWOqawurVVDzQSpPAeR5RwNbL91GoBSJAAo9cfd+GiFHwsS5bbHepBw1e6Hzxy4w==", + "dev": true, + "requires": { + "webpack-core": "^0.6.8" + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "win-release": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", + "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", + "requires": { + "semver": "^5.0.1" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "xhr2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", + "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" + }, + "xml2js": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.21.tgz", + "integrity": "sha512-gHRSAYBSA1JNVbLV2l8mTpQ/zTLcNtyG4YZmNlA3pjMWTgv9swW9muK55cr3fUmSOezLTR24iPQ+FqxilTvppw==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~13.0.0" + } + }, + "xmlbuilder": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", + "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true, + "optional": true + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + }, + "zone.js": { + "version": "0.8.29", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.29.tgz", + "integrity": "sha512-mla2acNCMkWXBD+c+yeUrBUrzOxYMNFdQ6FGfigGGtEVBPJx07BQeJekjt9DmH1FtZek4E9rE1eRR9qQpxACOQ==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..69174ff --- /dev/null +++ b/package.json @@ -0,0 +1,77 @@ +{ + "name": "ng-template-generator", + "version": "0.0.1", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build --prod --build--optimizer --base-href /ng-one/", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "^7.2.10", + "@angular/cdk": "^7.2.2", + "@angular/common": "^7.2.10", + "@angular/compiler": "^7.2.10", + "@angular/core": "^7.2.10", + "@angular/flex-layout": "^7.0.0-beta.24", + "@angular/forms": "^7.2.10", + "@angular/http": "^7.2.10", + "@angular/material": "^7.2.2", + "@angular/platform-browser": "^7.2.10", + "@angular/platform-browser-dynamic": "^7.2.10", + "@angular/platform-server": "^7.2.10", + "@angular/router": "^7.2.10", + "@tweenjs/tween.js": "^17.3.0", + "ali-oss": "^6.0.0", + "angular-cropperjs": "^1.0.1", + "angular2-draggable": "^2.1.9", + "angular2-fontawesome": "^5.2.1", + "angularx-qrcode": "^1.5.3", + "animate.css": "^3.7.0", + "bootstrap": "^4.1.1", + "browser-image-compression": "^1.0.5", + "core-js": "^2.6.1", + "cropperjs": "1.4.1", + "css-element-queries": "^1.0.2", + "decimal.js": "^10.0.1", + "font-awesome": "^4.7.0", + "hammerjs": "^2.0.8", + "install": "^0.12.2", + "karma-cli": "^2.0.0", + "lodash": "^4.17.10", + "nedb": "^1.8.0", + "ng-lottie": "^0.3.1", + "ng-zorro-antd": "^7.2.0", + "npm": "^6.5.0", + "rxjs": "^6.3.3", + "rxjs-compat": "^6.3.3", + "rxjs-tslint": "^0.1.6", + "spark-md5": "^3.0.0", + "webpack": "^4.28.2", + "zone.js": "^0.8.26" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^0.11.4", + "@angular/cli": "^7.2.10", + "@angular/compiler-cli": "^7.2.10", + "@angular/language-service": "^7.2.10", + "@types/jasmine": "^3.3.5", + "@types/jasminewd2": "~2.0.3", + "@types/node": "^10.12.18", + "codelyzer": "^4.5.0", + "jasmine-core": "^3.3.0", + "jasmine-spec-reporter": "^4.2.1", + "karma": "^3.1.4", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage-istanbul-reporter": "~2.0.0", + "karma-jasmine": "^2.0.1", + "karma-jasmine-html-reporter": "^1.4.0", + "protractor": "^5.4.2", + "ts-node": "~5.0.1", + "tslint": "^5.12.0", + "typescript": "3.1.1" + } +} diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..44b4b71 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1,3 @@ +<app-form *ngIf="type==='form'"></app-form> + +<app-play *ngIf="type==='play'"></app-play> \ No newline at end of file diff --git a/src/app/app.component.scss b/src/app/app.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..9ffb6bc --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,29 @@ +import { Component ,OnInit} from '@angular/core'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent implements OnInit{ + type = 'play'; + + constructor() { + let tp = this.getQueryString("type"); + if(tp){ + this.type = tp; + } + } + + ngOnInit() { + + } + getQueryString(name) { + const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); + const r = window.location.search.substr(1).match(reg); + if (r != null) { + return unescape(r[2]); + } + return null; + } +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100644 index 0000000..ebea714 --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,45 @@ + +import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { HttpClientModule } from '@angular/common/http'; +import { NgZorroAntdModule, NZ_I18N, zh_CN } from 'ng-zorro-antd'; +import {Angular2FontawesomeModule} from 'angular2-fontawesome/angular2-fontawesome'; + +import { AppComponent } from './app.component'; +import { FormComponent } from './form/form.component'; +import { PlayComponent } from './play/play.component'; +import { LessonTitleConfigComponent } from './common/lesson-title-config/lesson-title-config.component'; +import { AudioRecorderComponent } from './common/audio-recorder/audio-recorder.component'; +import { PlayerContentWrapperComponent } from './common/player-content-wrapper/player-content-wrapper.component'; + +/** é…ç½® angular i18n **/ +import { registerLocaleData } from '@angular/common'; +import zh from '@angular/common/locales/zh'; +registerLocaleData(zh); + +@NgModule({ + declarations: [ + AppComponent, + FormComponent, + PlayComponent, + LessonTitleConfigComponent, + AudioRecorderComponent, + PlayerContentWrapperComponent + ], + imports: [ + FormsModule, + HttpClientModule, + BrowserAnimationsModule, + BrowserModule, + Angular2FontawesomeModule, + NgZorroAntdModule + ], + /** é…ç½® ng-zorro-antd 国际化(文案 åŠ æ—¥æœŸï¼‰ **/ + providers : [ + { provide: NZ_I18N, useValue: zh_CN } + ], + bootstrap: [AppComponent] +}) +export class AppModule { } diff --git a/src/app/common/audio-recorder/audio-recorder.component.html b/src/app/common/audio-recorder/audio-recorder.component.html new file mode 100644 index 0000000..7bde1bc --- /dev/null +++ b/src/app/common/audio-recorder/audio-recorder.component.html @@ -0,0 +1,62 @@ +<div class="d-flex"> + <div class="p-btn-record d-flex"> + <div class="btn-clear" (click)="onBtnClearAudio()" *ngIf="withRmBtn && (audioUrl || audioBlob)"> + <fa name="close"></fa> + </div> + <div class="btn-record" *ngIf="type===Type.RECORD && !isUploading" + [class.p-recording]="isRecording" + (click)="onBtnRecord()"> + <fa name="microphone"></fa> + Record Audio + </div> + <nz-upload + [nzAccept] = "'.mp3'" + [nzShowUploadList]="false" + [nzBeforeUpload]="beforeUpload"> + <!--nzAction="/user/resource"--> + + <!--(nzChange)="handleChange($event)"--> + + <div class="btn-upload" [ngClass]="{'has-clear': withRmBtn && (audioUrl || audioBlob)}" *ngIf="type===Type.UPLOAD && !isUploading"> + <fa name="upload"></fa> + Upload Audio + </div> + </nz-upload> + <div class="p-upload-progress-bg" *ngIf="isUploading"> + <div class="i-bg" [style.width]="progress+'%'"></div> + <div class="i-text"> + <fa name="cloud-upload"></fa> + Uploading... + </div> + </div> + + + <div *ngIf="audioUrl && needRemove; then truthyTemplate else falsyTemplate"></div> + + <ng-template #truthyTemplate > + + <div class="btn-delete" (click)="onBtnDeleteAudio()"> + <fa name="close"></fa> + </div> + + </ng-template> + + <ng-template #falsyTemplate> + <div class="btn-switch" (click)="onBtnSwitchType()"> + <fa name="cog"></fa> + </div> + </ng-template> + + + + + </div> + + <div class="p-progress ml-2" (click)="onBtnPlay()" *ngIf="audioUrl || audioBlob"> + <nz-progress [nzPercent]="percent" [nzWidth]="30" [nzFormat]="progressText" + nzType="circle"></nz-progress> + <div class="p-btn-play" [style.left]="isPlaying?'8px':''"> + <fa [name]="playIcon"></fa> + </div> + </div> +</div> diff --git a/src/app/common/audio-recorder/audio-recorder.component.scss b/src/app/common/audio-recorder/audio-recorder.component.scss new file mode 100644 index 0000000..9b6197d --- /dev/null +++ b/src/app/common/audio-recorder/audio-recorder.component.scss @@ -0,0 +1,104 @@ +.p-btn-record { + font-size: 0.9rem; + color: #555; + font-family: "Monospaced Number", "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + + .btn-record, .btn-upload { + cursor: pointer; + text-align: center; + width: 130px; + height: 33px; + line-height: 33px; + border-radius: 0.5rem 0 0 0.5rem; + border: 1px solid #ddd; + border-right: 0.5px; + &:hover { + color: rgb(64, 169, 255); + } + } + .btn-record.has-clear, .btn-upload.has-clear{ + border-radius:0; + border-left: 0; + } + .btn-clear{ + text-align: center; + color: #aaa; + padding: 0 0.5rem; + border: 1px solid #ddd; + border-radius: 0.5rem 0 0 0.5rem; + height: 33px; + line-height: 33px; + } + .btn-switch { + text-align: center; + color: #aaa; + padding: 0 0.5rem; + border: 1px solid #ddd; + border-radius: 0 0.5rem 0.5rem 0; + height: 33px; + line-height: 33px; + &:hover { + color: rgb(64, 169, 255); + } + } + .btn-delete { + text-align: center; + color: #aaa; + padding: 0 0.5rem; + border: 1px solid #ddd; + border-radius: 0 0.5rem 0.5rem 0; + height: 33px; + line-height: 33px; + &:hover { + color: #ec5b56; + } + } +} + +.p-recording { + background: orangered; + color: white !important; +} + +.p-upload-progress-bg { + position: relative; + width: 130px; + height: 33px; + line-height: 33px; + & .i-text { + position: absolute; + width: 100%; + height: 100%; + text-align: center; + border-radius: 0.5rem 0 0 0.5rem; + border: 1px solid #ddd; + border-right: 0.5px; + color: white; + text-shadow: 0 0 2px rgba(0, 0, 0, .85); + } + & .i-bg { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: #27b43f; + border-radius: 0.5rem 0 0 0.5rem; + } +} + +.p-progress { + margin-top: 2px; + position: relative; + line-height: 26px; + .p-btn-play { + position: absolute; + left: 10px; + top: 3px; + color: #555; + } +} + +:host ::ng-deep nz-upload { + line-height: 33px; +} + diff --git a/src/app/common/audio-recorder/audio-recorder.component.ts b/src/app/common/audio-recorder/audio-recorder.component.ts new file mode 100644 index 0000000..784d405 --- /dev/null +++ b/src/app/common/audio-recorder/audio-recorder.component.ts @@ -0,0 +1,229 @@ +import {Component, EventEmitter, Input, OnDestroy, OnInit, Output, NgZone, OnChanges} from '@angular/core'; +import {NzMessageService, NzNotificationService, UploadFile} from 'ng-zorro-antd'; +import {HttpClient, HttpEvent, HttpEventType, HttpRequest} from '@angular/common/http'; +import {environment} from '../../../environments/environment'; + +declare var Recorder; + +@Component({ + selector: 'app-audio-recorder', + templateUrl: './audio-recorder.component.html', + styleUrls: ['./audio-recorder.component.scss'] +}) +export class AudioRecorderComponent implements OnInit, OnChanges, OnDestroy { + _audioUrl: string; + audio = new Audio(); + playIcon = 'play'; + isPlaying = false; + isRecording = false; + isUploading = false; + type = Type.UPLOAD; // record | upload + Type = Type; + withRmBtn = false; + + @Input() + needRemove = false; + + @Input() + audioItem: any = null; + + @Input() + set audioUrl(url) { + this._audioUrl = url + if (url) { + this.audio.src = this._audioUrl; + this.audio.load(); + } + this.init(); + } + + get audioUrl() { + return this._audioUrl; + } + + @Output() audioUploaded = new EventEmitter(); + @Output() audioUploadFailure = new EventEmitter(); + @Output() audioRemoved = new EventEmitter(); + percent = 0; + progress = 0; + recorder: any; + audioBlob: any; + + + constructor( private nzMessageService: NzMessageService ) { + + } + + init() { + this.playIcon = 'play'; + this.isPlaying = false; + this.isRecording = false; + this.isUploading = false; + this.percent = 0; + this.progress = 0; + this.audioBlob = null; + } + ngOnChanges() { + // if (!this.audioItem || !this.audioItem.type) { + // return; + // } + // this.beforeUpload(this.audioItem); + } + ngOnInit() { + this.audio.onplay = () => { + this.onPlay(); + }; + this.audio.onpause = () => { + this.onPause(); + }; + this.audio.ontimeupdate = (event) => { + this.onTimeUpdate(event); + }; + this.audio.onended = (event) => { + this.onEnded(); + }; + } + + ngOnDestroy() { + this.audio.pause(); + this.isPlaying = false; + this.audio.remove(); + // if (this.recorder.worker) { + // this.recorder.worker.terminate(); + // } + } + + progressText(percent) { + return ``; + } + + onPlay() { + console.log('play'); + this.playIcon = 'pause'; + this.isPlaying = true; + } + + onPause() { + console.log('pause'); + this.playIcon = 'play'; + this.isPlaying = false; + } + + onEnded() { + console.log('on end'); + this.playIcon = 'play'; + this.percent = 0; + this.isPlaying = false; + } + + onTimeUpdate(event) { + this.percent = Math.floor((this.audio.currentTime / this.audio.duration) * 100); + } + + onBtnPlay() { + if (this.isRecording) { + this.nzMessageService.warning('In Recording'); + return; + } + if (this.isPlaying) { + this.audio.pause(); + } else { + this.audio.play(); + } + } + + // 开始录音 + onBtnRecord = () => { + } + + // åˆ‡æ¢æ¨¡å¼ + onBtnSwitchType() { + } + onBtnClearAudio() { + this.audioRemoved.emit(); + } + + onBtnDeleteAudio() { + this.audioUrl = null; + this.audioRemoved.emit(); + } + + handleChange(info: { type: string, file: UploadFile, event: any }): void { + switch (info.type) { + case 'start': + this.isUploading = true; + this.progress = 0; + break; + case 'success': + this.isUploading = false; + this.audioUploaded.emit(info.file.response); + break; + case 'progress': + this.progress = parseInt(info.event.percent, 10); + break; + } + } + checkSelectFile(file: any) { + if (!file) { + return; + } + const isAudio = ['audio/mp3', 'audio/wav', 'audio/ogg'].includes(file.type); + if (!isAudio) { + this.nzMessageService.error('You can only upload Audio file ( mp3 | wav |ogg)'); + return; + } + const delta = 25; + const isOverSize = (file.size / 1024 / 1024) < delta; + if (!isOverSize) { + this.nzMessageService.error(`audio file must smaller than ${delta}MB!`); + return false; + } + return true; + } + beforeUpload = (file: File) => { + + this.audioUrl = null; + if (!this.checkSelectFile(file)) { + return; + } + this.isUploading = true; + this.progress = 0; + let path = '/imman/audios/'; + if (!environment.production) { + path = '/dev' + path; + } + window['net'].doUpload(file as any, 1, path, + this.doProgress , this.uploadSuccess , this.uploadFailure ); + return false; + + } + uploadSuccess = (id, name, hash, url, file?: File, inOss = false) => { + this.nzMessageService.info('Upload Success'); + this.isUploading = false; + this.audioUrl = url; + } + uploadFailure = (err, file) => { + this.isUploading = false; + if (err.name && err.name === 'cancel') { + return; + } + console.log(err); + this.nzMessageService.error('Upload Error ' + err.message); + this.audioUploadFailure.emit(file); + } + doProgress = (p) => { + if (p > 1) { + p = 1; + } + if (p < 0) { + p = 0; + } + // console.log(Math.floor(p * 100)); + this.progress = Math.floor(p * 100); + } + +} + +enum Type { + RECORD = 1, UPLOAD +} diff --git a/src/app/common/lesson-title-config/lesson-title-config.component.html b/src/app/common/lesson-title-config/lesson-title-config.component.html new file mode 100644 index 0000000..fa183b8 --- /dev/null +++ b/src/app/common/lesson-title-config/lesson-title-config.component.html @@ -0,0 +1,112 @@ +<div class="title-config"> + + <div class="title-wrap"> + <div class="row"> + <div class="p-content" style="width:100%"> + <div class="p-tool-box d-flex" style="background: #fff;"> + <nz-select class="ml-1" style="width: 120px;" [(ngModel)]="__fontFamily" + (ngModelChange)="onChangeFontFamily($event)" + nzPlaceHolder="Font Family" + [nzDropdownMatchSelectWidth]="false" + > + <nz-option [nzValue]="font" [nzLabel]="font" *ngFor="let font of fontFamilyList"></nz-option> + </nz-select> + <nz-select class="ml-1" style="width: 110px;" [(ngModel)]="__fontSize" + (ngModelChange)="onChangeFontSize()" + nzPlaceHolder="Font Size"> + <nz-option [nzValue]="i" [nzLabel]="'Size - ' + i" *ngFor="let i of fontSizeRange"></nz-option> + </nz-select> + <div class="p-divider"></div> + <div class="i-tool-font-btn d-flex mr-2"> + <div class="position-relative fa-icon" (click)="onChangeBold()"> + <div class="fa fa-bold"></div> + </div> + </div> + <div class="i-tool-font-btn d-flex mr-2"> + <div class="position-relative fa-icon" (click)="onChangeItalic()"> + <div class="fa fa-italic"></div> + </div> + </div> + <div class="i-tool-font-btn d-flex mr-2"> + <div class="position-relative fa-icon" (click)="onChangeUnderline()"> + <div class="fa fa-underline"></div> + </div> + </div> + <div class="i-tool-font-btn d-flex"> + <div class="position-relative fa-icon" (click)="onChangeStrikethrough()"> + <div class="fa fa-strikethrough"></div> + </div> + </div> + <div class="p-divider"></div> + <div class="i-tool-font-color d-flex"> + <div class="position-relative i-left flex-fill" (click)="onChangeFontColor($event)"> + <div class="fa fa-font"></div> + <div class="i-color" [style.background-color]="__fontColor"></div> + </div> + <div class="i-dropdown-menu" nzPlacement="bottom" + nz-popover [(nzVisible)]="isShowFontColorPane" nzTrigger="click" + [nzContent]="colorPane"> + <i nz-icon type="down" theme="outline"></i> + </div> + </div> + <div class="p-divider"></div> + <div style="background: #fff;display: block;"> + <div class="position-relative" (click)="onChangeStrikethrough()"> + <app-audio-recorder [audioUrl]="titleObj && titleObj.audio_url" (audioUploaded)="titleAudioUploaded($event)"></app-audio-recorder> + </div> + </div> + </div> + + <div class="width-100 d-flex"> + <iframe #titleEl frameborder="0" style="overflow: hidden;width: 100%; height:48px; margin: 0; padding: 0;"></iframe> + </div> + </div> + + <ng-template #colorPane> + <div class="p-color-pane" nz-row nzGutter="16" nzType="flex"> + <div nz-col class="p-color-item" *ngFor="let color of colorList" + [style.background-color]="color" + (click)="onSelectColor(color)" + > + </div> + </div> + </ng-template> + + </div> + + + + <ng-container *ngIf="withIcon"> + <div class="row type-row"> + 课程类型: + <nz-radio-group [(ngModel)]="titleObj && titleObj.type" (ngModelChange)="typeChange($event)"> + <label nz-radio nzValue="a">啿•°è¯¾</label> + <label nz-radio nzValue="b">åŒæ•°è¯¾</label> + <label nz-radio nzValue="c">å¤ä¹ 课</label> + </nz-radio-group> + </div> + </ng-container> + + + </div> + + + <ng-container *ngIf="withIcon"> + + <div class="title-icons"> + <div class="icons-list"> + <nz-checkbox-wrapper style="width: 100%;clear:both" (nzOnChange)="iconsChanges($event)"> + <div [class]="'icon-item icon-'+i" *ngFor="let i of groupIconsCount[titleObj.type];"> + <div class="img-box"> + <nz-badge class="icon-badge" [nzCount]="titleObj && titleObj.icons && titleObj.icons.indexOf(i) + 1"> + <img [src]="'assets/title-icons/'+titleObj.type+'/icon-'+i+'.png'" alt=""> + </nz-badge> + </div> + <label nz-checkbox [nzValue]="i" [ngModel]="titleObj && titleObj.icons && titleObj.icons.indexOf(i) > -1"></label> + </div> + </nz-checkbox-wrapper> + </div> + </div> + </ng-container> + +</div> diff --git a/src/app/common/lesson-title-config/lesson-title-config.component.scss b/src/app/common/lesson-title-config/lesson-title-config.component.scss new file mode 100644 index 0000000..72ecb26 --- /dev/null +++ b/src/app/common/lesson-title-config/lesson-title-config.component.scss @@ -0,0 +1,319 @@ +@import '../../style/common_mixin'; + +.title-config { + .letter-wrap{ + width: 3rem; + flex: 0 0 3rem; + } + .str-wrap{ + margin-left: 1rem;flex: 1 1; + } + .type-row{ + margin: 0;padding-top: 1rem; + } + .icon-item{ + margin-right: 16px; + float: left; + width: 45px; + height: 75px; + display: flex; + justify-content: center; + align-items: center; + position: relative; + .icon-badge{ + position: absolute; + top: 0; + right: 0; + } + .img-box{ + top: 0; + position: absolute; + width: 45px; + height: 50px; + display: flex; + justify-content: center; + align-items: center; + img{ + max-width: 100%; + } + } + label{ + position: absolute; + bottom: 0; + } + } +} + +@mixin tool-btn { + border: 1px solid #ddd; + display: flex; + justify-content: center; + align-items: center; + height: 100%; + outline: none; + border-radius: 6px; + color: #555; +} + +.p-title-box { + .p-title { + font-size: 20px; + } + input { + width: 300px; + margin-left: 10px; + } +} + +.p-content { + border: 1px solid #ddd; + box-shadow: 0 0 8px #eee; + margin-top: 10px; +} + +.p-divider { + border-left: 1px solid #ccc; + margin: 5px 8px; + height: 85%; +} + +.p-tool-box { + background-color: #efefef; + padding: 2px; + height: 37px; + display: flex; + align-items: center; + border-bottom: 1px solid #ddd; + + // save + .i-tool-save { + @include tool-btn(); + color: white; + } + .i-tool-save:disabled { + color: #555; + } + + // font-size + .i-tool-font-size { + @include tool-btn(); + width: 37px; + + & > span { + position: absolute; + top: -5px; + right: 5px; + } + } + .i-tool-font-size:hover { + color: black; + border-color: #bbb; + } + + // font-color + .i-tool-font-color, .i-tool-font-btn { + border: 1px solid #ddd; + //padding: 3px 7px; + border-radius: 6px; + width: 45px; + height: 31px; + background-color: white; + color: #555; + ::ng-deep > span { + display: flex; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + padding: 3px 7px; + } + .i-left { + .fa-font,.fa-bold,.fa-italic,.fa-strikethrough, .fa-underline { + font-size: 10px; + position: absolute; + color: #555; + left: 8px; + top: 7px; + } + .i-color { + width: 68%; + height: 5px; + background-color: black; + position: absolute; + top: 21px; + left: 5px; + } + } + .i-dropdown-menu { + width: 15px; + font-size: 10px; + border-left: 1px solid #ddd; + display: flex; + align-items: center; + .anticon-down { + transform: scale(0.6); + } + } + } + .i-tool-font-btn{ + width: 31px; + } + .fa-icon{ + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + } + // bg-color + .i-tool-bg-color { + @include tool-btn(); + padding: 0 9px; + ::ng-deep > span { + display: flex; + align-items: center; + } + + .i-color { + display: block; + width: 16px; + height: 16px; + background-color: white; + margin-left: 10px; + } + } + + + // horizontal-center + .i-tool-horizontal-center { + @include tool-btn(); + width: 37px; + } + +} + +.p-box { + width: 1280px; + height: 720px; + left: 0; + top: 0; + transform-origin: top left; + overflow: hidden; +} + +.p-sentence { + @include k-no-select(); +} + +.p-animation-index-box { + .i-animation-index { + position: absolute; + font-size: 34px; + font-family: Arial; + border: 1px solid #ddd; + border-radius: 4px; + min-width: 50px; + min-height: 50px; + display: flex; + align-items: center; + justify-content: center; + background-color: darkorange; + color: white; + } +} + +.p-edit { + background-color: white; + border: 1px solid black; + padding: 2px 15px; +} + +.p-selected { + border: 1px solid darkorange; + box-shadow: 0 0 8px #ddd; +} + +.p-tool-item-disable { + color: rgba(0, 0, 0, .25) !important; + background-color: transparent !important; + pointer-events: none; +} + +// ----------- +.p-color-pane { + width: 80px; + .p-color-item { + width: 17px; + height: 17px; + cursor: pointer; + margin: 4px; + border: 1px solid #bbb; + } + .p-color-item-active { + border: 1px solid white; + transform: scale(1.1); + } +} + +.p-user-guide { + font-size: 40px; + display: flex; + justify-content: center; + align-items: center; +} + +.p-animation-box { + width: 400px; + background-color: #efefef; + border-left: 1px solid #ddd; + padding: 10px; + text-align: center; + + .p-animation-label { + z-index: 1; + position: relative; + } + + ::ng-deep .ant-radio-button-wrapper { + padding: 0 10px; + @include k-no-select(); + } + + .i-toolbox { + & > div { + font-size: 20px; + cursor: pointer; + color: #555; + padding: 0 3px; + margin: 0 5px; + } + & > div:hover { + color: #1585ff; + transform: scale(1.1); + } + } + + .p-animation-list { + background-color: white; + border-radius: 10px; + height: calc(100% - 86px); + overflow-y: auto; + .p-animation-item { + padding: 0 20px; + background-color: aliceblue; + margin-top: 6px; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + cursor: pointer; + text-align: left; + display: flex; + @include k-no-select(); + } + .i-active { + background-color: antiquewhite; + } + } +} + diff --git a/src/app/common/lesson-title-config/lesson-title-config.component.ts b/src/app/common/lesson-title-config/lesson-title-config.component.ts new file mode 100644 index 0000000..7158480 --- /dev/null +++ b/src/app/common/lesson-title-config/lesson-title-config.component.ts @@ -0,0 +1,280 @@ +import { + Component, + ElementRef, + EventEmitter, + Input, + OnChanges, + OnDestroy, + OnInit, + Output, + ViewChild +} from '@angular/core'; + +@Component({ + selector: 'app-lesson-title-config', + templateUrl: './lesson-title-config.component.html', + styleUrls: ['./lesson-title-config.component.scss'] +}) +export class LessonTitleConfigComponent implements OnInit, OnChanges, OnDestroy, OnChanges { + + fontFamilyList = [ + 'Arial', + 'ARBLI' + ]; + + colorList = [ + '#111111', + '#ffffff', + '#595959', + '#0075c2', + '#c61c1e', + '#9cbc3a' + ]; + MIN_FONT_SIZE = 1; + MAX_FONT_SIZE = 7; + isShowFontColorPane = false; + isShowBGColorPane = false; + fontSizeRange: number[]; + + editorContent = ''; + + + __fontFamily = 'Arial'; + __fontColor = ''; + __fontSize = 3; + + loopCnt = 0; + maxLoops = 20; + groupIconsCount = { + a: Array.from(Array(11).keys()), + b: Array.from(Array(8).keys()), + c: Array.from(Array(8).keys()), + }; + prevIcons = []; + prevType = ''; + @ViewChild('titleEl') titleEl: ElementRef; + titleEW = null; + + @Input() + titleObj = { + type: 'a', + content: '', + icons: [], + audio_url: '' + }; + @Input() + withIcon = true; + + @Output() + titleUpdated = new EventEmitter(); + + constructor() { + this.fontSizeRange = []; + for (let i = this.MIN_FONT_SIZE; i <= this.MAX_FONT_SIZE; ++i) { + this.fontSizeRange.push(i); + } + this.__fontSize = 3; + this.__fontColor = this.colorList[0]; + + } + ngOnChanges(vars) { + if (!vars.titleObj.previousValue) {// åˆå§‹åŒ–,内容是空 + return; + } + let defObj = this.titleObj; + if (!vars.titleObj.currentValue) { + defObj = { + type: 'a', + content: '', + icons: [], + audio_url: '' + }; + } else { + defObj = vars.titleObj.currentValue; + } + this.titleObj.icons = defObj.icons || []; + this.titleObj.type = defObj.type || 'a'; + this.titleObj.content = defObj.content || ''; + this.titleObj.audio_url = defObj.audio_url || ''; + this.titleEW.document.body.innerHTML = this.titleObj.content; + } + + ngOnInit() { + if (!this.titleObj) { + this.titleObj = { + type: 'a', + content: '', + icons: [], + audio_url: '' + }; + } + this.titleObj.icons = this.titleObj.icons || []; + this.titleObj.type = this.titleObj.type || 'a'; + this.titleObj.content = this.titleObj.content || ''; + this.titleObj.audio_url = this.titleObj.audio_url || ''; + + this.editorContent = `<html lang="en"><head><meta charset="utf-8"> + <meta name="viewport" + content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"/> + </head> + <body style="height:48px;overflow: hidden;margin: 0;padding: 0 .5rem;background: #FFF;line-height: 48px;"> + ${this.titleObj.content} + </body> + </html>`; + this.titleEW = this.titleEl.nativeElement.contentWindow; + const tdoc = this.titleEW.document; + tdoc.designMode = "on"; + tdoc.open('text/html', 'replace'); + tdoc.write(this.editorContent); + tdoc.close(); + tdoc.addEventListener("keypress", this.keyPress, true); + tdoc.addEventListener("blur", () => { + if (this.titleObj.content === this.titleEW.document.body.innerHTML.trim()) { + return; + } + this.shouldSave(); + }, true); + } + htmlEncode(text) { + if (!text) { + return ''; + } + return text.replace(/\&/ig, '&') + .replace(/\</ig, '<') + .replace(/\>/ig, '>') + .replace(/\"/ig, '"'); + } + + htmlDecode(text) { + if (!text) { + return ''; + } + return text.replace(/\&\;/ig, '&') + .replace(/\<\;/ig, '<') + .replace(/\>\;/ig, '>') + .replace(/\"\;/ig, '"'); + } + + + ngOnDestroy(): void { + + } + iconsChanges(val) { + let a = this.titleObj.icons; + let b = val; + + if (a.length > b.length) { + const diff = a.filter(x => !b.includes(x)); + const ti = [...this.titleObj.icons]; + for (let i = 0; i < diff.length; i++) { + const d = diff[i]; + const idx = ti.indexOf(d); + ti.splice(idx, 1); + } + this.titleObj.icons = ti; + } else { + const diff = b.filter(x => !a.includes(x)); + this.titleObj.icons = [...this.titleObj.icons, ...diff]; + } + + this.shouldSave(); + } + typeChange(val) { + this.titleObj.icons = []; + this.shouldSave(); + } + keyPress(evt) { + try { + + if (evt.charCode === 13) { + evt.preventDefault(); + evt.stopPropagation(); + return; + } + if (evt.ctrlKey) { + const key = String.fromCharCode(evt.charCode).toLowerCase(); + let cmd = ''; + switch (key) { + case 'b': cmd = "bold"; break; + case 'i': cmd = "italic"; break; + case 'u': cmd = "underline"; break; + } + + + if (cmd) { + this.execEditorCommand(cmd); + + // stop the event bubble + evt.preventDefault(); + evt.stopPropagation(); + } + } + } catch (e) { + console.log(1, e); + alert(e); + } + } + execEditorCommand(command, option?: any) { + try { + this.titleEW.focus(); + this.titleEW.document.execCommand(command, false, option); + this.loopCnt = 0; + + return false; + } catch (e) { + alert(e); + if (this.loopCnt < this.maxLoops) { + setTimeout(() => { + this.execEditorCommand(command, option); + }, 100); + this.loopCnt += 1; + } else { + alert("Error executing command."); + } + } + } + + onSelectColor(color) { + this.execEditorCommand('forecolor', color); + this.__fontColor = color; + } + onChangeFontColor(val) { + this.execEditorCommand('forecolor', this.__fontColor); + } + onChangeFontFamily(font) { + this.execEditorCommand('fontname', font); + } + onChangeFontSize(size?: any) { + + if (size) { + size += this.__fontSize; + } else { + size = this.__fontSize; + } + size = Math.max(this.MIN_FONT_SIZE, size); + size = Math.min(this.MAX_FONT_SIZE, size); + this.execEditorCommand('fontsize', size); + } + onChangeBold() { + this.execEditorCommand('bold'); + } + onChangeItalic() { + this.execEditorCommand('italic'); + } + onChangeUnderline() { + this.execEditorCommand('underline'); + } + onChangeStrikethrough() { + this.execEditorCommand('strikethrough'); + } + titleAudioUploaded(res) { + this.titleObj.audio_url = res.url; + this.titleUpdated.emit(this.titleObj); + } + shouldSave = () => { + console.log('title shouldSave'); + this.titleObj.content = this.titleEW.document.body.innerHTML.trim(); + this.titleUpdated.emit(this.titleObj); + } +} + diff --git a/src/app/common/player-content-wrapper/player-content-wrapper.component.html b/src/app/common/player-content-wrapper/player-content-wrapper.component.html new file mode 100644 index 0000000..864df8e --- /dev/null +++ b/src/app/common/player-content-wrapper/player-content-wrapper.component.html @@ -0,0 +1,8 @@ +<div class="cmp-player-content-wrapper" #wrapperEl> + <div class="cmp-cnt-box"> + <img [src]="'assets/'+ratio+'.png'" alt=""> + <div class="cmp-cnt-main"> + <ng-content></ng-content> + </div> + </div> +</div> \ No newline at end of file diff --git a/src/app/common/player-content-wrapper/player-content-wrapper.component.scss b/src/app/common/player-content-wrapper/player-content-wrapper.component.scss new file mode 100644 index 0000000..11ca56e --- /dev/null +++ b/src/app/common/player-content-wrapper/player-content-wrapper.component.scss @@ -0,0 +1,54 @@ +@import '../../style/common_mixin'; + +.cmp-player-content-wrapper{ + max-height: 100%; + display: block; + position: relative; + height: 100%; + .cmp-cnt-box{ + display: inline-block; + max-width: 100%; + max-height: 100%; + width: auto; + height: 100%; + position: relative; + img{ + height: 100%; + width: auto; + } + + } + .cmp-cnt-main{ + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: flex; + flex-direction: column; + } +} + + +[style*="--aspect-ratio"] > :first-child { + width: 100%; +} +[style*="--aspect-ratio"] > img { + height: auto; +} +@supports (--custom:property) { + [style*="--aspect-ratio"] { + position: relative; + } + [style*="--aspect-ratio"]::before { + content: ""; + display: block; + padding-bottom: calc(100% / (var(--aspect-ratio))); + } + [style*="--aspect-ratio"] > :first-child { + position: absolute; + top: 0; + left: 0; + height: 100%; + } +} diff --git a/src/app/common/player-content-wrapper/player-content-wrapper.component.ts b/src/app/common/player-content-wrapper/player-content-wrapper.component.ts new file mode 100644 index 0000000..6ddafee --- /dev/null +++ b/src/app/common/player-content-wrapper/player-content-wrapper.component.ts @@ -0,0 +1,55 @@ +import { + AfterViewInit, + Component, + ElementRef, + Input, + OnChanges, + OnDestroy, + OnInit, + ViewChild +} from '@angular/core'; + + +@Component({ + selector: 'app-player-content-wrapper', + templateUrl: './player-content-wrapper.component.html', + styleUrls: ['./player-content-wrapper.component.scss'] +}) +export class PlayerContentWrapperComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit { + + + @ViewChild('wrapperEl') wrapperEl: ElementRef; + + // // aspect ratio? + @Input() ratio; + _w: string; + _h: string; + + constructor() { + if (window.innerHeight < window.innerWidth) { + this._h = '100%'; + this._w = 'auto'; + } else { + this._w = '100%'; + this._h = 'auto'; + } + } + ngOnInit() { + if (!this.ratio) { + this.ratio = '20-9'; + } + + + } + ngOnChanges() { + + } + ngOnDestroy(): void { + + } + + ngAfterViewInit() { + + } +} + diff --git a/src/app/form/form.component.html b/src/app/form/form.component.html new file mode 100644 index 0000000..b37f2f2 --- /dev/null +++ b/src/app/form/form.component.html @@ -0,0 +1,14 @@ +<div class="courseware-container d-flex"> + + <div class="gutter" style="width: 100%;"> + <app-lesson-title-config + (titleUpdated)="updateTitleObjSuccess($event)" + [withIcon]="false" + [titleObj]="titleObj"> + </app-lesson-title-config> + + + <nz-divider></nz-divider> + </div> + +</div> diff --git a/src/app/form/form.component.scss b/src/app/form/form.component.scss new file mode 100644 index 0000000..cc66274 --- /dev/null +++ b/src/app/form/form.component.scss @@ -0,0 +1,20 @@ +@import '../style/common_mixin'; + +.tw{ + display: flex; + .t{ + flex: 1 1 auto; + margin-right: 2rem; + } + .a{ + + } + +} + +.aud-w{ + width: 100%; + display: flex; + justify-content: center; + margin-top: 1.5rem; +} diff --git a/src/app/form/form.component.ts b/src/app/form/form.component.ts new file mode 100644 index 0000000..551319f --- /dev/null +++ b/src/app/form/form.component.ts @@ -0,0 +1,46 @@ +import {Component, EventEmitter, Input, OnDestroy, OnChanges, OnInit, Output} from '@angular/core'; +import * as _ from 'lodash'; + +@Component({ + selector: 'app-form', + templateUrl: './form.component.html', + styleUrls: ['./form.component.scss'] +}) +export class FormComponent implements OnInit, OnChanges, OnDestroy { + + titleObj = { + audio_url: 'http://iplayabc-courseware.oss-cn-beijing.aliyuncs.com/dev/imman/audios/d108d5d06105fda0526059a3e372f926.mp3', + content: 'what is this? ', + icons: [], + type: 'a' + }; + + constructor() { + + + } + + ngOnInit() { + } + + ngOnChanges() { + + } + + ngOnDestroy() { + + } + + updateTitleObjSuccess(titleObj) { + + } + + onTitleAudioUploadSuccess(res) { + + } + + save() { + + } + +} diff --git a/src/app/play/play.component.html b/src/app/play/play.component.html new file mode 100644 index 0000000..4704b1a --- /dev/null +++ b/src/app/play/play.component.html @@ -0,0 +1,50 @@ + + +<div class="player-preview-content" [ngStyle]="{'background-color': this.data.contentObj?.titleObj?.type === 'a' ? '#fce5e9' : '#d8eefb'}"> + <app-player-content-wrapper> + <div [innerHTML]="data.contentObj.titleObj.content" style=" + position: absolute;z-index:99; + display: inline-block; + left: 55px; + top: 20px; + cursor: pointer" (click)="playTitleAudio()"></div> + <div class="content" style = 'position: relative;width: 100%;height: 100%;display: flex; + justify-content: center; + align-items: flex-end;'> + <div class="letter-box"> + <div class="letters" > + <div class="letter" *ngFor="let a of letters; let i = index" + [ngStyle]="{top: row(i) +'%', left: (10 + (i % 13) * 6.05) +'%'}"> + <div class="l-box" (click)="clickItem($event, a)"> + <img [src]="'assets/all-letters/letter-imgs/'+a +'.png'" alt=""> + <div style="display: none"> + <audio [src]="'assets/all-letters/letter-audios/'+fromCharCode(a)+'.mp3'" preload="auto"> </audio> + </div> + </div> + + </div> + </div> + </div> + + <div class="show-item-content" + *ngIf="showDetailFlag" + (click)="clickBg()"> + + <div style="width: 50%; height: 80%; margin-top: 2rem"> + <img [src]="curItemUrl" style="height: 100%; width: auto;" + (click)="clickBigItem($event)"> + </div> + + + </div> + + </div> + </app-player-content-wrapper> +</div> + + +<div style="display: none"> + <audio *ngIf="data.contentObj?.titleObj?.audio_url" #audioElement + [src]="data.contentObj?.titleObj?.audio_url" preload="auto"> </audio> +</div> + diff --git a/src/app/play/play.component.scss b/src/app/play/play.component.scss new file mode 100644 index 0000000..766e91f --- /dev/null +++ b/src/app/play/play.component.scss @@ -0,0 +1,116 @@ +@import '../style/common_mixin'; + + +.player-preview-content { + width: 100%; + height: 100%; + background-color: white; + .lesson-header{ + width: 100%; + position: absolute; + top: 0; + img{ + width: 100%; + height: auto; + } + .title{ + font-family: 'BerlinSansFBDemi-Bold'; + color: #f5d11f; + font-size: 4vw; + font-weight: 900; + width: 15%; + height: 70%; + position: absolute; + overflow: hidden; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + line-height: 4vw; + } + } + .left-box{text-align: right;padding-right: 1rem} + .right-box{text-align: left;padding-left: 1rem} + .left-box, .right-box{ + height: 100%; + position: relative; + .a, .b{ + width: 30%; + height: 100%; + display: inline-block; + position: relative; + margin: 0 .5rem + } + .a{ + width: 40%; + } + } + .letter-box { + //height: 100%; + position: relative; + display: inline-block; + width: 100%; + height: 100%; + //margin-top: 5%; + //margin-left: 8%; + //margin-right: 8%; + img{ + max-width: 100%; + max-height: 100%; + //position: absolute; + //left: 0; + height: 100%; + } + .letters{ + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + + .letter{ + position: absolute; + font-weight: 600; + //width: calc(100% / 13); + text-align: center; + --cw: calc(100% / 13); + width: var(--cw); + line-height: calc( var(--cw) * 13); + font-family: LiQiangXingShu; + padding: 0 1rem; + height: 20%; + font-size: 7vmin; + } + } + + } + .l-box{ + cursor: pointer; + width: 100%; + height: 100%; + display: flex; + flex-direction: column-reverse; + font-weight: 900; + img{ + max-width: 100%; + max-height: 100%; + width: 100%; + height: auto; + } + } + + + .show-item-content { + position: absolute; + width: 100%; + height: 100%; + //background-color:rgba(255,255,255,1); + + display: flex; + align-items: center; + justify-content:center; + } + + +} + + diff --git a/src/app/play/play.component.ts b/src/app/play/play.component.ts new file mode 100644 index 0000000..98a45d1 --- /dev/null +++ b/src/app/play/play.component.ts @@ -0,0 +1,154 @@ + import { + Component, + Input, + OnDestroy, + OnChanges, + OnInit, + AfterViewInit, ElementRef, ViewChild, +} from '@angular/core'; + +import * as _ from 'lodash'; + +@Component({ + selector: 'app-play', + templateUrl: './play.component.html', + styleUrls: ['./play.component.scss'] +}) +export class PlayComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit { + + @ViewChild('audioElement') + audioElement: ElementRef; + + data = { + contentObj:{titleObj:null} + }; + + letters = []; + lettersAscii = {}; + titleAudio = null; + showDetailFlag = false; + curItemUrl = ''; + curEvt; + + constructor() { + + } + range(start, end) { + return (new Array(end - start + 1)).fill(undefined).map((_, i) => i + start); + } + ngOnInit() { + if (!this.data.contentObj.titleObj) { + this.data.contentObj.titleObj = { + audio_url: 'http://iplayabc-courseware.oss-cn-beijing.aliyuncs.com/dev/imman/audios/d108d5d06105fda0526059a3e372f926.mp3', + content: 'what is this? ', + icons: [], + type: 'a' + }; + } + // const letters = _.shuffle( [...this.range(97, 122), ...this.range(65, 90)]); + [...this.range(97, 122), ...this.range(65, 90)].forEach(c => { + this.lettersAscii[c] = String.fromCharCode(c); + }); + this.letters = _.shuffle(Object.keys(this.lettersAscii)); + + } + + ngOnDestroy() { + + } + + ngOnChanges(data) { + + } + + ngAfterViewInit() { + + + } + + + clickItem(e, a) { + + this.curEvt = e; + this.curItemUrl = 'assets/all-letters/letter-detail/' + a + '.png'; + this.showDetailFlag = true; + } + + clickBg() { + + this.showDetailFlag = false; + } + + clickBigItem(e) { + + e.cancelBubble = true; + this.playLetterAudio(this.curEvt); + } + + + + caseFolder(c) { + let folder = 'upper'; + if (c.toLowerCase() === c) { + folder = 'lower'; + } + return `${folder}/${c}.png`; + } + row(i) { + const r = Math.floor(i / 13); + let y = (r * 20); + switch (r) { + case 0: + case 1: + y += 13; + break; + case 2: + case 3: + y += 15; + break; + } + return y ; + } + lower(c) { + return c.toLowerCase(); + } + fromCharCode(c) { + return String.fromCharCode(c).toLowerCase(); + } + allLetters() { + + } + playTitleAudio() { + this.titleAudio = this.audioElement ? this.audioElement.nativeElement : null; + if (!this.titleAudio) { + return; + } + this.titleAudio.pause(); + this.titleAudio.currentTime = 0; + this.titleAudio.play(); + } + playLetterAudio(evt) { + const audios = document.querySelectorAll('audio'); + for (let i = 0; i < audios.length; i++) { + audios[i].pause(); + audios[i].currentTime = 0; + } + const a = evt.target.parentNode.querySelector('audio'); + // a.play(); + const playPromise = a.play(); + + if (playPromise !== undefined) { + playPromise.then(_ => { + // Automatic playback started! + // Show playing UI. + console.log(1, _) + }) + .catch(error => { + // Auto-play was prevented + // Show paused UI. + console.log(2, error) + }); + } + } + +} diff --git a/src/app/style/colors.scss b/src/app/style/colors.scss new file mode 100644 index 0000000..13a0b00 --- /dev/null +++ b/src/app/style/colors.scss @@ -0,0 +1,16 @@ +$color_black: #111111; +$color_gray: #aaaaaa; +$color_silver: #dddddd; +$color_navy: #001f3f; +$color_blue: #0074d9; +$color_aqua: #7fdbff; +$color_teal: #39cccc; +$color_olive: #3d9970; +$color_green: #2ecc40; +$color_lime: #01ff70; +$color_yellow: #ffdc00; +$color_orange: #ff851b; +$color_red: #ff4136; +$color_maroon: #85144b; +$color_fuchsia: #f012be; +$color_purple: #b10dc9; diff --git a/src/app/style/common_mixin.scss b/src/app/style/common_mixin.scss new file mode 100644 index 0000000..6293349 --- /dev/null +++ b/src/app/style/common_mixin.scss @@ -0,0 +1,21 @@ +@mixin hide-overflow-text { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +@mixin k-no-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +@mixin k-img-bg { + background-repeat: no-repeat; + background-position: center; + background-size: contain; +} +.anticon{ + vertical-align: .1em!important; +} diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/20-9.png b/src/assets/20-9.png new file mode 100644 index 0000000000000000000000000000000000000000..fbbaa1d94af461c0908228a5b44176b3ebeb2a78 GIT binary patch literal 12954 zcmeI(I|{;35QX8nK7s^O3LysELU08duEg7f5VL@|1{+HsShx!tEwcu}QV?+q+F00Y z=XD$MSLeWV!+hmzvo!JCz!eeCjCC&3w6!*9IW}(HbH|37<w-2nC47qX3!{g{T)nPK zJCW1wGwD4x+4Q(jb*Jq|C50t$2`E4T3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy{F{Pz;5Y7~_R(SednqxaR9A7i F`U1KiI0OIy literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/bg.png b/src/assets/all-letters/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..551411b7883d75f611dce3bc8a71c733b256d72e GIT binary patch literal 370592 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Π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	F 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 BnhO8` literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/bg2.png b/src/assets/all-letters/bg2.png new file mode 100755 index 0000000000000000000000000000000000000000..70b87ba72a9975ebd93969fa9a93e75bfe69d871 GIT binary patch literal 377538 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�tvZZgn#1QQI<p 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/a.mp3 b/src/assets/all-letters/letter-audios/a.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..d3b62661990ec6cc1761db4ca2285f9073a6fc9b GIT binary patch literal 14834 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/b.mp3 b/src/assets/all-letters/letter-audios/b.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..4d511c81aa451eafd10120e86c9009b39fd37add GIT binary patch literal 15990 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 Z|G(Xb|H<~bo38u!nLqvC<9{sv{{VonTW|mX literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/c.mp3 b/src/assets/all-letters/letter-audios/c.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..bc5a455dd21d4c71626f00af806ab4cfd0a1b545 GIT binary patch literal 13299 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/d.mp3 b/src/assets/all-letters/letter-audios/d.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..2c26762c2a5c534300522576b90d3d3b998e1696 GIT binary patch literal 14835 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/e.mp3 b/src/assets/all-letters/letter-audios/e.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..a29be311ae3cad11778847bec86a855f76f94f07 GIT binary patch literal 13299 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 Y`gix?KiNJvs|Ej@`SSm|^L6q61v=<Pd;kCd literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/f.mp3 b/src/assets/all-letters/letter-audios/f.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..5deb473f16c542f55a06abbb6c76ba492956ffd5 GIT binary patch literal 13299 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/g.mp3 b/src/assets/all-letters/letter-audios/g.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..dff70aa0f3786dee7a63dc2ed2d5cbb10e6a4b4c GIT binary patch literal 13299 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 MeCdDP`L_7~0$NaJ$^ZZW literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/h.mp3 b/src/assets/all-letters/letter-audios/h.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..46bd296dd8fcbf21b29940bd22a959503b0cccae GIT binary patch literal 12147 zcmeHN2UrwWyI#c*d%=c^W?dBv3|nU#U5a!USf#78v$L?k7I&9w5)nbg5(NYltSE>A zR#c2)L5&KiF@T_e3L@5sNh~M^@7YEcL%jIkoBz*!F6Y7LnVIv|_bca{S)J{vdN{CV z3%Py{Uf@C>{G*V_EF9O~maDy|kZ3rrv%7=lo=hUsaU3t_`8eD-A`a*4&cRt&M@tbj z3{&8FSg=rRNoYNJhJY9HEeSrbJIP&YhlL28Vr7_jtOpm34MSOcg0<B^i)ePVNGie< z2tHaAE|#;SEeQx;!o%3$TKSkrz^h0UVU`42<pv%o!`n$@7#=pGLnxUB;~6Y7GM&Pt zlT7iza3+yNBa&GViOeQ3*)%F%vj|oL@fI?^fbC`Ps8I&)ED0eBg_KPsMny%LMN!Qp zvS7f>Vi8FcB83703P>I!Rv^)kSUyE5LM_7{lcO@BR3Vgz@k*HpPZFW9BoM$pUh9cS z>h9htUMx3L`DKPmM8s%BN+g?+h$0bDmqV^_hy+4326f9J=f+4eq8BEYM95IgArccS zrgRnIh5g}E4@3a+E&@O_K5c=nHdKZo3W>~CArW=Yq(h)`SeF@Svi~c5L~4BOW5kF^ zh`M8ZAxH!rZ24%XK52w3TopAwO2oo35kN!^bdlBcK#99M+gU7EAYv4AwznjJCuTw+ zpG|?82*&48AQnPnLYRQYf|w+5%OEjmG!m0ZWAd0Pm1+_85;Q_7TPcD8lbI}%Kmaij z79C=-Xk>`b5P*z>c`!+}s5~9kxiTRr2qaurgwhH=u!6}Tkr9N4K@<j)46(>G62!w; zEQm#?Vl<Q?prZ^_D~jz7>Vc0a5PL*{SrU{r3Xy0Kg~BD1*c2+8Mm7NnPa^$6FX0OX zF+HWWQwNhPk%VhYjU&TELJX7|M<&7B*{Q0_jEtY*BNX!`QSzCcnpC`4cbdp_Hu)pF z?A_T&1YaoeMnuwZ%uD4AMApjcx~oigO9GkhELMC>U>Aaj#aOtS!dn5%l<1IvfXftI zp$PLvk#HqiaJQQ(6TF47N+l`+KFStIWFiFAp*x4FDtNqwIt84Ba**sX${wKU0^ZnS z^_{vYgbP($c)Y5R*$Ap^50(Tu5{dCu!U3OpOQ@5OEGmrxQ(y)}g<&QH!!QeEBM%0l zMXBm+qN@|JlRGK|17bfN|4w4LM4*U5WSDI*$llKiY^MkmARUZ>PEI5cd*H9C=s)GL zwgh1Wg&AZz3lfm{EQn79C5XT@45E{GWCjyPC>WpC6}Nwb=RNW8zlo^UKRUu>q5_l( z(a9JJkzpDGLQqia2#mozKFUJ)40WIAMEc+0UzZg9%*gi8?;f|-e}Lc08AI7qwV7=} zR37Kr!nPp(x%4&Nz*!tD1Lu<RxY6kdvytGxs1R__vUSTI76_;)gUo|iR6YvP=_m~G zcyt(|umogv*)!CgTm_Pno3C>OQBVPcgurx&!ov^<5rCtB!bJIy0AXslY1BVTN69Ua zNkkmb6D<h}&=uJ*gGGkvG^R?GfCAINM5k8Er;+HOBdPAXY;={UkmyJw^^i#*497T# zA_Vjy$iMZ}st4<nA8$X>dMb%xCX#++un3Wdxg)YLOeVJ^cu2%p*AQuu)`sZgcxb}J zLBxtKJzLACY2o2QO}zdz*J%m`OmiQP5T6q|4ZH5y|2eVKuzzZVptDc`Mq|MclR`lu zFuX7!9)k))EGC7;qw@t+OrSpdKq4u{eR7NdlLU>aGe&gs{N*U2%h3ttpQ}bGNHu+H zOH29Sqhk|1_{7QCx%;nHQKx|Jx~#4n+Q@6o`5zsjom#u;wE%!F?FP_l)49vAp{3J# z>(F)?6~8u#)zY*Xt`((I0-B<*$7Dh<lQ@Ewpz>9&__#ZP0IH_so*&U_8M-}6DMLBq zey$A3C+6iI$x<KT7OFW!{dU5RQctYPHx-q~x_el(0u#$sqnepiCY4D-)tye4MktPy zponswa|}m<K|><C{h262jDkTq6hjs29v2vB9ca%E1W^l9NTh)+TlPIjE_twFomNXX zc8U<RTN@FnG+d}Qz)r$fPODTJD0LPM*3@?Q#@Yfl^;;s~AX8X0IupDgYZ|FC8Njry zbQqWnGC+ll`k_KKcZ(#ELT%gCQ1c^XDj0NVBa!e3V3B52Q}fH!Q#Uw^$VAl?+f`@h zbdCaNbVMnSCP&TqO<}PZ_A-f7Im9c;)Oc&m1JCBG)sjf&+P|(kkZ{%f-;IWDID2Y? zDrD+1>spNJXW-KU_@+VZ{HURAh@i0l#-%d;Z<MbR-K*rY5blMm7p~7j;IoK(v#S@b z&qCm{h<mf^e+{mIfBY<hiNP1NDDa~P_zk6Z^&-%VKraHl2=pS*i@^Uk1U|HHT!h2* zJLc->*=7f>21s$ZK0|7^+T~g%+2C-~&VtQ(^Y>0oake>#t3T978X7mfKZlL`L7V}T z&jwUnEKYhNo;_SqT59hoxbnp6mmJ1A(<v!e>JxK+O1sZ&Msm)$j(94%>ukX*2zt39 zD8^yTWSq^U3HnKd`wq39cE|LWFJCrl!oi)1>)jiTe-gdHmtKFPpe(3-*)-SX<(?9D z^q%7UqNX4NhfzUm7jvvWAP(Dyo8GhH+>0*ublzAeI?gQJEvFQ_FgQc{MyB^`lt!Pv zKA7DvWk{2^G_Y~{q?sN>oWA{Ok0H+$_`!Xpf^SQgA9XPk+^%dwzHVziUQ^Kg9Aiyx zd@zRD-@xoE-fSYAVI@C@bIZ=LaO9Bvt8UHtX1x<0ervOJgO}5hS*!J*ec4VvHJ-my zR$7c--W+0>cy6neOJd?R3q$F&6stwXsjJYccc->&dNOiL@<`8n8N*h220BgZAE!4g z{_H;6TteTo;^-WQ;X}T#Up-{-C?)<TIK2k@Dx`JxBMtt;OIXOIM$rxp{#@Unk<ky^ zoL8ssoU?q|hmPEGt2@tkjy$vJeUj~R+m6N7xwj(Da491OjM!Y=5Zi~jhJDX??vbfA z6IK-N%Kz?4+j(C-YXAD1FE*7Bw;mvF^l~hyaGcrN5Z(CdE&k9tVW!2bMyRo$e%Y0l zX4@Sp=IO@J#jMI}nd3LkoDg{Hj`Z0xG}&XE#k^Z3XF9C!9vhWWM_+t*iSewtTTtKj zZ|v&Z&~YCAWBNR7aC^(*oJ?_cuWq>Ib|K2m>8mgM2nV}Nyy+Wjx$4AJ9OK|#9}a%I zq;}ElWK(F><#7qQWvs|kWr;T7$oiq9g=U3)(WxfJ_$~X#dFHM!_>sd(cv)Jv#-ru> z)l4_~mWb0Qk4%5E(E7>qvx&=!q#l(^x4+&p`uOdP(CXH9@0zs!3obBBzrQ^AB{ZO4 z%8Jc<Wyw5q?xP|o!MqHfGQpT<ATL;g>u=KNu<&Fo`{%NagCD)Bugq8C?~Cg<&egAR zy=#aDe}f^x=*p5#{EawA7AKmu$*;ZTJTx#0omX)`g+{bzjBu-*SFP`;FGw>Pk-m!} ztUtOT=GUYe%Y-?s;O{5Qpl^AcFAAPD*EH|Z3?GX(r?*nBRfO!!c|6fG<xF_!h$nl8 zVT*&ReyQoWs`oBt$L0;5&TzH=G^ccHdcyYh?6!7SyOAr)ow5^*c8=QTA762GL|TT6 z9GYK=tt{L(eMQ^i)CZo@z!PUKQUlzI3<iywXfuXw--qjM8c&=y%XiaK8q<7|TL#`e z_UBygPm;`^^YSiZCi5;8{T5j1S+7VS`%jVQw-jDq-n{9IJR{F*thmm<t@uqKd&+vn zohrj$N4~#eUzGK{<3itOHXDZ>{;<xburZ#a2==IWxQJ>L|0V9HxwYwj8?K%&j6W|p zAmCZgO0t+$yJfi7?X<F-)SJg`&GuT|sIE9wKQLubdVN_@p}+CaYpI!=x#iiyr>y7j zP@`?xE3yuTDe?ar*DuNMR%2^Gs22a<ZLzh;x;#z(->Pq|4DLYoJvqGSTsh{Q=a-*) z<j83AO)WlzoUel4t=Zdfm)h`p#UjqbR>Rz}qrWqc=<7TaYWQYO3%m7_QO4HevBRTH z{UdJ_!i)#C$#Fjgqz7az%psi=`CK!0PdH40U2fN3NX+`7PhFq=F4l2x!dH*vU2=@| zW3kq~dG|%j<xRwxyrvzs?*leCEXb8Gjveu!+<%2_j;LtANH3JvFUxFy_{eEug~H4W zGitHfTH^&<X1&fT{l3s4>R76|^Yw!370)W3)2m)y_A+pBC;~leR_WtKPuK4*i7EQ> zMV9Bo-z#^Y+oLzM{83BLp6>!8kFJazC*3w<;I?>{)zy78?k4hPVeUnv`00sjBIVb7 zQ{bHHK?$!CH+ojwXv!Z^MEfG7c5>>VVCUf_uZi2mcXQx^qO$q`#{=8j>46<k%8mBZ zji<wF-c^NK1*V;E{t@DzyI#T;x$k<s)Y4Une_C9>a=%)17^=m8q$i9N{DFTmG3R(r zjG>i&bV`8do~bFW%nJ)w4Ju4NlU^{NJMnSeH|GR}%dQM`Xc0Z0xE8s*pE{gd7*C0H zHu5pub@U#+Iq8<&{&M%E^20x*d&gAI4j4@uA968rO!55lgP;t~*ZR$EzuO<69WI}A zL-51X52xj0j9ls@Im^T5ysN2>GPn^$USJa1v~*06Lw)g`Z-u5l8yYP$Pq*h}m&eXd zw_JQ6^nUcwGi?plxz=qf_cj)en8iS4b)w6%9UUGsuO#&mTAhD!hqGqU7uotDV^a?e zV_(^~bEcr_!>HHz+$rPwI%m1GoXSd__$d4R+}a;A^CONqL3y6Z%p#AVOBqRHf4kU} zeCyPlY^LF;%>x`N7iI+1?4`dgk$3#|#;!m@wRXP!-gKe=+I_cu{rm>5yj>Wkm-$jM zZVEf_UCX4aLCot7$3u=~uc+JK(YI8;gZA@)n3>bk^|;iz?CnY9>C={PQsTci?u)5` zK2HsoX#3B|b>@D1N;>m@+cNA|_k`H>u+xFWbWX~XG;@E$fXOHH_6{B7vb)J*uAu6W zoBvm~yCaPDtp2t7juksAB{F`+X_?3I$z@-Kyztq)MwtD|KX#pMsV(PnO7ZR;j$50< z>c;Q#ei}NqC~Wq&g9{#BF^(D?#z<pt_DaQ$8YE4<YC86pNk^+QD~?nj#<<~jYx3%f zO#JB&@=a%7o{>CW=4zsU<6Gj>-2=E#dGdfUghfbZ!bYMnASqioxaPox9X<`Os)x+~ z_T1=~tKIILjkr1bV(_xXdfy$uFWLBlc6e7&`>Fk0ny=6L)MUro=Z?}A1~Rvo!D#4) zQ!CT?(%(08^W*LgH8&a4bXF4o{hEnsEdOt>u8A}b`6Yk+yZH0|)BUbI{WUb?SaJ4n z&s-GQKA;K?erZ0Yro;Kehj+j8td<S?0M^YQ13oT|kR?75aVW0v0Oaz*U}<Jbv00vQ zQ_e48Lr+NOJxaKw#Q!+1-+PZr&(==-N5xp$?P>gZ#|)gH9}b86hTvM!e8J#t)`D&E z<0_WP$%mUtzN=d8RPN{M=HF75JbGKvNQ=OAQ)eaxMIUpRY;sVx&t~iRRgc!X)DC$z z6gx_DNw4#AMqkEyubWl%lwP^dF~iWM<+b3U@TM<u$)F|6VNoV|PSMOoa6$eq3H<7Z zFn!aB4vCEWN-uh_It-Trs`uj!PWp`)wRQ&+mz6ev@rvrZqX)eIaT0+4X`KF-HXdPy zu}=n_9bgLp?-Qpt5f=w8)br<m+{S;^0Hp{2@CEYU=0n`TdpOrP9In6S`~?v(19syz Z`2WLQ_&;qP*LKd|XTR#d&VO3`e*sPSL@NLQ literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/i.mp3 b/src/assets/all-letters/letter-audios/i.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..b5917fa02b24fcb18da0d7296c566664a624e07e GIT binary patch literal 13299 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/j.mp3 b/src/assets/all-letters/letter-audios/j.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..335cd4711706d908a425932b65d644791a7ee597 GIT binary patch literal 15220 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/k.mp3 b/src/assets/all-letters/letter-audios/k.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..d5d25c5b2acdbb3f2fa425162ff04c481bc597fa GIT binary patch literal 12915 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 B-6a43 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/l.mp3 b/src/assets/all-letters/letter-audios/l.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..0744fd71aa750384d9438ee7faabede5b96331e9 GIT binary patch literal 17142 zcmeHv2{=^!`}Yvaz9to!5Q$+H%h*DeEXlrajae9s5o1e5q-3YEQ&~zO*_Ac2BuiO~ zq7*`sP(<c`#?qtb*YA0s=l{O{>;1jg+qt-|nRCAP_POu-^S#eG7uxEGZ6M${;%Z{4 zVFY}j1AgI9m>kGNUDagsI~*znGSSx4*!T{E!el@OM%rc|&~7*gWT9sOQdIVJN1<J? zB(MY45$~oXFjHA80LEjK1k9!NpnC3VSSP&JDG#jispBT-Q!Z#ZjDYfC21Q?aUxGUU zOG1Ht39fFQ^1ey}C=Ag7D-V38oR$;-uPq_DC<&-iE`R}JU^Su#7A!3x13|;2q`|Us z5-=G!QU)px1{_C9LZu{Oau6s?9*UHgLV!08fx`@7MGp*4-bh_@!x->QNx+Fja+jBs z^zreL@IgorJsbgHIXOuvToMk404pG#er_a`FT~ALkfLH;hdS01?SXeE;fZcwicXXR z(Tk)cAOKtkZ$?6J*VFr<-px~DEiMT(ks#@da+icjKqUzT$*mHeBn@vs$%aF}l<+k1 zbH_>=VLgdn9%!tFH`a|L__GQl>>n}x4HdxhpA-Pu_-hZgT0?taQ6!>=Dv3z=wa}IY zYXNT+1}v%nJA4T1_^A82p$K@i9u|WK3SkSj81xT&?p_|QYgxmfC9$qp0)U7oU<<as z9x$S(C$H`1NkX}yvD)fN0>BvwJRT#DLSx`aEEWpEpfLyt4kslIaeyN+5Cl>Rg+pNw za&Re`HIwTq)QM;>if)PuDGUM)gF_JzDJ)zTf{=wFA#gYf0l^@Va?rH{;jl$i-vbXc z1j==*3W^sPzzYNdihv=o7zi8&M?s`yrKBJZNGTiyDkCiegJb1TfE$~t<n@4lz@SJd zbrcD!BtYp=2viC%Z32VJ!)4^9kzzo>L!p1HCt~n8zrVX$Z9SPLM560vs~LD;33x2f zY6c!eu$tOhcS*p&2hH(r7^07-=nqS4ve;i)g2~9kU_bk%t|yQ3!r+O<D1y5y)@Usl z2y9c=&sQnst|S1H(RL&Kd4ZY}%FPYyy1v4g1h`4uvII!D2gw9az#5}bt`xMSe|d4u z1!MdvijlPi7_>Z&=s`dMeW+)ESZjE&;(7^a;XQ$3_oHyY1`8NtPp*GkCk0ph+9fb} zt&xEWqtJtrfG5fui&;|+$gN+(Zz)Iz8H|jBgDeb!mXec&$T^^p5ClvL2Eihsxb<q1 zLH;c5<Aep&{&oI;nDQjzNIobJtg0hWz5gh&KUAOrq#dyUlS>Ln{*8Fon*OgM-fTe} z6bXcm!ay7x9Hb#QX`t?rNT97S4stLI3MzvHn&a<9F1w||ez^VLi~R3I_`k^LW_&1& zGzN}A%0Q5Cge*iFA%y}Wg<~NIX=xY+=YW%iWB+D+TRZ!IGrpfn^dDyS@5cRisr5%F z|Mx1IGGkCUb+fV+B`MqaW@9T#{%h-Ruz|LlqX)1rQMQ{cjBo_y_-{G{*l6Xqw!JhC zhd|5193XNC3>qRMg9i2=2N`JyTn-0YZ+qEwCSL=IB8}Oy1;NocStv?c1_F1$q97<7 zuob|OXbc30LT*S)Z7D5^G|q!aFaS7FNq_{fqC8SsPFfBMlaiv?!oj7bfQfG1ECvRL z$-!l1kpFV!k6xrGBoVi$gZ^D99NracfFd~oOa!r-sR|v9j-9wxJX3WEE<terlgk8@ zr;8rS!v*W%sU&cm=!X3{Nt;-2Ch5-^*+`TD%8m3BYj4VJkhm*;BV+$E*=@86FwgyY zi1;VT+YsNn`~Q>dZHWKX5FsOn#$l!8qye6RqanZyfrL27BBUX5NVpuZyWkL5-1_bZ zloCbVUk(z$EFtwLx>=X`x5LC%i62n@Yu`|eug%|^%|$u!r;QUh@fUmNkE{RPKKh~H zSA4TIjLpn%y7S-LO8%_n7i<dv@Dt%s5cvh?tevJ1)0X>=O`chk-z?&FZJQOoscK6L zY&3;B)&mbrC7J*!ta<54`ZGTP30#|#|NbVuu45}pQFKtI+<&Tr_!krN-_o_di7Rfo z{gC%rpIIsQDr*sMy@vHAVck5}hBXOy4|flu^E%aSU4wV?CZbW4iB8iM<p>ax<gtHU z<mHA2MrCI#nzYVwHa5yO>hd-~)?7$Lcbl=)JEO7HqcM@2R(|0p0fqjhk0^I{SNysI zYD5fWUPVxD7v!X*H+uWm&Z+`p>-UL(1Pm@G1@Jlyxk03qVgTlCO2B~2Kn1KJvwo7a zHhB|>-uO-0-B^wB@>qjm%UW-gs~5$i^;;DRT>x4=*9UK4JAz3fD0|7zMt=<GXds#` zx+uGo=EejLmy?rK_aM4c=6K4ob-*|L1J0SP+l4|EHh+G$fpT5D1^9)9Ur7F4AJ%fV z-e*5|<N7(^=>qUrL-NOSjZH=bTKIqPSabe=Q2(0h-$wos!oT7A4c9+H;2$miU0uK7 z`bP--qs70g>;D*B41c^C!MXtt(R_gS9>8mq-^XtRek1T3f!_%HM&LIB|GyzXUcPby z1fmhKS3{jcpV)hDN9qB=11w605a}$?4iHE<C=f*BHf2adUF!RdKa}>_eOQ+j0wEKx z{=8)y*y1_27EyRxKn#<g5q{9G^|%p^DD~kMfh^jSHT1PHwYY{jpKV5JpNaBhA<SIK z>Pj74($NJzhKuHk=FW_7k4!vhSG~x@Yv;$YTyR8O?Gq1NKk8`UCr<|MOU|#MhFa<x z8GFi@cu`EQXL~C+>p)CTukRC~q6*|qGa-W5M(UF4mi+2x=D-M@JLtSj#pmNEl!jQx zGbeIB9OgjoV6vr~JaHt^{WW;%uH?1%p)m<EA7`iow}X%YPO72lA7{w@^!q}CLa#jv z4|aEB?yP<_G(;vxr{AwxQZI;JwHwYKCX>mv<Nn{}R^@#&n0U}<XFfVGouyV0guxvS zdL@!z5m_Uqcis}H=qnB#RM12dZpz@UFy(bUd?*y$L?FoD_;hk~cQB}K#QTjA-^lF! z>+gi)-sLR7ct{*VJQcieLMZqP1=5IFo39eC1I0)0UIzlP^PRC*Y6=8{KnEHC{15R; zB%hAs3QmkXza#%_+5?7(xY60J?+octC2cRh6TjiXukwPI$*P2JU%%v6>z*ChtFPpe zFYN8PjYbK3r##p6m7$90)e9FGX?NqeoigP@HM8p2Dh`%4(Ngp9(4B~pf|FIcAKdm5 zdJmbh+L^-DWGHX|{r-^%3y0R;w~un3Ughq%RbK3ZlY$8+Xy+c*=FnAdxuva(*_W2` z;2`2)OWliCvS#IEvy0?OvgajHG2<yO`3a#CLt~**h24-tBpkK@(Huz6#^B)<aMmI4 zLJu5F1=rrj&H_Iol>w%?*y9^Y{{q+b?qfj&QD*tu!jLQrjo0qON7}F+S9LCOf-i(E zoq_53t2Cikb64I;o#Ruv6uR$%N#ia|RExlwgh-c>XAqsjESsa`ulBG2GI?2py!>GI z@!HPAy~-=Hv$?0E4=M##<Y=p8P<fbz$KDqZ61;GnLtr0L)93^Re_ap_r@c9vsOCh$ z9|WReA3bB8Urou!0U#SR#;RI=PsXOiw-NaLDoQU}M(53ZOlcEGv${~Vtx(7I(?+t` z4PZR-WDt)0U+4I%+rW=+J&DkqI})U_`q^UjST<)u?DmkfVNQZ+D^H@<v~SX*zU=0O zfaS4TpuED#tDhechEFO>4Q0+KJKmTd_Sa*&`005FU)I}gP)JeQptf7zpy+OD*6pA~ zzLtY^H#!+IR8{o6Z}DnsPlPvz)5(^XtsXA^nq-&JW18zyF&hDv2<BPQHWojAs^HG5 zJosovvHQG{0MDN7F)Q^aPbzsDcOcbv#fv>z#d|SoWq0wym@gXT#1tEzRQxLWeC8XO zyrjfWW=pXyv$kLDTot=^_dvlFRT?c>mdw!uQaa`S!UL}gG3bH1SmSOQE??O7*gB1Y ziQ8XVl8agkd7Zv}`7+$GI=c#ezF3*Z8}^>9>@0-6rA4kv3BSua*ZQWB2<@U8BU=^q zfWmfF3jXdOnqa&BDWdfz{+#>I*ydN~Z{n}6tKl%AUg35k>5lsBc_G$Z)nW{%L4Czn z-puo^{PcpC4q%5dH|d<MCvTIj;*IUA+t|JRg*)3XlZGm*tzXIAI2|v``#w$Hp^iQ- zt<u`NZ@Txh5{6rZ_9~B8!^#mVmV*NwTnqvGA`xvbe9shEE|6zd-!0&|8EBIIT;~+J z-lJ+R>f^|J?%Y{0Id>bGVJpp>S>heVuDDMv=H>|{6GKFvC+m@t<dQ?y;^`-><c`(9 zhu5oz&Z*!1(5ia$O0tB3|HO@gg%qycDIeQ!X3LFtrDQ*a>E>S=)rv-aROLU$L@ydE z7vz-S-K9$?Hx>b7XQKppdDyRZ(j5eye}3DM&tu_X$0~iE@{^X6#l*dfezg~~tid5c zLIzbxp0;r?4Z2ra=8KH7^*mE7zaG<3BLn{ku;<a7lUytb^xRN?)^|z4)A`gBmjas^ z4IV~-<1fWvg_<l6xu)Ev;C~53Gh%P<LUj3ozo{2c|M@u^_21h?GBPfPKfAuLpkL^{ znvzv^{fxG#-HiDv#y!=+K&vWAyQ@Q#?Lei)blJ-ZD)vZTXklVQMAJJbDJRXt(K9+) z2xLiIdn>*MJ&;nGZu+S*{`U19-6dsp8NLUIBNNsxG@X|_+V@S=rn+4yd8S_DtiOl( z5=xQNXtwZl2KoSN);ZGRqRsc7M_ng+Lf`GDZt<Xg<aaqnwA%FnlW)sorw8&=*xq@` z+s`m&aoRigChm%>JQkH2u$m;4rGK!IQ_XWfCPUXl$0hePL*z3~J*9(ANM~UQgMBSD zLDvgk_jx))BGPZ(OK)wrx!2LoV&MZhYTIR=7?gJG#`!Ae=b<~~zc&_l@-8ou$$3-k zJ(I#AHZeRl19r7-PWQZ6dXdM!x)mqC9cMOp=2`3-lC6rwvM%3qLH5czaWtg!39PKl z$dxyD)b>s1yI7Ge?n>vYmqBa;5{rT6U#8%n5=b*=Yv$tX;=I8>T((}ek#DB&ZQwr< z*ZRfEtaw2ALY*iFZn)*+U;r2vtAbE%1;w*P6xv$o(Dqo~j=NBKoA&sN?7<H;4dIX9 zJUqu*_ciEc)`5(%?VO=cj|e1<ee#!nHq?#ws%>5-pSf`HbC>PBgKw&VEvhU0BznRq zj8NrQIQ!Mt^O4*R(8RH5?LBAtX+-Jka~rN1!uD9&4fRHbe=O>sIh?#WG#btDU{+9n zR?w|9bRmWOJs*hW^_xM)orxZg6HnHDNz9^32-s6js8nJr%$(>7O56i`7MM?WJ|+JZ zf2z#QmI<>PeKqruDKZmH$u~!;a-JepdXESsG_upMxZl;4GnN@5*PN}!3!Dr6Z0U6M zChei~;zjozXmnAZ>je&Y>R9i6DPzr_*{;JU3U*Dc9~jHm*Ub0IpQ+8gDcs-tZ7{^9 zSf^Y5v;E$?(yMb8&n$0-6Lam!D}a-$+vE5gDjUu(g~W-1ZVo@E;GYvnt7&iMLiFFP ze=ht<%lzu;P5zl4bS3Y0e;AycMD->dLKD8fL{D2}#Z+a_;CDGa4WCmhckJ^Aoc(wD zn2WY7f4CjkMC4nXH#}7T(Cos5a+G4T_{4M`+B~+R%OtZe$;twCAVH7C(9ARUMbNx; z(_G|R`8;zvZrah$1G4J9;Kmg6KHr^@Qr_E<cYG?^^I810r*$Tiss=mCSNiTsyoq>R z)xU>4QVYa#SkTQ9Jd9YL8sWR8&2^L9m*4O9E;-47P0{trqsl-qjm8~|M~U?*8BdM{ z6?GUZYs`DkR$nN$%1-rHax;qEQIi3Am01TAy}ZNcE~S+j_;i@j>eqQ?j?swDQ|<E7 zF&~h&X?gAKg{X@CjZ`0V%%q%?YRP*q@<nP^Ah<a%!ZWNLr)I{EiM`2(p#yw}1E#`^ z$48Q?3j!i%cJ=5E^DF^Q0>{lcdVAVR&yTeYXYbK4erHRG(+*bL?KEN{BCA8e|6U-i z7J$F+ANVi$S?0f)-sB$#kf289Lmkpxkg7D6<GwoL(52o4;soK%)z)K^j<-|6yFJA$ z@QAN02p)`FsCTUHeR9DNg4}zSsmynp=|gTjL%vWi>xuT{$5g^2+5R(;Z+Dl$6E$QL z-eV2Ljy!&o@t}vUk(Y7g-sI9}uM4LpzXgapRpy<-T^TwIAx2JG%}7N`ChvO0NQve9 z8*K%h$(UXP^&~CMv#ZVCgT57tCzBo!uO;5UAUx?bbfO*{YVuL?qBG9hnme_AY<Agu z>gAA9ss4drlKqYYXDgZT@pm|@T0l94_h04+%B0Q~%+882K2jUs8A6)u-=;w-`!X1~ z_+F{yk+2sDGR!v~*z)H7RW4fycfET=xa=nf&B0fQL$6_Z_5Ck-`29OX3OW~;R>|x; zD;lxiLR=P_ylMeISNe*|s0W$t$Yg(fohY^2U=Oy~wOiGcPF48C!FNtKF{jgKWx-%M z3jSpvT4^g&V_$#F2LJ4o_P5MO{iy$Q(z|(?d2d9T+>cyNuFWHi>ZzuiT=qW^nYQG& zKVgX1^u}|wri+440$TUX-s)WH%oW7YNgdi&;t{L({#oD2iVxc-J}F#rx;-Q{#$Ay1 zY-Chth>%j>P7R0KsOI0kcB}?#BzncYbdL6eV^4KT;RB-pX9pR@6mzlJFf{Doc&IUv zf_$WMeGo&GqQ3t3@pD13!qX*DuLzI!2MQf4d#ivM-lIfiJOGc1HagTa%AVuH@I@|O z{$u&lS3ct0Z82Z&$-rt>8`VQc?$8*a_QT4f$L%B&u68co`CKX@*o%IzQ#QYsYC^{m zYLOb*ousu?2Jz^aj2=PA<V18A+K8Z3c;E7#VyaTIsR`?)dp0GmfuWz8O&L~bpIB91 z9LndO)|>BvbemQW%(7BkB@fz&Xglko>=>^fyplbrnP235Z(Nc6+JO6w#Im}3k_^{& z>`OjAP~&KxMZv!^kk-|%cj}M&-?`tBg8ydyv*oAwmAdwSjH&T-ns&VL9-=FL(eMHX zsFUWh@dp>LJS>xBCE8brZa#M3ID6_X!ZC^R`zfZ2{NdNnvo;PetJi&P%p?&xBt2bC z)5qQ@f<trS^dkH15TwW3&h5C!zo($L+#+^r_2h%TqrH*LeHs0vaI-RQmlDnXa3GeI zLaV!1)2}xK6kQ3EB~B+#NeD@Z^Ny8ByD~@5DN3ZNz9?ESoYL>f2y6W4W4}1mytF(H zZ7|<=^F++airk<lv|2ZEL1QN2bEi8Rnprsy+lpRO^^@SW8d0^fSBGm2C18Y|1w+|G zV$2h18_lk}oSJ^Sm%53qN!>EN^^WW_NQ&pQy;paCL`1gDVohnPy=?Uinf!KW_G8@~ zRLq%hyWQ{eOP*Q^>Y>bfo!v#6KC<MMAzP3r_t@|YnW7IW>S2#pncOd(f6Yd%)uh?> zD)4RL(IVrT(F>=>cxEX0*MMkMEqkZ*{WtgDoj1;Gt^a_$uN|Iy{0rn;Pgo3G^XSRD zA^uQ##BJ4l>HL}YF`vlR=N^TElXY*zu3Dy7NO)1@zujGBOEsirlhk=zVC>sM)I$3Q zuaE(z+R!~b;fm=BJvPJg@dvKH_kOERZv65szkDI`Eq@ncZjKF0HoIh1ldPniAWJ4s z>E`xer}4=g4Tm2;R+TI7QphWp<RrNx4$dQLu9P@8weI_J*CzhT=g!VO$s)Fg(wtm7 zRbiinXe@$QF-)j1EwS^+&|QXN`B%!EV&)=7!M<rO8YLeIW{Ho@s9Bm?RvApZay6+S zF(8$<(rk`lVP@N-Gir#gr*4?nD;d0R8sNHSZDyyRHsVs4@ReJdW(I9;wFJz#<k~wf zojHZY3=-F>qWQX)ssqUU<W&WQw5JUZ4VsT`D|5fDby<=;<z4jQAlthm(xMMd+Ae9D zBrw{C3p4vAyt7-;DjplQ=a+AnJ=I0Q{~?H0$Fk4G;t%{E<1O<we$>COmg*P3)JU}| z4hPL`qVD@J$Sz|Xq{zEE>_LEZdx+@OkeowDUE(!y<w)CP_Dao1Y$ms?^s{q5BBn?o zEC;e5%_bjLwL8vxjO0aatrCCuKv=dKV=j8UVz{5IOs-x1G9EVRFaK&ptJ409Q#5(0 zfK2{8%zN*E{`|{1w-b?zUD}ew@6j%98J8jh)jpeWUDtmIH)*hC8-WXDDhCO2eiEyE zbo2WepERPvxzqbYET!D_TJ%&iXx^v4UQ)L4s(qd+NGMo<PfBT=7AZ41dVb+?v#!{c zqByf)i_;RelV&@NYs!Xdy|0I6+7@0msx#o!Bt2+)n|u1;e7W)!i5=hDUB}J)$`@9r z{1kX4Ce66y9$LK;D|PUYKfcX}QukzWgeuaaZ$xdmcYG)WbTIBNc}k{hQmdkF*Wnw? zBf&JhHTa0-x`~eauaAB-T)yPrt!&*lI~zviXg*HCzX3#RVr}NKrT$C3O!Jj~;J-t( zu4O=%@g56$Q7^XHvnL8)^WAQhd2iv4iCE+3J54W!HxCy-pWMcCjk)_N{pZ*l>Yde% z4Jm4;1eCIK5&IvY@(m9rlu1(a9iDypG?V=f_taN%GkM(JH$b#*oa)j?!pIaf9X1ia zOo?S|I?QAVYMkcA-65MJs4A3OzEEA-zmto5S8^ep*1Z?|Z@#yfC?30eoo%^VG(EU> z72*1AnA8CtU@Uh3q|EV&(~5pB56&7aG^edT+@5k>?r^llgl@YOy;lyAYhqtNRX2y$ z_x+kDRf1$J?Ih(CPdrF!WEEjBe$ge(D5)JB%RwqW63!gA*jPm;{Z_lDfS^AyRdot& z{z%5*_5C!fk&e1AvKQxQms>n3-mdzOIo+c7IPr3zgrn0$D9$EMCKE5L7HD3~^@xk} zbm%*JZF4o>a5<EIrWXQ|Z#`_&>&Q^g7B23_DHy5(`l>>~|4|_A5u2a*r;xZ6|GUO} zkJuQBC+sP|r5jeJpy*xG(p6xl9{NzjVOOQPn?C;+A#qG<O!O{+mz@fbGp}oHy)n)a zpSe|LppAjwCG`q#=<fM+xSXmm$t*csYw_Fs@K<vG?y#kKZhW7e@$RgG(#QZxFiU4+ zjvR+C9v;jvLY#KwAysFyQNbNUqsxcSJoaW=4SWMq>%7cTu=kFg?1B4`D5G)z!>IJ4 z&V8fTJervu(YuY+Ea-A22&PZ?Ip#wWq(gkRmtFnp=Wjv4G+gff78-opW|)QJ40BIO z8mB;M+loGS_fB=YL@U$KQ#=n3P1u^B<QcT=4KYFFwMgDF)=jZ7HO}_mRuN9`f3Ha5 zgp0?i`rZYX)3$})<y771cOwLxOWQCt?TeAM>7WAY*zJ6dAx?37Oi#O$bySg1*1LF_ zw|HUGM4Zt*^&QkY+<bQ>EGiW+M4_`czb@oXN!6~B?JX(zHwV%>+4W69{arWapIs;) z(+_{lpXZnZAMV=Oo!OQ`uVRKs6`vU2LCh_QeScl?a@5QHyZS%4()YJsd2ljm?z#07 zfq_YmQ62eq>Ow{bf>pRqr}T(Y$rFi)d*O5-e%)`PwsbbQ=R?+9tyh!^-yM4EU$7eY zt$Wg!A;h1f&6Io20t&8)rj}8r<bxdF?9nzb9#!ePa+^v-=xX_1Z8#rwM*?Bjc7|If zA7HLk5$$un0`Q3&BLhvPwbT2ADtcGA6i2yb4}fAr@@;IR)E1v2tW2WOT?+GiCJZvO z3X`m?4@8A(H^)YzYUN5tqtzBi5B0HLz6_DPrbkC(Io~?%^ug-Qb?imwbIZZ;w<3u* z-=z)7)^vXP(zJTJ66f1P#2u5#8I6vx;u<`6N=}dB<u~$|1p%*YRc=8>Mx!GCK+w&1 z@%IG@!n(rF32yS*$`Sqeyk|5aVyA0rWyu$3_*Q+t+r7<wF%*>(SCG2K|ADloHfB?j z{%)J|r=gE|UiFXr-+*0K`;u5r>>Fqk?F)Ke+{uK?d5<>#U=ja3PW2f*EpyIF+Ca6$ z6OwVaWlLr$&c*biYlpF+mS?VW-u(|}tQU9;v_^(ipv4?t;@GPBtX`Pi%1v#bd|_Lf zKesxjoCm+Z{Bi|4)Yg<~GH~mO-|%#bd7cX;F!E~oO3k~n(%jGc#+A$%v#Oo043-T- zie&dQbG)HVU*NM9E6hV!49pb0?a6tam%O-owag_K?c4Ss2w%b4{Q_jnbL&mj^K7@! z5Cr0A)dQS^TEv(i<K%m(n9mGn^E6MjUDkQ*yZwWn3JP-Pr~rYa%V_MntH;xaevlLv zZ`OF~#a->j#-viLC!&ea=wV3+p_f$b89FPPR6V0`N{?=*_H~N~yt#p|cfR2}o^04N z`F8h_1|=onp~83nh77MVyrhMs{b9dSkmzGVxwUI-i-nqsDnbIq{`Cc3xj!MZFj69S zgMZ3wdtG=MHtV1JnU`gr(saef^M~zkksXLo$;2VYQ!mZmcb{Z-bd?QtPZ>pC3s$&t z+TOb3U7M)>J9-79dUsr~RdK<=-t;rpCT-@jmt>FSAD4J}^6;>9p>WdU)|xzV@!R#E zY`Pphoq3;TS{6sNIfsa25z;eC#Sa{JR{04TgdRF>QpEPW-bYA#B5J9@>}2C!!Ik?> z?nAQVSMRcmWoD(=i%FbugLlhb>~+6#y!E9=hI8Lkm3TbPq{UH0+|<q6+qz#_uNZpA z%fj6zL(?=~zg<u}i!Sxn)8N#)bZt?VnBC{Nm>EE9PWR8L^2I!QeV!j0WGNU|ma>-- zM8{G=XLn4!OI;8nM3>dSpJQ7bcgB;DNU_~vTAJ)M%?2MutaGYT&s9S_;e+C;?CRDW z#^WluByl>W(4fGs674_<ZSTQXrG@w8vtr#%ZJX)Bph@(}PoI?B4CE-3?M+M5RuGDG zgAOsGl*RP#3qD+X{twLm_LgQ-tUv0XQyXTSrv%x2{zLbI#x=2sKl06XS_7R%o|pOs zsne1<^^ZLH+dhj%JDko@&^qzeO+#c%MY^z72RW!)F5DuL!d|aNcVajy&qCwbz@!kZ z=P4hZ=0a13vc;BMF(JcyZFi&d)Wfw(%i9YrJ_%P@q;zDZbEPw9J9_wOm6e|izrI6- z(gM1vBecV-UmMTql?z2_4QTJUXR|Gt=SX~vFihb{0u@w++h9)bC_mw&N%!L`?=5d| za`nAcmUzv!gZ`;C*ZCgvojW|cLaR9EC3rPNlBQC*U>y2An8*9_Oln;#og>|KUJkM` zebDNcb$=g8!06w4+RK=7zIZg)ayEgXdG?K{z+J(Q@}-SsQt>sSd|`+bw8$*sfd(Ox zIY?-!8s`}j3i+5Jk(y#-V*#1fVwq{5;tF+5Y&_k2Z`<`ol^o@xhjIJEwp5c~XD z(bp@ZrbYQyC3k28?4R(xf+RcReJS<d1fmr`-s8gR@5)lQoAQ^(JE=4@ZvDYO`zP;A zR6TjH?}F9zMePXjL#MTJt@4!_Y4bUBqh)fn#h5N%wxS8SF3RJf&KHz;S>B^mH7r>% zs`V9V+22^3r!AQjj7vXOdLhhddwT<NV!!)mJKO4OHpOGne8*l4D62Jw-za`1+0Pds zZ=AY+<wje#k6<&J3wTOmLlDq0HN07R<)ltOvt;b`Pw@_|Y<29#NN$g^MsUA&ie|yw z724LLQhWiTMc-W}ZxqYAfgfF@Wi>WkB*l)dl+)^)rY4xrOP$$v?Ar^YR)K3dd4mw= zPCZ?*ThcbEa`<}V{RE?(D51WHt7S7iXho(7R%cG9toWBA+>wX(dA*TlbuNoMko?Nj zZ7Ry9RHREtH?DO80o_ji6w1Jf>3i&eiAm1JFkX_N$~j&pb3{O}Y9<D$p+<dZH`pa@ zyY|J5EV>o*3)UryW6d{`G>8!mPhWWlJ<j;tKUu=o_LRdKQ%=FZF_3n@xxvIDdh`B^ z6OU5LLqYDbgD^BeI;szOTOJcmd6D^A)KX)CHtS$d=V^)iXT!}NdOh0T+j>_)NklBz zHt6EjWh3SAWQ8vgHy27%QjB>o6)3^&I==1nBUL>)6Q8uylwMxc#;P+T<Y-7mCOf=u zw#csBYgjUAY9w$~xWsWA7;PzDuOv9HApMLd(&2=g3(Mu!B;!Z~Q<M9Jw8^L*r8G!N zY>w{>Q=>p0P(74H{cuj_nO^Day~078d_sd&SPGMPc6K~7m72}YV2x<^NiM}b4|7Pm ziUJqH^#$ewRe--|zfNhY|D*%J|5+eSyWV3L9<<YrK%Qp+;LL&9dn4X3s_X;_8UXLV z{*&DON4@}|{HGs4{i`elGN^!b13{D*?rZNKfme_cfaBne{r5jThX0rSGf_SIKj;41 Kf3Ns!_5TG@tm=6H literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/m.mp3 b/src/assets/all-letters/letter-audios/m.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..60f290503234946fe28b6b7ecf657f1780b38203 GIT binary patch literal 18678 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/n.mp3 b/src/assets/all-letters/letter-audios/n.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..d911039ed3f86f47650c1b2164411f30cb3693ad GIT binary patch literal 16759 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 X?LPcZw$DOc_ups!!hfIe=i>htG*p6o literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/o.mp3 b/src/assets/all-letters/letter-audios/o.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..96941cc7e491e8a7703094955da322360bbce963 GIT binary patch literal 15221 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/p.mp3 b/src/assets/all-letters/letter-audios/p.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..f151fb0d1637d7fca367a2e01690fc74e6e8efe2 GIT binary patch literal 12916 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 S7woq1-)Fw^e@EUe{=WeFKcwgY literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/q.mp3 b/src/assets/all-letters/letter-audios/q.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..a16e06f30270dfe4271b8f8bef6e1899ec436bc2 GIT binary patch literal 14836 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/r.mp3 b/src/assets/all-letters/letter-audios/r.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..2d6c1996b8b32f20f5faa5402af797c1a8855176 GIT binary patch literal 15991 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 L`S<a^H~+r?@J^X- literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/s.mp3 b/src/assets/all-letters/letter-audios/s.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..d4096148606dfb9b819bd41cd0ea076af107b5bd GIT binary patch literal 15991 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 K=i`5`{=Wb{KTECv literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/t.mp3 b/src/assets/all-letters/letter-audios/t.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..1002934b1e20459e204c71599aaffe9a5f0dc5f1 GIT binary patch literal 12148 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 Z@c*m(@PFApp3AI1&wS1QoqxCZe*(dXQ<wk% literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/u.mp3 b/src/assets/all-letters/letter-audios/u.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..22e62564c220ef018dcba19f70169219c4807ec8 GIT binary patch literal 13300 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 G_5TJ>{$Gax literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/v.mp3 b/src/assets/all-letters/letter-audios/v.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..9708155d9f88bf1d8ac24003e91ec3a98f2d4767 GIT binary patch literal 16759 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 E01p!JHvj+t literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/w.mp3 b/src/assets/all-letters/letter-audios/w.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..db0a1b9ffd6295a5cbba45da7ea944e2e353440d GIT binary patch literal 15991 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/x.mp3 b/src/assets/all-letters/letter-audios/x.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..4f25663ced80215b03405c6563e73f20e15a2a57 GIT binary patch literal 14068 zcmeHO2|QGbzn?_e$}Ul1tfd*Vn-OJS(ja@b%yNdo7-q&AT_v)IEKw<<vUN#9(W1y! zSGID~c0-F)ly>#bjODL;`}gX-|NX!BKCko1<ec+czrXdI`LHxWFNA=Hk*~uRQ#<gN zMc@w#fh0g2Obi`n&rt{r#KDqiI&+RhAaM{|J4+`BWH|x?aUt45^frVAk|=%vM~Mu0 z(*yLO&(EHRD$%L>P-iR=K@2noeCQStEWkd(+JO?`M<Gz58`cZ!h3SSd0vP~@q!h;R z4`Azt=|f3WCK=ELf9GD-hAQz$IDYz2L+%YFP??f3lLaVY;W!utiNPxA5a3803Xemq zRRRsiYa=k)NCFIj)J5QRF=(Zk1G-*VNsmRP>Drl?%_sxU^r1c+PN1%~c4%lQJQNLQ zvb;fN0zn&r(ng_RAO(ya9>5`m!2;MSToKbUOaL~8MGxfAnE^^%nItkZn4=Gcg7=kX zJz)eAiF4uu*l?a-a0-*59YzY&M#2%=42Jf64mQU$1Qar3&{sLw4&i}-wjID`2D2!D zX$TO&QTbAY9q<pIzC#2^{)GTA8sD~HzBURAAaR&1Lk^Sib*6a)Jcs8qgPKhK89t0@ zd`!XvNDMlK2vF%@BFw{<N}1Ca7|inLMU6_)2K)gAhzJ|hg`B1bl@N)#mH})IDS!f4 zn&?BpD{wlUs*9x1sALinfT47dco+eJA;3rg0Rsat1R9AzMc}DODo^FK2ookHm@Atr z0*}+d<FPm_j0XM>11J>m15HA3PcaDIfhNymwPDf0f*|?N7s0iH3R;0cpfFT21`k6~ zbO0Cvi^0I~C>#|=0LVBb4naWZQ0J`BC4%)pC2>e5Bo3et<<=++fq|h=4oHM9T1OX& z&;k=4ftXdTOJq{%wD9kxHl7Zq1C!}LTWYo}fI$bqQnO_-m5hyf)dfc?X*$ybsLW9I z>N!n3Uf^q*kT_i=@=Lo+h`OX;DxGOhVg&jFc06Zb$XQum-sPsdJ`{<w4B-5kz}SZr z5CHg3Q`mDrGnw;9z<{$j4s-@!Pa*kp(ZYW9CeH+WdIVPqkAO<ir7>9y5?F^sTQslW zmGq`lz=F;OlRcc<17^B_JrFc~Hr*8b>AYJ?O1whWB~iHTK_AK{g#gn*1o@_K(dQ*3 zK)|8UG%OW{qLOJaECzvs>EIAF7@2}aPG=Ji&oga~JJbgN#eO^fbHr>WjT1^@0fydS z_Wn>{=R{CIq`d*KlWRk@zr$Z%(SOV1*%HKHkVpy!Lx$1tI5Lc&gVBKzuoMam2T)K1 z1QJ8V0JML*=ilSue-hDI|8M{bi$Re|FgyZ`CxMCqKXfo87>PzD5ok0Ff<pNB`}akP z{$OOk)9>$Yt#cXnKbO(m9fR9bXER$*n>)^D3tLb7ucbfJ4J-q^S>Rmaj+=QM!HDGj zPbvf)w7T=l9!sO4DLP0n@6l8+<#7}&j7$b+3W`9RDSMsiPR;{~%T1j(f>0Ei4uXWm z!BAv?n^52=K;bD=7>$IV;l`l<Q94|18jH!W1$&}Clmm7}U8D|yfWZ*Z7~aI9fr$#P zbkpsIs)IzLFc>gt!L*%!<4b`Y<~(tT?_{FU{Q+AN#|LagFxTe|@xy!4A0MiI-jINT zGXno)F@wbRBa&Et0E?{;wPpqYU&d$_>e(3mIUqA}vLyv@zG&LBd^0`VpFR_?zbtk$ zl>)AFf8HT}Bz80G^N0VB1aF4@TRQ}fK%s$K3l`iQP!yOB7&#bO2aSah@F)TqN2Q?w z+Vt=PGl?tin|lPfN?`Ew=Jg!UKiwtfbId{c*RtUX;;rAawZ*;gr@0AU_{Qj*yZc`) zqd5UzYd7=Vn2r3bIsdI0I;Zt3%@zdUi+%&r&ZhGh+r}*2yvL5&HpAneP2y>3vl%`s zYF-J<6om=EqJv9`8Q2qezOp%gZcktUd290b&**6x^P3b`26xH*Q5no{EX>~}YkG$3 z&3pRL4V_+DxsNJ5kLTY5!Z<(xo42dM16hGArtfs8n@>Xz2w_r4+=b4}pX3cTB<)Rq zB?=CpfSa-}K;caHICu9A?k2kKVAT9L%s}^%1Es_1jl*dvvs%7lCxb-!s*R+;K!5tQ z0me)!cU?tez)~k*ursy&bz==dw&}-2kOPS#U~qWw33;ZGa+3jEx4903CW9HkLuUFS zhqrh$m?8ApwmU;j4QBCRm`58z@(%_rn%PpP`PtKJH#m%t+Gy@1`BLZHdQJhInJ0=n zo6KhRZxn%`W5Qwva<_Oc*)-lW=7HCorqv=4>t_Fbse|OtdjR-~hOcmbuMNDAO_$l1 z#W;Npe769;)X<)Lt1;UU!NUF<51#RVqkNv|pGtlR;h%8*gzJY8_#xt-+4U2yA41@V zh<|3+zYH$ne|#?j1c0y5Lcwo6z%NmL9zPNIiNH?;ej@M_fu9Kce?#E&hfFUBguigB zdC(3k9|%M!5CT~sRv!+FQ)5I+MXTFFAOfcGR0m}lM_H_7t3cdkL`BdJMr@X6g8_eZ z99}v)4#lUWIj}$+LRr30S+su4SXuPI>ojsQ^<gDNnzD@P!2JwJGrBM8amH}z5!sY8 zo0AN7UavI~bt&K@pYD}L)D^_G-m<kN1zt)|yrl%5lQNL*@j`NNL6nw8I;2pQ6rb4a zCm;mX5;cKq-~|`S@HZ!y7h0|<;~>MrR1YmpYPHT+?3P`QQ$oopU{pP7l2s12_3RoN z(GZ#3CfxS0t&OthR?Ad~&6QxO&ypW*>8$wN>5jWW9Y0hwRaK9&-LYih&8McS?Fq-) z9!k{ey=&<{3p4R={o|}$BhE1@AgZ)qeo%L~26n%{|9x-9CSOe@FipJjsH^);3sYmq zMbsaW(+zgFFl{ROH{E5MYw}ed%5Tp`i8sB6kC&)3LQ6fL5A_wF4qfsw@=pG*caPmg zZAtm~{!Z=lus2-%q0#&k_IAzs_k_9lABHTD7!MA*`8pa@qIL=VXxy7x{z?CN*ylT$ z(Gw~wH20{Cx!heIGVCHcma1@RA@s0whi~`xFmabWMLEG`8nWIp5v!&~^{eAW9-g$f zg(8pL%6Aq|5!$?X!KX5>+#MMLqIZDIDGn-p<e2a4XT`qD9K+olkKW9YRqonN5Deo~ z>~&iv39(3Ey%SxlUe_XJxJHa}O8<EHo=bz_sjReTD~l)Y=Orh_stRS%ulM>?v(*}N zh4)fZ>{Z)_;twkM-*_b+GI*HWLEQ5TgMK&$y@_bvxa-=%v%%|1iykezrf6~V=3Z7p z#L?I9m!>#zVEc09>byKm7sekiAMB`wipw~v?&dRyH&}J$(o1L&@x0T7$H7CQzaG4M z<(F4)esR3AB;Qx=@~{-zG)?W&*l=fLfwQ2jXLU9O<|${Gk6iClRBs$-+|^|ucSseQ zUNULkWSFf`#Kx_>m2~~IVX2yLJtD-@$wnjBt!UymQ!f65XntK6&o@Xf9{%?r3nUHM zQ6mB=@gV*ez~XScW@n?5+%<AQ>e_m1|Er?N7KWobdz2;KEV)0!gsQfXwHoolfRi8k z+W5NZezDfUZs>F5MoZ5v33-m{zh7B2v^Qp=Ei8?AbkhI2T9(k$Pj`<&U+0vIJFmj+ zs<-r&Dv`)pZfmLUx!uADFDfLebP-se(rZ>+>%|-!wX9$6?0We@-Q{w-^`w}yIr3`# zZA-7Mw05RR@ioP3rVlSYE0fdpx!`afgytO!mZ@*)Mt<|1@1d2w_y*_jSI?^}TZrDY zS~Py^yKpVUNsXbaZi-2g4e@$fG4VZm(Un;_3HPZ<*$)#au-+9}W_gaH*R-XuSfdMJ zwgP+`Wgv$4EUdkRMMRe=uZhIU+@P7<y*v<CIN;n`QAn?Gk;GiWukqA;J0R<L%1f8f zzCz-Z1*e|FP`8m1PPpySH)xo4B=nuvCcM1O6;u_YTCl(2^!>pD3HB93-W757pB`}W zca7#xalJbpV?~?kKhm&mp)E_szyjdmUq_3ny_hX~^TBDvrr!tMRyG;o%FWA?Iu=HD z{>E^6f^r%kTmQgWw#QFcF2jE}-y-R2HdoOeVv+gr4M*d~%?|qRx*gYHhi==V<-+vT zJCS>{bRt+Qg7{KO_Q0@p-^;gU+N368m8bBE{uf>9?XS+%WO%>MLRI7~VY-=>e;B-a zCI=0*53p$2S&!L=wLNVWm>nE^+k`NnW<wA?J3N(FqNe<4an6)hkLafTt`CZ{G>E7` zpAE+{(~5FrjXp#PJ$d6Zb)tzc;~d&?eS6hVe8j$tB4>-c_4OZso#aECCZ6^_8%^0_ z^(n4qX)9;fsnPNZcdzDr>QwCwiG#*bZ%Txo^em6iWV+N3IC|?d?u_N`MX4UWl~PcD z_>X-?tJ2H#8O?VgQoDdKyEh|dcUhJ%pkYWe(W9lr$@np)uuKc}#jASLRL>k~Ta$db z-D20pxGs%F-A26_3yVvyx%e|7{E=>+?_wzA8T=)qf<i}@z-IHGp|XSQXjEn@*Nv{& zEpKY=hQY_+fTA^y!L?qU(#~Sari*NolceIaC1M^W?`$#INj@&ojBVYVjwsIdkSS<{ z`ogseAR%$VRB(!vTCAze^ia)u@lK%iR{cba_;7(D?djv2v1UrS;@6v+Ma})UdZ6Lw zX_?_2mN`1x-FvGu8Bry!*PgLDKE3Db8S-<3A352bE9BOiyH3na&n$1)d#UP)T<PtF zy;cHpXj{8*6{>gpZ#bacZn+{3e}-_b#x>oSe3t*Im{p8Z)4TMbaDeP+zRtA#AZFN} z=IL;$P{<TF=xvA;<cRnjST1&abG#&`{Js0Ns>shQQ&U`t)ng@i-un!dx2Ju>4tW{h z87@6$yj%q6)U4KCU1%7X`yg}6A)*5EAu|KbhG%vSklrTxbnIIeb9!H%+bM0AB~>Jy z=8y;Kl#8^E*1(S%f`T75dnnpti?Y*dy1Do#LHMgYJjP=wv-vL-#b6JmjLqU7>*btl zJ=`^kZ*sSBG~WA&alK$e4Dn&$NOwX`ds%4+RL%9X;*!!0FtIj%^8G}Odq&CQ8>{2? zOa?zV^d$R&`;A2#>94HRVTDI(l-8>)Ry}#9Fz|t!O;mf>hv$W7;Gc++Z){`~_h?4C zr>x_Xm_S}QYO#ozdSXk&sok69wq6Tps!3bVDcN@NT*6An#IO+8m(A9iC+ZFyC#U)0 zB~nVq4Qt|n!uAPEORFovXS-0H5hp9xT2}zT<qNr5jzNM^u9B%ofu=2c1ImW_ut(+L z^}m)p&&R23F)M0slXqFYDoy61!s8yysb;(D7q$ucXGY*QXlU(mi^z{0v$1jBFzS4; z>&e|?e)3USnXTRBDZY0ncZaeb-EQ&hUDxe7)zQ?}Q)Z31?v+DrTRhPfpPW5DXmS>{ z#a3C+=f)oAVKdu`EtG2!D@G>|b?K$$<p{<sSm0P{yBe)1vshD&i~nH=|5XpSpn3U! zG03k)Ic2v0JkIi~pL}vf>r+nW+tEKz6^gETQrRmP8y`?xP&8@XeXT#kJID=T`%2jy zso`@--rKCAwY75cjPQzgrTn<5hWr=%-Ie>?@0{q!#F<G`>>u}bKJ&e?XjtS%QZcqq z>zEqr-1WYCBSv!Rfxu(E1M!_l^RZa@V5=oJ1m85j$~a}v{^)i1s!k2yW=8cns%QAV zgze3f@rRErJF_hmkd$#c5zoKqk{8?SILhmy{{FcA6Z_A7m^z1f6LPm!&26<pCi1GV z_HoHnn@;=Vf$?PbjcreR%*p<Vzt#{`56f%lt=?NoGx~VPPA@GbIcv3_+?v~Ne2LO~ zc3+l?Q3VRqU%_)~b}O#)lhSJpSkd*awuZGr<PO^Gz>ukHAo<kwrEi2f;r`MFFCVs; zRNeON+w+@7qWnPXg*dy4r@2lNGOp+K7VZ;hHIP$^RRLs`&o*q(ij4God+XErsr-hV zT5~S`ry&9c?k+*`+h+TZR3mfi<=naXTkOprop||;v!Wb~-gBg>HMy=$^O<U8SjUmF z_PrtT#y#dcA1$kk7{n0PieD4<+YP*SA4}EWXy4Rbqh+OWrQ}Y3W}9+-)XToa!gadg z8$&wO*y<iZHzZDYJ-TnZZ=<V$%5KeFJKHo{tC8A4{M9w|eL4P{yI)|fHb{oo#bqNU z9P{o;D=xYa%_owafZ2F`Aw$_&JM>0bMeI}k&wFFvbZg}6Zp%;Wz62LuJVMMb%Swz} zsQQcSTQgsLrRHuvhswgMi`bu3p`R#za)USbV7(e6FFE=qbXTOm{^<Qep$~x+c!>$g zHWm4ZXl4fWY0w(hR5w@LMPChTZ$+wHNIdt%ELemhsTr(LboB9MwYBZcGAW5ympl7p zLnAt_zPG_>FRcoz3{9$~B0;?Q78-2dp==<%Chd5+#Dm|(eo>f;di(VK*oN#Nhs}RL zGF0O$(}ZEkRf-2!%f7YX;(rk$AnM^9q(0aGWeh_dFBi}CpQF&5z;44;BgQLYlS5Vk zxuyC&z3o}+3n}rZPalRQsJ?PuTt;_5N|$ZKUR|1ZHd7}1NXa#!y>4b<SLGLGYrA_4 z<qSTd@4r{uXo??bZoB9w5gD~yGg#!lPiKiuhHOmn#sYJ@wLYnmS}AIEQ&!7@k8nf{ z^KwtAMty!8EwiZZ!gjIBB0_>jdDbEKCpSyuBui_yzG!rO+s7s?kzcEU5{Zrs3prU( zdRqMt<#Y!#d*5LZ>!W?H?gf^y>r}hp;tOB6J&Dk?c~m+{%pk&Dla@G5hOXR^&~V-~ zV5^?Ovol8CVfWn{siR`~7g@cVEU`hdm}OmmXqBG+J%gRt!RLgPv0Adp0da3Y%~IGd z9p0VcSmIvT5#N_Bt?ob8a<2Y-a}j-8NRWiA;d!XkZ_Srg9#l?AG}WbV(7#rnLn}*o zIyq5KS5HcZK`o0c)&{QKsdMV6Gg44FK3wq_7ymYhK)9zvkoq>SnfWWDA8r|^Jh%Tu zpG1je+t)0GZ&bUrUve|_nQ{X$zt1)7b+PopRH-*rtF*G#PK@LwS-kMJK4;hBYFp&B z#d=s$gXWo{pyTbtluwA-l*po0zt@XO8Q`P>Wb6AU7xpc4zFE7@)+lm79{yZm)2{`O zYerVZ9`*=I9$)$dYLc#2t5j1id9grqQz3Md)q|5yZr^S$OIsCuqPV{Jbn!p{IiRYb zP~4|;$)OUlrXUe{Y9GRPL^nO$;;bMNu1+hk{ngb0U!`XIu-~fMc;(v3sCYp?{)pcs zc1%f?T^VJNU)g>1URGNCd-iYAqwvkraJtjGL&UBAjXfV*KZsF_k9bEh%3N5t5^J*T zE*IOL@T_ccKPlNCdeYftlH|4hHT}eUT=3+Xw}(x=;|wLF6D;f6m!_JGTY9-a);h7x zPqRhYY5&`Dy<3D{A+J%LB7D~kVVnTkk8&L<DG6~m09M6xzV$xaXUxUFJz8L$>*n#e zx&9+_G2C<nIfp;gNFn#NNSfZ74st^kp+G!U>hV5Sd5OcZ?h%#2$Bm5Um+ZZd`n@eR zz3RtChlWx%K74AE^(<{r4L4l7?yT?5tIUPSfkxVGpHHc4{03@<T;wnLS8bv16H{zp zurMmEw@+(s9(ArHJz3TGtB8%m61)B9jVw)>_vsh9t(0Yxj<%RT={FhOm!XiQ(k+^S zZRoVBEmjR*j54urzd4c*H4<%gPq_Zel74av-#8n5c7D|0EOfH&pkz-`T}`o<#l!+3 z|A2txj^a~)5N#V>Zusx9I92j~dpW8KF+3_F94izqcc8>sBPoi$VCs7NzJ8z_aGDfe zslCr8w<_WpMn2MLY^%7JdHj=1GVNApPrYfBy!Ojt$>+&%M@izT11YC;91?K$rbb!b z#;oSzkOzob<H*8CEVZ2>WIK5AeK8%80kzbu4b64k%4YOLw%`j06n4<XYS$}QEA}=n z{#T;~esQx2-!qs0()XRwar$%phg9Td6B9|k<fCvQPqa{4ax+P!XU8fd>!IZ=X6~j! za%$Ykz2X-wmZ>@HcEHK7{kN>B{DAA%wz%4{dFin$qcQHzCykTFUc7ttoFNi&ySn0G zM6AN7Zj^uj(#Goho;4N0qvJx8aT%Zgm4^}p0+IPw3jDidf%tbp7GJP$r$3*|f5_nl z^3f28=FIcg-=+F*mkY+=fBOOEzrp8d;d>CPXb41brvHPl;NYO)N;CNXZ};K<vV9JQ P=6|30yuV%hw)p=5O7_4e literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/y.mp3 b/src/assets/all-letters/letter-audios/y.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..8a69c7135760d067baa4b5075f6350e1020d084c GIT binary patch literal 15221 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 E2gt+JOaK4? literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-audios/z.mp3 b/src/assets/all-letters/letter-audios/z.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..d262963f94b07fc77d1154ad82260bc0a4384376 GIT binary patch literal 15221 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/100.png b/src/assets/all-letters/letter-detail/100.png new file mode 100644 index 0000000000000000000000000000000000000000..05d20f794cde1c6ca0997df381be2075e4f89f1a GIT binary patch literal 14331 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	<BW;!LSDTjB7 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 S!!-Hd@l=&G74z?#zxY3nbaQ?H literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/101.png b/src/assets/all-letters/letter-detail/101.png new file mode 100644 index 0000000000000000000000000000000000000000..e6e5066bdb91a1b259dbd7831c9708cbeb149f78 GIT binary patch literal 17176 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 Ho&Wy=<|J_Q literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/102.png b/src/assets/all-letters/letter-detail/102.png new file mode 100644 index 0000000000000000000000000000000000000000..a3945376a0f054f6c357284402018c0ad1a341d3 GIT binary patch literal 14179 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 UG2)sK%%8o<NJ1qFUhDh(f3L>FZ2$lO literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/103.png b/src/assets/all-letters/letter-detail/103.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ffaa7d39dde8f75644209fbee93bec4a3967b7 GIT binary patch literal 16478 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/104.png b/src/assets/all-letters/letter-detail/104.png new file mode 100644 index 0000000000000000000000000000000000000000..17fbffe2c7e1d592f23cf163921b67e79953d6fe GIT binary patch literal 15057 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 P0D#hCb@`%4=E465D0K<U literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/105.png b/src/assets/all-letters/letter-detail/105.png new file mode 100644 index 0000000000000000000000000000000000000000..5329099b89779be1e11a57bbbc95eb961ce838c8 GIT binary patch literal 12911 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 X0OGE3TQvS(KvWbo<Vzkte*V7z_iXM( literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/106.png b/src/assets/all-letters/letter-detail/106.png new file mode 100644 index 0000000000000000000000000000000000000000..c80afb6b1d8a417af85d1e5c4c73b3c0c9dd09ef GIT binary patch literal 15671 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/107.png b/src/assets/all-letters/letter-detail/107.png new file mode 100644 index 0000000000000000000000000000000000000000..656380e7cd8b3893b69d03bf178272d164e2ce0c GIT binary patch literal 14864 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	o$<fGau-#t-WxrykUdJdB<=9*X|K zgC#1-66)A^46X3{j$XlZ*M09ZKuHMMY1GcT-@uPRWGeV#oK`R)+J4YNk$WbY3U=Wl zN+fZLNy0U%hnWr1ptgSeTDN^hEtp43%37e(wR4g-Ag|7vfB9<dVDd5V>V<W4zf3ho zb)q=d+dckCrO6L?B$TQkd2GJJC&;iTc*ufV@9OU?pwKCY$I?`biJ3v9czazB!>;?! znJ^W-QO_$d1}gk)&j*Ewes{#zk`DUDO-$yxp<VxTH=m@Cpl+lVxDi%dw`4F-weHDI z`IQC;=?hw_Y7=G_np|@RZM?r>bi~f5ZHV<@<be?Twok)>&=vC~Yvim>*(QDPv@r^B z)0m8*cS~1rOOK5lwK9-WBl*k8#-C#aaJwF6wfk3q));~baF6_RxSH|8%L{{!$<EeW zklLN@U@oBS8NCT)SIJ^w9{5|WQ6l?i^smP3(OcNht|(3$`jyzf21e49yOPUaNm)r) z1?fn~^F#nA=xnq1>JB{~NCH^yq<8)>)uopEdN&ep$yr#9x!)7~ogm7>4m4^kh0!sa zQ@2*nhyD~Y<6&-C7Akwv>8>%`vCaC4T<2dz1p@gURbP|<n>8`WEb!QQa>Fhj`KOhT zsKHvzublq`h>Mm-V?>RboHR7Wtqoo2uD9Bj0mxSJxGU3b{tV?nl%mKL{}pKJxpY?U z>$|E|-&Hqna-R#?dI*`Ug*-Sy)>W>fqcuY;hJoa}y*5^ictg}JsH03hUJ!b!pKsRC zFgI3#|IlXt5C>y$1D4Nfc4Ur7Ni`pit6%hSkHH;;ySH~L?o|)eJaW~j%r_1|>nhqG ziD?4UIe84vgeO-n*9l7^dlJ~PssghG$B~Ui*iBw(I<0n~0I*v(B6IXxIWXoLfFj6z zblKCnm)Mdi|4c!jGhgE9R&hMX6YFPzesvZCnS2#BA1}#7cj}<JtF9bwxs#ldRp#N* zUQsA4KD4<~KOve-?w{#x?rH+(4SB8u9|cN^pfk>$!jt?!1}9aDI*D-_U$??~3-|*~ zC~M12pmvvX`Zc{<kRz4*J3Mux@~)rhFYEz(*-nhJR*tKeNWkzQqsO~YfLKsejI&Ck z^O9MDp|H8265k>$N106ub8_s4Pt^ZdEgKE>!_JknG5{)iHXw?+hT{F)!hAkKtETQG zuJDo|_9)x4nciLKLwicJyhl1vVfHoyzN<GzaW8%I1GnCd7`@$mzQ=oV&3UmhKw?zE zJ?2|ftz73V-}Q&Cz4T@n1Cp&$XDrhoaX}UhB(Zb9hZ`L4QL~75`dcu_Z-}>ZKf1mF zh<$Fcuharf)!$c`=MI@Ae#V?gmU(UqXnjH-64%~kv;@dZ1CbFDanpT722799Gg@QC z5=_CpKxTJWhnZtNQJE3fP5~6%ecv4sA1Z(zT`v(hDbdB%lR|XLj<yn6aXsEQ!9d;D zv<3sXjhYd6<(k#=LXSWH9)8zM-PqO7NJD;wZP^zFNe_A#dgCmIW+GKuamT{}PZh`| zuPlrP>f{+dy?+Xw-Pd9eK)5j(#6b-ODz9Q~F=0Ce_H|RJ!Q!`{MmlQ-2Ordx%jHtE z?r6h*HLg7HSyKhv&WXx~oSI8$n5o7a3O_+_^*U_~30glvrL4TAhXezyz6|c{OuHB@ zzKF4$t%7Sb!&2J&_-jC3`pe5Cu1V4R(K-TS32CPR94%X|jR0qI(1BUq$cNgpLkaPZ zvg@tWgQTqR28?ypH301J@Bt;xSzL|n6`M(#l?@%$&izEq<ALo6cVg*!%X&G`FH~MS zXM=mt&P!i6<YWe%D=ZtjzIQtI^+MEFxQ{$S)jJx{kdeG~2gt_4N&(Q=yCxae%yAp> z)j13=isBpmV3{D(Y;r;C>h4-#%oR3(g9`gW8Vxn_aZ#{{@2|mV$&x9~Zf7YL+{rC9 z#+sEKphVHU50MgX-@F85Hv(0jj0j{JEDK{c2F5(mq?`^n!VfZPc)BFTk|{%b`ak^X z-iKsdxD)*|b;x<~cZHUer4Rsg5sFk%@})Yj7}gf-0ni-ySiYMg<!gmsOzmO8#7Y*+ z;MQiG>a^vT_tt;X6afNh9c<6v_0HAcXJgi?$vG*q$raS+5fBc}KO99Kt~XBRA5qKR z1mYhmfAdm1UTneT9bDrZ4Pa=K5e=4|V_I3of$^JdN`y4N+DRHfzD-q=FnV5k_!q(S zdeCQRW(tj$mT|2zo5S+%)zu8WADx&(H=k&lXVamj$Z1cPkK=ja=w5<Pu0TrdFs(X} z1UMFjSpI<A!11<w`1^!Rhc*vviiXj91K#p{>s>tqPTL&S3@>{;^s<$Makf!yzA01@ z{|$f&M0TrMv=NG`-<EFBENT&nL_>YFZ8#tAY<?7wyzWn8fB~&{5gF2_Odx%t8~Rz_ z2yq-M)2h~lD~E5kso)U0TBjKHKVdruiTqZxJA$OcjlxW%KICi*^M~E(`V@%voZEE$ zOEIFCei?PAJfx(+IArEW1h%+`D%0*DM{d)r^oOJPK<%t8(G58EZvH}RY2F$TtuAb5 zzR_(>=&TAajv1?(Z{=V+4oLs)%?C7l_);`Gd~pxTVHbddCN1}>pMuu>THxAWB)ePC z3BE}=4qI&wAOIO}%Enti%IgKrtX_Q8pDaV}S!3l_&*Hq8Zqu>`NpsFZ@!|Blo}U28 z%2pU?@v@SScVs7AsL}@*gu}rj_D7qdzK^SS6p0di7l37zho`mLTDuBJ9bd`WtZ}f~ z&?jTFDyPEDHnm4cy(kxKG}(5WuX|X<H-AYBXx8(+pKuGp-ic4#3$O0#co%l=dsTJ- zKGTi*Hn8R;=E_Zs@T{?QNuIkWUw)cvq`<F)A8S31lSXXh?u4$1-J3n1Yd&m+IbPpW zi#~m{JD2EE)4I0$NX+VE)pkC0WXc>+H)!fX6D2*Ll|_|q?;n+)h6`$$gB!G;Tm_4t zm@bWNegO*Og)AVy<|-kjP7f}1MErj7K&MlTxNVu|tk_0_?Tl13z8`ht-PEM+(*eMj zJ+vYjwI;p*ojRA29Iti$FXUi2>RTCSV$2p;1XL4bS0+}GVdgQ<eJXCL5#W&WT+0=v z0=J|=+^ByuoZRc(Y||pFx4}t^&_AWX?`bx6iQ?adZcmtl%|=sCV4p=2Em6Cv$h;4_ z{`KVnZMRZofPACt3htx50S#az@O(K$r{#cXpntu%{+X2>uXSH_{a5tC03-Ug<G>*c zTeX={w-&b^l!$mNMFt1FmHm+|f;8;YKHcmn8%!>}<`Aspr~w=r329B->0B_c$+1pw zt((f1x^<sJdaO1(U^w#;^MzCuU}<~iFDlxt0g$djQu5fsnwiD;fj}w__vEOwoG>-c zBP;bygIsxCMLl38tVlR#3Tkx-I4`UX4}&eNm<*DZepiH2r_FGai`d`5$?nLvmMfC< z<#k&JA0Fo>^RSh?e>k!_j)u(kBF5cj$z)u#(A?jH9w^>03E>1iueAmYHT$3mcE_@u z@y2*UR9iKx>?Av2#a$JB2JzQWM%!$t-Oe5ao*-f6@=*<lcm^<Tpai)AH1p``Fjwz{ zcb)#UbzLcrD|@S1PGHIU?YTH3_oqFO6hipuF>d&vTKx<>!!MWva1~=99EhH<EC;MR zu|gUWV}U~bJZ7J%pxEZ(;H#y3HCo_Fh@*f?S7K=zgY3~_iOdHP{F&7=+G?np(~+On zRF<i0s3~-6-IM;Wtjg63JSFjsKBu{df?Ypk<y}3PMb?1^H~Y`xLPNknuU1r_;;2Vy z${zzs{#M%QNOKg(fub5h0elDgPaYs?0sSY>MHC1)YDF{&|MU19==RO+z{&K}w<YiJ zw?WVJ#d?R2_Zcy$DDq|1c6l2j{?ynp?JXnl0R?=({_b>;xd8eY*R|~xd?J7`3?b9y z|4soe^@RAgIvVT(H+){CSrfF5Svib2KzeK4P8(*A{P?T4YFAg+-jHNw_d!iNeTd?1 z|HgFsKlhd#!`XMYx|i%d_x4_`M~twjodYFZN0F}_akV+$cUss_J=(sCDz{9lGvZKY z12uI4qY33kYdS)iMR~nUoByD~Opyu1w?Z#VZ{lOSFP#DLzMR?~_WAIArG7YKplh&4 z=$19c@5|xhDuJD^bZzmr8VzuD3Prv;RsYK1N8Y7$(>*8{H>$|o%-6O~G2SjizFT$C zzh@UEeDKt_=QiIqs*1Gd@84e>B|HA$<$I;C<eOUxjcL8-2(0ttmp3fR_y{vqD;WxM zcuyZ$Ip@1YF87NH%u5BsZ=DCd<=Jo<Z)}uJY}{>hi0h4MgmyZvZEke~S6IbH24$<| zdPkkEJ=@tk`;3c50q?(NU5yvnkw}rqZ0PIS4&20q9;Pbp`RzYHuCMAnw$|p!>cic6 zxp|4Ima^#{y*&P)XxORIy7PK(&u@j4B51d~Plp&@k?6bs9=PS2Qc|~Xx|>UpH!qF| zIMej?ygc5&Xc*oItv8yIr_<O@)@dsjp2m2Tu6v&x=7{Gm$GXXy4SsnXwD+ZF<5P34 zmEAE#>Afpl&0?iTK}5puZ8>;R^sP%Ehm21M6WH*}b32={mwne8Qnux1DjZ@QVsl-e zmap$mZv)q$Q&ab)K0&`s0GDRrD+CPu#6rpEWV;+BGRF?mjCF_^4%3xbNh>*0!I1h+ zC=*Q6xVC}2wF@tTq8jNzNhZmv$r{#=Tb+J2UPSc<@5)&R`69pA+`tlHdorMh)(V(4 z2I*LNUK}ke@!rPEd%uW+TJrIp#3K?8odthG0eXljXl$53jQcdg(_&qdJuZh3wtd)_ z%Ux?*I>YJqyxWfz4=)AW0EvJlLM6f*`dkJhQZAx82<4c$-NdQ=Q1{M}4bA`#kVvjX zfJA5mM0Ol@9s^c*>YIWVSl!yX_rXx#t$w$#0t9*pbJ}}M<yWwmsy*l;2j9rIl-L$3 z!J>xk7=70tP=cC92fF%KH=mSgr?8;ZX0b>n&-7vD#$&nD+g7jl`mX_ZRI|-8Kg`BE zd~g{15DHEVcRZN2saBEKiTKd#FgI>P%EHs!qW~rGce8XSH?-XmkZk#L|C9xVc_@;+ z9!BWpL-_axDnp`vr=&N2-yR@<K)%_dpIB%8y3($~VXvGLoN~~jq`8LeiAwGP>Q>CH zDqm}pPbKBbC-Vpno+A)Q{F;BVP_k&6?C8A1NVwSA_anaGnXt69uRP5U5zs{9VMpNP z$=hkkG_C#_rP1SW%AU<RLQDm3`W}IvISr1doE|MPY7l3R4GwBopZ@M#%9y*^S#}@m zx3icbZi3>!_>_8)hcQ~wT;1M1y#xHy@Z?Z8@Erq~JeaOu@PmFfzOQRw)!!q*?*gXb z2Q4mjM2_StXOpD=b}4WKdpJkUx(os(iFGq{zsr{&G)Oi|Hj9OihMUEnd~vlPFut^2 zIMS;<X>6z}%16PEnbCyelw~T*8mI6HQW~R%PT;N2G$0wCK+Bxa!CWyILAsge)>3E- zheou+M8!^c)~Rg#K{nj1DtFp|@VThr<Gb!+`4i&S!bV3~RdTOIf}!^Aaoo$VTU*i? zgJR6g?(gkGCo51BE%K`qI=~?J<~HP3XV~{-ZZRvnbaf&R<Bii~FpE5?+jR9qJLWX* z4$_G`rnGz%4vvf1oOlCZ0H$EexoGfc!hWkZRi3yryY-XOr}k!z@6rWhP3mVcj18&s zRcp*!1e@as`Q7PBH)HL_zVfossgY9+BJUoCw1UxljK7?3=wFsz3L}OPXkHdqxz_J} zx1j}>VC4HQ?&tA%Kdoc47$4zIvGL1vnb;D`cQRF3p}b4eKb2hPSqJS*Sw=L(Dubo} zIsHnDHjAQ8fk#dyYfc6iq{{_vsB(3C3;T?=+b~ud7t>Z526;lN6?FX(Wy@db%T790 zQhV95Jv`*p&VpDTf5|o2Ba8{l-I!WH1?eBgqz<htt?A?r99kC0RUz(GojrraNZuf% z7;oegU)>wN>Qa9&SF$3G-Kt8)Cc$1O8uTx_e^2%r_*tc$Y@Vo|x&7dQ8P7aWkubjg z&T-yz2h?;1xKPJ~*4Bi?Kcz-9dUM1F9WO4wQx5R%S*=JId!OyRItUKR@k#A1YsG%h zoD3NIw4z;dy8ia9u|PW3zU(x&QK2(oIH+suuqS(z0#vT^TF{;$`eb)=D&_JC7I*rs znkj6(`~r0M<SD7cGDBp^_iTDEgJF>yDz}7-^d$K#NW=p9v@U8;;Gd$2Ilno!0|&AF zz7N)I2E!dL+-04)-{<Y!zxh#?PAXSByk<&I>6l0ZTu@-!UR(Tr`9fSq?)Qh>WrLla zX4b)k0DghtvC-9n!9d+F@+@~0a~IZ5o=#t>YSTLhn*N8v=&6aBjL06^1;VDdMx+Wo zbdUV*9pGoxJM%NBQz+nj8O)-8i7i|~j<jp&vy+f7=s*i<qEStYy_w9De8=&ELN~8; zW&?GB55d{>^Ox7JiiO^sZ9oP4Y7Fr_KiFXV{LEdb`#kXfBfj;BmUa&A==<p#rj7IZ zm6gO}3mY4hafmLuI1!)!VvHY*JhLH*@jSg>`ck$N1Omf8p>Cpa>u0B;4XjG73@&Ig zHp=uuNI!Mv=MRe9JB%#9i0QFeS_Vd9xoU<knBx1!KzbcR=s?c&A5*bFHv!Dn83~)^ z@jlgpGzJ$a+UpSM)8)f<<CMQh{bX`EUqXC+X63WzY2AnG=NUn!Z#4LBc|)+`=^bl7 z7<hc_)eIU31M>%U?kPAo=V~!G@-fw#Ztb&va4af<R*cw~O|8?O8w*r&x{SpRZJEVa z!Cwk#ef^C}C{N<}2PBeGRCJk6V>}@%JDt|MtNr!*J>$9y`Ie5*g!L}ETz`i-ll^0K zb?dCIPSspr5fyH8Bf!RJXy4Ibp8_NjuSsC*Uo0P_Z!BlP%;p?+F@m1mN%|$;Xhs9g zZd5qlKT@@R4FQ3s^E)oL&mW)U=8gp*eue5D2O$tyE-tG~rEAxcFMyuz-GN8KpFBxR z>X1=jRDvLOB8B!zZ5)01b}-3mJ`m`}*Y;n6{n{Ve`%*UF624DOj+o9zw+&yp@RBO| zB4}E62ZgzbetKXL8rpAmhs!a5a>6nA<=5I+A+ib3K6f;m^-FihX)AQ5R8PyTE4)`P zpWDWdR#|Cnp8;8)=jyz61$$a+F}sP8-48@GJ|`3w76PE;Es)~c86Gz{2h#ID;&PH> zSuG1`?s1QZ=vp!_{)KX_U<eBKF*3?5-;9jul+>p=bC<@@`+3txgB`jcfotsYDN2i~ ztf<TU&04}V4#f4(yLiv|=XW_{I`IN%B%Q3gh~AgAXS#~uk3?D!iGJ<nl4T|W+SwuN zlz`9|zOr#>S8FMp#(4Ho^H8B0cJtfi(U%+6r&tgr=yFy<L&_GHGWmZrHB@0L#rGbD F{2v-kp7{U( literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/108.png b/src/assets/all-letters/letter-detail/108.png new file mode 100644 index 0000000000000000000000000000000000000000..ed900b08171830b366bfb642fc20f73a70078188 GIT binary patch literal 12223 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/109.png b/src/assets/all-letters/letter-detail/109.png new file mode 100644 index 0000000000000000000000000000000000000000..6366ae32ea1a33000b617207bf132f6edadcb9c8 GIT binary patch literal 17312 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	Cm#G>~F5B3gGUuDqfT{}9!$y^KBpb5m<bzA^ zo42SRVUe;06n`{K_F#me7~iZ_JaWlp;q-LjvA*Sgwkxp)UVk48yV-1?ECJQyRi*!> zu1)a??ea~9npQEo+80(rZ17qkSs2eDfs>x*D$fEIfclv&zqIF{%|Pe3Zp;{H`k+xV zk^OXeKQiLF+=erlOx;t#Frm(e8r$rqQKtQOoKb>}NBqj4^L-SLQCB`tkhyxNf_X^N zwGF<`b6wiJ`%_kzla+DJXL*0`yA+sVXj}4fhy^hgHAGF&<>nvjmBWL*(%#TToy@9V zR~`0E0Es8ol3Njs*&AlHElmowtp}zz<x2%+4mcH(pdeXjO(9?jnwonLS2C3kIWDK; zmPw;8c2zr8d}OoPDH+62t0wwbzSPiw0@u#ez%0X2xDH(704VP}7XK5LC`eb4q$)gb zz5q)GN{76efdWz{|8A0gz|>iFYsGy&nXO5-GBi_1rn8QoL(ywfQMPu<T*tp{E2kIO z?`7|&BY>L*6inh^=xC6qp?bSbrC@Ox4n3^1ztkD6at}S^GT@$HDMK{KCm>jr3X$Y7 zT|T}5k;mh&3?fgPDG5bp-50zLKV}TqvEW%>ms8tLOlT4s#1dWiu6y}X$ce-LB11b! zxgWZlY;9iqY9Yxh3|n@LuhmN>C^%=Y6RBgqE?eV)f*^Td!U9~`Ys*~UgRj?&F_PB} z#yjr^0;$28)27^U3m+BTQ;RWQt8Hpt59q2zOHeu}7qB7!k^m)H299oLfIw>WP7bce z&_u|cNu>|9!M|5f6pJ2g93P{hi0Te0g^=Qy_XVvNwTgU|JZZ6JPLj-B{eXh=Q?K-X zoB4=f>6ddmGsrD!f8%z*KkL>I6$`_E0zV5CDne@1JQqWC7q=KVeZjt|ei|R~lcn_O zOWFs36Nj%sa|~Nu1I<qs6~_Gz-ZMUmYdfCK$zhRhbzZb-v}U|mblz(wRC9Pn-9P<3 z<@~D9#r-fik;Vonx!o;%JOmB5kFbxl?+<-2N>@w!!1#6W!Mmr*X%|;lv#J?1g!_Bz z%izf_QKZyr7qi|zAE1n&cE19?kJqoRhSv^o^6FmYv|Ntx93R`zF~j>pOT>p1?ClO9 zEJ0HAN)X{F9`9rTeyzXKE_+Zq8@=e?;$r2vnjgaV^1*6#sQPJ)m1~TT@cJ|Eg+~r? zJkBlP8Ok<fluxNo4GzdScIRTUq+!2v*^(tLxtl{)3rk)BuhpLun^sSA#pz3Bok*l= zKOW2V*7Ma8crg3-X`bGI6$|ih5`N1UBucmG`+qkq-g<Vj>h&p%pu6a-fZIxDo)?WA zk;e>KmB-tAK!Du1Ohnhn%HK*wj#@7AlmhY??mcGHDvXcaP+~PuHccG(8mMu6Vmgg4 zyKwRpvwof?WpjvzmT@WAhxVa2^!HrszPLC-T6F|`vHa6pgsZe7W3SQa_uELTtDCJw z;~7DqA6CpQ>M^mc;yNSgwY#dk<6=NTSdbELfmln`tzW5FrCPmG+)36%OAQoek8Okw zC@yvxd8VGP83m~eEPwst1%(;xmm%R8(oNRu<U90x@ecRY4NDLAn$Z@1=g2@|0Ri4% z8BsSVE_z?;qO-fj8(wi%xEBeuq3r6_18b<Js<`<+20M+BUT)6MgGU^XOAN~<x|9J* z@8o&N*DGxJcmm2RVAV|0R(aRAHV(<l#wW5IK7)bDv$r2K$J;-tw5?R*a#O>ydIz#r zy)GH|XvNeW>;r|d>`eR3Oc4;XOBJD6y1o;_a~|xw*jS-9W7CzSe&teTB~w=r=p;On z^3wYvoH~y2YHV@QrC3JHDA3L+;QA;z+4&#^ll-b6T@ip-?|OjiWqxUO)G9>bybu`@ zphSQ&h+p)W?CNjws#D-hTG8i9MrfA~K<Kqr@S?}zQdA=+M0IySpA(@E3a9fp$%aZF z3YI=h;{2IA^8HmoLfJ11%RSEWhi794Ln*5rLuc1_9)gmg@;IN9!fyZuNJ(Bzu3YBL G`~L@_2K(Fq literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/110.png b/src/assets/all-letters/letter-detail/110.png new file mode 100644 index 0000000000000000000000000000000000000000..a5901b7f517cb8bcbb0c65214b728942b9d27e42 GIT binary patch literal 16010 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/111.png b/src/assets/all-letters/letter-detail/111.png new file mode 100644 index 0000000000000000000000000000000000000000..3f1f0fb2086982b979ad1858b89a5438a3cfe57a GIT binary patch literal 16242 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 X>=J7I7a4PP3tm}4{dwuLw;}%v*6qRi literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/112.png b/src/assets/all-letters/letter-detail/112.png new file mode 100644 index 0000000000000000000000000000000000000000..9a40ccfd099875c5698aaa45b25f77305b5b10bb GIT binary patch literal 14481 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 Z7r11djiz$L0;3H8<fWCRieJ6;{Xfh=j9&l% literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/113.png b/src/assets/all-letters/letter-detail/113.png new file mode 100644 index 0000000000000000000000000000000000000000..c49675bbc0f650b3cf48b04513fbd146882fcd7a GIT binary patch literal 13571 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/114.png b/src/assets/all-letters/letter-detail/114.png new file mode 100644 index 0000000000000000000000000000000000000000..e38b2702cd5352d99e2a859911882bfbc29a097b GIT binary patch literal 12753 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/115.png b/src/assets/all-letters/letter-detail/115.png new file mode 100644 index 0000000000000000000000000000000000000000..a14ca9fa65fa8c1d2bc4c30fa6a0a71193412cf3 GIT binary patch literal 16777 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 Zdvem{s~!tng$9A-q?F&6yfY5?{{UP%ojCvi literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/116.png b/src/assets/all-letters/letter-detail/116.png new file mode 100644 index 0000000000000000000000000000000000000000..679a93a5900d6b1ad5040eb8970799974a93aff5 GIT binary patch literal 13239 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 W;m|J-7!v<e8VyxlmGZj}BmNgyFYD<5 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/117.png b/src/assets/all-letters/letter-detail/117.png new file mode 100644 index 0000000000000000000000000000000000000000..48c9cc722b8ed78d5348c3c6bd99c037fcd04609 GIT binary patch literal 14170 zcmb_@2T+q=*XM(vpomcs5Rs~Y(t8i6Ac&MmkzS-Ev`~c5LMS4Nf`EebCLlz*Ql$kE z5$PrL4$_etAfW{I!S{W?-JSVnXa76v%pF5G_uP9=`JHpmJ-mLTtwwk5+BpCK=+qym z=mG!*4je5sXTWdv^UU6Y|1qQP8=>@E5h!mfcQ|m@*3}x$q3&#D2iJvL+4??hfhzz2 zrH_NY5z0tQQ_jZKS;*>yM##t64V(=C3Q9h1RyIy>6o)n3&cOxBwO&)t#o=HJ<ua7i z647!~hTA(lK)b{B(AxSoXeS$4TP`I<4h0`MkbyHCWyRs+jCApk^MP{x<tqn%KKWXh zi{mc|$_dK#uT2?gJ>pPyb%%3E3P}mth>FW_NXrU|O3KQJNeFO=iHJ%Gi^vL#N(hRG z%8AIziHLIi`yUs$n!7DRPFF?s-)n(CLAmTvC^tD_VQ+75A#ZUZS9d#MQCV48VG%K5 zF)=}qLeRt41!d(U=;CqXKO9ux9yaa{ZYT#=7mgE-R@SbbC@2@W(|;Yo*-cC9zZkoC z{990<$b@~Y+=NAiM1-B4PtNt1+5@Ev|DW6VZ>c@>ecj-~x^NFyPj?$oABY?OnGDMA z|Gdx%A-Eekn7ae06f2~PtBt2K+y$ks0_6gKBV_AfD<=vUv9W@SOAE@1O2P#tByDU2 zWu<IH1Z8EVY{g_HZN()et^dR4znd?9Uqa=ctg5)Ql$f-r=zUq)`;ro>Dk{>-_eJmD zm5>$r&s=pE50sUQ4g5cAJAiBdd#>33aju-QJKPH8>aOqViu{iiJhFF1xq8^Ux^XBg zpJ-j0<Cd0{jf2a{m$y$8^{;cQz}+3Z;I^vnuFf2PB`xRh-|XW5P6Gd$Z~Ol$L1A!H z!YAhPznIT|z5;FX<l}!i1Ngù$4^dWc9S<di_fL<%^qposS-)H2{xbJ(jIp2lN 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%0DR%4 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 Ai~s-t literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/118.png b/src/assets/all-letters/letter-detail/118.png new file mode 100644 index 0000000000000000000000000000000000000000..62cb226c78409f08b59d07b17ccf3ea28ad19bd3 GIT binary patch literal 13543 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� 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 DDId?- literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/119.png b/src/assets/all-letters/letter-detail/119.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff945aaa38764c627a1431f0818ef920b6a301f GIT binary patch literal 15821 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 R$k7Yd`g+E?CAS`j{|`K@!ubFI literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/120.png b/src/assets/all-letters/letter-detail/120.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6c3bd0805c929d8a71307c921d31a07b7bf3d9 GIT binary patch literal 14171 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/121.png b/src/assets/all-letters/letter-detail/121.png new file mode 100644 index 0000000000000000000000000000000000000000..98b8627d5b3756bdc9a58ef3aed2c4bdc5c349e1 GIT binary patch literal 14163 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 WLjSgVMK}IuZmNo!3Kjo64gO!hO%X`| literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/122.png b/src/assets/all-letters/letter-detail/122.png new file mode 100644 index 0000000000000000000000000000000000000000..cdccbd4d7aa76f47cc6410b4a8dcaac74552f673 GIT binary patch literal 11837 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 E0~qHw`Tzg` literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/65.png b/src/assets/all-letters/letter-detail/65.png new file mode 100644 index 0000000000000000000000000000000000000000..2e01a3459c78e0214cb0eb9bfb2c9a8b12b6d5c9 GIT binary patch literal 14791 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 ZcqnL>%+oxAME_}}vb=`eR~d`Y{{;m58883< literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/66.png b/src/assets/all-letters/letter-detail/66.png new file mode 100644 index 0000000000000000000000000000000000000000..e6a4d68a47f0ce3e7abcc4ba37e70edc93f25c0c GIT binary patch literal 17127 zcmbWe1yqz@*Ec*!iGYBVfV70v&@sS(bPgyjB{3k<T|)>8Dk9w_Eg=X<%K!?}ozmSs zzzqFe{O|jIzHhzjS?_wDkF~DF%rz(W*=L^}zrD`~ZJ09gJ=%L95Qtb+Md3LJgoOm2 zuDf`^oAY9mXy6}>hoYf}j<b!2w}l%V^wiqf63(RRXkiO~4!5xOb?t&nfk4<kcDjZh zhMF1>D`!VOi`zDQK8`LxZxBdI#>d6N${y~)WC^#mbCPD+Z)|2^va^<EF%Z$@*L0DG zzp_*DbA#*n!E~+s?5!lMS!AG0Qa%u107tlo1(T1XgOfYNN1ElIaUsCx+t*+grhl4v z*h{ngizq`)Z6<kVH#n0BpD3@DfRH$om;|4Ih=jPHFb|U;zkn#1Uji&3%*!tT;g^8$ z3o!lrj|G^`&DsX?TtVsIa{=F^SzdW~xIn;QZ*OltZy`QsH(RiPgoFf`Ul1%P$P2XK zb@z4hu<+q^a%cU|2nuj_D>pkA4?AZkrrQxMES)_)q*(w;|Fr~17fsFo8raGG-;4rS z2KKRV0SoZ)gB=}j*Y!_pcaP`r|Cfyawza#iuL~Uf9PaMy>1GA&hYjn0Is?4>zfW}A z5TFL4<z@$LiiLxMvz4bK+{r^#L7D~lh0of~8X^Gax3Yi>iSbGZh`@P;MXaoNB}A?G zc_k!7tpz1Stc65GEdMjkf7hR1L4sdcL`hIgR6tQcKv6<MQAAitK|xGjQ9$vjumt~q z`l>p)dssMG!T&S29WeL5`wIMD`$FX1;1(XvZo1CS4*!t??N`no&hD?AU6|zMZ+Bgc ziBr?U%FgNb<&)cu`q#P@;BIzaaBC$uXGf-gI1RD;Z>ad6ao}J5t^faW5DX9nz7?1M zkNEuO6(EzhAOGtx0AK#=IKiEOGvo#wmYVxY;~<a>uByUQU7x9)S^RVp+kpL>`IJhb zswO*w>CqBBo~}xV5~CV{hvAmwcOJSiXS1y!o#Y-c;asnTxh%HlKYlF6{6XNY8#Yee z%SR80+B6eON-d2O$F`}y)%4eFx?iuOOCOu)+SuB7Ppw}a`REVty*^1#K}k2SOSQ*J z9S(gXq?%UsHyTdNXX%1l8b@TzmsKeiE9`KomvR~J2x5U&=+__7d-f0I_ABQmzDM!M zTmB7KG{HAXeDuR){0-Pi#!Fl#aNGoU_KzYVd2HR^2N!F3otm&Z5!5hNaL(rrv!qV> z8bgwX_NxVIMj5vs8=?E;wY|>w!*?6o61^o2@a%obK(eX^AN<pA0;czCk?4B-&uA*W zg8*yPPsa~=S7bf06Mt)b#AiUkgioziXS%}7>rBU!kUy5&e&f<3f-3Fyc43}qRby+` za4Jx=9H;c&<$hJr)nwNV&)0>E5jtuU`;OR~mk|NH;bb8G6PHS_7iJSdH%F`;UTdBQ z0SHua!+Ys-iJlsn4P9Tp`}82D&|tNxM9<oR;`6q3Zz-90?^bl7@!D*RM)$1cbd|UX zD0qkM%h<YG7k=~Q#s_~C3+DQ$RzDuM@lP|8<qerKK8Qb(08=aCNXdB7!-yp9GXkcW z{^=W&d?jB2m&V5d@n8Mr7{L4-cMiB-B<HY^!dzQ#&s2NOocoG$WKIb8#-8=)tLjXf z*uCD3R$6~%X2b>!s>j^Ha`pfD$OF_V|G`ItB|BQ-7rCH-DA(0&;c6+g0oHwpJ)rLL z1)R1yVeh*$adUDS=WoLU3_UWF<}lqbLD01IDbS-QR*`$6dyB3{VqiP3B0s}`1VoX2 zoe7hubgq>`xBc!%F;qB8jvUZc@LYUu4%}IhA7MbO<5eK$&x!&zuj{HKH7gHmB&}!H zj5QPRL7en2u6E}RxqUCM{o!>t4(ww(ZL6`~8lHna@gW1cewJ5KvxD~Ov+QEChcKh& zUC$-As$fD;yx=aw>`5nhHQT?L`^vUq_`Zz#&V*L}k-7w?e|E%QJY%m<Fi6(yqGmpZ zx3+nVKuS!R4&?GwFeY002Bmz|!-&wyS=5GXidp*ZI2O&J)SqB_H~PLxrS!`tCQLXb zO3vL_6cstIY}^6yJrSP-qvueRe{0>9A&V2++;Q7FG`qg-N9yaFk@&f2Nk+bu?x=;+ z#4h^g3z?P3{WI)C{BDUHP;k$1sbSToO;KrC!tV>Ohzt#l)gEqg)xU`8lihhgpCEIV z+y!G}<3srRCa=!fwC6$h{#APtyuCV2JQfuEWYh46Mq+uR+5H_~wO{1RI%mV<ov%vI zyGDMa3+WM%kdd0*=9KRFsTrsN^f)PqyXu9cxF0C^hwg+(=a`s7T&RCm;$h5!F7o(X z6Sb8Yurzw`Mm^vc+x}sOvCH{_?)Y4K)vNlS`*G&{as61J&UjeZ&AF`%d*SDw$>-EY z`dI_TFZ_z$eFN8rhU``HCk&3LMGazutmAAx+C<oBbf@nK(s&V2?{1A=9Y2n_R91Bz zEu0$}+3PEwf_#1eVk-FwhZ?!=+W78uDL+T9ufLsWh$N&9yl(5t-izl#c4=DcOlxT= zJ74#AKzr`-fP(FEX>yHnQ{tWvty?GC7^zXtXE~($H==MEHBZ8ao)CVT!vSfC(H}fF zd&Y);DwVR8^usY-rxEpGr1f`FImY44x_JH>N8xsA8VJ;j)Ay(^Gv4&^h#3`v@voF~ zn$E7H#;X6OpmhTaAqXU-TBR(+Sv?aMnd+ECgj5*5Rw)juC~N8xv<3yI6#UJli7z&= znSQr$(Z-8P<5f3H>J}R^rSfRC1A*M03aM0aQl>hlx|ZKVx=bQ_YS{9dLYx{<raP4& zP$x|vQ(unms~WpMO<Wj2PZb^!d-Ttp)0wN6V1wM$s#JuYR3Be>{z+N5*Z>rtW5q<l zQ8gqdOw$?*R9}8B^<;o&@Y6_XBPoJFbtb)=`b8q!w&=W?JvQhl#3t58hpXQ<<H;;f zg>#J#CI>i=YXkRqVZ+APZl*m-JWcao^}hD-Cib**V}UArVeFnI9vsq3mK^EphPpck zZ_hmW?AYx@=>r4N2@zr(+v$bnDGTn`5@PvB)TKxZ<ImeKk_;)w*bho6lD=Vqtotb_ z&kuZpn%=u>HchVI8DwB|{q;B{E=#lONy36;mS<U%lj--#uA?<w<XKL_w%h1ZqG5u_ z((BjM270{N_@J`~@B7aT2YUPh$5B7>CU=uHi)`a&OH<Y><4!Aed%FH4o~AhK6*dUH zF)&pYV+XCcDt=wJlQ!S>^#{nz_oIUe4J3SL%U?)qb{Ojw%hUJutYY6^!~z}3fHF|k z63+G~VxiCbzUJ|&OD8@~DiHjhU*x!_A(}Db5^0Ic<wJ=joBb|pF4L`8X4;s&D?3nt z+XhxOD#TUa%T`k@p6@(0C14e)w1Fi{hV#XpVFGogp(2r+-aC?J^TaW2PF%jVa8&?U zM>~0-(9o{LyHCaL61cDQxU!7Qj6|+@^F}C&U;E~RWCh-3Wlj|Owx}1=<fp9bBD~bH zcGLErK@!=@Qp4hH7qCJ19%K45<_q16<+o_y2K77~5jy7uZ(5E;KfyF?kJ&*Kwit<Z zZ|MOo<AeO<XQ{q?#yjygp^egWoAzX;G4QZ(<Q<TW_~o&bj3%l=r;oGm=g(v^r($XL zLTp)A{P}t~hdZxKh;x|j88%1_jmWxK7%`<X^d|?Yv0{!9S<BL<?hFWBe~|2$!3#>p zF$Pe4;-f6IyZNEOJ1me|$x_duuMBwa5csT8G`~zvP00v~r!e?nfasma4jzu(MnQ|P zL7d-0;@CkTQpEr62_XT2{uhtz0T$?g@<h{;Xa;*cCU@PG{%*{0eW9f`;jZ-_*ykF@ z5&n_3%F?9kt>K_G#AWw@r|-;jeKX$cEy$ssenfeW%~5@&Quj73o3^C-9g&lM_uTji zVHHKI2u#UqvlDdk{@T(D8XQKo_zVrTSJo<j&IgjsIV_*ivPCKWQL_F~-b0``VeKP9 z{p1|6H~}+km~lecqbfSK-<p5Z9TihwEu|`Qa7ZXF5G~4_WftK@rFWPd;&GYLw<IcB zg)Yd);ALgRcfQj8bKYS0>6gT-{vd+&95#Wo?Y32!0Lz0?qD%-6U(z&Ac34i&GFdIE z0xx~SoR5;YD!(S+&8Rm|>{Jczb1~Zrl+=wJXDU<vbDY+2%OcFL+~2T#>TH3JQashh z#*EbDI}%T9@9&73&SnZ`)%9GmKMa6X8y3D1_bw9dHD<4(`X)G*6F6sWP^$PaWI=ur z*PKUKNnSSgFxj_FZn^ndlY{i)v(*0EY;!4Oa1p5KI#{>=b=)6Z1J#kGvEhazNYQI2 zA<FzsGifvtDWX&T#pb&ZY+)R}AXkb^{wP#=!W(k@eD{5;rSdXL^LO{_io{IwtCGqR zYD%1=&n48^OMbbd842Wou5?2mp3yLF<TFQ)E5;$c`kMnA(9&!j3>WqB6Jo0GP+uL5 zIs1CX)jFnlpN|Nx|GH9aP<nd6Y<nCy(5B6ZZ5%D)*KEib%0be#DJ{8jaC(tfTx43D zHmy1FYP)zl58jTa!<IT!IK_L96p{SI=4Av7{!m=r>ZM=Epl`sY{60BD(2)T<&NhTf z?e`^o*ln!3fOgdP!&|1i&|d8Wwq8}c^o8F<C;T}6u;h*pg^bZ3!))x58+B6?%UtDL znmkJXIw-|F2w}qTf1@<#6o198h%K~xdDW`ZSgQ`Vis<$F<$PLMJ-mnWawJD@=@9=R z^Suy~za&ulnL8^}hCxw}{$B5|4e>h{_13Q`r8FU$e8*QOO`O1?ma+%T?tsgdvy8)d z6ah;ZR5m*EhR=l==UL50_FF}a*7TFtPAG$b?K`(zbal@sUdi2POMc{sDO}4AeM#jU zko%(yIX6Q++I5TrtVZJl%@EC__`|1b2h2AabEvPry=FDA#O6~+_Pd_a&rF|%fgWRm z<2UX~n!XF|+U9)RkogtrL9tORhE$%?caBdTuV)86J-{;fig{q8P*^rYLXnzzHIUqq z?r994oxW}<rG`i_M(bES$sX^Z2nE}5AwMhz(qiMP7s}0C9C~-g&7X%HGt6)ws&wus zV1<zQPy#MQ*S4&{<kjz>_^ivn(<?1OSDiDp<Ajo=h?bI&C<z27`;=qQ%{uh4)@9E+ zd;t>?`(DwGB7_7ZBK<`BF#F-|RhP8eepa(QY!5N0@fWKVKiQutrh<tT^6W=g<L90z znR9*L#r65+J5dYR3bBwJcb^sqRUC?{oAcpt_`3Ivmm9MeUK1&Tb1`Iq07~E2^&S=< zQiw#c{dGm#KK5CoSX4g9w&q4+R`7oGF3K1AT-(ma?wVi46L~UNwQ;nD#}Xmm?)?_y zJbab>N485Gvk<j96m*^SU<djXLx$jNT8L2h@kkDn?UFbiY&vQalL6=2O4<>Hkg!oA z4j;14YFC<J&b(Js_OIyCbp+7(SRY|)CC@wguhCK0s+m_^6B}nt80~w#@B5jRJnm@S z%$Ik@C<n1u9N<JgJ;+YpEZZiRx6Sx?%PYr*;+~QDv&!S2-$zVH0lBEqM|^l|RPpX3 z2`P<~r=i!?v`nXA5Xo&v!xZ9I8G{j@t7JvKe3o`?-nod{A6!*E$o?7%7FUr6t#70w zZG+Ci!&Uos`d-W!?fBM09h!$-ct3j$&1<Dl&Ou-@Ke@Y5iYy;t%LWM6&za5H=~WDQ z^UE)UfJVwOg+N?0%3up)#|-mjj0n9yM!ypm<PTNYE&J0NCQ3&L7RJs$@5TL&no%AD zIP4Pwb^=Ve35|>Ep^8f8&EMMk3E=gskO2o}5B*<OPie91-Y%9|xw);&?<~jyzi=U2 zt8A<}f+HeepStE4=N+AhgBRq<bP;3)f}kYZ>0$2`-@+rwr^dkEhJB2>@NY@j{K072 z_ihgsLV^nmw-0|fL|`I;VPO_31d~M!KEz?XS3foK&S!HA=ef|-1Y3Zz`4?tjfyD|u zT;z}hi+HjO+1L9i$&Z4Ll03X0AUJhxBy(ELK75WEd?<TwY3O^p&p8$?!1Y$Mrax9T zM-bz3P>~t$l%UIH@LOdXQl*1zCbs2gI)_-v-52b9rUOuzJV4v%$EfzAH&3Vny51h| z1cikGn;mUXR`JkORF;<d6Aoi*_?@QLV`u(D0(dnboq+vg`oA55K>)F3Q|fK-V}~RK zU>zDMNN11xJOH)P3c_4gw1}N<kjB-@mRrw4m%K1wB0}yVeR@qQwu(`pf<HBJf<EVW ziDSa0gt7R}{)kMI2_!I+&&j^SDc){hJ^7gNqwi6<uAKquomGrRGI>!Mo+Z>P^JF0I zLtFhiCLSqfvv9TiDEB4W^>(=ydWdI2zVw@}_0q#N=XgebsEnoZVj)ToE}kAi?zLAJ zX<yv$XoBS)9M;kBWD_ze|517@$RIpBn7xSQ{^kJ#jcCN<?Fl=vYAAVFeJRF)W_y_d zSanDa$6x*kox(oTwYbmK#@1tWb3(lHGE}r;*qm~|uh#A;iV@z&#kaQnI<SLRhE8Hn zpC8fl_MqV%|D0~*hn3rb4e)67^_Ya}R+IGjM(;x3Do)n4u?^Mv_`1W0lWu^nXiaCS zVu{(QZEGg^aF9bYQ3iBN>T|LLd}@~};~`+Ml2blvf#m>U(=KjO&`|P|WZTlERH<D; zsq5)X|9Cr>F#4lch$O$&-)|sy81)M#(c~R|%rGe=q4>^eaPu>i3kpaYaLVgGop`GA zw7u{D5jwC<Zm#IbaQO%>==_^^tzxq14vCCg)+66znY{f@6qrsnl&8Z?uxn`#p#FnC z0VIK$YAG^}uY3T^5aerir4dP3CP>nRu0#0;aTI3yzK=r*o6EA?@JEp(-G>$~<+7+` zH5Wj^T*wGJ^D0%Rs|^F|v+X%%_-ewVQoEd72jJ*ym+6v2e6NUzWB7Um(dcfj;-gdL z(We4wG8pR0%j$j7C~%7ac5C=^5@a0>d(^Q{22;_i<cwO%dEeFQ$jZgq8^bkIG;M{6 z)BQ(xq48xtk9(I!X$G;_C{Hw(h~w9<240K^8jK@XLx=gjKNRT#s-8`G-FNenbx+Hh z6aj~FU{d=!`{f2}&i#z)&b)Mr?g0K)`Ba3G^-8au(gnOlXDvzA(Q5JXCv0I;Wnk+s z{iB}_nJ=ZyXx}WzGpl4yConS<EcHBA@z6_<8|DwH?==h5gt5<1bDJ}eII&=Ylkl?s z2G@*~?!Q0Al-LvQ<rU^?r%{=ky1dD#<xxi@i2MMSC-=o2qvS7X_nrvm1JV0Jy53=D zP&lD=0AGiHX*E#4J)7@8f*GtNbBKI?LW>3$dQe3~)H?cRifEJ594)|i6b455^%Z0J zfR-kQdDtUR!IoJcfh?wdQl8fSwD)<t!O)-vFifX+!}l^Lm(+!8v#{0)U49)JGyQLg znq}bE_2MGd@^CBeNWj$Zmo)i|YQSH<R6qCNGs)K1r1gp8uH%o9rgJnJo4HjLo!(uB zfE2<66PV)`+_?(mem0{k<3zdZtaB;z%L1_a07+%yf@XA+0@}=O_`>=fL{_18XsA_F zG;P!-f2m{w4ros1fzbU+T|5|KGf~aPbxUq`OWAvMFoJO!=EftGSB{l2ekX+F9Vx=L z@zs0blp>;&z9nJ`n}haW%pWvAxh}@JR<9?XOGNxV1djewlf#Z>K>?q{FcmQjBCsfZ zEOp}Iz!c_TsVm1C`lwSwtJEpV=$aUCVA5gmL2^dmJP(+z;g~Nw2=RU)-SpD^z=`%2 zB7xQlgH7dcmw53SOqNt}?S%Ry%nhAQ$S%l!8FX#<%H+Y}LwvyzLMG>wAElGB|Fm3i z2lg#oYahkjw}3h$^x_KDzic33r8Hmb-cHM_@nj$d+{F3K1mx!p4gLgX#|GM<?9UrS zQTMxCCR{_nBXPykth@%M|Jmq*lA3fugKL#gcnbHGT*hy)@d@76y=5B+wqVIQwF83Q zotXeiq0~;Du#hq$tdKgxu)m@kc4v0nwyo$iRGOpipeuUMcCx~WdpiR#4uI&8B^|yI z5>~)7IHx4mT;c`yE{r(sX-5|k(NJE&CPjKpxq#y&j0dQ?ub7-?A3ovQz5fvkW=bHg zYTxDt*JViyin3gFm_-}DFXExm^S^d8avRCu0pg=<(#fv38bs(cf*lnhO!sBnMLFfd zodH`C8SYu|j`d5Ou*<QN%2z$k6f5?CP2AM;ulPzc`Ndv@W%lC$7}-4)a{2e-GxFtU znc>2oxIQyvf9VW1psL6a0zx@LDJr+p^OTn%=*vRjUd1)Trr)V+gM?7th+$bE>SAN< zF-Due)mHS&uCQsQiq@B!XWjQ)T(@)@8Dd}@7{dw<p(?7f=+B<U|87YgIXITkMc1{Q zVUpg^!d|}pvLH^9G4=y975l)~DH7ezkJCZZ8fN%_p^F)nKu8z9dhelyxDGZ-Zz%ow zoxPlK_AtxsC?!0(F)6#Cy#(G>Be}80Lu!)wQV{cipbEx1>>g-<=lsQ`KyU*YfzJqd z7n31GupDG?sn3;UyMd9W72qjqZ;T<meA{y^XjuU!7&tXR2;s}m=-V4_uJ^l(OiA1i z1V{g6y^Oz}e#K}Tj+tqMHEIo#(wLrHw43W0@XI)_&(R+(l?T46VU|0;9P@NLq2CvZ zhztElf~!y{h|~DlZdchVj~;>Lnsjz=$#(3iMq?003$QFQ_<Yz6Qh%4eISUg$2V%fh zT=UT)3{0?vIhXrpD#S1yLh&ftR0dO=K6A!|&nq8EsNcCI)(os8^iHF8K0)*+Ehpu- z!sQIJ3`GvTH$_AZk7vvFZ<>A{p!VHl#N;6XPaDOJ%U)<%0XnM_&{?b)L0|GS4+Yx@ z37R$T-MN{IIRBOUi|ckCmB`~wPyxL5=a}y$`>h}7!i^M{pArI^_vFj1AFNs&Y%V0+ zy7euRmz@Cx#&jum&45u4nz-S|Hog_TzcmsPe}0vYB=ZR+v=(7JP7)DhQEz+yRE9I2 z6+J>Mbhw=!xIg;J^VKe8{p}p1>hGWMe`NgI=>u09>1kDY>m&A~vm>kJXX`BNf>4%R z*h%10(TyOsA#8W5UtiuRhkUepIIVV(iWXoM^GJJ9xMb82DGjc<Z@(9OuuT2ic<wT* zjo+`L+3EcKPUz+wn!^3K()Ux(W#w8wNq6^jknzl%AnjW~JsAMD7l&ptHs+{7=}-#= zML@<Bz|UhVl4(9sL}_#y-q6s9yS8{(;WcVOsQH!C%^6pMty4Zvjp2SR510r?`GLsq zLi1h-D6oFo=naNhjz7I$<Cu2wS|@|B$h^=r{<MCz%t6u)sXR;|wwp8h8kQ7CNQ_Pk zKq(D)rHSbMW({S>DEVm#@!O@!JD=Il^QFz92@Va$hM8~}KeAxb$#-0+r^)i^5sB(y zF#4GFy^AoT8m>JP6+@lLC{1oBoh~*2z&l><vdyri&Ulz)_^Q`|l#Yf(O<erd+LA?> z+`w`|N&4XQ(M8ac)e}wOyMX7N%`x+GfPj`I^i<N_CF+=A%0Jsre$m}Oz-`RYyK9XE zp~gj<YDXGEqNsP+p7Vg7F`rrRFt$vM0&42#G?q5UI?=ptbtdqF8i%pc2MJ@hwv5iG zeS;F-(4Rkq{yiv@>Azsx0L)0=Yv->hPGT%^kLTy9wTPC|)}qiCfPmcHY`KS5^JUbo zv(KnmbA0A3(CEi1@hxdNWthnXEH+r9P|}P?VX6Q2zWPXP$t@}E=7;SMhd#vWO;l(n z&YyeLpMOTHDgJi2-9$TGga8e+PZ}CeW$Nb8FCx~hSKg>j<?K&R*9GX=qK{xID>-2` zH9eh1o=Kmy(t1>Yp#2cnZPzD5@Cv!7awPfBSI_bsPfl!5lZs-<4`;rByAks@A$uE# z_)ShB`e@C}zpB*lcVoWY;p?hU2;kFv=_(>}P=32a`PD9ZJYk~iXrjq<t#q1e)wAjq z1u25f^p<ry1xxZkE-ciB*W^irGa{E~#-nj`z*H_bcp+3D0XsNJ&tujWK8BiI&9npF zp1pOKrgP#ST<*4QaG{0l!J<ifhnE6pPD_bh1~<KZZRfCY;E1mOn^ZqqJRC+dqr>*T zKLxVc!>`NyP9NPmbBPX(zl#nMg~;e}82Mm@f*WOX4U*W}uYRPKq>pjAm;GfY6q{ow zMkSH?FkxKY0hZJ%5=KFh5u*K9+<0q>y8DvOjKi^{EU7^vVsjV>3P#&l$@ccMnE>QV zQ$)=F3{thE_IoBDw!kZhJ^^66C+cl1x`<BW2CI<%`jV_F1<1IgtK2?qkz<;3A|3W! zD4=fcnFYPutSQZ$U3@zmIb3PkMD9hHR{$?F(xqj>L_?>&LZXU@I_YOIW6LBeMqi%) zeB-9mwRw-bD(PE7>bURoX=DoyGayb8l#FzPEXq9U#i^3%U#6MdC!F2ooU#E(O|p67 zecuVl1R#~AvAgthb<`193bxJoj<+Y2U`W$4WMBCra^gBN}utFkZs<BrI}CTn<E zr8!m)Sa0|Wy_~6oJTq|8l^riw?93XJXxG8sAr(r1<7?<d1c*5+Lu4lqYOor#uIqX& z4q2e0lXxEGF&D-Sd$J{Rt=G2_v?NkaK=drqFeO_W33o{mfZ6@^V8`Yq;ZcNF6G;Zt zlHs-6+jSEF6id3r$S%g{@&o%V3*}11M(A%DY34K?%ipTp9)3x6?|!QCeycPP$cDP@ zRAi}}cCb`26n+MceG9u&9ZB>at2La03#p<IBK>JY0ZT75+f~9JBY_gXw$3MLIj>iT zpH_MbqNmdG8tQ+~kmKBin#6zJc(eymlmEh`$nhtg%cb1+6`Rk}CVrmXAy-P{B2^9R zoz`%5TytF(D^_8gdvk5tSvpwP&tdy>0Ban@N}4uifc4S!#@d2f@hf)o-YSQ^x=TSx z|9z|~s1Q&f_5~`vMvaPVra>h?AXr~V*gzrWd0M1o|7i0soNUVin=<DiM43{L3(<Qn z#m#Bfi)+*QtHmcau~M=J31;=SVW05*VZ&6M=b#<Q$^n9w-@{G&c1CrZqDFPA#5QiX ztzNWK69@p>K_1`DbKhU>JZe8_k2*7kZF+9!?ZWovHBPI+i&ko{+mI@s4Fcs-_Pz{H zmp(2%X7qoWIO7ri!^D%9Sm&3C@Kd|NH@vQ<^tq^qk#A!2(6#8x=0^C1feah?`e^<! z6+_`Oz`XDL*j5e?#?Du3ywKYJYjK+UXiJK#$2p*J)RQOA0%%ZbnN1+niTmYzJJuG7 z_CA`F&Wh=`Wh{IO#MrE}pI;%qCxwCfhxA_FhhnUJH=JeI!x`(N@BpC1W6VsvO&4#0 za>sg@C+PIx=FHvqbgn#&PyskDv0}CN9cU!nQ~!YY<iPj5XRZv6deJvg^(1!zjr{y@ zGk_RGO?~fvr_TI!PCdG?=L-<>SWF;nHcmTf8X#|ahHz)HuJ;VACz`K9jj#YkanEpO zX4#4nx}fIq>!LsCiq026s03>X09C9V3VyIOhZ~)9u<>2$I&z=~0FM4pFahqpO8JZ5 z0H$&$IRtP~k0vK%xSPT=^96vlnN$}}lbux3lkw{{^u>HWe#H3lJ`doUaiJYPy!*q} z*+Rv{3#q?qH@}j7P{DcYLGZf`h;r*{A7X6|`7iqi9%~KzyZi$&X)ACj5kQ%+A+1;S zS=WRSKdA}4Y&p+Ag6$e0;f+xv5AEFid-9z6EsMMv5?5mtq}HU2|4Kl+@>0MB<OL_< z?Z3#^tY#$zvImCVZ(3TxjP~gLRtg38&yC@mn%*B*b8G+&GtgzrULFoeY=m&aL|<%) z*@c%8VmYm^+|!?<OBmBn95b;n5<yNZM%;)Rfw9ZGn6ND87IZ({mF8u&h4jfSFAg!I z)_Vogj3CYX?dAyc7iBNNBE0UmX36&|EaT<xzTS{>RU2@#jS||iDvm&v{ejJpHSw>( zgWylZ=`kPPn9*$SyUHEJr%PX^-=g>Azpr{l(wGaqq*)5Ros+gEnj?y%7UYp?5Dx7c z*6vTu4f>aQ)k5dqFZgQfP8NB|%bQK^h!8)Q@%})d@a=x?RKTpSF5c&6PHYYmRW!0N zZ~p-5MVVzYMH%38F<^ZQ09RJ9p}H9X&1EV&X@fG_WtTt4S}89kH`mjgyOd%uZ;|S@ zr@K`Y>^LHz#>}8$UDk$*Vy}0Weja<X%!TNGM4b-UJmwp>fy7S3=-u~%3vQCF2Bu)- z$JEQqGbuBj$eM4+r>RM0F=rFATpXE!ExpnsT%>;s_ls`5_jWO4mq{=XTm&l417Q%f zhE=WcSEUJ%Y1vF)xIDYD@q+yVk__=vr?|J-g1<Kr`#ss=fjrp@O!$I54dy;C0QAqD zYtOz8fccnjxR7Kt76xI*++5`oMW@AWyC;;r1Epx3X?=6BCk!OYSEuH6wXhGbLp{V7 ziU5G!v|_Es)Mvr__NiaK#trBqG#WI`0qX*2P+VU<bF=x!C36_3zehkOJj_>JBH1Vp z#WnC~(rPao@F~q!=T=rc=^sP^;J|jT6jE;W392X7(K%Lg|0X^qIBJIm;;C{TwJXNz z2yiIMC5S@^Fv>zv<<XlegNnxUOcTiMsQiZd(9l%2h6?xfs;G)+P-{5iL6m}ZX?a>$ zClf#5di$DMEjAC$G8mnv&d0Nf&D#~rS}$Kw##V)Aij<QBp)Nk;J6wv>>I%pF++tCb zydywJ$~U0F=Zdm&siqOgTln2~O8j)}rN$}V(k%f*(5&d#2lRBVA^Sv;F;CmqOG-s^ zA4e!Ihfr3!pq#~T%4qMqP-zflWc(bk9hp@<U?vF}NCXc4ClXS`CXgkRKq!uie7z|+ zo0xx1^}?q9Tkqz({IZnSI)`M4&WM$`&dKjMK)gd`H{62K8>5`XS#9{NI2?GQba>t^ z(MdCWfxzw{86*V=$zK}bb@X^<ny1_-LFmi%n{EEsDJo^M40Rb@Pd5IG4HGTnq4_iq ztUY2F-)dWol!(Z;*n5yT-Tmjn!DDhp|79?M5SthvZe!S!5mLKh*}J2n$@HWjpE*t= zbWSLTpF5m!(bC4nWX9b>moo*Kjy1&=FV)#w*G1zdJXaGf^WGTz9bJ?1mzbm(9*gn7 zr%>{GfatW_`&)4Fu4|j-r+~@&+5zR^_aJjc5lVAWAQ2$|7_0V90Qr^p3?%>{000Ho z1h{CRZ^kyqGUu%6o$*qpo<|q4_@N6;+X{$ectw&%st81Rz-##7CQ?9(K`6XDdA&h% zZ>9eTo-&+4`-?SH7lFg*MvEvY5fYaeCbAoPt%YApA>^GB^%1Pj9)|x4CxoP)iiXi* z3`4Xb9QN^iE$3S7wRc$rZekS+q<@qdpr#BH`!D=Nl8i@Z7x$wF*Kgl0L*1o{yB(5* zOGBKu$WYRQq4%H25u43V`ZeK$%Fmi%O9JG9oxj>`So%HifI)cBy^*Jft!7g!vtsY2 zt%{{*Bg(&WBYkuqR6N9&qH|2qP?36+17O)J?C97vr3(zGHHl9hy;xGlUA+6AkDVb> zyj9u2R)5aBE01QD02q+~I_>aD;%R%*({?e5@bbxtiqSLM^in|EKaACqgSB_8oE-Zi zRu!wZ&*9uim(H1Wd8#?D4|Q!UJ8$I<m^qHkLif6(Uk=JmUBWgt-Qewff(-F_?!S~0 ze}TJjynq=jj1q7CjQ2zud)?YIt%Y=7Uk`xXrK^sS?u|yc;S2KpT+sD<ftK%!i0qn~ zXBes|W11W4Lba5ywtjUV6It_~r$@kGg*c2hnS6SpqDwgDjE*sTn?0+dB{dWmZtz^& zMz%@!;hpLC4nLht{@JNGe^mlvbWa;U-Js3$L)_Q4DZKt4Q|<>^f^@0O#rkpM$^wAY zoDc&djuldb5v+HsZKLA^pBE94V>dk@jC5_OGCVX={22!z6$ltK<*uNwbgtOj4*Sz0 zZX3v!_gB={HdYO@fw}EJxrfRCM3rm@Nq7o)S8be;G3@4wk(*mQHrO2ZJ5#8=)mi#m z5*>iNu-&bU{31Q+-DpWXVwq2{s6!<Kna1x{K2&Gi_WwxG7xY89r+77avw`bM9_JB0 z26(0g8r;YY@uoXQyHCCr|AUsNr;o~!Ke&H?m~<0KGee7rw0W~-IR>OaB&si-oi6sU z)J}-izoP^s+aheUB{3UH5P7Q>vN{Nm1vzuUHS6zetv5!Q8zib!l(7s%s-FW|0igf8 zqF7eO!<-T!Q^@1leO-Ur;PzJsqZSg^qvekUp}$)Db1G%?fy^+uk|%Hgu}q6UNgz^i zvYeE4f99fql$^F7$&ST=&Nw&nUQvp4_{XS)-=C@+g@V9s#k`y5^+^VlyJgz}%BNk6 z%6qxoKyA~2IbVXN<IFNEhJU1gV9_cq<#_Wvy}eGUaIekfAUo@pd9KdRw3y=8=?8?j z>c}Rwj7Uq&R*6`=Ufh%H^M=&<<dxe-E2Fwc2wQi7yyiAyMDsqdt)_=;mJjaT9|Rag z#^<1{Yhs#l)p6Q`yus8M<q-W{KQU0bN^hT;2WDRG=Y`SJ&=>Fu5+KhDa<;Zc3A1hY zuNpk|0@AT~M-<irULOeL#4Y^RF!1ks``41at$&*aXMUxaH?wkSQiqp{K`h(*;LVLK z^w06&CK!mwsIQzD0L?kvwqQg+j<6dcPx{=?jn`0eUL|wZuyb`dF`4F?swY~brWim@ z{OqNa@Kdtyj)hB-K<Zb1Y$U%2cJ}dQwgr7_{e|+)WB+t~x;~gU_)SOAX(Hur2tF|K z6fk+y19zAo0LT@zO5IE8Uq+mp-@G`TzX`yD^nrG1v#MR#P-s90d`#(XdGw74W*Lbq z{e87<ghX6#PNrv5dOD?sU!KdhT5Y?Sc*&9rz_wEgou$eSMhe}(dsw^<(p&6Xq=N(~ zWL|BGtxPTh^>2)n(?!<;LR%236ve(G3@~;uALNk@m;5>PeH()?BiymEBL6LV#6gGK zR!Vq2da&vNp@5q^`=;#IwS4=!W<bqyc)V0MuT@YA{h`><x_+pl7~nn!*8Vo~048-3 z?6L3v!tZonc-uKOgKA?b(^cdfDledqJp^#4_%!+#C0U0EYEo5`0BD&k<4l~|9>|6f zKuq7jH;yf;Vs<)HU>}s_HPi;O!+d-4$^yv#S$?-+v(8~88N$v0(XZF&#GYyoxpAu7 zPOf*R-hn<@#<sPtyQm|26!c6fqZrCSpv5N#dzYl+<eaj(c8s~ag|gE5O*5n)+!G83 zn*xp^d^|^Q<Qm-uIICtR9*9u~lDrF!t%{L7wX1+x1)m@2AD_fYOrx2o?x%<tk{>>_ zNK&SyE{*n`XbN)z>`{G=X~qj;{#0;4OvM)(N}3(0MRD;HGv8!2&FOjA6b#Ci5$+hG z*2p4K*N;E9QU(3f%O%-R{PDh;n!<1PnH`1LFWjK2By(2JUBXQOnvLdmP>z>qimE|# zpx;kWyM)+oQIoRo^qcymlQa<qC2E*q+);=1;a)~tiiB7OhJY(NT;Ww!*Ms<HX?h6Q zJ5m~WWWUC%_5#z0mV_VQ<~YA`iw*V}Eqom#OxC{-aLA|#I~i-LT4KM!xc5{KaKhz* zly=4fT|RTL-FSspga?3>IBC(``j@tpSsB9U!mpU%&DvKeXBEe7DZFaH`3Y#BXfNh% z5w@>?-Sne;)<l?&k{rP~^AVgPY?^VKN(U7T9U0HFd(smcMW-&vLk9^4K?MWpC)3t@ zVQBz9UI+v$E2*m{0bwaXs<VW$wrQkvPre!usR@T^4HMg!g!}=waba)0O^FWz>lRDg zb05h3*-T9^^sq(vKu^D?SnQ{*Ta^(&P56R(w+dK?CU~>*nm!0vZ@EyT0N~taKHT26 zJc95Odz}9Q&|3;~MatVnIddUb01wjigi$uJq^a>*<#h@Yu+ujiNXMOD#MTp@``2H4 zO`9XTwt$nl*HS<GfOfBtIhZHaf4A?}xoa~pk_VvLPO+H7XDCoKJ&<`d@t<H+Bi?oe zw5ZHflLU}^I0O>>Sk_&UK?ltMc18SY3E126<7+diU$hyrq9zypGO_u!mjy-Vz|7{M z<?Hcn0FyuQA`dky*LWG@Wj*O{Nj1-y50BC_4(<igCQK7e7p%``XIe*bLrBi}Cf!4J z-v<+Ih|1H=U#tt-FRI~H0YrH>aEF$SbUlJHN$Y9uR&HVkG4I-o3M9X~O}()%J)oh> zW)2p{dA$W+zJM~L${Y252A)oGD>9^hIrwyfR^jQrl73m-y=~KV(u}gTk&W0x0tg7M zY@=A{EC<_dqP>MeSGYHkE`8A0ugAE}Tu(g|2#g=I+QI~K$df~W%BlKAZy7%In%Sot zZx*=gJ`Q+sAv1Mi-z(V>G2xC?ttStq#m%Obwi1MtGvPKysY|J~<C}DqDssb7_)s?b zZKwFkBQ;ta9P?~TNtT6fkJ-L&jOU+(!N$L-<e4z{Qt;+5vS4B?lRr7%oZ};#FI??R z>f}tEVD7+=FF3`SK0HLDgVl}D#*A(ZK}^6AZ*!}+BPB(=12DJ8%L24_d~j!tEPD2X zUL?+5QVE$yRf|16pu_?k#C05ZOt8VL7e8Or1a6e~21wUX-Dx$jR`S;x86)`Fb_-39 z&!2=pm$9v=lQO#{v4Um~!rbMP4%CN?h=^6&>)=-c<!FP|z}gHo`xmVwS>i=AK9w~V z*i#pFP=9$UdqBxOE2Oc0fR(R?9-KZ#-e>`!Tmpb^D>;TNaC=n@*0r(f`g2M{sGWZY zUFZl|R@DSx=`q|zJ{K6C?rNcmPluQLmfWJ9@Y5svHiKt<O;V(Ye1-jeHgcf8#m=y9 z)62;9qA~9lzcFKw%nx1Q7Kn4lcpUkK{E>aOZP?h3V|Fo?mglA)0i;EXfzE8khjs^S z$=$&$D>&1?BFmG280jT@wt-l!79Wr10<edUzfC*X$krJcKZZL|{s6+2&Y#4!Di^7d z&;L$xIc2<s0gXawA)bcbIr+@m2LL{oR1cf9^PFgK3&nX&dl#6*M}mG7$g={7>UTuK z7;MndgJD9wBbE2LjB`;uE*E<(G0OpfsU`r(dlfhKy?vZz!rSbA9{da<M4uh7Yg6>q zS=6GCP!I%wr*>{!*g)mj&Clz5b}q&BMiB;SZ0(S7huGAbGaE>Vy1|R=2EhL5ZnRKI zw(8=o6ds+k7ulOL0rp1|F6MnDy1wjNP|3Oj9KF5;Nu~DipNpsGdBydb#kK<i(^#92 zQC@|WC9je-Cjs<^iW{or!D7JiQLvf(b)OAxLbuVk+tXI1?J=^Xw{((}cHznMkodMJ z4EfkJBRP=P64KmnU}UdksW0Z8eBlY%eR(=uy;M@1K?Lb(2T=l^B}0SB-;KX86p^*q z$_%WXiq!ebu&!srnAX({+i=~>cYv^OOPRx|!q@?*-a;wz)Kis(Hk&zGv}u3s@T{+? zzH41jh$$awRUzDKZW97)<i)OzjC=DHzy>zzwD1A5#E&@VM5A3+T~I!KTO5hgyHZIR z{-+Q<leoVvdffG4zH!V3BZ3`ovyf%NE9@mQ#S(z-NLtv2!o+N!xD|g(@&a$EsP;&e zcG<2ERL24#W%5wG9~f3hI$FcaPeR-%tJ!qMuntZ)qj4GqPF{3U$SlXh$>*{bC)*_7 z2oG}@wZftT7ANAEt*_4AdADaK43`ei+RROzm7Z<=Mwm>$RMOQKtw|o!Dz^1bmKizl zw~K0NZ{Xx@;K2$h{}NKZp670vyVN5#rS}!x!_Hj{<iBjO4&%?-OxMIh6@^=l(I<<< z@e$=fF=%%Qa1Pkulw<w5-9!um%?3uiSR6Cm_O=pP#scj>*(L$N^Zn1ok$GVfknCDr z8Zn3o1NvV*IE)}b?*7M5Fi<rdypV?FCD`>06#M`v!42HwMp}m$V1eReZ)<lM5g)|C zcR-wM643p1WQowzc6?C&<B9dF83RNGXZe5qvP7tLzyb<>UW{==%nd~NBSiIp;$EeV z%`@ca{^7F|EYR58C%h~+eYI767KSur*h5AOC?kl%e?wy3S9)G6Tvtd<XaF7|o!ZTz zESJ4$Pwe=qf~ou-h;waW1a&D)DN$q-Z<E>6)jS&FoZ6$Kb0ScU1^Os-oQ}Hi(DT>n z;j|xxf5@XikXz-B%y88_4#n<|>*K}&eSC5Z)I`H+2loFN;Jy=$+G^ZIqn1|Cw)h9f zsQV}`tYFJ~Q0a0l_wq#w!PlK^i2>pX15%RYtsHRyEnctE4eo&`<N-2KDGz_gxG6~h zh2`y@{6JZ^r`sP|E{Rbs3{ctqHZya;R&I-C6|&%J?8X!$SGx^dcNwsDmxvtW(C6XO z*ZXFe*v@?ybdT-8VcNsFf92Jcu246;>uJ(z<^8;)uGTlu&Hc^vzkl3mHL;_IGC|r* z+3V@$eZKy9@>*4@LR^%ozGb)fnI_M^izR@?E1l83wU$0|v9^+I5`t}yy+NH5E$;mT zewpK_>fVDb9-s(*tR%%Yk;nZSt<7bAG(%3ZUhI@vdMym9M%XxNfjXmr_8op^<EW~l zBR76F-Z2MAmL~%$G~(n7>c-ndLJytnR#{-7@ASgZz-MS-B)h^X%JABa%sIu-srIb8 zZU#oPy_9elG@?C}k}=|Gh1GPmf|F_FE!05>v%f8^KX&Ff^5(<LECurO8SE*I(j_)} zU#dCzp(NddD1ICce7n;U?+xPAOjRx7L*y8FmmQIxEiEg5eqotUkrFi@R8D^G`hpG= zt&^$<H2L?9h4n!6bP?jv<;KW&EyjF!2^5^}x3*}Wtf3}w#%DeAZUJ@iZQm#{Pq$n8 zI4;ODHt`7_DA+{LpTKuxZoeSW7xu4P6Hs)^q1kkzdESxc`G7}P?#&tN3kFa$dFs<t z#iBunkx%}52Ty8y&Yu?tZGwXiGzspXj+}#nY4ZPbaib?>UtJO=<<Jp#@%&6_$VFwZ zX`TBK7O3UZ@XipCTG5odpk~!>Y%5SIHRPOkp0qz*&$>z`0s>j92`N``=u!9lFu<SR zJT#Xe@D(3(_M5M5<}&RdaTf-GM%1d5ggEq4;i+~8_mMsbDL=1EM&6issy`ZSIY)h9 zgy1T!92O{<tM6f7s=`Ng{nuf3iFO610vHps{a1Ommntk2H;TnF(fzrYshe|^ZsTTb zP&8K`RbO)a`i|YRHQ@3~3IOwlY9;ar_^T>>#%t!S$@^KZ;JmJS23*il!T=XLX#G-o zQw5&5SN2#>stfMs&y-(Ano3J|+5endQ;=HpIy0HwbK4(}S08E(^mUzBu3VbxTLPCa zyvG6!7tE&JTyB!6qd&0foHtA^v?Z}(XD=thiGy~JH<t~Fpw<2R<<ZuaQ0Sx0qw#Yt zo^pS?;-E#0igu>|5t&h)Wh8LL$Ylit(kZ|;+Pm(}>TXHddlF#k#^N>K7PA;M5ye|x z>+UT)mG%6<)KuTbsLQ%B@DXFWPye)TMZcTTlR`ruOA{~XCE=6uud$yMd&EOP!SS2% z@AfbI3fY831@p_R$h&@%UtA!qrxR(?Q#=|;b|aO{tGUZOhrnLQE%fEJF*ytLs=B<U zw5#^Zbwt1Igysq3_oJykw~h-L9+8vCN1C7(w#{9^jC5#%uV3?hKAMk@=q_Jbi~F6L z=uw}oyI>3w;eVgtW}VBzS3g?w)GS<<2lTzcg*%F5Rq;H@+8WSVBk8oCKb5RpJ+1xN zv%7YC7i<u>&~sPQG>m7A(#XuLv`gU!H|B$i^Ty=ayt{8x2U1k@^jACdCick>WDd*g z4omle8;Ae{BT%t3sJA-(+H`H3kDV;4C)+kFrb&{4pLtTy7Al#KE!%}}2Ji#Xe7S9K zt#%4M{nGWZh}ut|$IE6%C`O1J-~9Z7uleT8bkSwS(%i~)j}AG%KW{nhwW}Tk<}W{o zXvw#C@KiKyUR&AIrCBdKdUrPT)v9U!=J^Z-#go#1E0QeSZu(i&+t+Bg(T@M8nG_;$ zG};r=R~fcX5YE^%I$;XMaB-#X`XGLD2hGpFsPC3+Jc`@&@JB9%$Ne8S{%}D5=Z!yl z_1Gcw$ew25@P$L2|IV2KJfZ`2EWNzkWC!p!cs|H#xTeJX?80wgU_u`yGeUFV_T<G? zpLva1>eQN=j(xZ=B<iS}>+r0no%-(k>E+ciY>+P}S(NHyidYq&UmB48eJHQ($&lys z&x}6M#-0~jvWaC2h30-*`%+2pNCfYrz?DkHi3H@0e@~C`H-)9th^v&(r#xu}7q*Gh z)yco_gOZ&faArSCOi&hM(^;{MccXWJmE}@p+)bId3S5gvv?03`C|o!<8~c`Wm*dZ} zZ3n~gC<a?6W#vAoMK`5u6A(oT5;kyyXhF{^Eyj=Y$Bo)NNB&TX!NfS;?9hhE1q)>k zjN;R2xK|^h%xW(f{d!&K@(}|__Ox4yVC(kIS<hM5X8Ap7UOaB@tT`b8*Y;hy=l7sj zO51m^YWb|ZiUx*O`(i_5%o|F&xlGI^<W#fiC_%yML*L%TW@D}vL*=u^s>Q$;U1s}3 z<s>BD`9}ddnHm$<F;R~wdKz||h$~ba5Dq~%GGUF%GJ*+x4p<-`qnLH;_ckAZ>v}z_ z<iqz;KdDJ;>!4f5$KCv2E+`fDALkvNz4=^hFLm;!)`(%k?LI4r>0OJz0QBMc(~aYe zGK!K~pSl{a3vWOFjzTuf=&F*h*~jK@Zu#WF-VKO7PfJ4kL@bb5s=^2B#}(5AKeOI8 z{yEir!m0DHJ;n8)2z`c#NH2V1;5w(K^{qDFucUFtKW?>x%Iyc%m-rINi&vH`r`n~q z*8UDW(DXmGK8M>eoiRm$&!(`o&FbHu#LIslmzka>HQYV**EfcuiydHZ@j)wA!(Gwz zs!~~ZJF+5(-)2S-hY#dkeB-OVd-4M}%gOZk`r}8DSQTq{Mn$DxP(<VK#NLtrl&P5= zd2QpEn^8gy9G6G^&XSZm-gf96P(d7}dkC}j^n=P{3A-qXv%!o{ss@6O_BB2!LUKbF zGfOY^oV?coN%jZVtPcLbn?F0ac&Rt0m!ca80%_zAH~M>c1T|zQxgKOB?McgkKm|<S z{Qb(g9#$R3?WjJ+n>a^UIZZoN7V?Xcf`YmAeOV6krkmF377w}{5Y45Uyn`ar2EwAJ zb*yBjv+v+NAW%wG>C3#D(=KOX5)vB$l`3TpQZK~ivLsJA`h8j2A2MuE9u2Gp*wk)a z_QJyW{E-v+=GuyiZfPizD@8-p<t`TJNqA<DNc7jQKG$?tSGgn46<}x?Spz>;j<^VL zO$sjvM15zVQt1KT#9~odTda4h_uK_HS1MbKA)rur!>K_o%<p;Z4QKY`(VwEw{hjk- zBR4H1<6~o!6^4zJ5!Gx8h(~T9PHCr@_q!)vMrO|Iv-0w-G{jRTSGk@?7yc#1v>8E& z+_vRN-4KxWorH{zk$np3tNDlYy93q_{GQ^?mvFV(mmU7O&rs^wv7EpVRmhU5q6^vF z@D7yK8m^J%3$SrF26d`K?u|$&cbFzpdJpsL<(W(_dquS`A0EE#5Lz>B@WAYuHd>w? fR9)ZPAp#|)5U8lXdH`H91A$Z(VG3n(FGKzx!#fzT literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/67.png b/src/assets/all-letters/letter-detail/67.png new file mode 100644 index 0000000000000000000000000000000000000000..7242093a461d289481d14b1fbec64105264684fc GIT binary patch literal 16533 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 PhXNF3)nv+_nuY!!lbWNz literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/68.png b/src/assets/all-letters/letter-detail/68.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c507f7fd3d52e5030b77b991be348545e5fae1 GIT binary patch literal 15651 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 I^)lpt0rE=Vpa1{> literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/69.png b/src/assets/all-letters/letter-detail/69.png new file mode 100644 index 0000000000000000000000000000000000000000..eca51351a1e38af5bf445d5688270360c99c4671 GIT binary patch literal 11688 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ⅈ=pnAsyTJ8}nn|)+2Z*6_zsD?9d0bFlQAbbAQZam~-W`QJSk* zyx97*7rAQVec`x*Prp^vCt0Pmu33qst^SC*Gwt?N=P67%1pVq0C%fG**GVlkUwLa_ zm_5weTdOW{Dxq&|EcLi3M%g{{YhtC6#v}i@BT9(LRyN4vNDb}|E_zfdqYeGjYt2M* zb#<G*+txm5$%B5^b(XyPQKHB6D-)pt#$hFv<lz8=zE7UaS8iFAnExJJppYJvlXtbs z?9;3&;YXaETy1~<ij+*k;q?oRL2d_6idDcc<F>>>sQ59?ua9H({3_+g{ExVT%E6^$ z=#OPK(#dfOTZWA$niNwZ+Y$W!tued!`j0oW{OM=Kj#YW7E0dTZwGw=(ed3%^zy3R$ zn|#rA`7+6d?yK6acs8F_Qf{0~l~`inn=f-iUL9t5I9lj(Q%;+|e@o2gm*MAmBb{DK zH(cV66#uwmu93#Y4mqC8c8<z&G&fdQnT|{>+mh}1y9J+pL;WT>(dcGJl0(I01$%_y zNG4g+CrkJ6I|Tyb6Sd>Y6cQn?2{KR0>_}?+&YVg1v?>8H@B_sdD}EIeD19)qyEh{% za9h!>0%WM~&Pfu+1ySdByXSwjCq)@;H+6O0z+)#ZN?uzNZ-9?X5|JinYir|_%Z$hu zE>*<cwXH@kKG0pAdAi!MwjcU%Ax+Blff80dyJA6}n7s9&^XjQ5WSap;1(pq-eb6mk zvI5`ghuI=&DSJ!g1D93d50&fvj)Lzy8(f$m6=97Avp1<z%R@d0as{n+;^7VF8$VX{ zrCNWCw{n2jq77zAS7%0llBcH!m$u$*arxsyLW*v_F@*L0u(uL#OcsQEGag+U_)8}z z_R_?cT77-j;G_adzp#aJT?qU!taO*AZCr3jj(30P3E47^D86|;GO53G-~b}ElNm-d zZQoy1t7MEKyhq$9c-27h$Tum<T~KRWFp?cEeqEfW>DM{U0nraxML5}H-^syznSa(h z-;zkmx>{&bFgZu@kny5@U#gAMv|b1&ukLclLVWuOlbz!WZj5iI^)49d6rR8R=l=rl C!`ll0 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/70.png b/src/assets/all-letters/letter-detail/70.png new file mode 100644 index 0000000000000000000000000000000000000000..158a2eb72343e7ee7d4c8c1875c29e286c232aab GIT binary patch literal 12238 zcmbWd2{@GP`#*e(P!X-DWPdEhSV9J)tWlAjgzOQ<GWJ1{rHE`vma(KsmgyloBZQDW zWFJ|^5XP3Vzt?!a&+mPY_x&CJ<M(?zj{C@5_jR7vd4A62I?wyMp5N2fU_O4~I0Qk= znzvN-AczJJo>oSBFtYve!7K0|2TIKZrH`~n`B-__K{suY)^^;QE>;e9dUjT}e(tSy z3J^r=>u6wtGP!#PZi93Yv!c!s^L23p)DWbg<m+Z-^Vkl>ZEfe^=&H!OTwTY@?P#mW zYb<?N{H~jd-6O|a{vLMv{@MmM{*P_sY<ZOs+zP&Mz`(^0WyS65;_T`P_f_OQ<O>IX zQ-@)^+=o+8j}>|U5z6H5J#H1GhaI=Hn2e~6gw%CzSvfHYX}Rl?*RFC)ic84A#N}WT z*F?o7;No&{aS87K{Nn|ydDz;+^;FgWvljTJ$omL|a)ZNQK0ZETK2l;x4+ofpoSYm? zToNWJDGFwYdiuGdtb9dXJ^B9Splau7<KgIrazwgvQ#o2$BfU_Hyg<@_RB&;-d-uN> zyL$cyC;%DE*UAkhAtnxUaiQvUINKAYXZL@L@!!t&H1Kn?gX!6MBE39pfIaN_{v`(3 z{ht@2P6X1xbvzt_QLLO*kv3i~cCIK*RYhL#M$FdH7A|2YZewL9B`Yc?A#EpmP1?pr zR8Gc5TvSd@##T~J+Ez+h+WKEU{~f)ggp9cOO_^)5GLkY95^8dCYSP!#RaIqG)Fjky zUXv65msZo&6J_OUWB2dcj$rNo&`SLuY2hj!c2+2)hXE4l{I3_>dxS(GJs%<6xK&iB zR+r@#x@%?Q=t><FrW)!Wy;bcz9KG#q)jg0d+=ocR9se6C{$~jMLvQ>47eN>h3PyF8 z|A+hhI|O`^`saTI1NiY@;bi9uV#osoOZKO|aR|EdTT}I>f$#9|u@i2b#_7bB;0gS4 zfPi_e-B1i?i~A*O;v_#m|6lG6WOk==nUbbYOlH#Ul1xAFPQr{#M@!{DmE0?NHuz)d zq_k!x`+NJJVR>(VI5R)Hm%zr;%6dA2pDuzw=xhAd)_8%j&77T##lB*dNX}|6v#K$d zKqbQ%=a%@HgQOi|@a7iA=GHCrulFu&`DMdHMjp>^1z?4ytclp2q+79(^Aca@bhG1+ zK#ZKk3uCCF9sy#2fXY|DD<`Z!u&G%ySclg<{2EQ`qktwixuJ`09vx#IffYC5`&qpn zn@yh=997@yrFpUjzwBVm%OWJPB->PT5Tjw~zg5G6*Qr}<=<zq-%MjWMBwErNuc$%L zLe=fj<z3<k>GMiDY<DUvWle<QI#KO~88a%s7+#|<{Cv%W7P4UGRk<p7G3ZfqG%S!5 z*T|v{ry#tiUi-+8jX5NKW3KrOK`dG8AJ#Bk!83vyc&<Fc4y9wH$guFwfl+qRj2#_R zppX_V7_ItS3B8pSs`Cucm-_ewt0dtc3T;?n+oM)`X&^M6ff+}0x^ND$FL?V~$%(8J z_}DtH1((ILQDH6SH4hrd2uAaA>hCvbO1lyQts@k&Tv8Wc>fu<ts&;Av<L3oIkKa5A z9w?XCZ0!nKX6yJ8vaG*T=IZkK$EIqlbPYH3q_hjMWh!E|yM#gbQrreZmu+NSDz!|T zS&Tf%HApuTvC&F1bs5*VxRnmcX>|K+0Dn@amPo=WsSJV|!xPrx!q?ZFq#b|c>xm}Y zy3T+2K95Y$nC^b+VCT3`ae6-yeag6QFDWAS_ws#m;O}P9av{6Xsb>~AoX(iI?M_kt z^lJHU&+(<WEap_oJg`&u=-<cuNR`;>l$Oh=@g=t0#0m113*l9ZSCr&dzr1CbXjQv< z(6UvapB_{dmUXIf(!9JiqZa8?tpI)5&Z@4%UfzmR@LyIezAn3f4RHEuy^2o~^EcHc zSEgsME6rV74{w%f6D_Z`EE?L>exBk?I07xC;1##0RW@5`H+NrtzpLYYDJcBIgoP%N zC`Zvo^aXrM7)fnKsgJLWvwSm~*t;x9zGLA6eaRm#6II&ZpJ)r5*n53#p;WsU_vmXs z0@t;xa1>MRUm_gqQ~b(qury$%j3v-un?Bsviv~hIB7IF8_1qkst`xjX;@`E`)2tkC zck1#iv-H=-75}Ii+**oBLLay16)xW!Ip9Coo!AY~bSSRLhMtu4n!3-tEZ4%9bHfmu zi66>p<9)hDT!wav7G(EkLc6%i1CLG^hK(kt%N}?L)Ky#5ti~N|+g1J^zUU`F16?Wh z+tIE>b!~V&JW$fCy>HrD9V4q%INlN~Ha_A`CY?*u%EJ{+`*4nZR@)zQIJgtuBD*$E z1HpSol!T0H>@YRtb)8(j2lrd6ErO>8_AyF-+I~Gf$AB4k8`kUCNn4(+*>`1gt}{Ta zwpb=*C@bMEKwpwkGJ?iSd!llbDC`(9*g{xhybResTg~NXSBB3fRC{~=$<O}LafP&w znj@tfL68aab6YKM%ixmT)m9DT-mMvD$3Kces1+^+1`I++=l7q%rm2rQdv|mu#^3eP zLIr9RbMHk9zuA=t1*J95hR0pZBlN-KpK)P%g9mj|87bxH$b#~<_4WA<7WC@c?=MFn z6Dhb2YGCgBin7C-PDvfki5Az<RaYV>Vsay)hwnteI0#MYT7p38LLBW5*XFj^MPx-L z`KygavV}rG3wBz{LMi*Q_F#bP5vZFP?uq*2>m7b)=Ov*!aCsn5yWA%<IX1VPr%%2Z zg1Ya*15osS?TVE*9Y!wFQ&UL5-ph^gRA&`>Xig?w5guCOA6Qm<0gVY73CjuRSzceg zxh{OdztItbLNcXpImEHSM^Me_=g}Kg+lskg`%G_^?{?PBCLV=uJVeoxuC6LOq;^*H zh3F*i;*(i29sU$mZgCoLLaajRYVd@b+zFgiCo^7W^wS=%z`O`-Ip6q)TjW)Un^FW@ z@+-dKkk(mc9NKk$#|XCkh&}xG(2n;<W{B}<x+Xle=6aHs>w<k`m7$+6cCotXc-Ki$ z?cR%|g7J2Bro9?npDYReXp?9h9b{tnacn>%SDs|`yg0qQ@cjq>{yq0ssJ}?g{wqV+ z&aoOfQ({eJJ2Qe9>lu|iK>#6tq5}8wdE9~*Z5O%1g&F#yRG!y8@$0!I^4F*=_q;9i zQLE=zf;TrNwev4ny^qMkFHD8wNYiV(SpO};h|l7&55Jl{2s1l#a}f8PryrK9<R%h5 zUmDHi&Oinq^D&{D&U!iUHS3Rs-u^Cv5i-v6L5Ar|Vlu^=*0p=jE<?{M_<jsJ2G$M? zF1q#(O>an~b=JHo{HjkjukiHQJV8SF{=Gjr<KPQDAv0up)_UVcIyb6QYwQioS_Rxy zhLe3AwKQa0N%o|)2Il8+tt*CfknRbkJ>NFcz5%cB;?Y2l?cs^-^$gv`bP3(&rVPX! zWwz+t%Wm2yYur%!LIpm<CzKfNA*rKuZ4KqTeJ?qr%lwP-9L*QMGeKh&i<KeK^RaTw zk7AQ8Q#v*a0>jqdDC<1MorSJr8gwiN2Yu_K2BUjZh$wVhA5Ob)Lxi*OmB~aV@faGq zp&GJ0y<t8;-d<A7G0^$$R{XP%p~H5dOx#~Pwm%he3kt`01`ZBxNuNN(a^y<E-mCfz zA8Cpf94O-T*LW=k3p@&;<aXD+f?m%4U2C7%S#$5sv+A+SjU+${lCO(k==m7J!fK)t z^l;B&Ig|wv*mmTiHtm;fMnqsO3+2w>m(W;O7HDpJz_>-DoB>+6{bg{EAdgUIhaLuc zp=m5PRaT-|pieOcn-1vHIa9PxyadWR<q@-+;Qg`fDxG-<8Zd6uJO)8@T>q=*34s>+ z-#n~n2>PEqzGtv>CRaX=y-s2K(;j-T&?mXFuET#`=iXUW<>jCDTcOJeqUzD(U}>Y% z=#QeMxo7k;<Y)IQTuOzGE5q!Y?WUH>S^bG?kMA7&^qSMs#nD1!P3kOdoYh}?9+O^m zYCMdH%#s+K#e-Kyg~}4F=~33BiG_o8>B_9=8-kn|(U+^dVK;2&Mp7Hu7UNO)SZgrO zQ14KlTP3c+!^*K@t1h!#nL?fI@U}nx47x>_j<@j+|8(}niJ8wq^iAB9CrM=iZRS7q z%-`gmkBq)!buYYp`8_Kg*C&s~vc>V)cT+01V&V1=WFGvnmq?Knpgf7WfKSL_QkYUP z;4ks3B*Tq7Por;O>#@Un=4qadERi9;@GE9TLoI8HAuMyBr%H11s1RlD3u&JgCO+RS z-fR33LZF2+A<S5CXV8)1&-xZ!#yt~+a)s#Y8BonmKTLjxe7m)I)^;IvV)k0l=qx|w z$;tjSR~@A(+H7up_V~Cc7;)<|n5(Wdk)QU)OUE8+=!{H}EDkJx^PHcmQ0Hftk=hQ^ zoGF#FRke7U${V=ZvsM2H(?=vrv_1JoH<9UFv+JL+d<y*}mhc$ngZ9qXlwkE&<hz)Q zbUx9w$%y!(L7f?S>z$`0eh1#n4o0{}oHPq7Zt$@BSJs~zLd{sX0?nT&y<Cm|ao!If zL2f@8{ViP9yu(EsD4sT+cArbl06V4fQ_f1ZV&?R7!9J?yyL1@Q{xjO-r1Qe`4P%QN zEY)3`>^9sK$Z}XPVsJst)r)s@HPl8DzW}F-_eBJSK2g#u#3oFyT<Bn%u#Oz>qykIk zKzpZl<el0-VX45wCohH_;iEtY!(~mE(<4>O%O{H;hY<tlxCp8J1tp)3W(~?$X*R<G zO4udDo`TT`y`>kO^z{+qeb_=vx4+-5)*g!1a|Pb+*)m6Abt0iL(dHfkVE|3TN0d?B zaE|c7Q%+$oM@ESO;q^1IKo4(p*%`EF9}3OrLv|USMOQ~k(1);?gvE4OEKyKIhG%gW z-z6&yk@~N**?~75=fud@bmlEE;>LSAB>h_r&jK)vgejv_k#8nde3>nL^P(3=8>zaP zaBdG-Bowx>TGN_&-+C|p?Qk&6wX5viHBW;J=R#N}-|3if4gdM;I86vkzDj!9Bp-#< zsF7_sK5nr(%%$xH*(wQ+pCL>c2{t&nwQKuCKXqyQVhkB!r~2xB&~0P+XBaPXdaI0x zCHcPS8@NffDuv?{7`l&GC30Ozekz*m#&n7iQDEIdq_cF1(;qyg%_m>v#xTfX1Jy?u z+DJR~7Q7awQ`W@I{%{~mG($j$fyHxJ!8F1ZU8ZNtylgt(2(LM_4N|S25E|#ZufT7& z2<95*-(z~#`K>9rnz-zqdWMe6NP==TZ%#M-LOJ|Y17XBHEa2=Z8zyebCntmI#ZGdm zli`b}ZW2r!_(yEm!cf4-2c4U8EQU{c&eoqH%@uj2Tn<RSA&;MLa6kUEo1=Q&iFC2< z)s`YF+GHlC%Skh*;f40IuJHDvI6O0(_@S7$eF8+!mvK9@$x4ZZn!&s#jsQ7uBPF83 zotKh~(!)d<llME=G(qN?yhacBY!LcRnEfn0YE`oG0))ozBN@w2fh4_G<Zf>pgwtas zxgRupTL_TGgEE#UuZ`}8*Tr-dk0lH)8iiU@CLg4EIb<hhpT{3azaQ-zNRAk|J5ROP zCG@rt@i%`M`6di6<Xm%4GK`1F#d`PnuY_?pvM(th7l}S`s2uaYdtoe}NJb_r!j?gO zdOmoA%WlmO2_)Uq-YZVM+Zr2vJIF11Bn_apePJfsq+o76*9TP+y<DYDU-mnb{RZ2o zildyK8XWIqBm1YfGA3fW?z|VGyFuppJ?crZkEx32&Tg!GV*g-O#U{S(@8^=>4KL@! zGZU{6+*I9@m1ooR>T-&pB4T|`ke6$FD4jC7P%|Yp76Z#@yT|l|pz<@ls{eUs%JW3q zZF*rU-_x8JgkNCLTV+b7ykeCin4&tTCMue-ycJKn_{z2@LK$pb4cc4?v$T|l*i#sf zP=Bl2TwxF+;@Q}09+O6sz18iOXp`^9@DiH#YiDV}()%%8h@q8IA@zvwzIq<CeA*y0 zfz2uM2Jp{`YdK8#5EzMWqMII$0IOXKL2emgmv#xbslIXr8dfx;oR53^Z@MsY|4MGU zYwWpn;KPqlXe0gkrlZFvRU}grRR7Z80X{s5+)Vs&o|sOyv5Mj%jniZ-)6jA8_AHjV zn7$1P<3K1eO-<)9jn2~nQR^l_ApK_K#IU?aBw0NQ<@ar7IFtw*%jXf&^%n)sg12o` zjEOX(E+<5XQEMR@E5yau^sO`{IKH5YCGRu%nq(~W3>O1ibiKz6MCXU&Unde{bQ!r$ zrxdKc97zMDw;ma2EybzMJrEfL8w!|o_Ugo}!mp*#kWRa?jy%(zV}O-nZMLW5{HJP7 zY54AKhvr-d-_UB$6F{Xb7W~Y)bZ70cN?(y$^hvJ91;CQ5uT2)!zU(2dgt~y{Xk}T@ z4QFbi;$JsqhVO5cLIl@iBL?MS7y<NggsJPi!KX<D?^XlP9svVK3;hk>&hUnj&!AJ% zE(TG_((tvW2!t9BT5I!<RLw~MgF1PrSbU{8;OZ%O4rYO*2;b-wrOq4$2F88*)WlF5 zuOBPvmVbuoS24InSM9>H^@Dk;_ZcQW?4+>(85vP%f8Q}p#ETxs7OVp$Ek<W~{0Pu~ zF0{+rfkNN|BQSmTY*s2lbeR6c)!l1hWS*4P5)DDB4<^QgobYFE{UUm(hQF7N3ykfK zSp@jSYEyEMo|1>&que-%@DrguVFo{FKd*BYshw`^=>(Rb$RpZ4;P_AwN;kWfNF8~{ zsBU#O1b7afL=4!Pbk_uh5fw&-DYK*)oi6fotHV&3lSkwWG?8-7Ht3M;R^#U<uk!*z zx?x3u(qADz3+YSA=g_9=9KbAbbAQ%fbPBtAZYQ;|ji#FcXJ!l_552ysed!%5;wqQM zwdNPv)J27WVYeAUp1?F`hW_Kaw*WF~L@TQ2j!a#?aZx8%m>#IN&WQ<XmTfK6wyX!0 zubdzy`i-Up)v1>$>vCw^Jw^<tWm)hWYVc)enhI;?TV%0<xPj$elA<cp-B&IbCB;;< zlgn04Mza9B(0JzyN1cJ`Gb%Bu^w!cIVt9PCBQI8>ji8~B;w_7nnbJIT<Y2NX9Y&}1 zL9BeE!(aM`5xY$&xexH8!aq%)PPpB@0zyf-3&ev1dOrk~V2Oxfq(WHo)+<l6L!XhW zH;}ehzAQx<;yHz-^PO_ViS~z0oo!fFx_m)8Wvjm{7lrOE6xJRryDE{ONxC?~o6_*A zI#2cnIcvc=U--8ERp*t*OEZ?=8iV&OM;*}Hk%GH_HHyD8%)f5Fa@1pSM@a-!WE$kB z1eF^H$C0HbJ(b7b_7{KWLfqi#<gsr~N4}TeWGo;JUJ&>)B#&=Ad&E3zQ?h?8MnYy4 zlnGx#a5Hoh5+N*OS(rr<5`_l%JR-ZV!mG}s14Dni(uT0q_X^^Y?FEJDs?MTm+q)<L z`ucYn@#?vAuBP+_(t$T%)UAzGh|{;pu}nn82b3J~0u*4lTSg^3Q3)VLR4L=;9xPER z`j3UM+&pTTGmAohCuiNRCqBzS)Q9MT-H0(-zU@nq=$v&6whm;#5SFL(6TkR#nC4>c zSeg9FyBY={eIhhNZ|S}*RC>cFB=(T#ZBR2dmj6f<&)7)U3vIw925~df!#Z3!^U7&b z+Q`Z&sy6J^Lk~TjP<LG)q5Kl-2_AGIEHsYNPM0*E70H!mCvYGD-KVMi+i?Vy!4Txv zvCOw->41zW_nqM&C)Y?4kkgnw-k>O18My5yPA(!jD}Zz2(;Lkgz9aP!5GfG80J81V zB2d_x{5%4%(bYQTKR13<DC3oZ4p-ME0OEQX2xIq?7&V^?tmOL1?iFAxx2v_E!V25E z1uCEFYL;Y!qTxtRVzr^EV>m&DO&*VcQ{}psZ!t6Ng?fny1+nOU2~;k0Kghz4M(t^h z5k;-cF`B%M?y5jo?&|(m)I4#+7zBHVksTPyG%DnE$yej)KG*sH_Ky@GX+L@muvsTm zfqLx_uovThhlPpGz25z%u30UGzUoX<A8`YOb>aP?V+eJQ?p(sf;V<4)eg*cWytzZi zfTBk+7NZS9w1={gbi+@V!+ZJ(w>=J}(`3PUp5&@h!!)u*fqn$cY4HfrL7LK|LIXr- z55*ADDg_DHJmD6RKV{J>5kyajP5E0rTdNaQ?;LC&^w#c0O9G@HE@piGXeZpkik^$v zC0D##1-lb~TUtawxWfYy1-__qag<;~r9YCR!2t?Q*-#x89Ej#4S!`t$^(}?ks4JB4 z7J&>ceMSIf@zj;ug}xy`{huG1z?v+0EnS1^yF8!%u%-JdpH8`yLv`Y`vJQ9Exr|-H zn|GsyZHM-x>8UPFjMdR)L<v&Vn*~yq?ZR0AeV-6a({G7A3^=1stmIq_sGI8}xaWxe zuH>GTEVFta4_{8e&|qDz-Z-(>9gaY0O#D0=|9$ol6|Ams?@HEV&@wHxQPZLL-gs*u zoLX9CUO|<&FmVCo)NutiZk%J;41;I3uk)TS1Jmvm*oTg!&Aqjt)@mx5iPniU=KWGt zrtv8XhvFM73FjrBPbZ|lXP?t<k*(6z+p?e*()Etl>y5LfRFbD7WVIwmRCriFTo*7I zRK)bHh<@u`zmnL{Rd>0gBH(MxILg$g=ektjky{fKBZ&mz7l4|kDI=)a_<lUKO+~Yh z<ITp`J2#&@jVuj?`%V!qj=AUVupFhD43r%&2z{VW5;Y$Eb2G*ZKB)9LZJS@x^iT$i zNRbmQ!q0U4`(}JaRCu05K6G!dx~nMA;iM_D22v_t%0k>7t5^Tz@v`e(Oc<RMJWnfg zv>qd1PPvE>ptjf`9)jx!M_@xwPaOxfM&ylk&DuE>dUSqWV3E!;h5-Ch_1)AJv5Ine z&^m0>^UHpIddTv|@^H38SGQbXzEs8?eJabJBpa)bCp^zKAj#*#g^qwgJzk)0{xOOU z!{zS{Gh=^G-GjS5jZvMqUlP^^7dM!Tv#I;~%TcqF_~SWDh*0Dg5;dy<F_hOU^X2lL zjc21QdNf<81=Fn-tV--+8`>Ma#Kcuy26iXjo6E!2(oWP(bc0z-G8IeZFVxM@-GDK` z6D}i80GYm(x<qjxFyB?<^$)kxOi&}Ur4ww_usBy7_RD2z&Gn)CgxUIaT6l856nc+| z>hiqZWMQA6*p9rto^rX8Jrs4{6H>*DtVlExb*g-x#89_Au%Sm>&WG>yWVQS{50<(X z-!+zYzjWkBgF_3O)YM@O<R4z&aK26;x`{t&A?r}QPxI1wXVCjqwHZgcHmMstp=d5G z&OeSA5H#25FqC!yaDG0jua}YfT7(k=+ZN&t9|S(r6N#URL6Ycl$s;T7ht<%_7#v(_ zD&srE#fdos+H8q`%(q%uU3OSO^sQ_#|5Lskm%;vN73Ys@)nx!;p8Y&h_TzTc*#-v1 zy5vQ!!@{UrzS7V%r$$v2O@*RR8-S~f3D6Q*13fFk?nL8~EEVodNm<dCplHX%;E-Py zx2dH_aF^iB7KgSSkcy;Be<<mx$l8Q*cxwOYCQ!ui9R?`ygd?qjGgB?sW4^I8zOoft z#vcV^zXyMt+;LL#c3$C&Yts@LJS?qsy9-|DnhNWIjlOmd<WJy!A$odmQ(md35Y|*+ z&aG$POj3Q4dvo1gwdI|zRboAo>@GqJ`0;9i-qF-b&7p;<aqQ#O_CjhV;P*%Ps0mh= zQCbyMJZN*4Ab9|~RjlG(^fD#!bK&`>x$6|`rC;ay?DeQk%Gs)<wq2$$a{V2CfjBES zYRWlQ)<*)BjE>}Bqst-3xpV0y`b(F%;8@}&NNK<~RhNW8S7;ZjjTsFS{Z0lsG&}2> zyk-kAbbLuv_Iex5XW&4Q>u5du@Gb{(%94xrAym4Nikn8ncb_j9zUU!Yo))C6OW{ov zZc>Xe-As8z?YE<x`vT8f1d@mb^guS-Pc~6X&+lmeQ>9*5C-~=gx@ar)DjxM2JP!=i zpe+h>cI+4V(ZEpqL7;;S2bf&YD$xfvoYSS>yae_@s)iTvGm~CXgoRyLB!}fmJi^<B z3Np|3Yaf?MBP@>4S6#+m;(U)8==JQ^x^4{LYQ6Yf&CQb)3_aAce!soUfX!Ywlx0P= zjne_5+ID?E&8SwL2TeFEV-4o?2OR|884|ZLxQ6ym*;5M~UEQ=GwF31}WmKCuzr1+y zF8Fj=AMr^R4L+w?|1Ia$^4+(={6B$yuVwHThb1vs?v5aZUV~rdF#1)y1aG&TjOs7Y zf1!Qg@pWoR3Q-$C?OSx`DE3shl1lk?2$I21quXzj1VGWto8;BPL2dq?tghIAd?-9- z_6o&v!VC~iViT|4<@Bz?|5ZxnQTlvSPx0ts^c<=Ebl6mWSJm<ewYj802dLE>eVoE$ z&C)p!n!x7?2KBU<*d|dRJV=tFA-J^|m@p`z!ABebEnP*+siE^>z@zk-ia;94R?)Nz zdMim`)p^fu2f7+nH7_ge;qzk|T%d-?VFFA(JWQ;wb3PE~r1l-B*O?~%=Cdwm#K#=y zy>V}4d8sKfar@94?xp#u4I4!%qi(^Rds6kW9?_E2h_rHF73aiY2)F+NZFWkB{-Fn7 z?INE-r~9Ba%cuGTKT*44@6M+CTsNXRK|guesb*)J3O{ekTLATSlJ|cw`t@D+d>JK? zba5KG4^%M#_;|2nsX0WyA!W3^dT4cmYUo4{V^pz*199ERPEN5AlmuX=DjZMZ%XUr$ zvf<{wv;32Cw8?ip^81X*0)0!Z3xE5DSOaOZA5PBQ&K^dg(|dE6QX06ajlAm9@i$dv z;G-wy7(%h_)y&pqDh|MBd&??2NE(tOe8Sp?$Tj}@+MYe^0?g{_mZ*Ce4I#*R@p__) zLQ>o=ncfHmKF{!;K_@Web_l5u>yz*N)A*kbT&>bWp@ZP~(Qf)p1q2nfzLmcp-v(2> zF)K6x9U6ac+%>65SF`X=c{~b#gWBNh-g}#VHh&0wOyTb})$}+?HP40ff+u?yx8B9_ z^-dlpQXs&qgaA5A?E35v@MVHGA%`89RLJcRqn7oC^R;qbyy;og!CQ2|vM4lYqo(L4 zKJe>-;;VC~ZaI;#OYTB!if&$nz@7q*s#rig(fqF-Mg#<K{GUHZSP=cLYa-AW_~~^o zB}xp=Wz7&A)@xEv7ec$rD7?^<4SvEx5V;)g0!Kh5IwANahKZHZx9D@w7yr}bLmG>j zC~&%<-@*odp6#NXHRpl~V!QhWcQ*E;V~fD4#h<DR=y3LoVbKw%LUSGwwb?C*fM!u7 z!g09G$MuiZN#CP{bp>E`6}tI_=F%vMw%ce!=*t%P+6AvuzZ*k6m0|N-?J^@5x(CdA z2S&?)mmL0`8-ayYwMlk~x-U3*GeU6p#R}aG6F(=<rpvy-v4T?_<$up?q;pWSq$bf5 z7C|ecKYB`WF$q6Ee*R{B3`*0f$Kn<qqX*rNa+I>3QK_AqG4Ax{qu6d;{`Aq1q6JRQ zdDhbw{A35*d^?2%*Q~XyVZPg$2^v*KAO194nq+{8H|I#;y>HitpHC|sztM~|x(uo? zWGvcOrde~c<@BG;!E%RNk<WpntYZqfqa&$f4+@v1bHMcqRw?Ud8d#mL<9@|=&eS>A zm9%UUWLqi-sq%v*O9RH1tmjD1y&N-Poi#r>S-8+WTT9W&KEB`-zsj=7-*C9(Os|-j z`1DE0idliUU4ZM`_7^oDPj3p4;gEu_jf%FX9VifH%rpFc*Jp0e&MfILWV&L8M$SMD zr+hm%Oe~W(Hii~gkFaa5y}gSq7F!DXWeu)qYz7jw`}bVshh(o`x)Zi>5(cNN_nJtF zsl%_t-+E#7b}3fC9`52CjZ=k8LSs4=<;=ORW^yUXJtZzxbCARP;0Y)hzip`sQy)pn z9f{@g>Cy628?^1z3k0L9uyL;4{LH9e4>m}BoaSL*Z_2dS)R}ZIL3yP(`OASMI~69K zxUIR`&Ffi6T^Hy^Ch9!t4mgZGJWpMo?g|=dmxpzBv~^vsihV%~9oZ;h2%fW#Z<!8| zp0Z%ZqlPIlR*_hvrKfc}j|Ck$B)~~m|KiZ<7scQy(X}+^J`SJxmf5`JT}rq0%yviE zLfZ1u^+AT7)Ti%D<c9oP#XbUOt%^993|L*)S=!ug4|Z#5j97*jPI>B!+oM|-G%A;? zC*pI@cp7j)-G+y!&>P#%QkFZR8kVLC=)LgqO?C;J=?7fj%C5>uNC_B^`(D8vfifTO zFCXlNTnd=U#9HPT{PDE(`<<lZzu1*7vu>aCc4B=yRcZ4pUxx7y2qGkRUP@QANEhzY zX2ItqamgLq${u9d-kjL?Oi@_p#nD3#?~)37Ql^qRCDR>=ClT!*uQ^<?lvP!5iFPc1 zyIKefYF?wyf}n!LPWE)^vKG-RUg4yxeJS3ZgeZa2xy^sK-S+O-&KlIY)ulVSF@fAf zuggP_1<ARGW6IB7N7hdJ-{}dQ@}njE7hteJvqWEnv9<lLNc7YihJP1=@-O(q%}~w0 zv$n~pR=C#BgOZj9XLK&h58&Z(?4_b3(Ye<8_A>4XM5FbuY1BIhGsTZLt2~1s2&FYK zz8lpQXz>1I-RJDh$LSw}DkUuCZP}ZDnQO#ehC7fQ1A0kmpGRm1tZgK9Z_PwM^Lsux z@k#GNyu;<-TVhqewMdIx(@Efx!W)Zk9z+cK!7LVQv>vqRw6L5H6Wv$Z3*?J?<NI+a zZS5@Dm_H%B#}(N-QLb%((Ttw{!!FV2`JzAnoZqi{E-jfszSQ#NX%L*g?={Zv&*x(j z?pIc1Z|ZyRG|jKI)V)ib6zg<OoyBFi%IL_S8@xUxFTcDIhuU5&yQOt--SAe-yE5j{ z$=&(=q<tE1^J-()oo<a><ikkgGY~m^eX2NMX@B^|?0OLAgW~S%zQ4}AY?}SuT2!>c zwy_<{)Oar=L}#ZFy<hB|U%L1sRzD}jrS)Z?r8rY-(fXR^d#Tl!&7d3O+e@3bzF+eL zw_I?&7qt&4JHZRCDgy<BMj3uuA3Iueb!6?GaIVDDxA{+w8;TwLx>L8$tUvemK~diQ zLQ!mxvvEP#8y?tKe?3_a2fsS0o{`kOd7@GRmTOBxmQMD88;@Wv?UyPRh1(gvWQ(l@ z+@7pYqhtEHE6DX|qsLXdf-gz)CvbaPCh)!A2^;=Xcb09^7HNZo(u4B#K9Ywq?aqs} zVu&|8?|4LdNL*#&*LY=X7G#D>HWzzkuYb>Hffgby3iEWd2fJ2{BvXCfcbCjwu`J*e z+wVitrCMDbH^&`NUXCySu1{`%Dbnu0wh)X^%$P`LZx4Q-Fp`1Wnf`xYXL<qsf37nP zKGsABDg*}fk=7BG7!jp_`(<CJlxnN>Qb<CS&q{Z&NY^X<JKLDSu3f#0JNp$0M`1`+ zpJ2A7QBl5&<=?(h>^VH}c5909S`Gq9t&to$<bGO+$JR{L@rP6I2jj7<waUC4$^5#z zm*YTgHy?8m-B5nrn%h<TCuLk%qETqv5T}G1c)##~>mYRKcZJo6F@|(N>d$B`3{#T) z{<Ep(H@FZ6JnU@*+d)fSe=2q_xDUOW+COg^anM<L%Pu(I(BD&1ZVnZQ9UJ((;NA3A zbb@R7wu6x*$nIaXDjP{%TnF)nk1_7Z?<QAe4qo10-0}>(q?0d&6FU3)yS--=TqWWI z!_idFQml2}&zn*S6%AYG94#(GU*=2wir*dHn@PK%tt7gRl6up1fC?`4@0_{_E>!K` z2$1B^N80>RuTw`N2M|3KUB5MFt)Kr?`!y*e0zpVsF3}%FrkewnCX|}-fVG0U>v6tY z7o(yQED%LRtE#)@6Z;|T&89k!A4%U&T3z$B#OWltTDDr1LC~&x0?{_I^K`l}+^jR> zRdal*?l^6KHA`%)L;vn>hc<>|b9F%~HJ~Vl#diGhSDWNj$s>>g-8ii9OzHAK%<GKx zpS7kN%9E3IZ&UILG|7$*W;0vry%*Q2)1cjSleSSlt)C@K5P6utc!YUJSdhG5gfI<q zRl7;DI)_~*^zCye4KLN0y0ayJYdP_pxmGr1=&PvuXho#)MQFg&2WwH5U&wI3<poQ5 z+kiC#*RSM>N7pRwljOZ>pqY(S6Wn#W6QsYtKAiQC;;b9Jl~Qf&$$A-LZGM+<wEq*P zbYVcMaBEnquxT5G<(hX+y@xX;lX9XEiS6dXWwjzZ(E<#;7r&#O^sjPGoW1=`U82LC z&we_|%9cq*@>k6{uAR^$&_H~TM@ZKD#2-w1Wrc0ph&!cbl0!viXS^#VdK7e(%0%jt z9JNQy^ArN#^F<6?qiBasL<IPcPh;0;p@#zL<LSA*Yw6(`%LMt{J_nFn3vOt1t!qDK zH=dFjLXHR)Y2~)P*W+_KTJjWv(n{LT{5|}>@*s6%JFcJNn=f-eb924M`O(~)p+|FL z=0D4rAOgnfs`T-&mIDv>m9HZ7r1>7&XQ@gXc^c8GzXWQL7jW!QW}}-P{5I-+f$jA% z{nthPf_wE@S(i)nhQ?gW8T^jXKp85q^Qq;Yl@4`svc~rl{_-e1fc&v+C1ZHXors|$ z5ZQ^qq23eIWbuHceHC21)CY*YeBrWuPwSkoAINd^aaLDfIPT9cY1zHMQfFCy@Pun= zd0D@3;IEwi;YU&Ld|PQA?n$U!5Q%$p?ez2K@@(f{S6%pgb1!Ryyu%RSAD*VP`^sd1 zHJuwO2<;TRjPZP%QHgx5<rx&-&BuYpdW9HUra!7BE7yN6Kr3ACGA&E@>6KVShpd$8 zt-J|ppDcq|wfxV$_k3Aq9d0G(XfG#h9GhxCR9x_aGdB55@`GYuVuDUt1G#cPn1&uI YUh$C{ixoRTy<xAZrmb3}{4nJI0uF#L3jhEB literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/71.png b/src/assets/all-letters/letter-detail/71.png new file mode 100644 index 0000000000000000000000000000000000000000..ce3ff08a557e8fef23b357137946c67771f82add GIT binary patch literal 17556 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 MYAKYxcpLct0GyZ_r2qf` literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/72.png b/src/assets/all-letters/letter-detail/72.png new file mode 100644 index 0000000000000000000000000000000000000000..09ea9cb1cd9fdd9b8f7f87d388e2c2c1de2827f9 GIT binary patch literal 14331 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 Jzh)Kme*nBtqdNcq literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/73.png b/src/assets/all-letters/letter-detail/73.png new file mode 100644 index 0000000000000000000000000000000000000000..7e28394489a8b8aa19b21995612ef5d023046c37 GIT binary patch literal 11176 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/74.png b/src/assets/all-letters/letter-detail/74.png new file mode 100644 index 0000000000000000000000000000000000000000..d6aa84f98eee9d731b895287f1fffd7227c7950e GIT binary patch literal 11590 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 UMd@fw;+M@TiW&-q56xfv4}ug8p8x;= literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/75.png b/src/assets/all-letters/letter-detail/75.png new file mode 100644 index 0000000000000000000000000000000000000000..bfae4a0a08bdfe3b5a196967fa7cf9f5f427f409 GIT binary patch literal 18576 zcmbSzbyU<}xA!OrBBda$f=GyT2n>x#NlHq03Cs{f51@dcpi)x8(49(34I)w^EsVs_ z-ObSN;rHC<zW0y2?z->mTHhrzoO8bWoU`+@_vW3Zx+3Wf`Wp}kgj8ASsTKrs1r46g z>jdDN<3i&o@E;vQ{slrCZj11;aI=BPTEi`En3SC@>}<4bEUbN8J8dK&5Ik=Oofn7~ zYN}#ZaAzKi%P~CO&Msg!1R^2r?P6i&XoFy~w6Sx5NiuKNH!(9gSW7bNKUU*YbCI*L zcTn<mv(ffd*Rk?-w1QeQOG`0Hc#DAroNW*mOy15;Fn2L;N#=jn6$3wCe$C6w^v@84 zqa^dch<c%>$s`ANvtfG7Bg}2ZFDS|+0_EX<3>6g+;$jlu;}_=TgYxnVar5zu@j=D- z_?iCWA2WEHo3*W&)>DQ5co+C2$!w26xQOxcdU<*AcnR{r-RyYzp-?C<p8&6b05=%H z?d}6ZSa@^8+#mdVg{L;|R&EY12nRTf>2gI2OSlI@k{M9?uPr#csHy$u!Z7#$I4E#r zyxtZry!<?Tyw1*-`}$|JJ3`Cm|B~_Fj&|4aak1gmvT=udxLJYwuzm3F$>8k%=NDZL z1k{LWxH*7Jv2c0{xAJhdfgzNiN-~4r@K`%oi}Bm=Sy|W!if}{uAKP#XJ+`vqh6-Ep zaYLcP)&kJS)`E{8TmE~U|8BmJh=PEq>=RiLVF6)&et9TV{;`n4)2AYG^8E6$LQuYc z&sB!GBP?K6HvfLN19<m;%!U4sbH(J`Y%CCPHyt?K>EB$SX%9!h-R<EnOmcFUw=Tl; zP|d>10e1N%$K^%+Yu`_8+#Eb@tQFkg&P@NDw3x$xL&g8@1pYPO`v3O?c>z(pm+bOi z*yrD00iL}4@jrzDeE3gsvVj2^as$GmK6oAsfjli$ek!ZuJ-UV^OtH2}Iy_s|St{*u zt;=hf`_2dD!~0Ewr*zYRiX=bZ@hL+8uwNJBHM#G9II^{3hiRxUz2);EKb<q&`t_Ai zq3BMi#^RmA`a;f>MdLiXo1sKQ{`$K5UT5eujX^%d=aUqvi@KiL&DClaxl?RilKa{> zNnThNEAzIGrICAzG*5+m_|r9Jm11V2wL4cJ)^`@^CFhK@PErC_E1sqt4zR}iYyPb0 zwdxG$vRXe`5mY3zZR-`&ldbVRC{Fx2VgBwc^jk-j`Zrzo70CCHkL}cv9op3|G<;i6 z=JeB~5#B!tC#8)=vczte!)c79rWyoZv?)U%1}3a9_w(&RneWH*32CCE0vSP@yN-Eg zlo4ZTHC#Sf&JmF<q!4e`w_NYUMz-=XR{rab3?EAvG0le~j|X9%h4s9n%tg>j$SeFO z%RY;YX2)&r?TqyL&4;x`cBPdMwlAt%O*<{{A@3zpiq+yLcRS0Z{jIeX2q!1YOmwKL zPtZ;y2PpNp#p%8)5R$8pU`E5_ZY7z4xEfONdI27sl-JOn(X8vy>%RvqWHb;aA0qoI z9|^ZbOq!%;paTA+G`5;4FYi8%>ek8Nox2d38<bnp&sJ`rw=@pd@6lIGot!x4YLF|g zo&1dN5@mwC`eT>o)U$6?b2fHt)jn_!nPwv5oOHM9p8CR%-I#D?0jmk-g2H4r-74+u z0iP~ju9$Hd^xVSyJIvx@I-U$cxcmc(dv`v$*vk+cpJX>~XIHKmwYWm-;CXw9N>;%$ zL$0*5T)2cg(r7ejv%)dg#Bpr+Onr%p;cO|MwStBxwpHJBw!w@i?(u$#B!urul?W<E zuD<%$N19>r&6;=4W4Y59M}vcsN$(AuHU~L+F!n{j{OO<CtTR^?&LZo5wVGc$RU+SX z??IUS?DuOtT4r}n9~`Q9`4uVe-#+l3lYD^M6Udx$=al?<@1FCLu6k*#Biz5t*t46V zbvEZUF~nN1QL=7+xqYtSWHb6;A@q4z8tXx_g4Pl19b{hGatUMidUuLU>Nu{Hyi-@C zX^=>QSCIj-74FT&)+@Eg;IlTt*rjRjBD9QgJX&+4@Lx#K+^Ve*37c!}SG6|y=2kN9 z+isVg-4K&S3=u6$?eVO=D1~>Hsxc@~25{Fx-Q<}oBzX-3mc<&)d;1>rH1*u=jGWqE z>?mP8XYlDFyfD1#b9Co9<oh)TJuZ`70uC;oxZwKg@Vk*8<_3waTn+pNsrID}n)0}9 zZzH>&5u-O6{7#h6_3EZaIOzZr>SE)TXuxY7pGJ1)2IloU(9XQd_DrHN8YQHM^5JF@ zBWE4?!5Vfhqt$2K(MZh7vBQr3#U7(Tf#(fHatPm}RvW7FxnGXf7hMdjf5!x4G#V|t z_sZ9KQ<f&Y(Bz_<g6Kigyu--s!-YR13BMGZa8zFXPzWR!!G9Ww-n#~MwTI87SsOUl z>h-fOIy(7J+`WxRcoQ9xs^=R5?kq`2TgXVriekY!A=zTlwZ{lmmzMf-W-<=n&VNNv zva!)X$FS}BRR~L*G`l|745zp$Qf%5TK;4_$OtNBTn&zX|V>X>_QaE$+-vD1Rzg;;q z9L3!i5C}&WU6w&sQmkhGqIIIJ!4s-UJB(`m$Wcg>%3fGMEAj6Md`R|Zb?;8zhcW(R zrmB0|D|#B-*u5W}slha*IHx1aOta@Sd5*nm5XgY6pkf8P#bQS#27hu9qu$h3aG=M& zQ&mZt<Y|2c!h{m?6AGs2k~An8@tl~7XkG7RKmJg4$mZMufh^~aWYK-fuc%m$n>q<w zwbe0-Z{UyS&8+9LZ*hP?+JbDOY@ag=jS0<~(jYUU{Og@np7>oeIjKJU+I1CT{@b3w zftvM6g__`oM>Bghk|~-u-SL2@{#ZfbE`%>vC_*TfLZwOCE`<RZ2=pG8(VERWWNA;n z1*HMx`(J&3bcjB+eVfB@BL$NGUE}>|jY=++__D^={R9we{BD-++@~p>Vl{}0p8>(B z@9f>C-?-exDn*sy*LJEBKD;<?cwVF#sm~P|CU^xB^ZR4FM-hTuGSjj><uLmGS2?_m zz)051MS{g^OdGu2%X@qd<wS5PO+8ibkikH(1=~DI6pMo_MYf9Z$A%%0-?j2@&_}0% zuo+`5o`YpbWpJZ<;?MRuyFsUCEVv$P)aK@JcM9c)wnECI8K4{(vu@Rd;+1^~2`7UH zaNOK4P2RN?$Jp05*@;4&#Y?2+W=5>_9T$8q4M)FQd3mnXS=Ne<S8Ac}_U(jQzL2P9 zstnV-ecuwyI%2@-*&ct2Z7RF1%9CahtBK4#@@(yCpI>aG(k*xp>i~!t#__Oj-MDFx zqyK&QnA^MF7#!=n+c~-(g9A`R&v)JMIQ{Pi_>fud)4lCa+Giu@ciwqbMU3$awo>%w z<0K;g4yS~m?bkn5lG0}oLMWLasMT+#y@U6s-@6HDFn(sOboRCR9Mp^Y{$%OO_Yk5c z#Q4D-S%o;Cl&h5wqa%Oway>h{zAW%2Q>*7TBvENP53_$;!&_M>OK3MGyjOiG%UxSi zrM>*8wpR4k4J72dC=q%P<E1>kFS-4`JVGKqww1`gzoFp|+56H#s{=NO>hCT0(oJ8K zhQStV;`7fw_l(v;4AZ^+&;NXQ>uIgL`$r!l^SMQ%Y?s3@5@oO8uwe5u+@)sJ%2f=a zx;7<_^>iz?QP|4yiIWDJwd~M}5n0!Dl{D`PlX#E@_}GxQnn=hvbPuArZ=>I;SVagK zv3Xy1Vr91dHRKAUyl94Db~QjjVip{2v{PUk`@Kg}kd8;GTxGZyO_yVf%TBV%AWZc) z)I%W<nXN1TPtSEJ2;~3eX(og~{uhsoC6c81r~Av3-JP|=^XK%QXco&cl8%QZz87{j z^M29~d|2m66fzelx_Ue1F5JTQs#9miRTOMy_B+QNVbLPUg`yZU)7Dp-+tbJ=jVOV? z*ycCwn$LAnb8|F&H;Gone3VR2m-UGnSqeYbKOIJ{F|sx}Q3T6wO+O*18)f-}>6W4W z#m(hv>Uu)=7N6t*@vD?DkcYimLT!mvS-D%tz`dO&r#K+@tqngDJ|hpy_~e7=<|_n0 zUSZN6Kz*+D?1vKfwEo>ryyJ6j0ra{gMWh046ieUOs>+0Cn5u~@X@=s~{abQ)vWJ!- z{hY<c(J4WeJYq!l6E$kp6Ni$^a7SytnC}UcQBeI!=7`B-i^FTQ*QJb~vIsF{Opv{! zL@I<AuCmsANqqh7?L>TR`8;MaemGd1_C3oNiF*Y`<%aR-Gb@URk8EVFOR-pfsmJ<H zShmlSgetd+6zHA$ydn8{ZIf%St5o`2l??9vR-8mRvv)s!@<3m}VfYC_@RVF8!m`U; zBkZqmvz^X1v^l{@^QTNo7y-7^x%XFTSir`F%`2#XY0cW*w5a8xi7CARCR|jyxgDnp zT?_@%BSvlul`t_gz83+12HzzjctC`#^%2-S9<x4ItBJs*b-lWYq;+VeSy{JaBB9b7 zdM7QC_F6Q|C9urtd_J)514Y!G$Gg0-tTh3jY>Dt06{wIXZi<x$IMrH8;>7+Vv9BFb zcYF`7jO_RE(!RIGnz)!+mv|qt=eR8(0r4&NOF#CN?4w@uMa7yesdKciF0XZekiH0g zN)Sw<K(X|DItSjQZCi?d*UW_DGZY*ANatxA?wI?IH(^TL=u1|sNnM|-lXP%2ew~5_ zW|iB2>@G}09Z>v6>0!riBg?}i3Efkly(Nj0YePNK=T8qLw~YuMD8HmBjiK5+&K{#D z2P7Ai<-ER!>deQnX}H>rSR|GbNgfQO&CO3@Tb-t@8^0AM@pQpY9Fv5S_kHmh-|u+| zb!mQye9fn$qsw~^5ftmS7q1*7YGfRU;ZokKortON*I6(=(*xTJE-?3t4LK>m{pOTv z98%t@UDQ#GaJo3dw$$@{Pn5z8?)ws7%<$5Y1d%Hj;8Lb$_3Q+K;5Q=P-tFH?U-MtX zxJ?yIx@xh!_OvQ6t7~&sjyE&x1Q((dimq1hQemb&eS$lscxZd;YY&MO+NW_1*K)CW z5b&mUr@(!D(U)p)k)IZyF-E?=dg-bat&ZQ&zIs*rLIsMQ>{kzAzzjO9R>n1n%XgR1 zW+mK%grGUh8vVr1GJ>v=O4nFYz5%^9fv1+h0|+sNezlQgm#0{AZ>+_PKT4Ru@oW>m zV3XUr?@$SSj1^K1?p-}t`ZI<adFG`ljoaJAKK7%3#V4J&l297gHL)wArOBUk<vuP- z)xU%kKW$n5SNS*{YNTP+V=%RQ!(9^9P2_H)ZCi^nc(!UMa7nWo<^?I~&J8RVPC`q- z=h?6xvMzEKEq$h7Nd6_+SHQjr<AZ6^&gC*wR1pXw=O98KusxC*oZ9uy>F{q$@NdrR zeS0Vskj8*?;!1w+-uWQG_>j!Nd-o*F>lo4;_D2T^s2F-?q^#D34)3j=?;wsunb!3+ z`<Mr;%B&<5M+3fVY4jiiOV5-}Tj}N9a#k%dqOh5)9b~G%cbbH_gKbxi!k3R-vEDY4 z=F)Yi76epl8E#hzf4LjIeXU5Zm<vh0yK^zl+Abp5c@)c{0y}&A``Zjb-37QmR%dQ1 zvIBve1bauR6Y;;Qm9HPGYK+BvMcjw-G;U)BE<S8d*WPOm(;3Vm`I^CpXCY%ZMWu_0 zXeava)E|H-b2@Dm$*I}D%`QW+RMH(+a{;gta{nGeK<=M0q*kWfeS#lzG|h|dBI#8P zBe#&F^NVllo4D4)yeisFDVFr)95+uDy#ggs{X{|J1#`xgzD6li#FR+3259YuR;bgr zp@K7Guk-D^4L!N-7oURDLh7#-O&r$1!l*eTHfVu>wTxHfl<j{yNg*d_UhHyZ(6N)- zdb}~Z1mhC_JJ$MIBzp+^`>{x8Q1WD2oL~@<)cfaKtvNu@!h3~qrvWvx`%jzHh6WL; zsVCD-N|=I{@fp>tSWElvyBCqS^@jPtVGd9ux4-RGr$pI@baJyHNYi*l;7=~@dc@AG zA5L<s`BmTaRZdsSd%XA8EOJWjII9;M7D=2mEnnQ=`vVLsN#!wnD?d`v|7l{_crTv3 zZgpQ~>pr$@#;<;<#9qnE>S19aWtX^X;9bLmCN86Zv&oI84^3H;2EQBaEs(3?>hbXz z1+?H@9Pbp9lI(skb|m~z_So1Up^Prw9rvB|%68~wd%{b^W>)tEXk+D?GS2H#*-289 z?lfh)$X+ho&W&tux3iFx@KT1ZjQ|{t+tP@1-6HXC`@bc~&Ac4gHr1uTeNBIj8AJXs zNw`)K4$tgak~kiiEnn<6Q~s6~@0p8;uA7)hsajC`XDBiH?aA-ZDZ$ynsX-|eW%10a zn9mF0i=C$IUECG2a*nQ;5&cF3>hV*l)YV%^T9r``xv{wZyur$uuGrJ^LZTtF=LtMc z=R<+N3f6mFU&Wg5G|ZRJn55m=XaQVcMT_iz>sJ(8t!?YJ6VaL+E11y}ai($F*4WzV zF6k~dd$`kdnxfNf^1~clzvF14*wZl%t7}x0_M~af^~8Tf&QFaf=t$gL)XZ*E-R_Jr zl45o*4d4WZ`aY%o()0DC{>8^{>aMKg*LD{eku>gAl+~7Wnk!(udJNqwioJXDXn__? z+WCcUDrs&kdGp-u2al#P+Z(D__Mh}psM^}qNa@%Iz0yCvs{N?tKN^^KJ35i(JeRpL zd-;N&Dc@He9hq??^VGLVCs*z)Ql<5*Nmg$Yd081GauxsuK5?Y41$De~NsjiC@Y6bP zlo9H3quF2FPW6$_VV=LLCy@#31u-%V^jzM9>jIl~UYA@b@a|v{0rzOLBx!rN?B19X zG~;^l9-dyIdmyo+0<AjpAuGJ^Uz)eNk66BXUCP?Hl_m!0W|#;40PN0256P?$Ztq$j zn*Bnt`uyPJj_R)d6BuKU4ZLX(%KMC#9PF3|89b0jT39>e;Fc3R9u(us;9IA#Iah6G z)4sWxdxW64tv^(6L^{M%mjY~HR6*HZ%b6reNIx-BW#<`Z+oH2N`%)dl$BvD#0G@Tl z0~fvzoEH@Ads0lqusYN~Gk*AEdpHA9H<PyJ39{20UK*dT1vi?MuinRcOv{pGFU$8W zCO}swm@iEc`yAO_CLG&)b30;6qu;+IJ9(3Z#<R5B^jq_4Y9i5F`D;FN_vk;dPfO&R ze0xScxnptcLV@hC_Dzn>A<4yv1DYPS*|cIR{bCzV>+8qeA-0IdiJ2Ot(#wT1Yd&y7 z<r(H__~M54GEUU~u&wzxy^lq9NdJ;N>%*2qrQHecJ5S_BOJNiHn}`Hn)t`;DvRi7! zQw)7mjtg{Y7Oi>fzuI&$)MN224EN&wHBLicN)y?Z`BiY$?mvJ%czF}q;UbnCYlI4I zUTpY5{^?V_?xc4{eF41oa17Q;F6a?a_Q?i*@vT1O3O-|-T&oD}oL-*Ko^pCVVtjmN zMYP(?^K`m>0PFHe&MrUQvb^3Y!}dI!sOpICI+}=EppSjpoEOjH=RJ|3)SmJ2i#hoG z5^?0VB|FhV(>B(v(*qFA|7xm5^w!Gif^c3&%ITB58BPWo>D3IoizPk3x^2GSOQGc| zlb&H?g=Bz&=;jSF?iYN9c?kkbbMdN}^1x)L#?AVH$>9!HL7m55@3{OH*|W1f2>{<( zNW5FxZS2we>J0PwAay7Kyykg)GY4D!gGQ5`oy`CiH9ukZJ`#sFz}545cGq82cI!jS z%d)&+a53zSnAMGrn-3rLE~U9+<fIeuG|oQW6^$|PEb;0{DT3cBlTK)cG>c5wQ%&h1 zRo(asag|mP)m&XVb;-xTRe17Xhb6IbgS#A8!suzYeHDN5TQN>7j8h8c@lgsVp}wW7 z?#cemn%SiM%aQ&CD{wGezL2PWZq(FkJQUP2Y<HKuiJTR|`HExj))e60Ka;8%?fUr` zX*liNxGC=Dwpww=N^UgHZs_D(?<KWyoB69L223*sdtVOkj3ngwh5=peC)u>Id&q?= z&@bnQ6cHg%O@h<cS1%2^&G6^sk(bx;C%tLh9!bI6KliIC?sE?=t#x0TiL-UJJ1la7 zrQas7W|2}UOt>~^$@M4xCL|%sRg2q77B*^aCO4}NSBCwX9(4PO)OY9e`_`GlkLsm3 zfIlKg3nutiVKB4mu&=dz^!RC*^`XSrG-xvo(KQ=PuymXp!@Zf>)cgL=-AC%BS@%`+ z{+SY3Ygb<Zl~dn(ev39`%QVg1^>;BHs@>H0$-&ujO(lz9w&NZ(`Up?JalM;_;5z!9 zWqLg-y!YD-19~WlqmkZY`NzRYAj{qM!`+~^zW1E)Pe&qX@ds&>K~pXHH>8X};A8!z zM$Z0^gVwfB&UYdy)V|1YWzghSaA5pwGKSJO6oH!fH73nHKe!+O_Q0mois_%>u}hy3 zEWkCuT1AGLGp_h-vztW+Ye>tSK;=M;<~GEB{^s(8*vz{Zs~-&#vkkp&CfdX|V-w1o zILw>u0AW?LucX|$44Ml)pCvFG&hS@<nrN3Ff0pH7PtVRveCYM^8-XT!C%C&<`&XX} z;X~@Yo`n#DeJPs}-SSfuWAEPs_w<?I&iw(R2A4n)JPYp(uF_H(GuTAp8&gcdgPpvx zvl5^hM41!_2V=@PDy+NP&&|AiZpdt@$%rMpKm6M+L%Vf+sx?PoX0D13G&9ONF)s7j zq$Uf^c*4F`ikqUzK90%x=RghCfwwWA9YQ2k5sO`n%`E&{fU7*(OI6&6#*$wI;aMmp zZ~`^&XLHUl*#g)t`Af51drnj1NCD0_vERY1+|OUj*o6ID#y40aZT_zRwyV#wo!KH2 z?an;D_2@6h`SP&~n&2xz@F4cI6ICUn_~z`HU6twV(aMb<cOyuYXL~;EjGJ8iDy0wI zqboU>Ha@P7R5n$<hIcgxKBJFRYw5-1<9-M6q8xE4Rzp6guNrW%feEFtVNggYg1q%e z1k0nXZ`^%J8LnAmJTG>6Gn6WLK3c}rXB2H_W)$pnvVJ)K=U|ZzDc5qc+NcpfzGFdv zhi|5bZzi$9V;V-czBRqSm_6_J#<zZ4enl+l&0U(`ocnb86HE~kr?SFv*P0XL``M#q zQ_1O2OB<ymj~$4l)=S-SwPDy!uH*OQw!iXzdy2$y7od6o6<r^HSJ=oH#gUTnQ4<Jl zg%{?DURlyOI(#{P6ytPyguxb)FX$e})L`!q^3)Gw4e*$7<;;gO17ibx<5`qh(*6Dc z9I3{e_~tKz%WN)$M|M`>DvR%eN$T#ew?Hr0Ov=3cMq$rEG|PrRx!k%MEz4G&sE2Gd z+&<ExL5jJ%uli5A*U$k`t1VEEtC<^)wEaEt4wyr>ZSUWxyGpHg^vGKER*@kr>OK{s z>?x|l&HU_a?OPOnoZw=8ci#TdJ((>Vlh#Fivn~#5>EzU<(Y%U69#$jF($|rbzl|H} zD>@4c2-i9utunK^_>xdC+HPxPU=`nt>(`nLB|62ple0wi7&El8F*O(%Rnl~n3ZMqQ zzTA}b`n}MxxdDdB)=MQf!hm#Lc63g+ikNP#OmBF^N;5!dlp0@h=&$HYA1TnI%;(tM zUB2U==F0FK+*W)z>6;fVc82Sy0Cd6{4LMNZ(2PS92j~}+ta^}g1<fy;&7)8C!32OF z=UO|JFBS5Z(bugkD3G;RyhzOiFs~iRdjthV3);G`g?E9F4;VOWJ}|h#o9mIJTDuS0 zt|NIC-%Ph;tVocq(gN3YILR88dY1JwtKp$?=ry=++V92#y_yy>Fvn+W`6o3`X($zl znmUvE3o3-Yq>+(peru+-E^M9eIbomXYy5*Q&qg+wcY((=lJxmD-L=VOBUEnX=E6Df zaXe4YVRTC{JM-9d%VP;I0TtzL1Yk<WP)@W|ya4U)!rZfW>M;KF3dcw^F45_HzXm(j z%a;f6jK<knt$G(KAW`IYJk|V*%zi<@h`a6F__^7TWdHXl^Ac@%b~246u@^9Xk8>a2 z_jNC;ZEd6?1<q(G?$Z5}Y?YzyI~!B=GT9WZ)~KF1nS|l)Lvw5WMK_~PcOG5Rajt4) zK}x#Ef0N+U=SZRVaIbn{!OY+2W5X8hhrC#8@5YJAZ)c)_hBDE?EN!EBi#^~Wrc5zl zgO)VSYCv=yIsaYz;z9owQ*aXgkxi`i^4LaH9cvLC$xWnp$&%*Z0^yIfC)>>|xEne4 zTI&znq*+exHEDQC@3|8l9tuP$Pf20wL3n3}HCn#(xy$l;4}Cvt)WtE91o4(>-cY1P z);UdYg@#%0mR)q26n~sctec@X0MW~iF+eJM+_yb~%4&}Ad*foBZ!gd6<1c%QI0c#t zpPw=eU}a{PtvL#k*b)M#cD10hT9+H{p+w4Acx{W-h;=Usg#HNcB+5<YzN>intIZG1 zT0-bG5G-iW&J@K9!okU63|?~>afD*n`1;#?90_lodTWAakpTOg@8`&_HZ!EQdgJMx zn#9<r39-NcJP`0`6+3nT21))AddVeCoi=4$s!2S8?^YdgTlM7mcV~%ilAgIF33x4+ z-w8@9%6<r3)d=UGG39n@x!P;3TAHT*{gH$FF@B6q8V3@{$dgT_0US+yM^)On2uA_x z(g|phFKq0H+N%)}yxB%GVaZY4;F6QkMGfvN-|3|L(5BDl>+3n)F-*YmWX{VCibGHK zDCKX<sjv6+lGUAF`?R`d7&#qZ&2nvz*qPBl&s2xb`n+^oqHjDBY1CgR_9F&9Qft`H zr%&+KAW`q9I3G!Ff>5Jjz|%gjVQV%pw#VuOi{gvAGnBv;8@G8@=~qMtRE~Kojhh|f zhpJ5QrUYrBA1d5;Q1asbhkD^#zREgU;&OU{a~JXD$4SZ~I2xb@b7mMwD3AbMN(q0U z`C_L|8Uq8-=DsuZbi4&PGIaSYotzvA^P8t30Bn5R3xZUOY^upudqM+`e}>F&E2+!& zuNIPFq5g|_((#g!=ixTQ%5&tmI~rCeIRM;v-^-F1OtGdiv+u*wL9!ORI%6AVb}HH) zKMYGd%W`VEfVGJflnHPpm7hKW5&s}*;FTa=hLP%!6Td_Y`-hsw$DeIG#DaH!F6@^t zCtN7cF0*i!Bu~R0>+t*EyOhVQ{DU8O#nUQ54Kd;Rb=6A|Z`({5=3CPOOvEA?&0S)Y zI2$gpG}Xp6`ojYOK+9aS$jwjZ)d~bZDrYz!#RY{=mvXNwdUh?CorejnkNo`35{*gY zRDm76{T(>F{tw&r55^mut>dQ=p`It|8%|eq5_<}D4WFRd+l8f?VZ_RJts?($*J@EW z&db5V?wCttxT}N`5&GpshWFw!Q_S>Ow_m7wo^LCbUvy5^_2Qx=>ZEqcy#k;8%ImS< zlW8TyQ<oPI>SI4Eo)(<hpMPs(;N~_aSblaWow<#OSw8pu2j4@lh^4N+4kup_!o6sK z(ITPH0iT^HKru5Os)R&IpnW)vbGNjq+rPTq7pQur@Q$fhV?~r%dE6bNWb1BeoA+y1 zsLk#tT+A<qCgVW>RLBc(Ws+-tbk`~4S^N9aPp)3=)P=gEi@gu?vUN^et^%A(cYR+w zhh_d6zMyEVO7a!1hNCk9$L?fWpiz`kHO&(CYWj75UVoiH!5W*_Id_!6e>3rBVoaQJ zGiHpn`6D&KRXX;+Bg`i3OTKtP<egkPGp;p??34mg?|hRrI;IyH<1)+{FK<!#hLre* z9#UdfF88H$gUUzro+uvpy0aKpXOmv^p;<;@#X*cmF{Q9~xKj=wWZ61Mf9xd|{$5Aa zQO@xFMytVU^W6cTnVbKt_AURXrGU^)Yo@6FV?*^{XlZP_%&V#3S|xAICyjSWLOMIw z_G{sb90hdgEPeG9?WV`E;<t#IaOR$}%j+{osrTXPrS<YXJ`C*c^@1D-LO=iE_6Q=N z%Ow}D3jD=x;G2nCS;%<d@uo`XUX{1e@#n}^`?K%4*vC|}079Wpm94`rTfqG2BGGpW z(AG)2)t{P`z8++qWS?!p2*ANA&;d9DnCNfQgu$^Rs~&RjUppQo3gM)lHJz{X0(oy0 zN`beLqS&O;sm#b@joz!<rcE{u8PqJ@07|syRdy6?!w)$aJ1~e00+CVJa~<T@eDT^h zcAB=Aw%4sIdxSVAV40qPr8Q{1d!TZa^`E!$2;Yu(kv`c<8tCLcmw7!$eOqPyN8C&o z5#K|OY!wDF$&+*h%34<Zy3~73#KXC2&fp}VmDRWA>$|867kJ`26L{=2wUjn>gf_?6 zoK@YfG>6@4a@$yUGn2I1tE}V9&!;wH>OI>80B?4{h%Sk0IO#RN`9IZmSi3)f%8+lA zMs=epTL6E@?e65HHy8pFioNiJd-1$jR`--$v2V|Kz$@{{nb7MpE{IC>=5iCm)zOl~ zhVzP;?Q|85FCuxmVtys<Ce6j{=)<akJD%e+sn-Thl!7uMg$ykf)SEv;Jg017)9pAK zN2Q}0f6Q8h()?}pO3Q~#F>LNn7en^!U#UyuLqUZ8Qh&782N5@7xMpUWfgf%*R``3h zH@b5-UZwk#ibV6qGD|`{-q<`Y7ob0Y;iob)OpNNp$L;+2if}y=lYUhLbx8vLLmniW zk4CEfiqNhYm5m>sz%X1R<+U-7pwWgN$<F|cwCrT}Nr8bk6lFZ1xxef#g)P6%gmamm zA`TnpnC3G#h|xD(_Jlz(7e$G}`nJZdlCz&?3d_oJWXYrt`Mh{#wx)j|=;RWo1T!Os ziP?uzYqTRmXFkpAU--1KYdvAFt-Lor-Qb*ecJI1W%A&lR1Y7e*+n`=en8iEstlbo< zG?LBVQVzpc3rxO+H$QV7!VG%rfJjfo>6kc(d@;8M>LKFDhM(BK=nccf6Yni>6&A)W z7nMq1Y^*7TPn$5Ly48#T^r+#ZXXACx$_~w_91`1R{W(wPTFtnO8aYRg7?pJd0axp> zp#~~on8pftc++d)y+r69>O)BdjT+`(oE%MCgwTu^deYjq#sPSE@s<{gZ^l8$#`e`d z<dT0Yf_Ygk)mX@VlZMoepK;@vT1nMAhMgP_E&H^TFuB!tM_GYmptb*cs>QJtL24HD z7@6yq(kDLoGhTmCou?(%n8&V9D*zT|)6N*c{CrUo(4b2-nNC8APj?+p%s@VY)4Sn3 zM9P%GptoV?!_4*(U4u^QSWiS<u*QWcLH(Ek2EfyS)GMpeN^hqG3lGNMaqFr_`A{Bv zo2jS%;i)rzwrb1g&5_%UiIlj=cmGJv2RM|kfjq5rIwCajuO+jl&Vrt+shRo@s?2KM z<bcb|wg6a$7v4=K+|))}9{^3>s}D|b^27p>dQj(4P$6R{+U#`zBU3^zG#ZVshtK@p z!fz%tSt^RaJkUXgHtVl!)Qe=sPOQfMN+QmN^~Z79YXr;nN=(5TuiZo%sHgeiiyL9j zZ~*a?x1lj>@gnodp%U=Jntkg%jWRq*#g!mXqCZ(^z*t6P@Y%+UM`C}K&$;_rix<CC zVCf&8h9@AOp}C)PYE1rYaN`5T%Btn1cP`jCM7OeR%|x<HFI5(JTZNKqHSQesj_1wy zrMoXK{FX)QA`8huEZ1~{jI^VVNrg`J#l14WF0IMPP#)hj&ymOAHvXzH<$x`bIeB3Y zui%?i>mkn?DI!ULZ@bg=2vwu3-YQ%-wJZ7>>TvMn(hKu8=u34Y6*oiJ34p+ZdVq-g z7#Yciw%rNu!isd!&pWK?_!zEt8~bN@ySvf#-4;h5aX5_cQ|K~YM;8|#5FBIaP{qyy zln*()#^RF3bN7zj0f_yQqr@ggrSQ#hU5?G9a1B%(?9OQGnjh95XF0wiRD^r>C^WcN z6Xan5w~@lGGrw^%`h4INKYYfkB0+5<0ftjz%T(bWJ6&*vv`q(G(tz4aJ7d?D{9!yx zYeO=pgjim9R0q?Uxa^jV{?<OZK9Vmh0#kLC$lnzM;v?mu@tn2MC`(^Iv$4ee8o|zM zAgH=#R#R_6e2KJ;25`}V4O#<?h$TVorFN;qAse)I-@udYN^^qRo^YgaLEF;u?l+m| z4m;>{?R_<qfU0_TJjY`#753UCl3q=?2rzem*|ulD(t<1uW{Y+9XrhP;qZ;Q>RO+5~ zbic}wd@btWK|Pj;7vN{j%fe5^zP5e@nUouxj^pzr%4arP$KzwDYg9udF5&xCsWEcB zQgb}3R{-c^y1wsOOKAjrZBF#gORsI;^2UMAH#wvnIf9=xVE%@_pFi>g5h%ZpLnyu+ z%QYx_zEum7wv0$%SbiJ(Q>riwXzf2%YWYZG4U(O(n@Gyhbb>UP;?D}w2iN9xm79iq z6wU@7YZ)rCC+I|k5YG2i1b*6R%lZc(;Tp%Z(xX{`{Y;U0hW6~wHUtjh%g#<->vZi- zpKXk<OJ3#O(N<4+00;@7`k~+HrL2@qez{O%7wp@pFydEUw9Dkxtq_xbQ(-tBrN30) zl+`n<n;v$amV1b4U-fXB&yMT~D?VL6S9>kKYa8$1o!rZ=WSr=J0WgjHrn%|!du`28 z6XCx(9;z=N(r!%pWZl+Lwf(NG3O^Is#IEQCUY_UD$5lM6GtgS3S>v|}(+bVX4S`RW z5vxKE^7Xg!R>oR^+mUQfAZCOWN#sC0LXZE5sYEi8HX%ZssvRe4bm_gEt*ZsWY1@9u zL%rkfyq^8*b0vP-=YXSqEiG}BtVS@UQCeK;!Ym0sfOvJcJ-j;7cSEgpkjn)>9@%lb zh}V8GdA{=4DNy|*92xT((3J5=DsR+EoZ0=_{E+h4$0bWd$y8+==9#O9Bwm_j-JeB( z%8Zl(Kr*Bd2XMOdu<+iH(yxP!y8{IQo%DG-Mjb2(LiVE-NkGIe$M}l*c*B(v1aP|p z_0CZn!<tRFUzLO~VNm(dVba&L!3u5w;@p{C<7Q5a1R30|oTj+HpXOJyRTG4n<|{uK zv~S~G62A>gFVg*ShM!jO<5%ZQSGUT^VM&TlfljZ<=W4r%kz!z#p$*fr@8m--FKbpD zH#*M!4lFrZ#ahO+KB<4Wm|VX0=rZz>RpLLBgnpf;tGn}hieVFx=K%9y%bF>=WyTb! ziuURbiW5*~uVtD?gn43%$N@y^ehI8xTF;YND!t*4Bc8HiUu}0zyR_;A@k2dQMIRET z`Mjcu03$uNJgPd);p})8->aQDQgj4EI~_Ye<v3;|k6G`$|HJ6yAYHEL`!|~!e-f8d zBNj$*42;XD;GncZ4YW5uk$)03_v17A&#EJo1NfAbW8Q$kUMfaM-0$~8?|bwI-#r%V z%&CMC5VEuq_|?z-ZDY@=-=+mJ3~%VyFaE75sIQ|dz0jN&m#XgOS|pVnzx(8C{d9ii z+E^RlO9uGyShCH-zg;qkDfy;pw{<mc1v0^Z2U4R93a1lROr|oD{|MLn?e7bHb;P@l zcBMwDQLy2DtLvmqqI8$LiQXUeW>%=IQk!)SgbKZF&m36OL6#6!Ut+@7(N0CUhL-hT z0_ii_v9`RQ>g4rZ%m-u=t}e4xMaz0R1I~isqox>E*m0_yQds(q)vnIBX^J(Rg+|CX zpVX3Co0Y#RdCRCf8EkHhL%;>*&N#;3j5Q+RluDb6)3N>|5L8&Jl4E=Rj7+_-HrDu~ z5->RLuK~WuEGv<n>Aw!tmzOc)E*;9Qf1b*4f1Wzt<&~DnJ}H^f>_+znmj(d&_GpT> z6GKk&4^)>+S52FwvjW(#xAi&ED=IHWqh5lO-T&UT5d{3NE|*cqs2<APE3>X%Hhp&~ z1k^_UjBJo-oY6%aj-Dx{?aDvFyHqo(!;`~5orL7*z3Gwn0@d5joPh4C&y7^)SuQv> zJb=f>8l`~%ZOevh%rkA1lyo3#Foaix38dA>lRhQozdT?rFe{J8iwm91+t5~=>kAE| zCBBKIJGt@rUMxCZTL+ojyohhQJ;%{=GXDPb=*FW^_S(Kq)_srw_u}`{7~}_jsF?zR z8P^Jrshxf(iw;uPW5W=wn%#Q{yzS`EM+vT924rd;jqY}o(O$oaOj5E#9MnAC;hPY} z?XZ+(OJoJM0T)!O$@+u%AZ0;Ly|Dd-dO#T<*mA3NW?&KjlJl16(W)f}J$)wAjx?q` zHv585bB>GFa#Z0atqKDenmN7x)?U~4QB(1+_3@Zxwr)eFL4A|<D=NV*Uo=e5u_hZP zRNzRNf*VolRU$tDie(g5#~Iw75W6ky7~m84hqwNh$;_)i;qpHQ8oVMZ8Anubucx|L znh$Jk5%j;fAI1a$f$!cjLY0*s=W;cL<0ZszF~p$A&vi1VFT*un%D>ywi+=qXe8Cpq z)AW~Mrz_h>ZLPgU#Oryb-##nzIHZHnr1T<~1W|Lzs{->0S_uMAlYDGh*qgqaurJcF zQ>95qZ60h|$Eb*znv7DcIYq~grFsNTLW1D$mz@*M6)T=T*;^JW#R=gW(5}0J3Bzi3 zF)DTCy!T=oBeAP6y&_p~yjB3MwgB*`i|IQGqym+hY&3p&SKCl;ioPL-2gsdtvT`@m zB!u4ORni!AWj~xDxqcn}b#7wC$<Zy4pWhdtMzagTi=0h5>K<aC`l-MK0VU+S%Pa7} z;u1{}=o?ZPA`F772J_yDQA%9&Ya7y5Zv9r*?Gvi*HtlJ5T!?OrJTnBzQfRH>7Em05 z(`XpLjDA1L3kqLxr9-x$jP;aV_ivL~(}TDt+h^1E0FB=)lH2qa#l3+~^WHQ){|~C) z!KZz30D{eex5bILF%8a536ftHFmTxuHj7YKisaRQdd)Em+;=UWYxAR}PDp~ZiQJ(v z)a+NwyOH!>Xcq31>Sq!P;QcD~8O`b9U*7=yl*%lL5;-(0EQ-)lZ+#D>_{tbn&ipky zu19&*O`wj9=aP@>9Fhf0TG~t01?xEFWaWpxZ3JcdD=ZfKaS{rusl)sg)X@#ECjm0y zK#uN%)QH92Ldxf;<KjN9HU)36=GRv&CaBH4%9RD#10kot)RONqTOZ_G^BDTdb30T` zU5~yQwRj0*QH|N2p}&C#f2U8VFNd`Iq*{3_!(^ib=m(Y9jMo8%ajXS16<m(v7m^6i zmEtN9aSnS|&B65bDKcpFGLe@BZ~=3azm;|QRCSh61LXYGT!N13+b?~ERWEy(3sRtI zc*z9EZ!>@=Mz^+n30CJsz+@O^>4FX7bhI|mA22y2c7wnPG~2f&bNXB<raM{S%;4Qa z7Q}lOA)MqHzBpZHq4`NI=5*j$-c&MeUOq3o28ekY#}Et!G>8B~a%XSNObItgbAm7M zF}xJmo9z^6N>_OZDQ)ERQFB^S&ZU2NO}m@b2*={%{l~I*e_o+)4W3e|0uV1HvMw}o zO0WbcbSlKh7C!!iBFTN<=r2lAZSUIB>%0vwv-el=&7N_hVKo*ou3uLTK`BOhqGpqm zY1$uN6VBG5{X0`aeeGmnX@2(J4!6MG_;AO*<5O0oX+B#96YuotsGu2nABxzuSd%+_ zKdX0uN{ot2Q=&6qgo@S#b#S*`Fk5O3gW3rW0GM~)sFqif^dCkaZu{kw#a+e(zm`Vt zSIhIylFzBA%XWsGo#^(OJkpLY$y!l~&6P~fnO(XUz$?3z6XL9rUlXgR92(B9;qeF^ zL&QKbiu41uN-Re<x(Ih=?IEwrR1Yf|I4A4T6yGoPsI%`R%TDU3zm{rKn)znsZ3V}} z;h2P$D;mKd*&YMHP&y#Oox*+C1yAR%L{blqsD|?F5bEPogKyT3i+OAEL-11LC%Ziz zM(dN5d6;l9&R^=~2<lS8BkhP3Zg8?`BoYkK0F*yYM>V;t4lM-5?coi0dW+xz4K-5s zh_G(dyUi|NCRoGBPi<>z(5P;(>VrYR6+%hU&xf$+YB}+wxvN3ENlzp}k?3GEz0_cM znVXxQj_k2l3V`kwH;uZ0V+Gt6hh=A}W*Gn{7`86z_|*|{tN!>dI4xFftTgfoDga7H zW_B0dwg#tgx$HTv7&d~SDY<fz15elF!6+W%!$m4p+@hb|(vyRvBDfoa+XK?3EJ@S` zOTs0PCcD*~=v?nFR@?2MwPBzo;q$rvl|OUul0>q)8%MH0#I<#Yfp4?&hdzwgrD$&u z`e8k70OY8xqr0dhJ5pt5Vqx<^)ySs=z(Vd<vt@VDC2q*B!Hqhjn@GNNqjdY=mt(e@ zW&JeBcn0Ko!)bBt(DHesq-m1pNR^goL3}Ke+9=sZRBA48R+|Ya>mJDE*F>oCssRIi zJRQ#4Wee5&oyZQ*YD(T%<AF?2paey4E5DQf0m_F6v!+&8vu6a0{Il(~u*-JHkygfs zE+EJmmC8<4f9m*myJ74SkW_H^$BS%Kh4Jf%7O**rC#f3LDS*)2g(5q6*KZW0DghYM z^8$cpCFcjW!&^zie)03_TVKi%{53Fi5z2Vy*)J&FK>F@aStux@9RH{SqWBx5U*9}N zDinak^6mnDxi3j&tjhEK+dW}IeUlh~0Od4Qy}qpQq?g0<w{%Y)ocg>OJ=3{Avu}4O zEJ-EE6ITe0Xr0}4*UFYXEO-FGTLMpKF#Pk&-o|d_Ejs+Pc|9?7%3A7BezP=4OlQB% zA$2&xUKRi?J7fm30}yT55h~wmmx|O{!%x!>=Ivq-US+E?Ji5P+IC{RgeKrsfvK|gV zIWC-`25Ilo?I8GGZC;I7o*0!G(`x&Z1ff5?2I~jh^7H|LWAs>Mp0gf5z+j>{dTeeD zm#N5gsYu0Vj(H$DZMflLlo+R$)cqn`R)Rh{6vg{&H3M~7zx6Y?thsTBNbvZ5@9aMR z&5r<N%du^KCRUrh>h*2@lhFDEOMk}A%L1jZQ{t@AH!FUqE@e~0*3Xg%CjL<At881x z3ugxl7fXG$X{_9^lNASWAAl!7`cMY$POUe@|K@_Lide5R+klw%t&oG{H*HXh{T;}` zH(F;maiR3PMu~p~R$}{BV}VDrrsx$9l441|BULa(n(T}f29mlOaX%yV%i>F(r*=X8 z(^v`IvzNKy>?(c;(~iA3xJ%mMeMx%Ml=$%vE5LtY#Qkr|5dM5tK8;$&l0*KHm`4RD zp2x&`Uw=RNz-yg+;I!cNd8*~j()%8J(VsIOv9Wyxdk97;TSV%t{Ok7FgH5h9;e=+T zSWpa|?TS$VV%TzIc3*gFr4Ki=;bF(?n~&>p*vaV{S9=+Kug;`DdXdqB3E*#$6DxlT z`hc@>U5b4RP-wF*g`~+!{xi&D%<+0gfZze?-Ww-SNF>lV@(Tbrq6rfVloSk>Ze2^- zy)mF7r<2o`ypFj4v40gYuN~8X?mkNNA;>``yatG&ut_~;a)M>s`+YMlYgzB6a9+<r z+aDTjkk(=AHR^Hi6QWys84J{5W-Kwl)UJse{`J6uf<~y8mLTf2k_>i+b7?YZp>XqO zd>-9(kl-60M2r_41BZG^$RGPE-Y%O)UobF7)#U5P*Gl?B7%Y!CBaX-<31EM0IQmFv z)9qUXKeA`KIz58m^fh9XQQDew8$CUr(R+O+3<x!|#jj_VtR(209I3)3@U+U30=ZGr z<3RE>Q+M)5S5Cl)Apx@*0uu)+qvGxSLBjJ6k{zr6hE}q~6tOKvp$*c4NmUEBY_-{( zxFCNw`<7q|C%7dj%X$b9DI1R9TV1uUXmp48Z$8khS#t9V^UMwlO&#leBQB25`1Dx( z^N0ub;XVKduMBlvU;f=QvO4jjlytf9m>|dvSd*NxlIZ3{rf)N}xDH7pI{a*ubeYU$ zsrm*31ava|XZOMXqO0J)b{;U{Advs<)6p?iG3)yADrlhiir$FyZ>5QJrH04|)6K4) z|0M*;e9){oVtv_j5m+Rs&<dI=tU*%+XuyyU6(xo+CBNVH2wdX??h`xcoz!j>X~Ueo z2UbaY|B8%fNUG^(#Tgx=E+a&9J?Alw>np{h8q0pA6$0kJUA|I~#HEZy<Hdd7v>Wei zKiQ_XQ`hrGlarB?<-&vze8+yGoDg$n!Zg!GZJjxm&zH?5>=zWo=-UZ-u%Y$=0!U&a zm_DhkyZ(VIt5_<MHAZubbnh_7TgU0$AwqQ1splr>aLMpGKIY+QK(k*iAXb~h8BGp@ zOC%llyHbp8tS)d}dG+o#($_>|+oa`|wN8Q}*NHhZ<H+ZaQ?b*2-w({A1g}BZo-9Ez zyNKV@N}^dQzjy!6jHLC^IE$uMzYh1Rq6`4-gikce7MG*E6?_hk8sgU?SY5{Um(Zx? zJ3Mw@Mt_ErywlZr6mR27aOJx<k;IrM9G>f59gs;k|JAywedomq#nDviM_~uJSlmRj zJAoQr)JQ6XPyI=6t!X`GT_`lwHr7^$S!h?n%zvRncG1j;;wS|4F6IW_mcyffOR{cH z@KD#{$>b8Gy892WR+^Tvc4G}FdfAHP1$&(h7EWgio=VxY6R)-x!tRxx3qh)oxi#z% zYlSH&#;TELb$_H}r_Eg1FmnXKwu;;!=NXRek)Cwl*1;~s$Ffqzw%LYMwL}o4sejl% z{&{0A0_Xm7#}|7+9f{$vl1zCAi3$qu!9q<$sQcPA)Te6wMcThjSK7wdYCj1i6j@a# zOw(`BP?(>oxwZd#ewZ|}tE#5KYb`Q}?0lIA!sSEwYArkIll?4ZcimuITE}I_>|YAb zj1J^^^a-jjQeYJFia*By47uJd+Fhp~w7HjdE)=b?0fWbNYe=`f#e=l{S=f)POZsHK z(-`AghHu7Xel}3flA*OxFnRVv*)X0Kw7(UOMs#W)PR71ifR5zS9o9{q>`*EiIT_tk zn~SIv5$UKPKMRc}guEx}X6nv-YG3Wp*2shV1e$KS`{Bob8>QnxL!|;EBuekI<Y(D; zV&Y?_lt{BN7pKO%A2y%O5tF_lm_M&ax88z4vg2$cZ8e_^rN%mZc3vcvqFQID6Yqzk z9S1{0K*9-P{_L{J@A=}dN(|v-=hUqFlY6Rr5$Dr+lhL7Bgiw0Ot4{;P{lAqz*(TYJ zwg&Uklaf^tG&#Ow`9mv64WP`x`3NGB>(?OW*+N!Aj+R8##eYZ!xdv71?YDeR&(SX0 zTbfRM$M%`hQKeb9>5IdokeUEO2-EY=+@JZ0%0>n=e|PeA3v^e43;m5+-C(^XHNLC; zm37*m)lmIz0;B&jaR?)XsURb7B$F<dkG+1J#7{T3@$=!D^xuI$x6P&x_1iP~%h)l4 zOWlWMD&KCeJ0&z4r6yeC#5`kadi8(+Li@O}@#rk@{JqdUaiPrK2m~2Ya-84$PkHeM zW2%JDUS@M%JmJ-A6p;yv^)0051LIe_HXB*`;k0Y((RX>JxGSi+;%3Tke7plO|A}Dk zB0t}EALt(!1uKz1J?C@DKe=+|)wL;I<zb&MnK5M)6KiF#?cI3pSLtpZ)>LR-JO7nJ z{cE3$rf^B1&JJ<7^{+LbJF*a&ABfH$z38J}fxnaDnY|TO+rfB#qiEZ)cyXxU#{NBT zANwVb`WeH;Q|rYFse9MQZ&G#+UG#8w7yLpQoa-)TbtxRvy!fwewnPw7UVr1<h(X12 z_08U9R+H%ms6d*HdoLwThTb$W-jIYD#G^E~3L>efdEP2A3-+FR!8|5@r_{yp8pY2= z?k#o_&2@g*JdQH<*cES`-FHJ=ft2-y4vzY1k43SLM$cEZekLJ#ymu=1&1S13NqQG| zrWo*dvgyQ_F>vB`U2(d3$H%9+sH4pne503&B=4aY%Hwsfc)|;zM}*bz_yiG&=}`0T zKXhxK$RGxc-p@xW&u<;I)||_m25cyca4MKC8AL0&Uo?d#6CN}j_e#G0-ou@ti8D^K zGFc*?xOLswX3TTB=z<IGyFHH%58{1cd7^ldz+F-tGbDn2)P<Q~0?I-37!oCqsLtI; zDec`+C>P!|&Y)Sp9$>TeVpFAzNVsbS&3W7R0GZ}BJ;nJjzdEa5*Y3h6z1k%@&~2JV z(S2;Um{Hx9*O)D$tf9@P$@r1u3iJWQ{OU`%7;BiPbKG6tVy_AKU@eP+nFjn)KPEi+ za3*e+z%4b|Rv*+H|NL6o@e3vwkMZh=-g9@*6m6ux)1)XkJ&&wBPUeS4>kO&I7LIag zEjP^5P%Fcj%-nW&ey;AiA3**~OZj&b#KeTRmf?QM^tU_M8o^p;ZVzS^xnAj}<D?0? zdtEDM77zFKu0@na_@712En*D6{tb6OlSZv42{!IslsBY8?|4FF3YTNvWLRM@0&EW! zR?nL-_46CAUla43*DtZeIY%o^7N(@!$XoHlI(NT#Nd3P0Kzf;zXzqh`v^WIvV4g>P za`2#P$^0~>kzewjMtdXy;i2)`DvOY~yRw5rq?f(@XaA2kp3~eQt0IT(&-s4z-aS=G ziM;OO4S{rW?q(~FML8(O3q}l@(fAsYP*cOkh520i*BK~oNS!_D+TCdwZCgV!X03P6 zpr+d!<e}H@HQB|pxG+#bUhVdmyqO8^SA23(kIrrs;l(uvTud{1c!{v=cu<<E>R%l7 zZqjtsO~FW`U0D7$<(<`Mw4r+=tp$xB5L4|rC|#yOW>V&e+jK~!@A&&?5}K4=cFxXd zY`<%jw%sws5w3wlo)bCmvssQzRe`<-f3M&w9A4?ZHPIaFZ$wc%k(n_tU>7hvK%uI< zRY2UmBatR!GW~=dGP%&X&qHIhWIzD%_Mm8;nf|NCz7;_8a%u8$X1c05b)GAbt%Zdi z&xsG;!gpzopPfB!U2QlzcjQic9Fau|88OC=gjwN5=P|1__C7t%!e;%S08j$2{rD1l ze-sWM8tEsEdIHMXO{_;8f~A4U{))WC-hgkhmFr!U%!Tj(fJ{s}>9WJIov~1KN2FtL zN2EK{JlZdHp(fNR3qIYt=#GMdr4oxJrO#MSd7#Eym|O1&`071=sS~fa*78_|wq@m6 zmgI@^UJUw!0svCUia5bAXxlPq>HE0d@8m;cJR%M8Q1n!+KYVJaGt`unZ{_u#x+@rb z`CMBLr8M}?gx{S-Me|K6KL7wmQtADmuW!$2L(e$)&KT`8KL7wmU{ufaURN+C<0sh` zi*+u`&F%Nvc9lJXwSfQtT(rs)iN?L&ZFh%4$CL5(lD4!!dwMRYtZedz!`j`2wq*bS zbC%T;E-iiWC*9qhNet5D(FKH4{{HVbSbqN@?VH9C0|1ONoNUb!&6JTWPEROHQ}siC zq_VQe8w@Ur$Kw?oLI6O*q37{*#0m;_-re5bmy#kf)qer)^x}=j=bURZTL1uF2|UZ{ zjd?r=N7{)c<AU#uI|>S_B^H}&+jc337Xa`|5Ls5Yc)bVi3I<!!^8M2N7re8qti+B) z>a9qmE+&%8AqRl$;}r?pet(1I_n-PfS65G3gLbU`(z^KlBSl4(&R@P#qR~n!K>)~t z%FgF&cZ#0&yZiduO%|b#%iw!mCAeaRKeB&+sW%!e^!a=R(O9g|NymWm1N!2&?epk+ zHn#<UjHI(LoojT|V_8ur&7w}qg?wIbe>55m#(chh|0S1n|6t3ONGANO|3`oU01ySk U60}|U`v3p{07*qoM6N<$f>nQ@&j0`b literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/76.png b/src/assets/all-letters/letter-detail/76.png new file mode 100644 index 0000000000000000000000000000000000000000..eb6b4384d523e70747ce80c8c5d496b4fcab576a GIT binary patch literal 12192 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/77.png b/src/assets/all-letters/letter-detail/77.png new file mode 100644 index 0000000000000000000000000000000000000000..07d9ca4223bed3353472b1c92a57d98e2cf1e055 GIT binary patch literal 20634 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/78.png b/src/assets/all-letters/letter-detail/78.png new file mode 100644 index 0000000000000000000000000000000000000000..4ebc71b6ac15ea43949fff10db31147c0ef13d43 GIT binary patch literal 17929 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 B;NbuO literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/79.png b/src/assets/all-letters/letter-detail/79.png new file mode 100644 index 0000000000000000000000000000000000000000..5738ac9761c1ee32412f5000e27212f9291af2cc GIT binary patch literal 18273 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 FV1k{%EKvXe literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/80.png b/src/assets/all-letters/letter-detail/80.png new file mode 100644 index 0000000000000000000000000000000000000000..1d79dd9d284fb5f642294d90cc6c5b57b9c76419 GIT binary patch literal 15315 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 Q0q{p%S?5vJLz{^I0nYZuUH||9 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/81.png b/src/assets/all-letters/letter-detail/81.png new file mode 100644 index 0000000000000000000000000000000000000000..9885481e678f7d5a9c9e87c06f9275d930c1b82f GIT binary patch literal 18100 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/82.png b/src/assets/all-letters/letter-detail/82.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3dc5100b69a97cfd3205cf53e6c9eafe9ef1a6 GIT binary patch literal 16898 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/83.png b/src/assets/all-letters/letter-detail/83.png new file mode 100644 index 0000000000000000000000000000000000000000..967d5a9da74d9ad3830f436cc2d6510f1c5f0f09 GIT binary patch literal 18630 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 M07*qoM6N<$f(?4)qyPW_ literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/84.png b/src/assets/all-letters/letter-detail/84.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1eeba407442188338bf51a246a23682152b632 GIT binary patch literal 12128 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/85.png b/src/assets/all-letters/letter-detail/85.png new file mode 100644 index 0000000000000000000000000000000000000000..b08582c09582bb55256793c2b041bc7d6f4ce989 GIT binary patch literal 17095 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	aoj06vR+T^A$Z`qF2%N*GnVW!ug)Mw* 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 M6D^feC5zzy11DjAe*gdg literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/86.png b/src/assets/all-letters/letter-detail/86.png new file mode 100644 index 0000000000000000000000000000000000000000..968f76245883a12d12504175629458f2e53f2497 GIT binary patch literal 16492 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 KviZ_40{=fL&KJS} literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/87.png b/src/assets/all-letters/letter-detail/87.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a309d9cdfad6590b5fd0a960f13d77ab513cc6 GIT binary patch literal 18597 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 Y08WAh0p`pJEdT%j07*qoM6N<$f_{a?>;M1& literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/88.png b/src/assets/all-letters/letter-detail/88.png new file mode 100644 index 0000000000000000000000000000000000000000..d1a9b85ed26553b7dfa54d97587bdcec58362187 GIT binary patch literal 17235 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 E3)8M0Bme*a literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/89.png b/src/assets/all-letters/letter-detail/89.png new file mode 100644 index 0000000000000000000000000000000000000000..99d04ba01021301bfdf827950b31141a8c24183f GIT binary patch literal 15065 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/90.png b/src/assets/all-letters/letter-detail/90.png new file mode 100644 index 0000000000000000000000000000000000000000..282f5afd846710e052a04e977a813aca99722272 GIT binary patch literal 13852 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	Kf!5vVjk>ge>DQ0?vMo7%H{H;9u<R@JzzkRcU zk*ee-&T5J<LecFP+9IpQelN(dWGeVot_PSL?LTlM+-PrE_=wbRZaJbBNmhn69X5HW zX4Ys{@Eis8^yi<ve8soiXOg2+g7X(GHhwp+Jo0mz*(EVcG!%F!E6}zvY93X!H<hzG z{m{>m54-+V{FU`MvY|hiYZ@j!%FePv%dsXowle}8d%ymUIF#Y-VP57=V$SdC6NBw$ zF{swVU3knHNP-zm(iaJ`6n2(c`X^UfSq?_o)FbcVWfkCBPAEQqX*(D8cPbE1>WYJ* z&&@u(t^h?zSf=lr2+>6cmA3ZW3kW?DE~yZ!!_P%@P}yJvs9b+h@@>ziGS|72=(`4E z0YWp`Za^2C-my4}KFm^ze$&z#&vC9(T77VT51YyIZG8&O{NyV-QyD)izYVtQt2%cT z-A@q*Y`yUgKREi940*YOJ0`6Kb~=uJB+?@zE1;!Bs1ERdf|Rtu09U8vZ@5fMWxN@L zOJHkUz(wP4+TI(QIiPS7vAjxum=$T?zED-t@nM+G!bz4<uuvFe99ZkCGA1^`^kC>R z9YQPIFtK4zshLbb2gMa3b@E8V1iC7<q+8+f5rk`o6D}))W5P6Eo%?4?iYn+;Szhqk z>Vfz*fR1w&Pwv!?kzmET>!`MPj<bHVflEQtA@@P>JNbf#af*&aVcPCK(7taTQ1hFV z(Ao(H2n5<QleCWwtO(vbWyI@cDl>V0kzk!iL>>alWT^^Je*s188Ab)010BkipDmuN z9czeb{W7D&!?`MDXOXfW#aU=}QU;ndIwYonuO?{OBo4$V|D3v0UP%7MYV--f+NocC z4h6tvM2b&xgw(2=O81()Bv$tPXQ412iKlg@EkN>+h67x{4WihT{shYlb662zfw^B~ z)(Rf`-%qD+`Ew}br$umKZ9L8nv#;hA{yRce1XLb(g&K(^fu>;I-eVTdd>l;VX2VY~ z4K#f^a#URsi$e(hmMPoC{==Kla<~**V>Q)<m$Ee;^H2!OJ)z~nYPGa;gkJ(E3Hnr| za<@H-dJYNB^{&u*<#{99NG}7kbVQ-gxI4`L;DXX#=y<IVBu{BeeXPNBwwvcme=pbM z{^=kBH3_KqS?0P=3j9BDVkOqy7-P?rbdM(ec%s&67y&SL@HWnR2i7qCk^#6%!-1f5 zp65&!@G!<mGP0V8hNZ<c5M@1okV^s5glVwHVCf1^bZepyd?fX;TyznwzxA<ZAfsp< zz78Rn&+Wi!3ew_P`l5)lEMqy|=;z@-kE%&BWw0p0Zk-g2Fk|l{xa@NDoi%Eg6qkiD zq`Xi5+`$8m+->?^xt?zH;ef9qD_l$!zGr06-V=u=*Nn})04AGpjbWmMdr3U}JPm9X zF2UD|9Gf!Vs9yk3cWuO)j#qc*$SsPZFMldt2iC`2>H71A%$6()Y$Z<i^TyIcjU@f6 zqu;Xj7oXCBgaNEfN<09VkkU-{ul&uS)^NtX%B4gI3hFPf6u$4<6F4BAf5!9g+uecf z%vY*{#L9LBta-Qp3wprhh#iFS9I{Ul4bxYa1J?>jae@8&D?;I5U#CaDnMHvuEkQ}~ zNr(H35(Q|P_J9%rlye8b077d6;W=Arjz5zU|E7@c#xKjvLW5ch(WV}|={^4Wx2o`j zcnzP6MOEcs$&!VYA^l`u*eRst@}3--?`M+%oC$!W!(ry5T+wOkB#SDRYaUx%;jO^F zN;#6NDBzUW=%5nCY-k`SE3iD^7*xlh3Zl+qtgD1TAv7@ROLTIeMWQ}XRttF5DFu4M zjrfrj+}^5*b*>Eq@f&#*Dc+}SeEYvLTVrn9yy}?CrN`m`Y}i1wU!W}*`J8NNXZiIP zws5r`=;ZjBn)XQcf>r%wWYQQDw$U%KmUaS%CyT8==_Y>OlmoNVL3T`F)|}$1(eDI% zT};N7WU^aR;NRY2DR<Bz%7>pGa$y}g-m~qtCg`OMHt>JjL4Z0I<fwahC;iRtH7Ww; zh*>U;I0mqR@-+{O&~%~N-LxX#b**ayYbc78oO#bOIDDVVkGcsP#J>1!+}&^P_n2=Y zm5a+6KqR~NM*h9)$Ku44gS>SX6~K7011fHicZtSU0Dg!@*KLFAz_VTT&a1HAxrW3Y z9-+q|{AVCC>iEN{^zp&uxRhAa9neT=%@7P{1-qELrELbkxZ9G`S+Q`zZdd)szE@~Y z=22k7glwMafn(cJU))8Ac@-8?YSTRjK#@4^m9KWvR>D+?zVR9dIME&i`cV`Y*g$A1 z4x8;)`AW8^T`)1df(!Ua%8L%fodR1Q2ZoMsl>8UaL`@WuwS&4peq}Zt#173^bH$8p zE6QyiavehYjB{?C;6t4XSR`k_EVmyLhl(OB$8+W056!yA_f35{tO&3+92f~6OMnf3 z&;+&OFLxDBbU<I=*m9qtDO)+rkL^({ullQ|?0sqD0rn?CRP={8SOyflj#Nq7EARr# z&hN>M>*+YC9*m%dl`ciz3Rh%R`898*X8GnN;;xtmKrY>^=Mn4m#uxh<k?ci2bG+E1 z<<>Pk)|cJkHk>xns`EY$e^k5l78$8XvqRobMaT8%xce5G1?qy}LweZ`$HP}K^A*d> z@wr^kpc<<I9VAUqct{nLu;x<8sMge_amPygzOFO82A;ZCl3#CKq^ot}alq+$=m2xk zFcAL(1(&2d=5xkX`}-M%UZKV*PvJ)$Jausoo({(^hbi2O{EPLn>t*fI-JFxHYx{QB zzj?`u8yJ|~dv|Q?2V)3IROxDq;|@^-&G5_S68R;ppQC9m_3(vta4o0%DL+C<fZajK z1i$*p5p4?*4p&lqtmpKR*{vq1aro@Kz(Ls`##Sl%oH0w^&67qf5zmtTa5i)-PtCdV zau)2|TMgZj)O{MJLvRDRP5;Y~=Utfbb(}9TROYQqu{>;}>1<c7)_Xs$ftSz(K*oxa zQ>(fUVvZzlAfMev=GJ_SD$!8Wu!M}6KDv8>O#7Pm3Rot)xb|%ni5)}vTjuwU&wuYx zs)3z#lls>BILEtYvF=G+<8SL26~!c4Y{L`#hyW9zNrSwebu_SBx0ZqHU5_8kQ!G}$ za|?9X$+Q<Y=lAb6?_%HiLx9<^CQ}UJs`^wV89Vqs8f5isPzuc|e5zOc9!W%c$quJd zScR|p&P!=VY{w^@ygb)$P0o%Id<)=V6P#E%JRZZj3RcR_LkQE*^*me=2>T@^$9nl{ z{nwSl_I+iMZ-jI`YvCy^9HVu|s;Ef`&^9EuZLF*;m;<fy9?lG=Ol!|ouC|N&N=2V^ zz!z+ODX1$hKE<MBNf*E8(q;472ZRM29NO2Exq@uYCIIdFC*K0t&KAssH?2Lp0(H%8 zA2XrQH~d;ar5er{Id}(rN8)RT1cVQf0VhH%=mTJrWI(4|*Fsq@_o%6`Eys?QlaGUr zdblv?4y;F!$nYClB#qWpO16X0yZuvO9oOzXXrhDma7%4HDcFDvOn$}#uUs?#2qrMy zx~@%-MVXSZiMa#%*#H^jaEJESOjHY$bUoB7M`nt{8KgjP32l}V{vY@vwqKw06+8{H zUOae@HLg16t;DCMg6|1s_`Ofn(Fc43uQh<+Jmn{^naCowuVzt7=x@Oe*5GtXmw{>X zd^a^}R&l4(cm#h;ejo%3#EhkhQ4s?TMRJ7RZwxqQ<=jSs+i@u~R^BwO+-%J1Vh40C z9>^oGxiEj?iDa%}CVTbx>Nf_s+XsKD5MO}JXZh9EN%D-HTR2_IhkasRs2gB`So^WX zEncu}ZBUh@ex<N--!&;<4mN71808q9;pYnoKc7=2LmG2oKoK6=!T7Z|`Bbp1Ib7=P z`zRHS%*I*F1*y`m(D5T>+_B#zxRP7|%c$|ExL+w4^<ERH_AXfTtHU>H98SQ(X=-|0 zy#-%neZP+nyBARDVmJi8`nXajzH|t^h}Gs>JCcm%NyZKxpXQhx{PGp=n}v^#w$BBm z3n=S%ELR|r>HYgEivd5Fb9HF3z9<RC2m%B=0E$ejqGMg;T2vfR+*n)Gjx{V2csk)w zYlp0^9A&J4P{N}zNV;jMz%ngz_!f)JsUnS%YVQ|sdBvorUBOoczX%4=vfJ2YhiT}3 ztOhX#aBNi*v&Dn{9d<<to%e(`oR1iSe%Sfe3%5%7&;UD%9`3s&Q8eOH*Uzb<Z3I~W z<59#J<+g{0gV&HO9@j&vyOz<d*lp`<vRG6rXm4J2{p!NQsJe3{%F==W3~za@@r}~l zIPdo!tvmy;h<}Sgt&SS_U?@Ue9?Q?1>fA1~#VpfO8E%sP&B8lQC$}T3cYhWO|C8zQ zMpj%`iZ;r0Cipkj6Kc>333nIFtr<n#79lkE%|ozL$S}D6l!(t-H{Du{X1xUUY=c7> z;G6h=yg-K;B;5bm)rb#)?DPM;WM(gCQigA{Lo)b%L&K*Pn}?QK^#o8Bqy5}!z&O6S zz;|IB2*KoxoPeL0q-%*uK}*VG$JlS;<|046{{1M5r{^1XU`|v?WXZ|;EM=z3F!&<Q zxHo{Q2VctHui`@0k{=swU(V!DfTL9(4PG8oEgV7gy>jU4?!r}nN7t0Uzvq{0Op1<- zjQ9>dZptrQsJR5)5<ML7s82|tMp5SSp<(lxWz&xH`vV)t6wXl4PeRGn<4NNQvt7RS zd=JWdQNbneiYpQdEguzCfA_W8p}7RTBK7^(nF8zrnp`fUo4?aL4mMm)R}5b{59x24 zV#gp?swdmMh*IBZotRp_HA%0vO^%w5%k%qYV<kDo2E|-`XKRY~D4KCi)6!q4QhVm? zxu+8D>A<1u6ev1_4_&+Ai#-*w8{y`>^Ob0n)Wdb$<0Q{RtOIt(F_U5@hGN;slH$sg zEOdkCxorw)0i_pW(rw~9V!F7&0YA5$?!h}JIkn!=le0z&IykKkn$XL*p0eWMeGe0> zr2;2y%K5+AC5AW2kX3`n_62byBNYL;XY5y~nDi@@ECo*}-SC6<sl10UMy9AijIqFG z_pC%}gm!|@ej;q>ywiP$!I2ydFRZUBIMKn$AG6)xzZ|rG6O1=BO&Y|EZtRRbW$LmQ z0w-0XPea3bhmWUri8DVGu6gqDquj@J4cE7_gEhG#J^X%dp<a5&{dBEaKPO8Xcd#-= zvRsnkKp^(pmRFwQU=G`^OZZK72~D~h!(!X-D+OK=UnRbrY4XdR(d}^j<;wH<_E5U^ z2!0;B69d^h=ij)Yh+15k7I55WxtWE1l^79lufgQYI)NOa(wi!9+)aN;DPIW6QZL}t zP6o$`L=rsA@ur@e`!~1Y8zdyP?L<pw%|by!<;b%W&-<ck^(A~8h10tyk>o^j)a7ow zlirh$j1>vNfuq571=wU7c^WJu!I^!o{wC7P|4ZF~z`Q?8W=?I6vXsvvk1j3Lb6@vL z0jJwTSZe!M_~p!5Ps#(4Q*~+YdA5RLPSi03ebn90Cv;m`9o^S#^g@59+3iwxs*BSk zy)Mw6*0Q;H2ZHQ!u_vS6yP(?z5}aQUN-=BS_5HpKuMZe~*uvoeK_c4h?z;OT80X~u zuIX{p^LGg`Cg}lv!kIqGuPfm5gAnwEJwcG&Jx$vvk8gdek^I%bi}n>dA$e-&2uh+C zzYA*MUbV8U;FwD;I0~jdFq4?T{zEshKuz3ftEzT#?CG=93OlRc{wVX9l=t3i!@}ZH z$21Ux(yhpkcqUPXO5x-9XL#GU=le#t8hJis-qfMa<j|_NMRnHi>VGGJTy^C%Vd3o* zEk$dk{A+Z4>vUBOX9OIt!>z39Cb@f+2iAA0_N#Sj`>89l6Xti0UMui9{n6b<<?Ou1 zfsEBACXv6RGCL+|##1oQX4=F2LheM46aC2dbvoEse?cUb+q0>eU|6J+!*2MyYbTe= z?0_ECVBxP`USzuSdGD@}F<+^>_dHNBkE~SUSXx*`p>5K}|49+UADbT)A1VjXL?vG6 z_Q(0Zw6-E2J>rWn<TO8(&>sCXl$vC0_m!}Pjm$1T3AQ_x6hDAi9u0g@LJxi86)fFa z+uV$4u1>M>Pos=<b{_e<N!u^5)|AX!>DRIHc<C-`mTKy_aY)H@{UGzko$Z42eHion z(Xr=oI%aaT>lBxePFl~#Y}>tUExx1h8YIGm`Km^Q61LUYJP%Rb$8RXAWj4ISF5WYU zM|bVAlmOum1SzsT!QTFd<&5i8$ocwe>@VR0r3KS42DYwK-`GEGZnH(I^CLRwn@Qtc zg#^&y>oHg3^}2!z2KQ>l4ryV>z8mZx&J;d<+3pBwSlIDxKo%9d{HUxuXV9^G;^5Fq z_=14=%<GF(=@d97Y)}nP*`}d8aL#`7(#fdoi9XMtR^mpNx?@*uF$i(^Exfh#XtQni z;QWz(pxAKt>jhz7MUf}k2hxqPVO{5ktK1EN6R&0H51r|(ki#ss-#4X)1iFd>|CIlp zq`WODT2M)4>1%TQqN}|tu8jp9|Gj`k*+#?G%pY2k8E{bdaI5xB98Mdpg%i{%E1XV5 ziaSW1pq}zad}zUau1Sn}HbsLhC@}3*w*EdGI58#Z{8y#p*g99$`cXNL#{Y3xR_Xsb zEL%{{q_lT5u&!R%U&H^Y(q%%pv}w-h*xTRVK0H{ns&7-8+a`t5{M-Z6i5_O$Z7?aF zo`0-+Fl@VZwQW_4-e<z^Q89**nadP;M!L<+5<WgRUxN>gy|ZKDY;0D%c7<x~-R@3Z zO|IH0>loX(@JI3LapMo6oC<?pf9Ck>LY{<a?HbZ=ZF>oszBu`ll$(PP&hGs@wSQhP zn4wZvcGl%ub7iX(7cx$zGP=5+f4tr}m^yWMKCy8}Q$PT@xHV-#UQl%Xg(C|S^Sq(y zl(37VB5v=oveCp7%{=KUQMnBW5=fFvtA92n`KEcKawBrtt%}`7Sja`<*W$A;V(z;7 z`sL!J><=1p<#a=W-|aLfaA&TndX;*`V`u}+XrXVtj=MR=7sob5Mbge9dvv;<8jtnq z5fQzRtZ&rXD$vw@o3^Gu{+4FNe_-F{bNe*@#$JwY((s@r^)E#{X!`L$@59f{t$xqD zPBwM@-~o%`es$)Z#UI$+c6?|^`sb&RyEeQLn-U)xs0oLMojC(VK2`27EKu7JK;NVV zee}cfIkl3rOXq8D_vKgcxBFy?dFdT&u-PayJ=4!zeztSgCfVQOE5?lGlPG4WjesEh z=LbGHrP~S36XhJ#p71v^`a{9Cs;a9d%!l!t#`8X`XSDV|K0*>5^X}xY+18A%K!+_% zubYE=6ZEI+ZnAzbnJUUce0sh6GDNfL*WxO?&fb%JQGM6irv|3xj`FsppnXqQA_O6R zZ*>2;H+Ca~oV(cQMsc`q`LqsFN}S@?&@U2)?Mv|`aLb9c8=X5|m<6V2#EB#$QKsL| zUh2Q_p)V~tai=y9s=29N77-Z;6cZWXJu*HnsCT@*qE8^@f#|(cQ1G6aN|OB~g4tuo z%N=#JV;Z1Y-@zgIbA7|*YlJ}mgIFTD*d|{NrBBkVP?jL21qTI{x(*c)M#yH!=;)I$ zSz@*!eJP7E`LEj_2ubM@rrOshcfI{jSK#7q`FbInPY+EKGNksD#iSu9rGHt{*reuj z?mMrajb4vcGmmhf9zrhPyo1QFZ961$VRmmjuatTExWI0wP3M(Mkn0GyCetnV8Ux9j zSJxz{GB@)h$?_#7U(7F%)r82F*AR>+f>X+A7P|OlrHK-zdU`&jA$v<&xPM8)Yn<QB zU|e)g^0u*|oI)e7{Z;~77o~<*eC|h#f_Y+U>PB%1-OcbOH}7j;4LS7uhnIPI#eUhf zwH10PtwU$H`RQiAK92;!#XHHMppr}I2M*cX!$S)jKl?U<H?ugjb!wCa#Cim}IL*v1 z{?>p(Z`Kp;Q(IrJ+p&o{A@SDp^vt6qUc5Ww8lC?#I*A$*qpei#+4Bu21X2I}$$^0* z(OAW?T;a??M_<4DM`>iS{JknfFw}!1CLWFY<>1?%ng5YXI+kJYD`7nx5p31s`y*A@ zwu<qMKy*tS)hosRBE+7Fc@~RJ3T={a$4mv(!(E{F7W@ImEMLUS1e=>2^OtBVYq)Q{ u8c>qV5Zla>)r&4Ryy-$>zIuM`0aTwHO)ce`;Dr5qEfoa~`QnF9gZ~$~+vkq} literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/97.png b/src/assets/all-letters/letter-detail/97.png new file mode 100644 index 0000000000000000000000000000000000000000..d58505f2a7df10cca037a6eaaa7581ce2bc13b0b GIT binary patch literal 18849 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 Y07ZeVH^Uz4umAu607*qoM6N<$g32gl&Hw-a literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/98.png b/src/assets/all-letters/letter-detail/98.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b20dd9165d70d7fdd3f6e0e82cb33e017ab3b5 GIT binary patch literal 15108 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-detail/99.png b/src/assets/all-letters/letter-detail/99.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c7372cf0f4316ce302eb1b9a5b802883de9d8a GIT binary patch literal 16171 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∋x>J|iY` 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 E3#l(-kpKVy literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/100.png b/src/assets/all-letters/letter-imgs/100.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec4a407f0697e324df0aa600a4f219cfc261279 GIT binary patch literal 10512 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 SD$s5K0000<MNUMnLSTZ=ZVod5 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/101.png b/src/assets/all-letters/letter-imgs/101.png new file mode 100644 index 0000000000000000000000000000000000000000..acfffd394bb31090ec07aaf9b84038de1fc48cd2 GIT binary patch literal 7977 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/102.png b/src/assets/all-letters/letter-imgs/102.png new file mode 100644 index 0000000000000000000000000000000000000000..b863cd4af3735afe0dbb1447b8760d32b8d1027b GIT binary patch literal 8214 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 IM6N<$f{VMqcmMzZ literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/103.png b/src/assets/all-letters/letter-imgs/103.png new file mode 100644 index 0000000000000000000000000000000000000000..0a983d81143eaf4023ca86e2ab6b2dc9825b53ef GIT binary patch literal 8385 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 X=EyaN!%lf<00000NkvXXu0mjfA42a6 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/104.png b/src/assets/all-letters/letter-imgs/104.png new file mode 100644 index 0000000000000000000000000000000000000000..9d55b51704fc6fb4d4a785450ec6d0914ad1d757 GIT binary patch literal 8021 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 X<S^%Bz~?U!00000NkvXXu0mjfC!Ig^ literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/105.png b/src/assets/all-letters/letter-imgs/105.png new file mode 100644 index 0000000000000000000000000000000000000000..8782e2b792660083726653d31a88d9ef5c9cbdcb GIT binary patch literal 8679 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 FV1f`a!Os8y literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/106.png b/src/assets/all-letters/letter-imgs/106.png new file mode 100644 index 0000000000000000000000000000000000000000..ce61746680a011d9132e666cfec07ba267a3a89e GIT binary patch literal 10485 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/107.png b/src/assets/all-letters/letter-imgs/107.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecbc6f0ee1e2ccd1c425d182abe2e5d3436b66e GIT binary patch literal 8343 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%0D)iXh+P3e;6PQ?0qe5tK+t_Q876JPbB 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/108.png b/src/assets/all-letters/letter-imgs/108.png new file mode 100644 index 0000000000000000000000000000000000000000..b5aefbbc5ef3d44c8cd9059eb75c53f5929ca452 GIT binary patch literal 7827 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/109.png b/src/assets/all-letters/letter-imgs/109.png new file mode 100644 index 0000000000000000000000000000000000000000..70a44e19d8da3093216542d57ebf8e6883400695 GIT binary patch literal 9001 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 P00000NkvXXu0mjfD;kLv literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/110.png b/src/assets/all-letters/letter-imgs/110.png new file mode 100644 index 0000000000000000000000000000000000000000..ee83d6afbd273065ee8eed4219c6ffb185a56006 GIT binary patch literal 7932 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/111.png b/src/assets/all-letters/letter-imgs/111.png new file mode 100644 index 0000000000000000000000000000000000000000..12ed6f768e9fc9778ab183c017d6623a8698b759 GIT binary patch literal 9017 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/112.png b/src/assets/all-letters/letter-imgs/112.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e1dd6351c22cc4c88d4544b8bba2960504d2be GIT binary patch literal 8187 zcmV<X9|YiuP)<h;3K|Lk000e1NJLTq002Y)002q|1^@s7bsoZ000004XF*Lt006O% z3;baP001AdNkl<ZcmcIr36z~hmA-H9eMxWWPSV}k7a<{#K!DJMBy15B^?)M>Jvz#$ z<LDf40C9jcxPYD`M;TmEQBaR(P#IZNhDg%c2!s$q63D)HI^F3`@7sI*-ka~c_pi4k zX(TYIKK=iHRo%M#y;Xnx^+ZM~uRU}@vFi%DhxOn6P;z9b*HvX;AjxMRFMeKF96%yE zBtCWp1KQ3@3aEbSQb{DxxA04n1d_Tbi=^p+#W4Z}quYNyHxvrLzUKEolZKCf22Fsh z`?Pc%J}9As;o!)&$CLh0(4R=eM�ueVT*Bmq^MJ%O8@m3H7qzhMUC)v?+1~c=^vS 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/113.png b/src/assets/all-letters/letter-imgs/113.png new file mode 100644 index 0000000000000000000000000000000000000000..bc34aaa7cfb2d562fee1ac3580826514d2d2e558 GIT binary patch literal 8221 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 P00000NkvXXu0mjfFr}so literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/114.png b/src/assets/all-letters/letter-imgs/114.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f9753fc85e6ae2968e04c6843e0a1152fb0963 GIT binary patch literal 10219 zcmV<HCluI;P)<h;3K|Lk000e1NJLTq002S&003zS1^@s7`8dUk00004XF*Lt006O% z3;baP001YVNkl<Zcmd^n3AANZdFFr4x%a+TuU@@+Rj*!6)CAPPP|PYcK?%l%3`Pv; zv~+aEq-_-yaH6x?K)P8mF)=2(WQZcMMG_k@8lwm(N*DslBy&MoRZ!Eb>CMA^)4lhc z-QV~BXP<lS8;Yt5>gttU_0HMDzyE3f``_caB8L;=;U4GV#|H<Gc0HeWuK)TE`8<6O ze&rVDhWg*jL_9v|Chq@6Rw)A<`|kH#GCJU#d#YHz{SFrobszABfsZ7^y-uqJd?MQg z618<`dFX*y6h@H(goOg&5~=m>d6eY}M5af-b(bVbEN*mMl3Gp5citsZD4v}GiA!os zFa&ew=sQfD1fdZsxR<}NJ_({i>p3NHyY5y1K3dOf2j+?l-1{d^LBrkmfYBH=GdaZ7 zMkUzy6XZMNDXWgi7d~)>)FvzWEP)sR20jQQ2}MUJ&S?Uh#K1Iob1!{!oeSbEEMx&m z26&^6hT&bCfoV=<cTkq|AusC1L?=mDxGxB;RpO}5XIgKTS9PfG?UN&YC-~xc1kKZX zqoOg<1NV*U{f}<)0OdQsk7)2dH*$Ta&y(T5|GL&d(}zPhf6bU6n1_hb>J-msMQw|; zOdnS0LDM%%qIrt~Rodux?vZH0d})5`Z)j<}zegq>eoW)aq^nk;Ea-tog_>ded`TuJ z6d*`mzRkI#E)v<z7AAbE%as>vUJ!3GV-6G-5G2Z$ww1MwBC0?B_Jbd(ClD*JksMnO zH6Q){J@U!Fze$B9lr<oEP_#x{E2OPU5`~}^pKnxI2U5dy9a|KIlCwIN9#Zg)h_`kd zR!Zfw`fTa)o&V(Gkv_IdLx_j>IamGy1VW>kHE6dYkhVw$ow%<gBjwA>|M$B>glsZj zR@>JnlmE6rn%{D=l-8e-<@@r6cWtoS4S)Ho=u~}<_CRF*UE90ERmulWX{dli14gji z1LhW4cHPpn63s$|WR<$VVOge=WRRU12+Tdn=l|@F>m*R`udn+Q(rD)xO$c8Qm+N}V zIEhE#m+t%l@RFjFx&QTD%I4m#T{2o8k#*}&l+o|pElCV#Lh7w^r1i4Pw7xz@ANiDP zKIPL|KN;U9u2R)FSv7$HrX0d!G|iWA&Qj&7`-lG%NZlX9e|&wNxM)j4D_3Jzyjou~ z;37gwfHGPhVc=mb4yd7>FCz=~nLvb)r7&ByVFJ<_q4pQv|517PJ3o-W#hads{}@=V zZ=_Q@3BiZiyi!vjj3E_tR)lkY_hS81Vjz@p#X{gxaa<5>VdtTD^Kbf42J@qq@YIbE z*hQ&{Bk=E(H4PpSsU<+_-6jzb&WKPHpg*F{=P;^G3DYvBls6>Z=nt1kbxVs3%-bVv z<x7H&EAMRRc<M8OGT-4m2A0tohP7=X^Ds(vT&cvVkt_toqKw~jKYDH7SF%h*;KHLY z{#Oa(+p}ypc+1gDG$0U+G0DgnSO^>D3URsjw(<`X8Ts~HMG!2yB9Qsxd#58v8zkPj zTLJw84Si8OJVI-d#Lf8(^Ml~3NxmC7fY)cJ?%GS|^HGjI&TVaysL&op1!+F>6p1?D z|GyL{eKa6ID}9I#Hf(LB;5R1azBn0KFd=bG=Dz(riB_-5*VTAKGfoV3uPX-O7B&C6 zeW~eMFNKbh>gHnmvg19b1`dj0WR<lP7>J&KL<VQW5QfF$+`z7DHGxOQK|FXMmM99n zcMCDENs_c<5D<{5Gt+9*rdgO{QN^5s!I8|7J8t{3p+}mNq^BRZp+l_+EKT<9Jds>v z98`8}brU~%gn2UeJ->sdsA*g{^=T?;ynOq=NPxK<U0w49=Ou;qC7_yy$|FzusMMae zNygKUKO*1z{_Qf*-z`!qYGne&W^7tF>kCb1zd^?De*}&qk>aVC#=!7TKkFPh{Y*?1 zsDO%1!UE`}w04aI)yfS-7E~U;<_$Gzda~&Rj^!0ehIT?(=ryTxC6G=hv?*Za3m`g( zj6eIoWw>hs6V28QPez4ig%ekhXk@F#=|H?A@o)Obq@4&vS{A(te=u^l={7YP7%dSa z(C=!NA)WH{9!#ex5KR?97Y06+B4Zv%;~=Npq$WXb%$>0TGY?JB>EY(9ua)w^019Hc z`j!S4kpXATnC0XmzVdso`IB63W3-U>_r{ueTrWnkxkZ*7vnp)^tL)3DtIQ6pGNke& zQ2Kt`dw(Cbyn+n@**3yZIA@2JZOS78fYbFWGMlv#qCOVb_&}{jQZN7}h?kl*bt|H5 z)H0hup@t9y*ikt+hSuh+%!>R261+@KjEwY9$n$a&1IJ4xfL@B(r(7J=YH)^B2YMhX z*IPI3kzs_@0l7mNkt??plmvf?!S(;$g>LZrW2cgE?)s*Dp0SqC$;E5Ky|)H|yEsmQ zi%Rns)qO?|W~Qhc>Ax&-2}ZI$2`l#kgc@@H3>{obcpaM<Nke8%KEuDU-sDntaR6Nx z3c(W?Zs5>5ia`*h`t^{FZ`6A^k-~AwXqOb4UO=JmGsXbgVr63uHr*@%<9Zx4m%{S@ zxfAvqO4C`VNpa083Fmc$U?el+e04Y6`@SR$Z>>DD4fBZ?bb{P;LM-6|^^0u$efT>{ z>lDI;LHkG8=j$Cy3mP9Ufya%S1%s;o>}iQsEEiYq`ziANQzNLQ;8ib|YDH?lpob5o z)(z`z>yYLJU1PzbkIkK_4)eUOrj>_M`b~!p6tv8Ny3jSiNV4Ts#?P7<?pZ&r0+B`G zS(OJKhsD$SVgDWNQhMXLA{|#@^q)P<%0$rC*5_)~#|!I^MKiL`g;L$Q2f8arF_35C zq5VC{P<IvEAXv)u=%4oG&IOoYRMGJxX}R#N=&tUIvo)V*YgU`^09?hnk+LM16BQOM zuvN-bQ}S56r7+Fm4ueThtKJ<hSoRK&Z>G1eKCO&%#$==i76q%!2PKeZ<ZF8dSmg6l zMijbMdofzD^rW<A!>f@%T2vj}^R}eiUqch1oD${gkl57pR0f#VJOKK#LSdt76}wqE zY#N=$gzMY0GK`vkT%T{Hi0}$aCHd+NpOyRX`L5w10nZT2F**9uUtKFNZ+gbcS;jxl z2sD$7tgb-IzLvr@B$yKq9e`P5*Q^@L#FNiTGB7B`V~>{7@oT|X>gRQOV^x{Q-lO{q zAO-?31xqL0{kp~CuuzSbFO}vuzfl<qs$>5WE?kMJo`va5z|zNl07Z=HggpfV_F97d zo3kZay0|WVstN7F${4_jk!zFh|45SIQ6y3z#pE!FJ6ejTZ^WKqXGVKka}bN}oM<Kg zfS+I$NTf)K7k?p$!F@_lENN5F#Vbv8>9EO<QLM-c448Vgw_!MrZG*`&mG3lauiDVQ zT|rP>nT(A~<?)|OGB_fIqgP4O=_grp<eEZjr|S2L(Ag(BR@zP~&%Go8X6dC9H^66b zUH}FwGC%0(81{q%xA|+!lS;ftD;3~bk9xZ=10qPa14c+&NEZ!kZxUp)C&~c8LDbTz zePkG*x%tP5EI64!#u%OS_HRoKHpeiq<3)@eN%LHZY+xiJ$4Lq1N?NDyX}IeMykKSz zJ~)$61LQgc$l%D+r_RFEqts`|lp5gWU9hK7ar2Ky8uOkW%m|_;m<?5hfpJco4Pe@o zG<;6%cmGHg;1ZpEDMLiY84%$ZY=*>k=DIDNVqp$PHm!^d5EyUHrYij)&P5XIkTkTZ zDQtQ`!${Wxzn$m-OmBwJ&-XJ%38cZvf$h6w+cVG0mY+WdL{6T#=U?R?uKR0fjdOov z&O`IfUSxAZutVmd`VdVy>!c=MdA9gJ{`u!nWNmvFn-JlR7o4x}!+HF>m@q;{{OVh7 zqVf-ib_T0VSY@^$S{^U9uBr_xv%t44uM`$GvioIQ+p&D(Ip@$C5M%q|iHE8idHSYZ zAY{g^DWqfIMNxrJ0eXO0HA>a;QKl7%k`{{=W*<k4?aIFJvme|mCG>xWH($z;+Ios- zKnwJtY-!AE%5WRY>gN41gDqu<9tJ}~xfKhUVBn4)+0c~^7F|pdu}5l>()fTSt*`Z1 z4T0M7hR!sF8raQa3?@|VtY};-BTAQG=s=1T#DLiL>a33G$dK_#Eoh_A@)0+@R!&Ak zXp>u+Tx}~P;t|Fq9H7*wUsSR-&H6V0tU5_ig48D{8Dx3p2nARp$~vjoh<ObmstlRM z5E}(1qwL845duyTxPW@ipe_HJP)7>j#umGt8y@u4UEi1fI~W_EI<uP9S-G*k71(8e z0+#SXIB#)oX!R&(euF@mjP&ioB;zQl;CR3doa=gSd=7@N9tO}1KmFmUO8{EZi~(y; z41LnVLKxC3VO!_g83CtcV)?iQS?knN<4xEeey#yx>SCCMGd9Qgz`z<z8d_|&4=)-; z$HpVw*EC?8Au%yHh?No;5KO2?ehvn>AZ`eQ4XHFSBNN3a`3B{$Vc9o^^TA|C7n0GR zL)Fu!>v^PwDE<qHcR=G`mvHW8h-iab4yIk3CYQnJj7(tOhzS73M{Hs9Txjx%XEE$z zS7)T}YUa-tuv>YF6gJ54ogFgz!?`l~JluMedIBfUYrQ~DcD*+>sAxteFvGZx6)>o1 zJvT8aai6Z@KdTutJj~*Q=6L50R0RA8<}zDL+A>gMIq1CN6xxH@L=az??;$fXQJmZU zBI$58rSC!{wQbvR5(N_->szUrQy(KE9h~~b-973F;X@$=>^|rKWN<|uJm|QpE8jzA zWC8$e%vy-)Cug;s0oC?*3$G9)aq@vY!Ym%vF2E)_nCJsdR>Q6$7tn5LEm-ss*x2l0 zMkW+IkZqA7VVmM_qJon=OoE+UG7~z?HBWW@LlO@T5gLP)lj264<0U8j!%Xn`yxEx$ z_h7WNQ>XG2javg;iy+SVJ0%V97df}7<lOE#Xu2iIAbTJi0;<4<eY9dJM&07=gg;oA z)nkU^?ti%XZI=fn+;d3JYh)1Xm6m2K@Ahv?hP#)+23jQP1YHdGpc`Vn85A%w)?#To z4!#X%pvAUDKRy@(EJM}VLv6Hwr25#?t+iKnVz(YUFPFSsf)e?LtY~vsOC5vniC8MK zSwb`=9KhCSUg!GRDOkxtnTSXFuZJaGne_GR8WN`ns6}cy;>43?(TKH-jjSEZC6y#z zJEwi=c7n|o4q_9)9al~!y>Jn_85vNPQ@%-$fBHZ~<7t`B)L0gTr6_u}GPw5*OwAT% zWg;Hj_g6t!I5)LSV}OKGIw@7WkU@iB@Y|c}ADBVrFog?CPmT|4U&EZ4LWVM5==!== zB*o_4`8<siS|v_PG@awjW7Di$zA}T!-Mr2jH)3bhL{cccq7r+g{_XKLq;m<D`#=pb zFi+#?HT`=ZL~2@?#soLbbk{>G6CRNixpu>d#+eIg8QaOq*?ZDVzQ~K`r_}rw`j%X6 zjZR|%o1k|q5-(t`z4z_eE!TeH4{<a(ua3vt0djt^`9=BDPyROvThbk5;vgfQ8ANLX zyFY_hLug=vUJ!dgCFPtIb)Dd+@PU-ea8~Sw`K?W=n*V{RcmE!}*?~dEh|rhtRvPgr zGY%)^O}Np~7`(ii3noJBU!oSaN_KWh<>f6B;^?dC%+s*P-Bg!|2z|hnH*Pii032Y5 zTm>@u@Dozow;%ggB`KYGhD1viDZ@CjD5Qg=R-2KD$p;^k+5w!srhyZix#zzHhb8cW zc?OVh`+Fr=3goH|yjWf=$i!Vg5uV|jUo|pKZ$48BM=imuYhlB=NkelOO=uxwz$gYd zGoIk=3cGdnfHFuMEW_C0L&{*>wNK)HodkKCREX-6&*-><M1$~kJ?0SAxv#^zav1}e z?QIdXGC3&+4(ye#-P>i}Jlq>Z*~w?TNf~n^xO@S-(Z#aTBX^kajAQ4JHZ>(oX9B=# z@OAoD1?L{x_Bd1_!cx;5S$*_6S$zz~C#8YGoco-Jhn*d`Oor=5I7&|o6-P9GKA6)U z+Q7;5<^b`+G7QPIXbsQ{hVte&osRy6-8YqtFC&`Z_Jsa{s4;`N?Lr*3oP@1IXh#J{ zeNt`yO&l2M!aJQeD*g<krCd+Xyrd}{mSQB;7dA^}%PZLJYnIYkr{f%}4Mcz{uTJ_9 zruCg-<cq4ry^wg%e$3drq<F#xJq2=lM<DEv<}KvJGYf%x;JU(O)8yylc=F@Tr(TN! z_GxxAAQ{6vBE}v!HQ<SPafu>h$SV|e^Nax`S^$mcsA}z7-TA#*dG}L=>L8|zVKhA2 z*0i|bI@b&plWI$m`$fDD>Comt#LEidI4peV7euAfktWIEg+D%RAB%4WpXXydf^zK} z6ixx~C`3`AZRx4#RhYI8_qT<+f3Y678^V?VJFMJ1Pq5#^EguUY0NhE0gE&OEsS#Rx z8cE$4AtM%yC6G_&5@ZXtxI_?{LqEa*oM98(KKH<!v@TmC<?Wkwe@HX9MhFJ5bn|0D zZ48%y_i9z{#9$U_aJqv-jTi%zUKyk!`R5tMJD~=9AD3VZTj!Nw;C~j)>$^F0${l0` z9QU*RDFG@#^})zy#EA@K@wP1<-g!eBdrj;$33%tiNE-oh-3$XPgWoVCb8I>lbKp5; zR2vgGJPbfIkW@<4d_Dodf)?sV7%DN?<{5|(GZ}!SzUe3k^T`(3Qz3{~xgdO9Lo`x_ zL0-xOcL6<dPYlRGz?h+A^>WKMgv_V#ss&O(P)0$Rf-(5Ij2pwIF7u?wQ(c*{6XuA* z)~BDBZTRcP>Yb-WcYOAX^4vo|J#1Vvxa~v7ao3l>3gB4I{V(qp+iVwk$K`)?=m=6s zZQ;YNg$k73LL?7;>&^^CD_r*Bh9lNQ*Vb1-i(L%83V(0=gZD_=Ld-XgARI9hyIzJ* zQ3h~qwr-uAa_-qjK;Eio7u9I$WN6VA%#ywHVV;(0&vDYVbsKWb*}VJeE3FEi>;?1< zzGv{wo@QN}J;-_=Ao5+*x+6OkE12J~Zkb^wa%IvwALEsAZWFL65Fkneu}lyx#KQ#g zxDA$F)VeZwCV&C43OUY8&phvx%wbtY=3B^rcu~hg93*CbBxQ0+H*l#YQ=4FEU3yk# zP|o2o6*V5l99#|b?GIeIm1Kc9Sf)DFtU4pqG8r*XYxsd3qb!3mp%RjbR6Sl3Y&9E4 zjF3rYM6SH?ZxjKUw|o*JqgIE7UKlcF`NoKfmktMn!*w&WiIB!a_0=_sVsAu5XpH2~ z(Jjwl$gpSL<4mV=pkf*#BP;_eq^)z7Qhx=TuZo<bqyg|<XU5_t5x9fKdD!YDBr?Vo z9t?X%J-o4vN~wk@Aj>iuFzm`g9QKnt3v5#czHPehHIYfEggiVM(h9jpU5%y<3PyM~ z1DKrx?+r7{wl-r0BB~?P%G#!N4Unoyn_~z>EZ^j3d?rS`KxE7tCYUfzeI*ZMZ<HyU zb*Ad&WQ2r_SUrDc#_}3b2C^1F@4!vE-wv9R37JeSk7slEXUfnR`9m7_eAt<?Hyexj zd~nJ(AK1$GF-3;dJ}3Y+q=pH}l`wF!X;8$;G!3(^JJ$aHB<L1K?@gycj4<fD@~PK@ zZEf(^1JSP%2b{F4MA$73!Y5tdjStOq@6_|-wtu}DFduh)*Z*f#pf8y6K4OdDmU^w+ zd{!ZeT4b{JP_TG$c?#~=HAx|A<=%5cS9lK=`!MY-tApx;zlHr6-<Utfy8NTk*}Oyg zs=p87??DH_`rEZCBek~HVCf%>&c@VXD*_BfIIFxBz3jbN$Fi037C6}tNNeZ6vBhR1 zcqIAN!M^juF!?52Te_Hp?5>Q<7tiBw3s9C0j&@}3oZ#p`!uHJU!E1ANh$$twgZm>@ z0`tANbeSUS6Bj;&FJ>NggM&vl+a;D<pcO#rp9w?vBeX7*00)T0G%W%fUsy8R)G}9P zYP4HAdZX7;0xKPsMd0Y;FW`!=1{WB5F(_guD8boWQXbXMHMvd2b2?l~?2bcsQE6`H z&!=*BIO(|DbG0Oe&+8_E!x>JsOOo+d!E`rn(a|cn9rhY+>D)6?s9hQ?_{5Hb(LO9i z;4b^4u==xgzaC%zPTcc=?nnhVluED@Ra~_~if5dJoh=Mwaa;~vctOy%@X>=YFk2b# zLKlPRJJ=rC7zF#o^=-#B#3A@cSV1#pC@_kkgg13@2t5(TyE!N%?+DtjdSxb>hqd&A zVg56yVy8)3l(z0((OfY;H#bXd?|up9&y(WG$AiH_D~9(kx&Ho3gM|xs%|!fQdAQ>F z0a)KgDYQz`--!eF1K1#kKh_O3SOI$ljvVJ4htG&kAHvR;P1#jo9@+-70Dr6DSB}A9 z?J^wmbV@DyOE+-+P11hl!&Cj(VJRZ4hPSv<@?mt{V=07p5f<m%5!dWr-H9u&P{xL1 zv7J;qBPoTKqpx2xl`!kf764zu7ZE2AKaV_X*auB`QGoUf9YFQ^W;?`_yu^-OW`QpZ z<$+*9|M|FQ;5Wn`pP9y0)3RTqgEhkIO;#6a>*^5;EWuAYIsXf}U5!u6D!A)W?din| z6=|1zT1E#hYs7T$RCT!T6if#<@K7Nh7{>Pqeb~3h?2j9ZT9qooa=97b63$<W_!4L* zxknb9lvl#RiA*UyEJd&`e8k^@iC*3t46zpz@h&o(CJpQ+$q?=f^r8jHHd`%@FJUWt znAdvaa>m<$=V%`BB-jzxb7?aLt;*?ffHS1RF-J+b`WWbJ)r*tGGd>Xn=XpzbEfUkp z4_^`UI=&6rHu2XS3K%714!`F0c0ol!cw9eDMzIZy(->qh?_wG0yJ#Bq*)m+R0=K`z zWbXl~?B0VP55O0J;8fL(2e+JyE0;@Y;|3ha;l~Bs>Tfo;y_pk=BMyh<BRrKTiav*{ zEXRi(3l<kT7D^RAexVB+Dgl4IuOIgfN`%Yi(PAj87PsP9@lqUlKPAQFjKmdA3X{TW zS4b8~oZ#RT{yYepuoPSfPlHpx@KlQJaMnVjY8Vt?C52VXB{~jw$XK4#ejG^iEuOa{ zeS^%Ah1y8Z9r*c<ce}3rGV#oddVPkUnlkW&DqPrx+xDm877NZYcvMCuX`v^Hru9+n zLTOr?9e`Sf2hQuNyYZ26*B)^r6M7${c;Z?d9#O&Q2|;pIG;i?@hWyB%87qg2!j%s! zNnG)6EO*aHx_hPi(pEUN9{mQlbnF`R-!&NT=@wGSynwS2A}1b3<4Abrp@?o$i!(T+ zoI4P^_+6#>OCOsJ?V;u$u_8zy9_slxeApK`Zt40Tj#9bhH}UB%Nydn$<b`E{7s|gg z;Iz!A^L2b4-&zk{$i<K0<HIXU?aPmNN$%Opqkqk~>+Wuin?tNQ+}YMr<a7p9KC3|x zpGXVo0JJ*OjQdJNsRd~{;|yteHc~<Pii5{s@n$IHveJST&l&8YKXX(Mt&$tu`Fk#G zz5_oVk?uZ%L2trScr}b(nDp(*q;h94Q*n4WDu-nrcNRgOS5yWIFj!(3*B%Ha+&hBh z%g1s>2aO)GA}|jK-N>GQazWFjm_h<+##x;}9^2Gnmd%*QObV5jPsQQ$NyV2<#ltcU z9v1-PN-Z3(oEj`!y~&pz?Cnt>3<iDhsbVs;;tAaF(P1rP$P-ukK$S7*BSi0+V>F+i zBk93%S!V7iV3`kE9S?<1E2$+Rk7aqw;nqNm(W_cHFX&wPphq#=J5Odt7`23<{r9=B z_**jqr2I4p3_xbra0Wh#?@BAxNtrvhRa#nFp$nD9P-S&<m{X4Ed#V_Q%jH3Q@S4cH z`52CIQ$_206j~pN1_c0@(m)}UfeVXLt5nxFFJ8GdM`c<xB|9x&Ge9&*2D(0q&#*C0 zbB^FSKvbE?*JBxpTOKc%J@fE=a@*H#(0+UT#?$0OpZ*-Kd8dn~6kMUF#PvEjX0G48 z^HzE0sh>(8J|zFc4}Mb4y5OCtkGo}_2>GEB)LG)4$3w*FoinLUZVxA9<H3AJ%C@pI z?Llk6&D$P)m%6ZS)}V_GnRsXfYYH&M6RfsYiSV7HU=gGtWhh%Dr7eabu3kQs8aZLT zH1HQnMn}uC`Gse3acWF9K#>a<<BGArM#SqSxV2T=y$`p8v26$69n7681zbZ8I~M{= zDjM|zvcbf}hr`83-3*>`R6Ml|x}K4bnId{{i^i<M;cL^%rp?%u>eai_nQ|Z~$wr-v zq<G?bT&C+p5jPAFvaXOa=9`U4-u%GIvWnGeal<hZ!u+*`wIUw*D$G-b;$Udk9`LaR z_vfGhz+ff;&=eRMA%4oPw0^Bb>(-zW<c4LSi|mZrm#&2(W?YzgQY14is3P#wH$*h? zv!`@7idPstQDcDBQZx{n-wv179wWt5j@M;!wjfKb#E2MkT8+&`W$9Tc-zr%nFUZm_ zqHsxl5+A$Pw(YPbK4HCLwMLEz$_n_TnEN6j);r`2p9Ytph-xEpOK}`Lcpz@-ocjwo zB{0`3#F$|Qa`0Ef6^i5){Hdg=lF}FX<^d=_CFYM3g}8AYmgod=Lx`UoYr07VCk;h` z7nk=nUSh=BhDsqVHUt5b#Vl?q&TOmLPpx7d#6_U(FB9R+;m}r}AnK3brlau^T8Z{R z@WNwO`}sj6GB1ueaK%_G_2IJQ95_^Lp~=X|kWApN!Mrx?Z(!lZA2Dg2XQM<arPkx! zMSc+wPqHge1zs7XUFSnB6?ioV+XO7jdMH6>2#25uY8Y*}XrUz7lT?gU%nX68%6?y5 zb(9p=tOTertSqAn1|ihK%nzHrolCGPHPq75iYv}uS<~>QKyc6zH;2cuH}O2?Nc^A# zcnsr|N~8;`DQ!Fse5_D7Ot78@RO+p#z#}=cL^-%*Xx}y$miP@9ep_HjsxNPo7$(R2 zlRBLRtd3IH#;3C^pif4)9Lz4#cwC*bOeIoieW!$wm6lpYD!W&dW@;V4!Ey7)KdU=- zNo^N)w?}Z{7<&}hES3m+BLVJ)hAk};EnAGM`E!j2;B%AZ-;Nfox*L2E`?Ns%S=j!- zb<IoWc6Z7+zS1j1rRcP4K8%^!r|KOHI3RF<9V6}~x-lpN42I2fB*3;Ef1(5=u|;6Y zA!1J!-`^lka%>b#bd)ml2t|09a*jn+F4FaSb)1M%Be+_Dn+_A>*#DR?+T0I;KQQY8 zQl-H=$i2IRv98MoH{H=YF<y19=8~eD6BkO!<ckZJ_ndd$bv0}fe=Cxg%I}Y>V>jau z{*dbwFxb>C#kKE4oKoTC1CaAlK{9qgs(bGf8HH0MQ%aTBJ(RkpO=Lb9>VDbhSUwb~ z1nT9?HyD-~KKdL6pXTr!U~50bk9I}N-wM4ngHI0G2Cu+;K*5!lFdszO<Y-N5<2XA; zHnDL|Qk$57Bd#7-kj>-AqM2_Fn%bn;JfBrDHwM{ai+bw%-Dnn|I+{wEz@63-e(+10 zVS>0VjNjHne(IngMqLC{gNe8pg5r(>M+~|W`}CT^GeJHfB0m(Yn*#FT_H;S|ysD>E z9oWFk>f>i3*=y{PDnU()NJ$%eMeVqajLXH%?VJx06a`RFQmf!+6kn1`PdCr!INt*m z@T1-qXA{<aVHE&OIZy<Om9z*jF^JjPUL3+g38+Ix=)<$XPbPdVmg9uV)C6UyP%MOC z+>s_tUgU`F&5EWhmJtq|r5io82+Vhxi2yC}hY0zT5fnCRHQp#a>I7J4$nY*i*<JWw zwTgBDKG2K`7{curX?gtwN9^ghqy9FN3Rc60Y!`lNqIH$HmL-6J=@DBM&I#Qis0@HP zAf}Kr1TxIP6}#c3GE6m|4l-yT7-&oxrWi_2LFsIXgNmbqn6}$bRH#>sDry{Op_Ba5 z1Ms+|z^?1i#T{0kIuTPPdb}zH(1K=x7G^wU!zYveT1}k@a&b{!@Pi%oa`I-?J#)xG zU48O_K!!B~y#d6a05Z>@_tlWjzSE~7l~Jk%=BnL?u%t*hJkxU0WAKV4zlP5%26YmC zT}^&;+NLU1736pzKE=gum<A|<!=O1kYdxYdMEYjq0ErLA6#Hl$j(NmkdB!|AQesqr z3Tk>$rI^`MAQMs*N})*#R^a(C!HsDZn7lBgw3U}sIR<ORge5MvHyeP}RJD19vU_X3 zy~(}BH2Xj9BkLN!Y8Bl2r++DZdv}7Yd2-T!(}fqxTkxwP|M+KrBL{YFPg#oPtc%|% z=e+CC56aSthxPikC}IK^OZxV~+vk+P5#Yr~e=1MhdvAjP9m`kCZ(Ir`_-@fq`uZi( zp8NVCJQPe_TVF8;F$H*RxF0z-#QFERzjw(Ls9#R<*J2U7@GCxWiTKB6u6GT_fA?co z$QoQU@t)nB^DjsEJl0=}BKE){bTm;VcngT+ogev-9K8`r$aDBhi#JlyuA#$M+DZH% zVnZT_G7g7U$+waXOqQSJrL#T%vs-@l=<9lUhOjl))3wVd@uo#YvSR%PS$D?CI^@+0 zN!J+DsSkNUlJf`-k)Br_TD1~+;&7P`jTjI;e_97=m6h@kHHXl2%uL14kp>Wf?T?7- zWsH$1Cq5caM_yGE<`I08QI>07`pk%<d^bL)oE~CXb=-Q*rUFfQT$6BghYC`j$hA$T zxVSS4tW=MaFEVU7d1VpKH;VGZH2jgSI}pzlQ3o<%z1E3<!87Bvt@Kzx3}Cc=i3qTo z$2!2(&?-*0;)mAiq24W4AJ1RnpyK`1h7&RhWlASMUJ2Gn*4l~-^y~`?Qx3~@_Dc)m zKUJhPa3-fV7pCHd9%~JhVAnolI76%`$c7O#foLiDwE>`0VG}UQpBAB>m3?n5%7kY+ zl;8Q-2UCGaiNf-2Li(Ahn);Ob#OsA%4GXM{Mxc@qwQ|ez{3?Tl0*s#x6Hb-P)pBZB z$_9~IKchk{PGD;RLL#5irDouXG!iz93I<54Z*|G6wh{$b#Sw~sB=41E%xXPkd-~qj z08nul?RqP#rKIrS(gY+hf)~6V_k5U)^by<;Dr3=#QG=VC=u^7bAp=NK8Dx<8nr5G4 zjyF>X2+N=>BxZhuc?RPZM6W@-Sve4!^CfEtIn&Q8*$Ro9b=f#xaF&n<TeVWnEb|rw zD1}!j@|OnRaCxQDf(#RWo(9)9ku+q+EaUaouy1Kq&md55Ijy5a=+I2d*5aB89J>8t ziBx$cRTs!uP-Um}6=$wH5dK%}ENv6kYt1YGEK<`st+K_uum)>_rMgUowilH{8}j|u zw}e-k3C-4{!k~Ek`3A5uD(YA5ELAGA0y4#(KsK_Vre|i)JTrTZA&$2y%WC*CQy2v` zYaz5(B!&0ptm@M4WG3wu?@gVx>NpG^^XkFW_<A@?ompCo`E`3^7f@1Qwoyp3qV0%$ z^Cisj7GtpWuHef|C=-s>!mj5(gEW6YNCcEwSM^qB*^T(U6`>K(7{m=|^+~=dsn~j# lC%@J($_E><0Ql5d{y%z|*P+UZ@{|Ao002ovPDHLkV1mZyLNfpW literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/115.png b/src/assets/all-letters/letter-imgs/115.png new file mode 100644 index 0000000000000000000000000000000000000000..2bad89b191eefaaa4e67e39a9ec37a0c1dae8aab GIT binary patch literal 10482 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/116.png b/src/assets/all-letters/letter-imgs/116.png new file mode 100644 index 0000000000000000000000000000000000000000..950f7f342629e7e9121783f25d6a4d1cebdcdfe6 GIT binary patch literal 7977 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/117.png b/src/assets/all-letters/letter-imgs/117.png new file mode 100644 index 0000000000000000000000000000000000000000..8fe665807967bd79b1412784b8a920cbdc215c60 GIT binary patch literal 8642 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 UH^6maz5oCK07*qoM6N<$f}6CcF8}}l literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/118.png b/src/assets/all-letters/letter-imgs/118.png new file mode 100644 index 0000000000000000000000000000000000000000..669aa761b8066121ea10c21f999b557e54eefdb7 GIT binary patch literal 10249 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 P00000NkvXXu0mjf(2<MG literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/119.png b/src/assets/all-letters/letter-imgs/119.png new file mode 100644 index 0000000000000000000000000000000000000000..05a2316ef1c5b6781930c9555a71cc5e8ca171e3 GIT binary patch literal 9442 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/120.png b/src/assets/all-letters/letter-imgs/120.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4651e4f932eb189eb4d50adc1abda68328e4af GIT binary patch literal 10409 zcmV;aC|1{rP)<h;3K|Lk000e1NJLTq002S&003zS1^@s7`8dUk00004XF*Lt006O% z3;baP001apNkl<ZcmeHw3A`mmd2e<1Ip?l(@7%d}W|)13K^XSM5Wx3%M1ls0_+E_q z6BK_z6Hwt1L{NzO3+C~RiE)F$c_^Ul0@1LD2oeM%0Tdiym|+%Rc4oQze$Ucf@Bjb4 zsy==0GTgyn-pemF-0rTbZ?CVuTDtmR%>JZ!pv!uAYd6>1u5Ve}v+@>SCilK;SJ`Bs z^C4!E;a)p@*X=1%3OM@MV>TY_wn)+Nz4zI;e{b1W2L2%#*lVo`jR`=&q8R^0GdiRm zrJ4v3hAa!*-I_}8?rzo!P-U?5_Tjr9FbQaxv69?}?s@>i*;y%2VB=wCB-Izd4%mq` zK|U`<fwgx>$<S$);Pr=%t(3HoY=g+y1*e<hi{FEo1X?#*2}B+c0R>7CgjSx%dUmT! zg6=L~|BH*v6L;U6EmEK=mB1`L{0MW(2j44HKu>^$on1dxp|m!EC}3+7Rw9E`?Ab$^ zV7U#q{Ap|=6va{z+Tb2}z-1URO)uG@y$9IAo)39wdV}p+NflLKn?yGZJ@D|I9)MPd z01w*Ul}mh?8Mxtlf<d_kzI&5Avr=`!gF2ZnN2AVYkAfgbq%q@xZdXHi#Yu*`MXemk zjNbcGV+sY+aOOLiHFjjwjQsdfc@}`AQh}c!Pp1NfpuWx|#W4X0l9z9>cEOn@*!dH& zWC%-&Ef@W<G20(BLA>^6pb<TB=2mfhTZxcD3zr+NxXQ3~vndqFFaeFg^mlfmE*452 zNM*>hVp<`sYfUZ*><6NVeA%MJj}2QipbI#gNX2w7z7cW1(c`4e!2&kP*kk`{>Q6n% zL@l#x>jwAQ(0t#RQls=5!Ur7}35*z=1x!g2yt~rb^~f;#UOd=keNSec?H@LSKb>s~ z#~f<vfA7Q^1~o+TGuwX#Y0S`_=r8~iXGy^W)9{D?)r1{w|C2<sDFtC+rGLjQK~Q(D zP+(8b8jX<JrcxfYw5Paf<HmijpRWV}gLLgzud22oz`ymC&pX<ngq|4>d9Tf|lDKr& z1LsJSAvQIA=)FR$YtJq-G&E?IEkDGJ-1o4F$BHT+2)BIvJds8&!~b&mw)$hPSY&{l zl(wP2OC$gha18{cs!Fb4!p4Qh<Qh!pLzfZuT8STK-B=|d0=x@e3AgsjLtBI`mT3YL z6j53YYY3(Y9onZn65Q4TiG7BCzUtFg3h>e+4l`TVy=*@5wf`*yJW1bcT;Qbq%Fb61 zklcJP`pk{jArDEx5MJjb2_eZY4MB{w?4MZzU;FrlX640~n@hj@ZBuAyFxOsq8R}~Z zsK}7ohj1mLwjf7A0N1Skszx=u2assAdyf`R_bTyuy1-Mx*{*9&BcZr+<u?f98ehRR zpdwnd=+K!Z;`>in{DBnvo(oN?Dahx{=!1`%%0SnaYALJ_j$!<?2`g#HH@5TIKOjsE z0TV@-3XGZ{7cI#WFoWIyedLM64F0fLiiLYe;mL^vICdkIpMQy5Q{r)8uBq(u16b=` z!UVwuGL=YySZEOS>7?ZyyAXW3pQh;6KAR82Xc5Qw!a++Bwa%R@u<lY5c*;p~7$~fZ znwr@Ij>n*buCf&DV$*oWsV11wl*N_jnpUuT_ckZ>!Jsq_Yg8l2`e$n^Cf9mEidUmT z(hw;!Y11AA^Mo8q5adkKyX$^}Fr@@4eY>7gmdX}-XS1M_GBq|ToTca)0zp_f(Tf>I zp}G1C7}uNxVJ<Rv+_ci+kO8J(o!dXmf|P7!&rUmX|04p_^x;3z79nW=kO^9~{fF;@ z<cM4W2Iz+OpJ8$>bJ(Xem0nnzax6V2K4R9dS#5su^ZU(??VBMsKwa2NVhpNo>XtTR z;fNKcvULahxT*VtlfXJLD~>wWtT^%*aDbo*#`Hqo*kZ{<?K6!X9eswZgOPvz{DP$1 zx3S^4FEs|3HdF?;q1id-psuNg>0{Ws997ngt@(->*wTxb+j__jo0J5c-W&C-BVnY> zECTToQ&Pq*lQb^{vCuTO9A+Ah%|YU|w@ABL7{(^#tY*=0M?#v?NF@_bp@E9P<RmJK zs6=Lk`hjH9i%hm*2820IHt;V%=wsMVTOoyY4?p_GDunsJk{rYRKb${d?3KDH3B2#q zpEM%_J?7q(H{jl9F8j{4<9SFP%~&0Ivf*7vqsY9v`dM@F%5Mp9T94s`BO2Q%l_0Hj zd|rO$IXuxWk-6rgOVfdcgo#8K<n&qycw|;8XJh{P_8*ufhaG9ozTz?&U`Us6{NqF~ z&BtqRh1og8X`wzVaJK0@6G3z;&@V7~WU~>OMEK{CSq@D_WZJ3fm7+f-0a^~aoSg(o zB}!KVk!p@`z<DHRlu2yw@!gJdO0|L-kqqCmWC#AC!}fgpjPVSty~^85s;at;heST^ z@4f^Rm%oOk{w!$exNj1WNsEdDT`S;YFPorj!s0!E0Z$v=fG+Uof-pL#F<A7$QI9;O z5S-TqHaLgzh@nP0^^8$OjzuZ5Cz8Ea2D|S-6Q6C0gC>k#fF@hB)qFk;1LQwv3#Sx< z<2qM1gR5>eL1Vp)Z~3<$l`f{TMEvtuU*Gb46u%Ph=rN;DK4J2+v65P5O*Fr#Al7V# z6E0(>93{sT+AfBaa4KFVPvI3P{|d)ztl&&}(-spQ`Zi>`dr{sx8BRV-K4xreicdcU zUJ=F-7;vn?G|k7FyZuuk=+M<Cq#6gw)`m0MzG)HJb90~$688}*zj=vn-C_s2{zn$p zKg0X~s<e6?<cI+V|Hp!|{*O*YfH<dZDglT)r4T?WnsWK-!cm6`QI1ns3t{tsD@^ml zO8?$%N&lW=j2(}7pi}<HIBK1N#i`E!8~)^UM3k^EXlv{9f=+gy(kDDH_g#|V5o3mi zO*C(g3M3)YL*Py-G_>5^gQuLto5GekhwRG|9yCL-`k3_Z?ZnKnqlO8qvn}f>_%b%T z+XK?sj{?{@ft6-Y>KC3wl{0zl-F!e&-?9sRQ_FcHWXi}rXUhcA0gf+ExddixY<NM_ z?8UDOxVud732WCDl7<<(QjQq`IDPr?4{tTM-GFh78DB?Y$c9nQ+<EgV^T>}GptP(; zc*L9f`o^8MdsB-7=rxtm7uw$4Hzm2;c{FM9H)~9?XOGD(T4eIaV3r$WuFS;XCDff9 z=tYK;EEFf4D}gF!YId|}#vc78y6Kq7wY8YKcfJE~n21)28}n`R4-r}^C7;8ck+Ssk z^XG6<rpYk`<H9jVnEW9Jdj6>;WbKFe;43J==;KeDcsJKwRe>pde*OWb?vxWv*gPvW zz=Y-y#?(}_WiEw9m_yJZQPRa<h$$sJ4YNe7rlBDx!USh^)Krfv6Y*JsD`{e3U}cPz zBDrKZXkpy{`nOC_cd>=(i%<UAB%M7bS^(+a@pc(Ml%PX%^u;}tPlhsvX-w@)FRnMX zTsDPckAP$x+cCH&xswX5txtPkj7?XC@tXOtC6F*XHOnz$=R}8z?Yiwg6I5g^rDd5b z`EqiTjd?O(bk>vSh7M!qo}yR~ItUw0vgszc7p)eU!5tepb{rN2kq(Sugvobh5Hopf zB{B7HLN5hoRELbVoUFq!%VAz;SG=kjIBnv7h2I&Vp@Pb=33fkj?5tw}1sdItVP!DG z<m))WHKwtBo(^DsmS@A9v9CW4X=w~H<s4m^a~$z=Grf}p1b{%y>x2*+C1AweV-*V^ zNH#{q?c}lr<q(qM`+E9`auCpezso*`@_h@%Jr<w1N#i$cSa#|4n9;*J(@k*9yCb`P zv_dm^v(`3;5~I0&bC7s~vEUo$e+o~W##R$Ie&EhEe&TDTk$iKo$x$)Z<#v;_Gq{!! z4LGUyt)?Wr03<|#zW>E9d)nzeU(nd#H!i$V9w2nnbvm+4;i)+O31`nhfaz5D^NG`Q zbto+-5>4NWJw#f8n$JJ*AOSCz#>|aZUIqMYQ&in9+ly#z`o0Xf+8kqO4%Hs4L^_`r z>f<iL1eWq!ie8EFP3F;55$S8Gg=OslA^3(u#8k~8CpCcPO03o*B*=0Rl1+tYY9<6+ zormF_N#GqEn}~C=)UwF4p4~a^9jXl(ldKa6OaLlZ3dh9e(1hL&VFW^~sHG(AleZA_ zs(^~jD8ancGv@z?Pk0T{J(-f@mw{@Z$sqqt%E~is*R|<X&UUT(eaUZGg13X!G-ZQW zydO;lXRO9P<DRIw<5bL+omW(mr+UIh>(lU^6T-?b@&0K$72OFB7=bUm4eoG9F#96e zT=V#;WBLMrPX=1BjIt{**Ij`fOAfOfO5ZTaTGZMTI7v=&2Zv#4J8>4ILskb?Y2(tQ zmaukvLo!%D0`~<ty%;;eHhw18+;QSK{F<!b4K<7yn>S|Qc@s8l1iD*?I!M1)okg77 zCk7in$j)dxyUp-FK4{7>VwG>r3AU$a(luyGaH#Ptlk7#`zuknbFM@==CQR$`0B7yz zW^%S{av_31W;yX*I5!5W;>#N`Q9-E5CBModkAF^VvMPucVvoGd3_aLr#(v}HnF6^L zS4!1ly1&iIYMLe&!sd1V0P->%*-C7ZZQ|qyr<jvH1i`Gh7lN0EOfrO({8o;zPU-dw zm!T;dq&aMEF}i8$kCO@!w6sY7W_OSXiIKIuZiCDb%7a~}PR1W5Mz;%0+=HD1OlSp9 z_7&!m$|KpeXfXSNT|sb_Tf{J&Po0u554xCskzg{2DH^8q@Qs@$Ln-$6FJyhPW2cOa z4BlaLgGr)!+?zOkG8|tvwGcsgUD(ouIV2Y~kcE2=IHmyOg6hN+2Jsw&cPW)^yG3X= zLjK?bA^7r<tQ96=?!yvzrTjq9GJ`MtG-0Bf^y76yW_O2Pj=!9>o9gl=XiM;Bol-J! zf-I{w8(ps@Q(sf(7!Q(bn)P#QdQH&MjMw(s)$AU)O8d+(9@xDWHlLpib+%x1MH{t2 z9lZCR+2Y>d7fo*AVptDD^^A@y$I~94cXE#})_gqF(^=W@YDe+cFJKlFn5HxT5dFUi zmGBZ+NQ~quFoS3AL)fk!yhLi_uFgm_V>S`?nLLR}fyzVO@4}?xk$7(x)|Q|JN7FSb z(6X3L0F?@)Sf^!4SSh_TXq*3wNg24psT~slVY&Ps(u?M_8`A^<Bsl@dgnx3ugEDmj zNCnHnBv*K%(!29KL7n149+ReW-_Fy*u<mCQDv6OYcj#%EgZ5Op3Wr&Ejmo9dgZB9k zJBXT_2d^oV-I~EU*n)$hWI+NjrRM~2;KJNj_%fgOcb4NB|Aj;4reOYj1f1G5X>-K= zvwq=6&>C=0*NZOsY=+QIU_V9?MxJ4jhHz&MJ(rmvgzeliF9`A{WH(9J6EvZb`8qM1 z(mD!*g$(x~#BA=S#e!jT`I)3InapLP5cvW&Nq|XYmxK@UMQoD(_2qwoy@fRF1I|f- z`mVjZ%ojfWafIs`ib)!*=AWZi$ro<W%IbBZ5Mll-4FbT_5ljgnTLJSJVO&m{c^a~W z0tlFNcXyiMVMNsclbSREkq(Ogcn^d8nTWDAe4TtLh8&+E*93Ek((`K&r1Pc@yZels zlDu{vg<}hw$d$*~W{R+X#Z`HE^;%PUWitc}Ox-a@Vi;L0aN%(O0m0k@xvM5=f)L42 zk1ef!$&}W=0t8nLE$UA?&P0nBc)S!l-nG|6bFm5UVI4~87r!=Tyu;^wM2B_m{vB@e zcvDbL;uZBRvp0BRHD+O<#ZXjSx5*Ku4Uy39#ph_1tW#<o_q($zErQ$OF;m{I9U;{c zLYCLOjJMN+fR8apsHRB=FqNJ_Btd5AUfevxQ0@f@(M+#wc*%^844aX`LDSsaiWksF zLte}&iZ~vD=HOaYtl((Sq3tNbL~HHDeG(xsD3X7gG{+ftP*=bJ#hw8MAb8Lr*cN1x zSvedQ(?IeI8?jf3`9~1aK~)KYMTI&XaA-mNs}z~{X<~Dfil%Vz^7Q3C0ZF`Y^kG6+ zt%E|yMnMt?m0*)KDeL5i<pGXg)}3&i(2&Rtd|N7+`jda(1Q>&02bn&4A!?N7BqbT@ z!t0*Ai8s7zN-u4Yg8_AKKhlH?=3!ZnJ}Xqmp_7Wb2qeG*yDgf-cJ-R_##c@5z$GSH zG+#DVQDLIywi>>i83kiceg51eDSfYS(0O6lgo!B`alupW!jyjqQHo|pSq&-~lXIq! zj{@h*5J6iOp{&~Km7dj=;SKlXia7gdgJ>kF8(W-<*WLO|p?TTyfW)giw~5N`24dkT z1n7Jkz&KBkx|uSd^D?R9$s<a<BQnadrD2UGSP=W8K1E46*F5L#rnw_A<<X(WzU^x- z&tWQfyb0@c69deB6ef}=mTSa#f&Dn{s=&l)a@$Kj@9TN@i7sx35i4daK@oAeNrr#* z4MH!E9@YEWi)C?4j~MndKsgdg*#rYvOS%Ff2nMpHgi>x3GEsXGK;XOpfR-)_A^Ki2 z!O#}GEQVDFUqKh$Em&$PS`59O1a#T}vco$~F#5VM;#Ls1jG4%oJ5+?Db0*kQk~}N% zEZdDj50+H5oM5bmR{aQ4$vOa|5>}N>GY(9QDfq`C0Dw4{QhK$DN=P0mvEB)%Lyzur z`yC77Xt}q9qeX!nsWhrO#e|oebBNqz@$Z@bpAe$jclN^+*In{C4A<}rnDdN}ebg+) zL8j|2{wzX^k~`~y^UT5(Z<{v7HzmZ(_St67wk^Wssrw%?I}jDeh6j+3Og+{o3s)R8 zZ2<`Qrkdl!U%bpQiOoPyxB1mW4<WC^{Ds&2y{nu4?M(?m@_C%CAmibFjzv0n{rTU1 ziB<cZL<s3F8C2g@wOg@|`9B6Hjb^93|9uXF7Qi1uZR?y4*TsETR}dfINJnUctAqmJ zNCZVO3f$BKeOTj0HfAUx6^ONrDS>(PwmY@LU*V({M~Ww!mL(c2JZ+6dlv|;3t!hbn zEEj31Gnf%k1z@>`?d+?kk9^^CUJUb{E4~PPwSv%qQW8x;r5ex_-18uR6~)~=Ga`t_ zkdIR|3EM8x-E!66rc7td>M(PcVW@U#sJHg4#$<wc9z<b?rwK#|(GbjhQa~NN3F1Tg z)|b|!H+0F_Gahh0|EubVeD;4o`sVeXjJ7*+(%iD;qZaYP>GBZ5$mbC72_2H0Pe3$} zsO{$r=1fPEGkF+!h7x?oMIZCcCVNe^AkqCmhesK}gk)&Co_y%)kc4OynHht)nxDex z5KXBAIi?Q7Q8?G;Wb9$I`BVUoi<&476Od3O*2JB#o(H=_set~$N=+h~A^}l_Qf)y( zK!~K4Q4HtYn!%OAdLg~ZmA*DZ7GCPb1yaXUNtFRLasAn8KrWsrpP3ZaE1-EE?93*Q zlNE$zK4lz}gwzTI@IYQ;f3G4stFUQANEMJ>Sz}JEV8pBXj#|VE=N&T_#KC)mTu_Il zi}2xbMtq3nk{)FAhb|)QJxGb%0RlLRuTVJ1VaoT=xYS&Hjg{h<Xr|OLp(t6=w=kKm zui0ux`TtMJ4y<gqUDx@s<F^*Q>LkB4soyODYp>6nZaL$F$+<Z%XuoLUMk7Sx+RpTR z`&~Hnz1);$-Vz+}(c#G?eba^jgRnH*dw3x>i%nE{E@+;^<-}W>@bYVMk~0@zor1;v zXnk1v(FIteySbs=g<g8DX`l0Wxv%@Eyp2DO{(|q~%rX%w$h{+I|HM;M3HYWAVF$ZE zfSt1+fGA^wCTj=Ku`dss+it`LmCm!K;<}&Z{G2gP!u!GM_>>>C3@SKv6#oX)G{{Xw zwj4#r71}<zda8Psdo}h2Q&VUAyFP-KF}J3uq`*I}q-2}GcEyo7qtG<_*&4(*nJM*m zpBRP7Q$DhCyTW37GKgV!`zqGAG(;L%Cvpk%OM+P!Y@1k7Te4q<ume3OW4yl?BxXq? z;H6H|(=RXo!p1riVvZZu*K<dSZ;8HuPZGaY%WnU2#lfyau_=P{zG!j0r41^tW3Of_ z{<dJpiNh1O!}ehWWw#fW`;h7Q)Z_bl4Yyy0s0?&}495m;<OCqV7DwfIY#u(dTFxW$ zGmsF+gA2zWYjX4FVyJ>K@TDBS^7{P#sjtxdJ}IsbR|P@&BRBwu(*|2if)`pg#P_m! z%zp7FcHr~AdxmF^xA(z&Oh@MvcpIzZw6DQ^zZRj03u`gL<8x-iZ8hx)AR^!VaAiC+ zVk+3`3-Jy!XrgP_Pn3tcex7gccr?RvdXM$dkvL@j5$u}cMeICN+Bk$g?p`=zJ*EYi z2e|o4el8ZiC->LV49vSBR6qL9QZ(72m`E&uxb2YpO4HqecjMRmAP6q5*+kthL*!f9 zpTqv<ogjV*In%6^2h$R{a#m-1@eXzEdf7z9Bxn|T^mj1A@Vqwmqo<cR<RwGBN7K@r z7{z^krm`K~0x3a0>&EdY-GMI$M_CO4^7Dg^3owF6+UMy82P3!XIhDhJG8KIE{JiLm zGURo3meyks!7{Y6YmX^!*@i)cGq+#~-tFG(K&E#a7-+-h?t8eAW=D!RXWWHP8F8i* zeL#)i+yS%8sBI=>;NlOe&<Hq)Fg+%<Q2S*Fq84rPB&1o#X=~Wrh#yJ7dmv6>U6R2A zU$rH>I<@Nn3`(74hxVX5O)r(Acp>8BAJgAr9HdFM?gS!CK*Re4BjxalCpzp9Jrt2Y z`rJ2b1d`luL)5p<c?GTfbsk|4nwxMu00(^VLL*HSmg_sb^5JoH*MyBplKWB$^9B!v z#NeO=yrFl{lwaG1Q|x?2guHh}5Y6F(#yXt6j%K!EX)%ADX?e#TZ$NgR)%z7AJf$cf zK8kO-R);Ok$3_RtmS}GHGQ}_J(6?jk;92}wMzC}tJR_!0f57&<{^fEM&Ij1xFxPUd z)aM3?#RrkHbZSU~s5K0d0i5H4uR}C+EgCZ5@(u})a1sPcoLI;oeK=0Q<4r`Il;X&q zhhK7-FcJ`ax=CnH7dQ*YPkn3@{S)UAMSMvb^M#-LLX=C^ARn5#BM-w{$Ak1umAEy! zkgUdCS4z3#fs-+xXSF=zg5^X7Z#pZRx0_@Do`GSzaOi<1w|J4GYu4eH4`7wwE_v4b zO~vwD;y}~aY%cdH(?4X&>o?&n5sZO=#<!z|Ll4&PaXkm8`;?3b=V1f~88HYlFk)Ji z!U-_u2Fc$<Epz^EO1jgm5c<=Eod7mA(0K^vcI&yW$7cv>*MPfoLRD3an4XhY)|ZL0 z$Yje|$K-MNJXO6+>yte=i}#tRZQh+2$=*~K$+9B5X(f#Fk?HOHY?2GU?Ai))dW|w9 zJoOqSe8yG!nUQFXI;lpT$MtksF0igb4B%<tjyPf&OJaL=)He4n7{oKm2sHI$%5G|q z+M3bc%}eW}`uni(IZ9;l)ufbV?em^PwvITyK8w%i@o>I=(mQ||dx#@^bTbh@P}Em0 zm5#5Uvj}f9r<e9?__Vz{&MkyZuO_AdBX|uRBd-99`RDVzr-C|I-qJD;=*n2<X?Pa? z?(2A$gbI(&J3K;Sa+I5yudCa{9~j`ii38r}ZCXI2V0*S+k%V=(V7iE*5M1RC6(Y1q zQ8j=FCl_K8-6aQ?&5{6Vj0cl~Orh{`aH-d$zJ@<Dgh4r8#s`J^+f3K?PfJ(Unklai zbIN+Di2HV2fF<Tip*|keQxKVXK>^F~$Zhi?CRJnjE8tjdBTp?#r6c0tTuyJE9&-GA zXKZZLl<=WSJ%-H&o<^aP!V3U`kBsjgq~Oc=fDsHQRB&*l^ucJ>f`8ms+{mycm5Hg; zyXDv@tiKBrgSTm|lfq+qp`?--3ILN~CfMKCW4`(~mt*3IvpaCxFa7;@@sm_oO{$et zXyQ3EPeRrdpz+Kve{Oz!-yLS4uh$%N+zIBq%dW=R<R0Zw1y%ySt9rRu&oUUv#`qzN zxOjNbzJvz^CQVtiNde-%U4Lhy{AYzIC8qUpP=QPCxEIS`9L)(D8%)^NDqorl5pNuV z%Jf?`)nkBw@by`alq6G5L(&^w+4Qp6y?u*WcJN_lInFI5?#I_;8jmB$F@Mpe2XEOR z6Ti#MVGhIDuF1JcGw9NZf=cnb;aG6VWQQ&(2HEd3Rr>ebj>A;v$R`Xq=M-<;V#=Gh z%28!;Q`eka3-AX`3I`u#a!WDmldn}lIvrX(D>aHZ4vd-%V4q>*YbKgK%j9rWNxs`m zaexmr4$;a>Mdcao^7HFV+|@0!OL~|e#@SH#!5x!7aH-B}@iPDcPbtThq->Mr4Q=zb zD3#i)m#(%nljCQ*VZQF1@|q2%ykV1xN3rfFGYThget!U@Xn80R&2BUK6Mqlqrua3i zo8LJ7l{7Nqw#aep7sU~`DUC>^v=r7|`7#Da?2^}ZnBuc9sDsMZRF-h{nJ3$FvmnO` zENK?bhjH)`zNs8hH)Gz~8oHkRWQ7yT(AqIJTw;7s&pinKV^X>GS*@V@Rk)A&0?zD+ zl8#yijJ65uu*Zo5Y$04YtZS6PNIo~lPCX1S<vK}ojBraZl`o<(gfj!7G)1*RSnhG? z!4-7f5)MgPeo(=#!r(JSavf=kT377jklNd8l*OqnV@`}9AZ&d;pj3uEymQ8e${zIl z91KwhgA5G~n1TL285J5aGL+Hs_|)CBv|x$P1blfPNu%LI;)+FsxPM-8p|8+l43UWZ zaO99%i8|WkGy4S&*xjaO2(BF>>_bNQDIrrTgYe`#$I1-9UH}DhM_|zfPx4*?N5Zq1 z2yrekv*#inxYURv%yZ_>M^40drL-RMf&z8X&#~+`1sr=!o_^NYL3B~X0;Nb4g_kZ1 z`V7*ArArVe&^6FS@a^~r%5b)A^7Mv=z)#F<uo%blM;>Y-oQEiH+Ki8ew&R=}HeFyK z`dY&70;Tzz0l8&3UwPmnaeIDc?c5<X0^<uZP>^>g6dpwZYQ-ewQmD^_m2&XI2Mi5o zzRSehc9_bR9q2ANxm3nn0V!(5HzbgOuM{Heq=)VNwgeJ_o{fv&tZ!R1<=Z&VS_sJp ziofb?8@8=ETiTU0thnryp#FespemY=plBI*LkMffy#prc!)rwDJ>U>Cc8ZL_$1GG( z-g5z5;-Obov?C1~$9L7V5@j`_AfLr2T(#bJRqpo09KJ_zCLN;#e>YQh%lxQA6oiGO zJe&k0d(SCteBjBx&b46@wI+3?1ivC=%VWcKaM^j^9~0_!-7QA|cuiax!w#I=8jp)6 zzx<=vmd943v@AtK0tU~LCM5*K-M=((H{LW!4DxPDp)p)xS<Vr}CrbmRSr}AW8AfD4 zg<-PwA`~t<WO`bpgk3Q3!Ui(T%I=P7bVIwzFT&aWx>*E35^R0sHQ#J1uic48dkMef zQZU6~d=r9h#ur2UHH@T8olBSF`>4Ak{Ho#_lWWGSRs3Q5Uv}1#qDczeCeJ2lLLuN0 z0pRm($Do^{70TFQ=0RI%$~Zt#<X{E&DTt0O0@B2(8swogyhuOZVw*xJD$U(I{!FNA zZa?gDl+q~)F`0O_2C#C52C*uSX*&)H`$1elTu`PHaz2x9S_~FA2Z3K^a354i@8tA* zq;tC&+_s@rXhTe4z<|U@Wr8~ne+!0C=LHf|Gbm`_F{X%bzHzpeN7KaR;Q^u;mE#{a zXVMKCd<RBUmh)W&p9w2QaXhK8<OLTH@}dN=goonzjZUH9<)ep~GCa8VMZDJN1TyQX zi*n*~G_ctOB@CY^qfum{C#UT3W)4R)BQzwXm0(#tCPM-&1`=0qd;SG|Z=SKu3$fH_ z6}Jp3h}Oe9z<3w<7Qu?G1C((|hC7hrB3MsJfi@Ik@~5UyfPZLv#u*w{csq{~h4`%H zLJu$kOZn(kNG!J{yb$jBwc<zk4Mcn*VByg=9u+Fm`=}~a!$mNOAK@9~X<{)1t653Q zixC_XneG<%inXitRD?Ogs|BigDa8d{ghrsE=!g8JJJ(6vksa2n7s<}Iqo*AOh^TTM ztV%28Ny9L)0YI0^(HK%st%jX0=t?jm*@&@SBakj(#jqp;FJ^P7M+h+$o^{$feDX>Y zk<Tnq4<Ip5&<o{TubQV3gf$UWSmc?!5_<ZaMqyNN28OWAGx>8*RG0>>@}w|OO5{?- z1i@VZiGQeMKt!2@6x<0fUPL$-k2LDA;6D>h_MeFsNMpoXZI0J)mg1kTUFFzl^ygU4 zbmYk=n|J@&hs@~UkXd!<6%K|s!YK@Yk^N6E{Y0kj-}do$<`D<tm$u%2>BUZZDyIsv zVEcxR_^_vFZu;W?a`pbEFlT@6Gv@u5e9{-bCHLQ%At?P~y!|@uqaU82NZ;N)_-)X? z#H<hN21)8MZF3LMAKBp-_-}ENuEA(6KNkeE)Q$!c|0U8=4jnlFjWC=YSvUd^k5ODA zGKb6zj6N&Q(Wl_&-Z5Kz_~x4d@4ceh1;_`J7IWIUXPcu=J_+<3ZH_(|4*htdeB3bT zMk2u_x(pK-Q7~S3IKQc{a;hwTZ-v9Bc!U5u-{3Qo8id1>S5nJZ&+(pvll;pLqkfFa z#9+@@h~hHX)dwToh9?@KHdc5TT5%BDaGGdf6^;$&CumgG%PNWsFzPvX5OZlg`HOxi zXPw89!I@KWRd-^r^oU*vwq`a}nQEyrp-GT1d!gZE0wdK@nzqVgx8Gx)fBXqWl&g9~ zU1Osuas`<wd*&xUH7)J!=E(o{Uw~irFh5tJSn3~~8A4gnh+3(@ERlAp@fNL1je*G& z|JBYco#p8MRF+nyLaIvD8}L6PkaEXQ8;cDFd^G^QNagX}W4Ld?{GZQUiNcAA0d(=9 zE6mr=zlcm~0DgAs?WPGE!po063gwUmyuG5n0YoX08TI6g<m<$HSOBuR44_v~BiE%M zG0n*&sNM^Brz|8OeN*lVsKn`7nHiwBwlJbga!O5o$c!`4z&v!rZBrWIeSdkOS#mgc zvhd?NXPhnqjlbNx@_MuBxfg{N;h02uc@ps@zUc=NEYvcU7tfG~NsZ_YqGeL)rr6jr z(Ek?;`#rsYZYaNIExtfy=#~s7Y5*@pwsll#as)nZbk%B78myy%$VcN2Ay`M_tKk#} z{GEY)xvn;~K|Ed7sj}KQS=!{~lhU98SVlhJ&q{hW_A*DhcAD<3Yp!+^DyT^V5S04R z69hr~CYxD%p)wHSu5~!tR22gYFa)?XgevW52z&BTucIsiC|sE#V=u5gx;*i#2J_0Z z-9;_Xleh)Gpe(RN^xmV-sFQA`Mq@Xoj@&<?M%W>6i!LXe#0LPV6$O%X#3bGW)Us5O zg1ZQf;Zn;59Lmy+NTQpV7nzC5i0Em{Y6}z1w<2*g&ZsfH5lC3MYs2_vqCDQ9RFMrL zdnY6+Nd!t|<qjDCrNNSnt4y?2DI}BcTV&vsRd=SLz*>yRXN8wS=EUl33DRa>%W7$8 z;1#6=hBRm}rJ_Hv$!9gDZwx7+2ROOex^ha#;i)cAku(Vm25%HBt6c-Fs&PQs5?__6 zRY1yEnHq{r$WB{F>s6UlP=QxN`ZB$<J=k(=74;ZOO`{=~wx-7+PxTPxMJSeO_f$E3 zS+!wlX4Yx9@Qoscw2%vyVnYo^6oJBcg@}k}A)wax0(lq`Q-)p$mZ(C6^~vLD8QtA` zphEazk2wZv8bMkUaH@c(r2Lpu8d~pRiRX18Ol_Q?Jg&jSo2Vz$$1FF&bmsp8_mr+v TSPARJ00000NkvXXu0mjf$PnRT literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/121.png b/src/assets/all-letters/letter-imgs/121.png new file mode 100644 index 0000000000000000000000000000000000000000..e2899107c076109676aece42c0c2efc9328ea101 GIT binary patch literal 8128 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 a`u_n2@ds(0N><DO0000<MNUMnLSTYVq+k&M literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/122.png b/src/assets/all-letters/letter-imgs/122.png new file mode 100644 index 0000000000000000000000000000000000000000..86d66e2260f5e301d910830492dc8a2004919f98 GIT binary patch literal 7930 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/65.png b/src/assets/all-letters/letter-imgs/65.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5532e69fc70a396e80da884f9174154ab571c3 GIT binary patch literal 8155 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 B(pdli literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/66.png b/src/assets/all-letters/letter-imgs/66.png new file mode 100644 index 0000000000000000000000000000000000000000..ada80d13e1427a7aedde8fbb746c5460c2917f28 GIT binary patch literal 8068 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 SKZ?Qt0000<MNUMnLSTZ^ACCS2 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/67.png b/src/assets/all-letters/letter-imgs/67.png new file mode 100644 index 0000000000000000000000000000000000000000..9de3e67fcabc7de8c50710ac9a16849e98d81624 GIT binary patch literal 8448 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/68.png b/src/assets/all-letters/letter-imgs/68.png new file mode 100644 index 0000000000000000000000000000000000000000..875b2560fb6e787f98d026a06bcfe1e491a5be62 GIT binary patch literal 9453 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/69.png b/src/assets/all-letters/letter-imgs/69.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9995c20475567e3b95ceb097f8fe702f8e6a70 GIT binary patch literal 8788 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 KMNUMnLSTYGCe{)F literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/70.png b/src/assets/all-letters/letter-imgs/70.png new file mode 100644 index 0000000000000000000000000000000000000000..ffc34d5aa06cd10bcfa48b28b457b6e67f4ab4e9 GIT binary patch literal 9108 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 S5D}*U0000<MNUMnLSTaWx1AgS literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/71.png b/src/assets/all-letters/letter-imgs/71.png new file mode 100644 index 0000000000000000000000000000000000000000..8fe265ee6b907aa59d416086de1555b9ac3dfdff GIT binary patch literal 9375 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�G!1N9Bf$ak`gc~>#)3~*<6>iEy z`idsX-70+NhQF;rhFu0JxV~wPAq6d!54Zvtchn4!SynK`nV=||c`~O3BLs8$J1NwY zma715F>u3S+4WAA5wlSU%e8P6z$l3jEZ4MIPOL1`9-%lvo|3X$C*vjhAOz6Z-vp<7 Z{vQK)KSTJyuiF3s002ovPDHLkV1kesE&~7n literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/72.png b/src/assets/all-letters/letter-imgs/72.png new file mode 100644 index 0000000000000000000000000000000000000000..e075d63c7089d0291a42708408f3eb50b7e82adc GIT binary patch literal 9268 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 WTfC4gx7hRm0000<MNUMnLSTY>^xOCV literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/73.png b/src/assets/all-letters/letter-imgs/73.png new file mode 100644 index 0000000000000000000000000000000000000000..703522182cfbbc6fd2ef9b1d671c38a63bf09eaf GIT binary patch literal 9305 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 Hu0mjf%kr=o literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/74.png b/src/assets/all-letters/letter-imgs/74.png new file mode 100644 index 0000000000000000000000000000000000000000..96c99387edb6643d048bda60898d326e3c2f6c1c GIT binary patch literal 9374 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 Y00ftN#s%z)YXATM07*qoM6N<$f-+4O0RR91 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/75.png b/src/assets/all-letters/letter-imgs/75.png new file mode 100644 index 0000000000000000000000000000000000000000..c0464107ca5a5367efb37e2ad9b3a0aa3ae1cd4e GIT binary patch literal 8251 zcmV-BAjIE^P)<h;3K|Lk000e1NJLTq002Y)002q|1^@s7bsoZ000004XF*Lt006O% z3;baP001BINkl<ZcmcIs37lPJbwBUEW%jI-%nX@iCX<AOgoK!Y6v!SBuvSDQt<u_7 zu_9F4VnKhch9RKURzPt<i?)bV{7H+|qE(sznFLIb1_GG?S;#(Hw%M1r+}r>Eocq0H zm<dS=-{igfEoVRH+wY6WC~4C_ENO5}F_(G%8*75WuA{Cf{*cdngkK)Nm>htg$!Iy^ zW$|-B^|LM)AIR}bKdC@<GgnB{x|IP7u}t$1f8Z6Dd~DOdJs`{e@Xt{NO4I&KT3+8N z(Rh)hUi@AV$uvLmK*aNJB1U>BBR{+UJ96-~X8GF(zbn3g5ZFVeK!qdFH*UT~uD|Wm z5{YC*Wi@~Z<|}KhU_J<ZP>D#y!v`ch@gson6fjXzsttUiCW{>LUw!z$fqj))!-IPG zM+%O50pq6|S7Z(I%$>_Wti17+t*lwFB-L~$8APP0yn^kI@=G=P)%{l&m3IyfvM~Z- zRZ282Tl=)>$HuxDt0Wlemf8<|LCPx5k&3ZXNkF_z^N%2QL~0jKlcgW|wA3eBWZ`?R zlJ2e}5;Q*?Ku}+ntobvj7m<5E@hOSGCii~gld|Nxj|y80G$F~a0qC<o_%5@WJf}CI z3sPtgk4AAowB-DyE96_Bxy{rA2CWG<sMQNB>5#IXb>yG9V|frSsgU$w|MG|z{1Wx$ z*5<WVFIZO7)v{YIy7`d;yy4P`7mZ0K*(WLA-<Zmf06{$IA4=7<Zr>;a$696My4BA+ zrhFC<L1Sie^#ZAxa*-rr5%JRfvT<OpoV%t`N{gaWR8%f?GgnGQMfF8Z>sI~95mK?b zx88bgQ4oo3eR5lK5CoD+CSjzg!ej<}AYDSdcu9zpmRP(Pfu52%7oRsT=nZ;fnVk<m zfatwRVCFHEN94TUTPg995)DB*lkUj3JSlncnD{BgkVrFhhdKdc-Xd+m%J(XP2-=_i z$>VVJP119sQ-1Of_sKmUze)PLx`7Y@fiy7CXFT?#NG^;?C_lZp;eWLF&$oSEpV_EU z0rDZ$uo*~f9-{>O<VV!44?dt6lw^3D>vb3^9s*S4rflG_Q-|C*ROHu_nkitCD3Nd^ zvzqYxxqGj7ZYZd4Y;5$NYFzTsg37Q^5P6%|t$d<rLiO+W9dCuRyuX1Q_mMYzq=Q%0 zqE*uVQd85iJDysePplx={2;QrqNaf^BU+X~z#0s^eH}-nD4zU8J^|(nh%8<ERB1=^ zb1;!7C;Jd^B!vX0N>^V>dRzC%P&)p)R_1*bsMEA=HR9Ef2&0N*(ui1#Uc*zq$z^Ld z6j^zgBobt#X6j-oE}o$6bJu)P_EugYK{~1BX){(z-K>?&C$u8`Dp04aqFRa)6*6)1 zY;A7uP04xZHt3kn3J?8B2mKJ)JtB}l(!KRFGhbTYyh!}uC&|G9?QjH$pkHKCeG)Am zkCIL>5|2~0h%CKs`MkE~15&f*Uw6i2=fi%*SdpQ==cO1OZ^cJG0r$qWUj#m9l)MQ8 zf!OquADE4b=QdBC-ykiIMtc#lKMXV~(;0bb{S)%8tF8&do5<i94x%>HbBcm5;O+oJ z0ZrffQWHBM%>tjGVc~n;k334Ky65Ac(tNJ(SeYF$fSMqu?ffn<tk#b3#R-DR5gZQk zmPFo)012Lw$mFT@!<mj)Mn8j()qr@0M%=UQ6$PGm*(C)?uHA#z+*m?)W9CB7&|wY+ z4QH{fzx<6Nziag}x#pIeHSg3?LXe+N5@3qiI7tGmu$VZ}-Xfd|nPx1UpUtyua2#Jv z8qN+nMdlBC4v6M*406bnz!*6q?JqZ(VJ)Do+v{WtEN3ex9m_h-KxKM^%ou<$LBA<Q zRwE=z+I08oZIVeZ)OAYWeQkN;Q@1%#u7t3>88=uGPXzwJz=omAyD*IUO?R#WCZ>|& zGD-G#;+d#h^7-`#9o|UKQwl<Y<u!FuI&lgny&`FSaRb$aOJEk73?17=n%Y;VLD&YG zRxMnDg=Sg?x{gcN;a8ttaYxgtkpysc*=3xo$bVv8P~FqIuZ_cVCN(ILC<X`xfWrEu zfhi1AE>9P9z-R2$v`i!tTS@C8>wKpe`Cr5yH6_#jR~6gGYMCQ7sQqx`0a@9&QJ#FM zoyA;&WHiW4-+NhBH*S*SJs6bLLT15DcdhoHyYuoZa|newQ>?H~OF;Z9F#0;3V6Fft z7)Q9|hV}twg-LUl%hrw(45e6@&aINe8y`ly=|-%mmyogJ>!r7+MUu&G)bKBU;nKBF z{_k*>qq+u+zCLDLgN(0i0FJ3n3mn+<KdNXZ*(>Gquaxr-9g;b78l<)3IAS`ftFQn= zYxOzvrMPsW@*6XLigX^^CtaQUP)>0%TCELvU#D<QRJu>@m(CLhRLgXFNDlAcguG3r zUaUm=_iT}AGp0*FR&GV<KDaNgq$99UTgyvwv~35LkNtAI{q;}?c3!E<<Dbn&g65x= zr-QDZOn)1I0*OXF*|xq(l0%qKxQFsQx#WGTB$|yh8r_@)M}ZKn<!W+e$D#e;5qW)E zGu%X-eMuA*$)d}bO8?1z@snvu4faVoIe2@_j|~2khsix!F%8`g({v(^jp8PwgLv>T z{6*vE=n9pi7)L)Fyby%ka;Y#7CmffDKdWZc%8@;XrLU(`A!}xwFR`+zQc(<rKu=OB zX={G&Zp@{Wlv?ov7Vz^W@4um7^@#>F0TG{o$ly;QBAg%;k7Za%M@rHO%V;C@MOS~& zYzKVp=9t?J-eB>aK(N{#)@ec_0K*@chFY>tJ0Ym<dSSc#*8{dJX8q+i+#m~9EKwov z!QwqXxfxp>Mj_NYIV<Y$o*}QieQ7>{Q{~;1=wL2bwN&=Kyi*?k#{I5J-nIG)S@n_Y zRFQ1uTVzJ<zN6uF9DF0&6v6h6n}z(O3m<hse(hW5VJw=;e5Nsw=V#i|rei_`*jI6X zluNS~T`1M{GjkQl{rK*C^5O*!28XPR$tp~ws}Taf@JX*JV%UxvZ4QeRkY%ge{Imbc zf-$q~y7$RP{ysYyYg_BS-SYes>q9&fLYZhQdm1BxDU=GMB%=f^SVf1X^eGqeEIUgO zh25Izg(q#vqy>D9nK)4yx}bFRn|}81atz}K6B*|W0lS90SZ`qp`V@wHK2*Zdx$b8| z5S<#Z+X5I*6G+9?ZfqtuLCtc^gS^6qmZb&2oV`xhf}lkqvI1ex*w*|kO~7Ogj+oYv zK&Xp$=a7LCBmj~Tw0!Q{v}T(o2*JFKHx$z9`Q*nOPpWT`XtiJb<7MU7eD2wvw*bvH zH#M$Wl=3t4ilFzBbxr@4Z8$~dl!9!&bJf)u@qfkMgvlZuE3X`L>8+0qIC{VNrv+tY ze%07m+Rq#;nb5rkZJY19;=O))=$EmwaX9+vga6aJmfx|_Hh&Irgy*P&yzsrhi1)Ye zPI8tl9y?BYu}brzUNYkci!p(H718is7)$?*t_#UP%B!a1GYw;QAnn^XNm0zJy!h`n z93O#ywrbP?ZLoFU1sFM`YTmmg4U0sJilzJTo<!7(ze2y#yA;F4k)y~pORT6A6DRiH zv0?y5d8S2_Q>IY`35o{xMg~1h(byhhnV7=P*s<0%qT13~A;*L3l@t4R$e7xhGK7V5 zfK#GN8-IHu2QhMPRM!x^>8{n={d8)9m%uSB7SEh{ts}CPLZH*p1iE}=9XlcW2gtHI ztd9io_b<KU$->c);CU(RzIiqIS>L}^7tPpp>+}!$-8e7l?jHgZ>cBxEXLaT}d(+ZC zm=1*?c^)mNf3f*1mru(lJv=|EAPiO<*R3}MbHUh>xcu?`&&!9twpGTI*hvYsw~vQ4 zPDa+;yG8!`hubBFm7c?8EcwaIn+|&Ng&EZ~H~@MK8h<DU><F{Q1oN@Y;296&!X0a} z)ndskmdm5w_pe#r`1CIbGd$%}&$j*ar`KbJOd(vedlG~~aOjUq?bV-^NB7stoIko# z5*3wNPYBw`$HhcBPRqxSpAHGq3>o0a*V#T&%IA=6FWT2qN=@SNQmL-J2%p7LRr@Zq zI|G7A?OX|PfP3I@iv;LZRTusN+D%AKVpX*Zq_XNf8CN-7rcPfWJ`QJ)rqkuj3{N8p zG9@U%*cFqiDHq`Axk5k1MPso7FU`h76!qoB3AyFQ4@>9qZYiqZ@f*pZ*I-RrT3QKM z{6VM~_RS`wNKfmo%Z3ZV@`!@4fy6Qxlr+H*i~*glVHHkcX|x|`X_ql$E2L+jA7Fam zpy0G7wg?Os`*4Z~6Sgb!T|WOgq98{i1HKPNZHKo>8smqDU_5zr4>n7^lo0ei8Ek2m zy4q@)J$shaPN|louWV2eNt}C_BZsy~fB!KV9PE;V`<t*|VlM-`R0_lGo0B>{*m}#v z?jSnB!^v##$$`l3-@X1T45xJjPeBkL<46qq*zoinwcPt6AaNZbv>L_~uc!<U>cuv# zLK`;kaqN}!qJV7~88><2qtoZs-<@nbAwxK^%J}0COkH!|KrG$-$bTjWTCPd>G$s5A zZL);mg6ZeamipN<)ylbG1<kxfZ5XEPE!tf<$l;$CkIR-Po|4oMMrE{f(KNB9`opor zm=CAQqLKikp`H`u=iz1~b4|R=_QYH@WjYTOj0r7!Tcm!$3NW$cR&Tnf34Ko{+z~SI z+g5JK6_sc=rj;le1<eFy=;{rU7;95z+bf&onP(cKdQ(LL#sIj*L}tGydF+_$XXuk( zZW)-ZK!$586G}zUCRYxI24v=fcVnf<fe+g`obJ`mnGbjh#W{(Cq4CjEUnLi=GkF!& zftC2)?OUa~VUA2+un4Y2JOE9XiGai6Q;9jv-I_Mvb*_z1FNUFm^mQP{@*ot0&-R_q z$>9?|x12CrxQ|8mKzya8a@us6j1MO|M3W*?Rhw6#IpB4}PBjr6y08XO4@`B2b}qw{ z)}e*b-!*S#;DIe|K|z@y2q-~ATcsN?8;!k{2|`4|-ShEJ5-*!<XGdiM`Pa2ylH;w1 zvuz(;`vs|-Iu&Kxz^Qd0u(GBC$h&<M$-gb>z>e1ngqXi<g-oieJ#E@=n;`#jUv56* zcyh&`{NZT}LBO*V1d}t8JFe%Aa(=q?``^hgo>u;h1UYu3B_xXQM_RD#GI{X!wPBq- zZocnp1?AH%jJkLpiNL|;!bR4WU;bKpJ9E2)B_F(2O2&k@*CP=)Mco-$<iM-17Lb}e zwJ;dBt$(_p{Y(lvvhqBPUCTzqu*;&$xjxSEgI%{}&)x#s*Z#F#D!I!3?#?WZ9!p_v zVb^s@#}Mnh;h4e>Y_`yE%=jpV{To<L0M<GINpNTo%Yb32sI<@(Pd@ahLXajC>AK|T zQXnRd$S&#C5es^_2&?1}AtNlMZTND?S`mJ6?)lTkzt69d9nUsd8R(o-Xic-U%}J^- ztq;;_=@45jVtI~t*n@<KHZd78<#*bIcrs~9J+i)3OyoUiVS3}G9qJLABw=ZFJBEKe zRbha;r^Cz&!ns44XKTn@MNsKm_wI8z`kXSGv$DBv>2)6}X#3eWzok|{Yqs8mac(j^ zhfg588dRT|8+eGTlB*E(qfOWcU)`<KIHz)cW-rF27EDjGUwqZ&1#N8aJK2?IdMas( zQ8b4~L7mI9%K%D6fWkG0qN!j;h){&n@6ci)VVK<xwcH7%g0i#0O>{Bpsbpwz@}VGY zJ2%Ub6Oz#GYbFdWqQaOz!9uBNurUYiE$~Q<LK4UD_)SGzurt=kloVLc#3L}XHZ5U+ zOd*-H*C+y*I3P9{LnEMN5YhDp3(7nvq*md}7D#k~nVecH%@Dv8wt~eUU1oG*?4m9X zj5)P7i#Q+>W6~3WEEC5pC#-fyn1*;dMyMs2H@ETIxs}Rrtl_8U+;i+gz+^nT?+tfd zJtGzjU5};bx$p)qKcpoZkqs@u#0_g2AG5bD&W>~zi*LfL_BP*$ZQWXIK&D{RrOHLI z)eSuFMI4dcviyr1w`8xBvY2O{G5?%7o~-}!>bZ%uY{kO5oNp}h+=lCMdMApFq0bAe zNaSyy&Mdu;chWpysNT~yA(Ad>@Fg`H8~27F;!i=4OhO!RnxH>%0OYgVcLdSM!DtZd z4B~P`lF^^z4UIZ4Q6y!P>m*(_1|IfgsQZ}o9mSh>$su5Sx3-;EdH<R<kJ%FCEOa8u zSs7%@msVHdl(Q{@6A%yQ1AMb6Q4S%o5gF>~mY$ZqIQqj|XzYjL?S`V0V5)JD8Z6n( z+4XGzAVhw>HWqvVj=K<v%7j@9@s3$3&M1@E8~PG2FPDK6N2UAFE?$ox3QC49UHQ4K zxwU%%ozp8&sxwZhs9znRw^7WpntCZ7SBZ@aHf`w?@)M-2dMb>8x96}Sf-z<x0zzZZ z5Hta5VHh(8+0#fAMMwP5Sb3r$`ZCzf_qH9-vyLckKcm==CVTs&Ka3D;SnobMeOfE2 z{eRLKtydkR4TH;HSsB^%ZJe3h(tY4nN%i&Mh`bU`j7tCU78$@%Ij`#()-Z;uPh2<b z<qW}EDo%r#QD`cIL+69hVGB(hFNS(>*0QtRPE!elHXcOdFs2ukEjxG4LoLo9{~zhB zx{TxZY~!U1(_YE%KqTh-Da={O@jOOHw=fnswoq^&Q3t%d7h1-;jzxvRngIyuA_iSj z@o6OdVHW4%0be`djejng;Zg35`u^2R8lTymYdf<Xxt~>P`qGs(80cEeqoz;+At+u^ z;>lxM+T@%6y$45qgEGFfL_Yt4*>dHgNjN~q*+4eA?%|?>^e|}R)wnM|zDu6kVOzRo zb86(aYi7y#3Uo(wQ9`+RVxCFMf!x;?RDS+!X1TL6NK@nL1z0z{2=79Zd{5aJK`~iR zkL$WepA<Iy!*s+WB2&m<t?N*wLVB5S#bjry?3IiL(kg@_CX*RPC3s|@<mgRT-u5z% z8c#o+u|c@*hzEl^!8qX*&#`l!W(_A`LO^kbIMv|1%z+apM^PMuj-PQMW{wN-T3CtR z`*j}PBVBu*m%&cFP>UHWXCx|W)C%d62kVWmy+uWpLdpE#`yDdzmNSWzGa6L!-dk}j z82kmsfrNS(Qy*_g^iU9DP!MR32VPjkQjmkH)`tC^qVw&svZ|R<f7u7*^|pTb<fqoj z<}EMCl`EIZx9<I-OmA2y$6o)f9NqqF7zJm`N;4!)V&Iv;bpY=eiWB3qJW{EC>Fa8h zp56|;V9po47{9^Cs=VVoxj5}3k~4~s7rt`&*uJFSNn^xf<uVq(S12Dl1>p}ed6by# z>pLbVI$p!UIj#v{AlA{FnZa(Uy5MT5x)^V~Lh#pi@0SC3dtlYFcjGb!V*?<EP9BrJ zKmV#kaQUK<1zbi82ky%1xl&$UlQo1kSs&7={zS)aIRP8kiNCgP4ZQgE%fImCAuYYd z*BM0!X|eBmkp%8UrbyYCDpYW+Km$Kv;zUwfHbFY0MYu}nQyezYC{fHpy~&Imef<Co z)*@Y9J<{3LE5CcO8CM=DnO;{X)#G@f#MsCY<ru<J%qt3w0cy$^m0@B>v2H_bc2hos z#SuTV9N9-4+^L>tWRUb=5BOlEh%un^#C~|cPsUH21<%+;5+(4^O)_{>^W^b8xZmMn z4yIvRDC{=;Wltj055+4bKDS<i6fU(9VS3eqC$9OijyVWCn#0B*D!{1pA~=$7-znw& z)rihoiQ~r{y77ahc!kr`b42>kWq9M}23>GQ!K)#S(@Cdo5b%s_jFex@QGu4v_(|#R zJc4&1+oYsqg2WTJD?<IyP@fDA;8jH!jh9_osROKyCtkcly7s*&gU1hHMLSEPrDLEt z7I9!e<0SEuufC4GVRs=#G~_2-lJ?@4Lp|Mx(8bEpb@`)|B%-SaMn#9?*ri)p<Hw`_ zL{TF9Qb#_ik@DmyM_>CvMa8jwE3uorD+q=bPy`bNKEgED-#s9QcDG3Pu};3M5qeHh zm1f2GQW%6@Atu{7CECowK&PiEp5+XWbxgVyM?Oa_-vmw)Qr2yNLK=PGV6QYZn1XzR zh)QlS&3K&EEM;(~8k6d2lcjcMEsU0wfs+H0!rQg{%^7=~UhGAK2TK$F?c=X~s527m zc<7^u(g$^5;C_={4f`uYIf5PL(cQ1fOSn2OF0BX|*&4w0(*%AgwfMas#6SkzFtH0T zx$eLxQ?8!v5F8I0ipjy`^VbH_%EMPU)J2MM<Gt;-a`@Gk@jf*o(%C`HkFgDkMG-+$ zX3vxQ#h2hmhS*FiqfjnHPk;L%>25th8Fufgo-)_NHvJOpN)y@_xd=i?>f(qiLEK)s za!l6+Ht(yDstgsuAPYevz>DA*fH-)M2<tX_6x%=UX&5nhDm}i)0NPYq>mU@bVI7Rs zp^b2g13I7;V57(~>orfBsUaC#StF&`P*M^u1TBRQ1CNq1Sno{65Q6TAX$nTdhjd^- zo>G-o)(VCu@~<PVjv;yirIbhr;Tf(D)kt_9aeVbTGIQ}|auA+Sg#p9xjK*Rzc2bQr zT<~sPNKq)XsAm|p?x<Et^9yzSkpx<F>8<tjD)%T5)FpSCWhZ3TK};@-Nq5V~1>U%- z$#TKu-<OU9dvOPf-yij3R)Zih?1(F;PRD)dY%KhWa4n7(l-UEogmhI?%7|B7m|#17 z{{`>!(qaGvFeRp7cKB%4#)}DhIa)gxKixZbu5@>_OJ_%`l$4drgxYD6z$()vG9n$L zrPQD}%k+#vWxKbQZJgnCqP3$O9vc$c(P7@?f*(l_231Td1m!7d_0$I3pUotw@^c2H zasBW<RU5-E(pGta%n^>8#fn`m3>MBx6qw4O5e(IOB#ex*=9wfobBq{QRfEqICF}5v z2axsb(&B`5RGz~B`0jh<c-s*J8}>bZQnlQ0$L*o=G>jRQoV$;mlplZj9}(?15gV40 zgM%0>>*a>Ew<`{#kCM}{{HQMKWFoTOjLi~_smG9Pr?N=ktWOvOCz24tqJs@KnzI#T zlrZzwjTk+&thG`E3vY!`V`>Wwqke>OPqelQU#uN1)y<m&SkgBc+#L1PBadMqe`+)| zx%$Q%W$q;xW}QaKjRuWDH-KKKtVL7K*iJ9i31FtPvC=VQRIYDB!@eDbcaOtK*3F$$ zP&L>;AP;=@c3s>RG=znTHB;qJ*Zti{O>axxJ8qC8d)^pT&=UNpuy*#$Z2Q(Hek0HR z{PApgc;?zq|D`l6JU<%=!`t7E@;hpf6yEjPzhirzoLr~asLsl&Y4y6$>p6Z>{`qsb z7PY>Z2XEP`x(2!73;11mc1(B^$lF%&jvD01t~c}r+?=#IWAKE2(G@FX{f~Ys+n*VI ztoYzxeFm=);k82@V{(+<soXniklowzqoYs-u4f+q`Zo$IwUmpZt3LKIHO2@)?^qQk zD-OkYghR3mOPf_#Z^_msT&LK&!f-I61AVyn>=&vLX?tV8Lx0nA=EB8t<5#})ruzIY z_3MB67vZmA9eu|uUq+o1b-K6Ng#-!DS&j=a%E?(JKN&vTa>+qJW1F9C-extYrw|zH z6DA6xPh|`dw4H1?VHqh3!F7k$0`6pcyBs~T-w;Rm9y@6wesVHF-hXr9izWt|+Y|l# z+uz32-LBPcQD;t}W5^pE$vf;)Ib+c%OxRk4IhLGJsi!48>Ey7aKTS6SSd}emxZWTj zNWmC*6fo5V7p$*;e7X-{b<PLz{mrMIZtKsV3n))!Extf5y7H<}9QVkLHLQ8)j&=A+ zF5dD~rOkoNQ#MuB+=_OtKNu;Fjy;{zD5n}#^&y?m)2IiQ0;3OL;U2D3Sz`)?3maM= z$O;}RO$g@^_f$&wa?ybdUOC$5s>5f_>qTW1GWFaUW^|~q^h4Lm)HyWJC<$JA=#IOs z(J6rvWg|~IhFymx-8iyFl{O{S5Mczl=(jBbbmJ}>ZEhD%?Lf%9Y#xBhsIpC%MFzvm zDQ{tFvJLly8B6s4@!0pu%LbJF&UyWuh6dqvq|pR-MC0|J{j`*h!HwrAiEp&={|V9Y z3G%4pT*N?Ll}kNM0vacHQa5uTYpq^K9V@bppwvG+Uck<s`#UOZ)}+;)<rOp=PG|^| z>!<mKWcWH`?Q4Ebl7oB)edN?Ie;yhr341J}k&1!*pRfDk$OvI=%Nx7o@%tYD232+5 zw}m(5XIxukm=RP?7@JRv5_XdikG3Ke6cxuT!=JxB@&JUp$ypPmte>e6G?ZpSf+h-U z9AT%7iUY+|K?q@E5#ia_t?v@nqKZbKkj@bh41y{xV2}oXDo2|6$+fdC%bx|MOLH(! zx+ZjvuhDT1BbYe^I5-#S*tr$F)6&u%O{m)qkk*5>RY)oUrb-;da>0=mgzY9E8ae8Q zNh6Gdan=*M2MrD26jaf(25_)61e1C{bOa4&A2YVX<k+DLvEF1Mwi%gJj1Fa_ldaz9 zo7_g1eMX&WB605@a;6wG0RA{ox&PP#g{*R%(S21uj3PyK-X*h~$6bWzpr^)R8@WP! zdSAWha9B3JW*ov&C8r?0ZV_Nz!`euXhg&3Nk!M;t1Dm6bF7*JE%AmA>t2i_`{+x|r z5N`iX>Ci}KF|{mIq#zn8yg*=b1~4VGDy-+j2|?pn+3<-+t`v`kx156sJq%t<=2bwd z0ga{_i1;)n@SULvt3EQ}zyka<%1McliU#~MBN-5JoKakN%Y;!L^CbFhoKrqw(-nzW zGSNVY$W)F*U8B~afTv6OZLThBl+ZY&Vaf2ESF*H2dZAgeUdy%T@D(>JhpXq426M6^ t<MP90b+{$COv3~iO9lrQ|HXsp{{wRJ`yY;Sf@%N&002ovPDHLkV1g1w)XD$= literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/76.png b/src/assets/all-letters/letter-imgs/76.png new file mode 100644 index 0000000000000000000000000000000000000000..1bee5d41cc67851687e0fbb63cb41d917795fc76 GIT binary patch literal 8531 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 N002ovPDHLkV1h^zi0c3V literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/77.png b/src/assets/all-letters/letter-imgs/77.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a4a939b6e39db99aab63a30f7883eb0474ca22 GIT binary patch literal 8476 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 KMNUMnLSTYY@{n`@ literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/78.png b/src/assets/all-letters/letter-imgs/78.png new file mode 100644 index 0000000000000000000000000000000000000000..900f91f8afff37e1e1e4a47a3f9930192aa81e0d GIT binary patch literal 10530 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/79.png b/src/assets/all-letters/letter-imgs/79.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7bed50dce700094f7a89a9ccf7687a88759f91 GIT binary patch literal 9086 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/80.png b/src/assets/all-letters/letter-imgs/80.png new file mode 100644 index 0000000000000000000000000000000000000000..babc069e5ae520c241ab3431500a54149a10a093 GIT binary patch literal 8203 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/81.png b/src/assets/all-letters/letter-imgs/81.png new file mode 100644 index 0000000000000000000000000000000000000000..933c362db3eb624cb17ef8d192134c68077579f9 GIT binary patch literal 9635 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 Z{Xa(se^%PH-s=DW002ovPDHLkV1nhx#<l<e literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/82.png b/src/assets/all-letters/letter-imgs/82.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e75d807034133ac5fd4818b98bd296fdbbadd0 GIT binary patch literal 8431 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 RA4vcJ002ovPDHLkV1k<rJ0So7 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/83.png b/src/assets/all-letters/letter-imgs/83.png new file mode 100644 index 0000000000000000000000000000000000000000..e015d11eccce74bf538335e7141044bccf45d001 GIT binary patch literal 8497 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/84.png b/src/assets/all-letters/letter-imgs/84.png new file mode 100644 index 0000000000000000000000000000000000000000..532a2c74da5dcc1b11cdcc1f17a7f23207911b0d GIT binary patch literal 8011 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 N002ovPDHLkV1nCOO*H@j literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/85.png b/src/assets/all-letters/letter-imgs/85.png new file mode 100644 index 0000000000000000000000000000000000000000..ea347866bfc6b01c92fe0123c6e3ca0f69b6b92a GIT binary patch literal 8928 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/86.png b/src/assets/all-letters/letter-imgs/86.png new file mode 100644 index 0000000000000000000000000000000000000000..be40773c019bb6123be66b6e75bda20ac589105c GIT binary patch literal 9329 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/87.png b/src/assets/all-letters/letter-imgs/87.png new file mode 100644 index 0000000000000000000000000000000000000000..31f2671f9962feadef0677b5ee8ed9ce70683c64 GIT binary patch literal 9012 zcmV-4Bg@>0P)<h;3K|Lk000e1NJLTq002S&002@51^@s7mxVIr00004XF*Lt006O% z3;baP001KENkl<ZcmcIs34j#Unf|M~r|0UKVFqS~Yd8iu1{4<pC=dY!qqr(jB2nX! zXk0fTF~*o|b`v)w*%$*xH;Kl?BN4Nkjj*0k69p7d5kv&J#K<K#GcYhSJ!f}U?f3n! zs=9klFz&;tddGji_x|_4SFaW6BE9q5f6DTkEM`tDJpU#u+4`6jiaaRd&SzctOAktZ z>6zND4_4MKobK{1!YX84M~eRC^`Kp1uRr{=#+t3}BiB^91pfBSL2m5WX18hOLsuvs zAF(5w+}al&bz?_2DNyXlMz{9QkGQcT?<#dGvGwuRrsaQ%6wJOsoJ3p^Et_0yagHCB zBfGbVZHH{hzwjCWBs~C%<KizVcJFd=U01@|;yv!W<tvgKEt08M&XKX_O%9rD=1AVM z9hq|ZXXVP<zADR~ctYz)k!_^p5YTmOS@Zm}Qc&EBMNO8HaKv)AJ>j}2_*kw(s-DRJ zdT{-+n1|ExRlRUx-=Ma!W}BkXi2RG~TN{v3bJs0A?^)PmPJn@oJ?VxE3TE8=ngY<e z*51vMSoN5~gl_zWNGK%HK4%$ulLrn<>#?|muKpPsA_~;HVY9xi<hI3b?8V<n!DTlG z+OVbJ1=L-7lUUCCPXq$7!B^RW!Dy(!^gqA(pT!PkiIX%PdFLY!5guL10pumq7}Ao< zp2i;lEG5g@FZ|ng@l49M9{UaIU{xTi4CI?iwwk-W*)eXXeWUK4sjj<VMj%%T$>d<= z;|=Q;yM#+`Q)BuS^~>*d?J*Zf@(<tit1{khvQ@0Cd?~tfMFw6*A$E9!n|R_|Vp*;v zk{G3-RC8<6k?gE&30=Pk>W3v-c2>|BWEyv`cH;+*h*Mt=AWO2wpDhju>a2u3p)dXt z#&xCbop)5a?5ax1ue?C<F-Dg}nog{1O}w!dX3mnVOD+?qu@ShmsUurH*d^s<Wl~mL z0A$ogvL&(XB^ck4=HXS6j3-xccr>FmN68b6eTI~7`SiSnA>pL;_u&mI(8cDTB9Z_R zI9l$z<yNip^Xy{ge|g)T926;LP?2RFBuYRVP47jE`zR6z3=?NR)7KxkSH~wM;vlqO zKO3CA$xSO5f^2SXfPs;AZQ81DK5qQs5AZZzfn|Swt4$z9jz1zP5fjVcBXkU=%zAhW zRXIfn&cOhj&a?h!=lyG^@O2Ak&~Y5?v=No=gEOKhe=@<1z4uhca8J#T=2{6~eQ#ME z+<r?WJR+wp@i%B&NZpaD>*IN4;V=KEB>(Hq3?81AsLLtX?-utHtDw9P$VX7)A*)@= zq^(h$WxtW4Z!I^5^2lTq>hAe8tY;iU2Ai~kRX$P*Z+tkw3nYlG`@{40r@yG6aSY$~ zDT$s5Uv;<G7kyP?Z~ym3zdaxzmE$h6hEKp^_$&GK>U}yxe4x1F$eM!5;^yYV+d;z0 zasS}A1xBPyt?SJ!yyNjdOY+&Dz??LNNLDx^Gv;0`@r@fXMzDyrwrM>dfdp=LE)4GV zkeigyXW89G)zJ0#D}r6x2ZJkHto{{R=EG`w^SdjZLx-j(_k0A0fCX&YOmM-d!@m%w z^v2Cw<*bpz0cnUQS1w21mhkj*<>ZIe63!{9nlAanqyYrNy$4B7-k^XwGv`d|r)3Ur z4&|mk10`|nfaFETNbZEO#yfLbrH^|~7T+(hP36I|i#S4wkfKh-a9F|y0Nt;EY%-#9 z`63a_TdzlG4-z(#kRi1Sj7U_b-+%AN@Cn8b(8<uLw6(P8+xHI!(mXp5a4BcI6v+v^ zV7nGbK%Zy)0M|1*Sd;2%j&}eaJ8cH)Y$^g9022DsL#kdR#6MqxN5A_$Ip>mpR3dve zZ`b#QH(rgm>0)DayS)uSos_-w>A9C_?&)7(y+9&oKdGh+p#rO-#RhUqEEU3}BM?!& zr{6m$adFa6g6p|<61xo|GSMEseY88ZmJj0_nX~LLRlt9W$O<DO?Ltk}VA}7jC!#k7 zP^YRw1wv({`nzY2aKp*v;wB$Q`1<b|ji*_FpMAix?OUC;#;_I6k)rRc>cEdA1DD{_ zcf*N`+}2n{`10@FRVVIUh-h012bV{!c}q<|>j5%mX$ji{T65e!*)7(woP=}GTCg(V z{`OOO^>xuk;7Rz(1>zR;5qar9#W}j|BA-Y5cL&KDemT1|*>J2n>vKO5x42xSX1^q# zhmQ(Hb^&=<iU3hlqaFex4+;YnADJFrUJHBU-%+lpbm{`HOB0ZhA02O-#ga^VHT ztVqtz(A>Ku`6PT?+AwX0-$T&|>Nw74i@*E&b6o*<DulaaL8QKBbF0KKJ3EE&$r&aF zs1vJj)Lw9lSOd=#sXrnosyF9VOu2&*Q%35*V$W;8&nX=`qFHjVrqJ9lulouDnCcH? z!p}EKK~6|sn?DZ5;S}<PFf<R<waK&xHp-=EmdS&^e@vXBQs7fK1Lrn3O7#7Ai>ym- zGeM0(>!@dJ+Y7ByIxxb3FTQ1qxNTUMFp<MUD<vyGB8jJeBu>25LvQzjU|Ib~i!=Lc zB8h~!jZG5Yu>;)+fgwkztgnRft@`MgON-JmJ6IyNf1N9N`4V5Z&dlRLSyv(xCz`Pc zACO%7?;?#S16nS28KHCLiG?7Y{(weo+pxj2ga_8vD%le!NPfjR8GM7n{x$dI_S&&5 zDg(~1b~Zhah(1q}!!E%}R*0A!)2-@EvGTAmYceLbcdU~C`PF@LpgtjA_}t~vckX;x zz@Nzw1VN0mf4{gZ7DA#E_-he+;`P{$?e7yinGD72j<=S~TUuu&wm;_D@OCat-n#uA ziSOPF)4>CJsqo6Lirdme-MFsno2y-_%%#Q%#XT?+gIwn6gxyG38lL%WK-0of8@=>q zahfqcLGS2$tGSU~+zf&_W~l`Q44&rqUYAf_R3c-ip(5p@l>vZLzML)?7ROGRf~4w= zU|gDXQDM+zg^W<iHq?PT-8bqEt$&#w6Y~1N=xfQ3O76KAqYimrL-qYEqlQMJ8Ia6k zOF<xj=S$4e=Pf!)8+aI)6p_gfOthd62g@In(1-*~4FM82>`mF0U*G<1X=!W-@ccc; zy|?^xP{+)z_x?=siwflr3w|m!2lobTcVJ7bG{M7P;7Hp>|57Nn^_X(=3p&88eg5SR zb<tuo^U?*l^j5Ru>HwTpaY{n?;Yk{vy!qTSTD<W3>(i^{;qTm)Q64cNh@Ug+(+etu z89?lF^fF9_Fewd&{b@!$EBjZDkR^*uc*F9jiR1YSQtZUBAb<Nq4`^OvE*)bmGLA68 zn?|OXNx^oJ2SysNr7c!wa01PndL&U=F;MpJFhLso`sls`tk(3@eK>OSQr{tGh>cmH z0;JKTw^u%%o{$02F-Epd8EVT0Og9dHjhb~Jr3NhNzqjgDz97s{1#jhi_tM^NTl}ni z;V!eE^9Os-kdZNx@B{`_T<m#0=3q=jUjzT`$9jA-rMeIWS`j8T;T&7(TL9zH)Tyjx zqo_JD&JI}W;JR1nG5}0E-bgT3A)!=KK|q9r$;hSk(9AC6AFana&8q-Zg!o1n;`m&Q zrP;<B5;gh%*JtdW^UuaH)(z^#yWrG8j*|<|TM6G^o)wDE%DdyOgI(bDSbg%RvnnN= zTrF*}0St2O+-O<BZGWlh3=#IoOqej!5wVPl$HNEe7R|Ulv-Q+Ub&IAwXxXj1LPdQC zgm3zdSWyJK-J}lDHeo}Rlf(_@iu1v1_v2{9La2U!dm6R(%qo&l>tNQq*=>7!-?mPp zrTT^EFL9m3RiQDT5t(#34nk|iZ93jkaOdh{a$9>UrrfCzI293@d=<7uE#mH6dtbw% zY41hvT>V;X;dyg0E53pA<4=p=sFYKLsU?TU?#NglVxbytkGo7{+$A`U1I)&kB+{A~ z#noM5J9%^z!nIa7bw_4$TG`XSC`m+5&e0E-)i0WkDh#2(arq-YovJ%rr%)WBUA!5A zQLZHSzAMr1ulXn)s(rqL5Q$Low(yai+Ym@1&<Tk>>O4sv*$x4+fSayNdOl4c%uQ$O zUqrSq6MOJ@2_;&4Ts(-~A)UNu@@{+T4MQzj;hm>NB6)yGW7GkoiwZgmIG4h2ud+|C zJ3!Bo{Bg48k0&jfUIplaiB@+b90ah!+0wY_Pmt#7P8BAJ4pWqs;WIw<eai(-u=24s z-TW;3iS?b+x5`FH=(?YaTXB}e-g^9ZK1Ta@2W<DRkCrr!7<pV0hy~wz5`*%C0H-;g zl-#VYj{zN6t~KE(j6Gz6Skt{&1NClmOrpEq>toIO+VOy(m+4@MSg)*mBwCE4%HCql zo-d(`zJ^nRgfzA#q~eEfNnLZIJq;~K!j|0i(jFQ7<26z+s7kD95P(L~*@Pu4S}08g z#gBD{oFRm}V1aFy4!K2Kj}f-_R{xQbb>00EDH$Laj_3_7Gf)DW3GCSBjVqIjNB5V+ zh2KCAK?1ILj4ANB%z{sGip%B%2x*y&?r2*1z!lEODNplzk#ppTB=+r7O|0BJ$vSI{ z*jrXed;>PuB;H9P-|#hei<6DngnWGa4r~Qu1`?dI$4!*PM{f=<nlgW9I(i1RL{aG| zEb?X#xqC0*fC+|fOS2?*?G<P2g%Y}OJ}lfxm*70rs+tJ_xRC}Pgm9Z0ktGfMp)Of> zQmouQ<tSvN3?V|fQ5|(IzmUL$sf2)q8gXMgaEyef-GY2OL2{yEO_>W6a>t(zh!h2# zKs@-(D@rG<02vid3>#b=1lwi(;VsjgDTs#qV4F`$Bs6@YSZ7QHALN-(7pj_J)(TGT zKzp>&l2{D&;J8njNG=9_yF@$5p4S%SgtH5+l4fgha>wec+=d#l`i_xg`BaQid}}Q! zmhh-i#uC1ka6$)u^%YtC`iC;MJX<cmdoj+*ar&<bmVh8mTU?x#Pm1-?E2cUeg%vNm z)s@=k>USSYo(T7^A2V-3o7MLAk0!?3>fYvHOun@qOkr{+Ov})ivvA5%fjq)~#+@)R zpT^Rz9IkDU+L~%fLfi49hhsxd%djg{H+?47uMufV1;h4`3UNwG@R=Grx=<M1ZVe9G zc>~_g&Z`g`-O%8yCwr4HJwvTw$&L&_Sy>z2UNhNLV#Ti<j9CMANvsnQyjjovE)$LB zgb<eqg+L`1#Yo9836~9){Jyp{Rqux|dmqOq?<`mj{g1Ujd)V2)q$Pj=?XrfT3phYw zB^Q6p>say1mVQKGkP9)m%A(!@o>>iWUWIb*_?al84kSbPa+6g-n&fFoc3}zViKFMi z3IVYrqbI>UA&DQ}E7?`&sF%}y1J@9Aho2acoBawSY)00m?6>=G;@X9UQaI<Ij1^IK zag4-7Jm0iB1^k^dr(M?Yv-MAza~yb!7)7Aj5iOvO1~W(EDbbX+fnxX%T(v144$r+b z5r-6DJ+#w0Ou^YaiRlr6R+|S6%cKZ=)2gaD-(&*KRM3<tAdfm&$A|TZ5Kpb=DW!B_ zeKsoyHDn5iQc5!O5KOy~-e>0vW`rWX5y*jXq?Aeq!-r=*1!dweCS;mN()vyx>4zaz zlc&n;o34|c8#l}IzkVnKo*QJQ^bazl0e>;zyGx$2x&z5<>(jrVRxJC&A2S-VamK}z z{?V7^*<bEn0K%NM5K-?MNpnLT@q?6|V~!VBFL^eoJJrnT3(>1c+R{8=Zb6aq%8kNv zA)Ppy+Bps!S*3M7Jx*JQ;_^~i{nYaT-J;%H*ccDz1a*F9=C$+uY`1Scx#M&)&IlQu z5oWfek7%DtK}j#!yn3Y;$6YW>j_lp3d3MM9Yv1v~^xeCEUrbkKF~2~XE+CyI=99wN z6o3tsL!Fj4$9e4FJ1T|r9tO=6F8KVFK~n)1rIk<qZ%_{5<d%#%y^S;EbTrP7=M_p@ ziD9QlES>B03!dXKM@8xE0@`x$1Eaat;LO`kWflFUIhGo%Gq1f?t)Ny0P`U-wBSBd% z_oU!`(M5$i83KEGp1!CnNiibBHP5}omzV*W67*yZPwg0(nLy{P=~D=%^ysPyNoDEI zjosN#1|L>888Zq9=o8k?B%O@3{{wS!H|=xy#+3%L{;z)poEK?%7-nHJYXz%(%9$S3 z^Oyl+DD9gqH6GG9dBph|Gv!<eoN99z_IZgPkPRKOrOBbH*WIQJK2Vl!n<=$`p&R(m z7+;qmG#erc*~uf_66wv;ullSOeMO9@#ts~mW-|CI2*l!@IWt-fkQtnQ=g=|`O*Q7g zWj&X2e-IluA1C$p@wsT5SwX4V<F(;_&xu`|R_GLEcNp^lQoDpiD3mW4vPgcn`OHkM zA#U1J%za_an4_OCZT?&NF&G99L{@Bs!P2y26Ro2L@P=->kOXJ)t>il-(qVV9TYdjy zv^NMAc%|1<Nm>ds-3%I~s)7Iz|BPs`gho)9tf0<1^?GV8V=4dCmiT1oc-=?Ai~#IT zBQV{7Z$(uA6qDkvG&WKRx_<Da4z&AcH`~XfKX|1ERy6(8HOl{ci@W5iQ2n0cpAtLy zHP~?$^x;aHK>k3Xl{nY>mp4;iiB3V99t}~yXvWR>((tJ13sAJ2798UIE$O;H?A3h1 zv(|zI-T*lTZht3;D*sW<H5ek_!&c!8>_WqK-zu?(O%V44_F%i-!f9qb4m7j-mfybO z=;^TQF~WoqcyNbtg^fQ>sIkq-apO&6@vY{m`ux{o^^4B?Q9)zqe%_oo9mb~v%Mlr} z6N~HjR?pEbIG4R)Q^g*Rb7vggxIFsZy26mOoHb?f8t+Kt)VcIHBJho1K8C>q(tHB< zfv*;O^5?~^*@y2xFG+Ie8{mY=XNTLcr}=vH+pj&+e%fqXa8;x-e7s*<PJEP;44rA) zPNnNw{V}@`F54xrFs=$)*cv&t@Ct`<iS-bAdnf3<3z)iuB(H(m-%$hLd?7Rjd&;V5 zIOM?gp9dtNY;pg#MjRX;xs7#q7e&hc!@6T>YWsbPw&>9iu|+dx!I?ZG&Gk_mr}h@E zs91Wh0vu`&Npj<h;_P07{c9c_F0SOZU1x>DGq5SX0t(`ozbkh_)?KxwNl%Z5<14E_ zrT{uYig7{^#}O2_`>?v;uAH;-_qfDc{kx(T`__*;GJ7-x_*wYw@-0cUEV4@m;no54 z8#)fcv_M(}Q8*cJkNi#CRga@bsv#WD;JZsc%l1a-s@|i8^BP*(f(+K6v&9-b76S)k z=G8~=Ii+T4!I1K6+FyR^PKx$zJ^Bdpa+j3eU%&5Yj#Inu$Fk#1oHmq-)u#dj_n5f5 zaJaPnRdHg+Fe-X70@<e<fXe%2|Lu#I-iA6HDlxey4vJg5PuvYpgCA!VR$$BeAK5+z z1ePky$9eeO&?7EK1}+d|Y&s8FeXDv&Q8~7~xNsAPU&1^!sh#lMQav5mZV4G*0fV^t zMYD?L|M^uIroB~rAOL&z2$2R*|G>=NZcFk(NhUw95sIRpHqSJQ>BdMG<y2@gT7vJ0 zmWVYJhq`p2@F#BFQAyP98(Mt+H}|G7>M@(ny<6ahRlm6sG1ybiG2B!-zF(|{YVgIp z<sZYgjKtuQf}#>SnHVtx;FJq~=VGM+jz<tbPOt~y*mV4*xSQA)46xOq^VD`^YY&JV z-aoTo=2u=lRYs>|h^AK`nCA|tdeSW}0~aW+4557E36b6FCHekp92g_d`3kk$@EeZD z-##j<_teW}RlVhku_eOqK}MOLMWgcgz9k>lG|P+cpOE*DG|Kf8O69`QWjJLYBXTb8 zv+<UBkbEQH4X4ISvMw)fp4@wJ(Uh;e9DsF`>Cq5%um0kaP`}~NNJ&3<CT_LS(@g&I zMH$%b_;Bj(z%u&5YN?Ag$mCycl6@yyWNiNedEv`vN^u^3`lG!@`0f*pw)=Ri-1q7M zS+eP{G_@t=3)4o+;)fSXV<DE$bUIu@nfyAIk*6`7n!SnmvAyF<rhh$kuf;%jcy?=u z<`wr2b_@G0b;^cK#07XTKsWJ#9G@GU+FJY=4PO*-n~)>K%EmbrZsOZGOq2Sf(zN~+ zY5s7XK!1s3VJ>%I-E&0}pE{Za1{^*`qEqKegcrhy#s|c38}Ji~qc!*vg>8iz0tVnG z3!D^%O8a7S-3DXqe6+D9d3)cBZb0zSb?R2WrZ*nD-6<b>zZCTjC^*$Mk~n}li0`%P z8v@A;h=q&s;fldx6&K^T4KZ=|Z4-C%U(|^)4ltvNu!?AqI(fPY{HCg~uL+`t;Cl~0 z2oQxN@cAvVYp*ybYduV_fo;q(2*a0<Ec|fE7U+NC;H3OXUs~@0clzo!j&OVR!3{|C zG&j$Hr1jMZ@whQUKr&@d7e6r|OjfU67z(*!jlfrvGq5K(uvKLJbK=zTcopy+9Be=g zjM_vuQ<LXmlnqAkMx(Rcw**{q9eh%dJpOEEBJE~;SO=b)mxm9d#T}1T4P@}_))0D6 zLBA=11H3lB5s?SyI`bVn)d-5a@?d~oVG+}a$r>~kA5qVg(B_vVv1J){7w9R><MxTa zt_$_YiU5b`_8H_wuxY$F1*kV~mg4iGjxzG`6WdTW-$jt&lr1o){XR%%?~anBLAeLt zk4q)CxCggkxjX^>Jj#hnf(qDq7=cuhQczHDe!@qD`Pothrc_AGbD724#gdnWeM4gH zQVG}Yl)M}SW8T+i7x(sBdJmK2*|TAU!7u{%PN2c~NZEMwP@6SsG_KVg7WX8abQ|vL z)MH6+<EE3cK&~kEKF1Mcg@;4tW;(KNQ$V?H?QO%u$?&zfQ4p07e!X<`_%vzCp5Rm; z2;*85oDh4N!vPMH;clOiA{E$ka2Z3L#TyB*yp3xSDhwp&UO;v5bTP_6Bm7P(8#Gtp zSGNzputqi<YLYyVJh!q$uA6&_oHO$?IAP&(i-R(aAE290L)9^~nRT(wy2~FC7Y>>M zma!OHfRD|YT{sZi^&xwtIBU1nlI-1D-<oV`z;LvZM{#<!F7C#k9dz~LU6#A$w?9a_ z)`Dak?hRpBl8_b2!cB**;v77HBCMM+pJ{O@gYz<bKn1RlkJgLz{@Js`DWeH=*gLx1 z(ugKO1!N43FpaBI%&S8SubcYIENdx`!c#7#XKMU<e(r61d#$)wvNPpWWH|MNgz>2- zR9T7J>P`5qUW-y8)dWUd5|=RWVSI7ev9rIAUzABWA9G31`oJ!XZ^q@V(puMuB??Pq zMgj>0RlHLlDIP45qLDB}E9`}O&l>(oG(QP2Zw@@6JnhlWuKr;t&ldeeJSLw`a7Nj# zp32zxh~gCQ!z|hbf5a$PQPobIx{)DOl8qZhc773jH>W2jI64s<#J2jAQuF>>a5IsC z983BYgG7x0@W}XtoHb~Kgi9-MkAI7_9l$*p-n->cg^|L22kU3+Q1AZYV3jaO%cjTl zG}y-Ufkc#vKM^!ak^_104Pjt(9uND6tL8w}z_3GLJ_tsGcy!a>P|!b`cF+mA<Ik6H zzoC*mv<I$;%91WRcfb(IDjx(t0b_CH0abHr7W`>l&#=gFQPdjXf+2cL1tb8%WKNOD zs0oridIG?J%!$fr!FIe|Tr6Z>kEh850#a;M6gj>bbn{f%KdCl63@_pV8}bp$7=bep z#EsXdu{6(i=9z$_@TN`67@?uEfs%#4)F%`({B-qDnTe~!l?KCjz4h(c9yhcpC`xJs zz@QiOmmSE`DE^l!6g?w>H3i{UE8tKZqo`5bFhecI8R674e6viYAd5c@Os^6a^`OIg z-%x(X7$cLnC$R^ImnOyZY5IEljXsQrtMmy2c>>!|0VGZhBY;PQ?D+kF!m&5B8V^>f zA`sTJuuK6xg#k}h$&3c%5H!6@DlF3o$Z0z%kRr?EV5IR!qw&q8V+;g<0FU@gJ}n9u z7!UO%N9ty}8dx8PV_%Jrw~dt#QYjtQ(GZmA?@s(h!^!Gu4YX7cP*j7#M~uX;qt3r3 z_0_n!Atryk`(F4qINe~CG4Sjv)?NE=cS=6@EneF2%1T-P*O#%?;l|HXmT$oK#<hvL z-<+@YANQdn;^QKx<2BXSN$h0%6~;hhWn<%-mUy|K?pW8K9m0`_gtJn|eob`^_}u=d zGzyv7IbXdcv*KfvK9SKtzWy}mOok};9bP)V|B!5Z^L4-2={p-iT6S(~d$8`sWu3yY zvg+I^(s$V4F56GF;S)1NcMScXJ`ra5e=X?_RNErh@-tFpsy|jM8&`B~h#B*6s{RS2 zPs|XV{S?cWub?-+;~?#LdxIR<iJxbtrBUZhmI1>MuBWBEXlj$R_QhAyS~9ce&HWti zYNTK@TTid_i5a3Rwh>%rE*;QMn^!M=CIhUncbQC`Gh0s7WcrKj{9J|O1(dCCtjfUg z3q_^nGU<|8e(~>q;}fP?))*5o>4K%pAD5n#ofw#4)iKK!0lnlei(DZ(OVOfU_$8?= zZ@;vngEO6d(~Uxfnh@%yCtir6TyH-6VtRE(e%5u@0LCoWj5TyS4sj`?Sx(K;sT!${ ze(+|NVsFLPWtm#4rW)!H7$vT)RL;bkCIqGg`hQRG48y!1FPODo$q=kVDjPfmr~gS@ zJIWjlWrHeZ;HY78{LrBeIDPQjJ{RX0A7C@pS*jfS4>EZ4NR^ZP^?oH}VjyT#;+rO6 z$1%<^I<Zc}7S{9F5lS+!BBVx^W)u)Dm2`xFNGjx|k=XC%Nk|j4C_TU##wiLWS2}Qj ztbb*>#ti9g#>wHtJMFTd-=2dNqs!5N?!Nd-*Qs(oJY_On!49JGRNS<h5o<<=wxL=( z71vX^WndV?fq*yygOH)5MuG-`HZoRZbZ9Kfp$gbQ04<Xl_4lGZ<dEp?x#==#=ewJv z_UK{1sP8kzPn3$P;VN)jYsWK_?d#S{?cq!upTLyME|;8WKBZRW*)8k?6@#6ma#9aY zd16ui^oh%88Fgv|Utf#}0vkXji9C@FL0T%<T0>b{+V6R7Qvt{jjDp}jWdu?>yyru{ zkWvQv%=P$C23(57Y12L({4jH6@!NTuZ}OarwP?CU)zvA%5$yk7+nB|S3d)-v<D_)r zw4mIEx~fe@_-BTdR%t7DhT4Xb@e9E6dS4lX3UT~c-jM9-X%wD1=L*R!jH*8(tpv{< zPcdEm#p_d$+9^<$GI~93B=>Ht2RhLpsh+3Ysw?J%ens<|jE_(!V=NcUDLPCw7mY!W z3nQqpI7*Cxj8ukF82_^%E|uLSt{~@N$s;}X8jZ-Ci9O+w<{5C1L&u&4Tr+~xhr6yC zO3}1Ya@~9x%c$a{!O`Fi04?eNgirB+!T(noES8FA(O^c0XDXEa#Cj%w<oG*Bv!Zy$ z(stq!))>(!oiZMK$md~JCqR2W1tjgk6fYx(mZ_K;f-*uabe3_9DfLo#lz`*KBtR;z znuDE;llC@TE3e+Z4*#FGtQGK`0QKfNQCQ|blJ<r5-<}-GfaesPI;t`iQ$|KOil7dd zgmq-46lWWgF{a_;383}9JpQQD(W7e~hCGM68Vr23&b$L306BakvySpAyvnBJ(N5VQ z1Ez-R1qH|xXO?(tPa7qu5H0CX10x8Dn6n9gzByn@!N4y_sWS-DVhha#Ou+egMrazt znAIO$3P|H>H4SW5E*i=7zD`bnk)~fqIxN!w;Gy!6x8dm<jmLgWdU~aKz^IRaG2k#k ztt1S6uEX(tB*|-+0H$x(enN&dI3(7jt`2#ciHX%oug!aDy@LXNq@{U75oOe6=F?%= z?!yxe^Z`$MD1W>yv=f4SQZl9L@atjIj<>522ABr$+fai9efT0jSP8$xO1P2G?*47X a+y4)3O+AHx?L(yi0000<MNUMnLSTaQpL;I= literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/88.png b/src/assets/all-letters/letter-imgs/88.png new file mode 100644 index 0000000000000000000000000000000000000000..41419c5722722399300a04a60cf5367aaed409c2 GIT binary patch literal 9632 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 WAX^hfRKk=10000<MNUMnLSTZ4pQ~g5 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/89.png b/src/assets/all-letters/letter-imgs/89.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd8a2fcf3566a1ac69ccdd65a1dd1abc906d894 GIT binary patch literal 10479 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/90.png b/src/assets/all-letters/letter-imgs/90.png new file mode 100644 index 0000000000000000000000000000000000000000..5233a79faaff55c925f6e2b3f7966c67257df981 GIT binary patch literal 9281 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 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/97.png b/src/assets/all-letters/letter-imgs/97.png new file mode 100644 index 0000000000000000000000000000000000000000..adb4dd792853d954d3cb6b3414efc044f412234c GIT binary patch literal 7948 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 CKucu+ literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/98.png b/src/assets/all-letters/letter-imgs/98.png new file mode 100644 index 0000000000000000000000000000000000000000..a52464a0aa8a4a4bbc3aad16b6692ac1ea608758 GIT binary patch literal 8104 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 C!=6Y0 literal 0 HcmV?d00001 diff --git a/src/assets/all-letters/letter-imgs/99.png b/src/assets/all-letters/letter-imgs/99.png new file mode 100644 index 0000000000000000000000000000000000000000..4988e7ba9199b03a89bfb52f8903c955537a839f GIT binary patch literal 7875 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 literal 0 HcmV?d00001 diff --git a/src/assets/libs/audio-recorder/lame.min.js b/src/assets/libs/audio-recorder/lame.min.js new file mode 100755 index 0000000..32bfe8c --- /dev/null +++ b/src/assets/libs/audio-recorder/lame.min.js @@ -0,0 +1,308 @@ +function lamejs(){function Y(d){return new Int32Array(d)}function H(d){return new Float32Array(d)}function ra(d){if(1==d.length)return H(d[0]);var k=d[0];d=d.slice(1);for(var q=[],C=0;C<k;C++)q.push(ra(d));return q}function db(d){if(1==d.length)return Y(d[0]);var k=d[0];d=d.slice(1);for(var q=[],C=0;C<k;C++)q.push(db(d));return q}function vc(d){if(1==d.length)return new Int16Array(d[0]);var k=d[0];d=d.slice(1);for(var q=[],C=0;C<k;C++)q.push(vc(d));return q}function Zb(d){if(1==d.length)return Array(d[0]); +var k=d[0];d=d.slice(1);for(var q=[],C=0;C<k;C++)q.push(Zb(d));return q}function sa(d){this.ordinal=d}function M(d){this.ordinal=d}function ka(d){this.ordinal=function(){return d}}function Fc(){this.getLameVersion=function(){return"3.98.4"};this.getLameShortVersion=function(){return"3.98.4"};this.getLameVeryShortVersion=function(){return"LAME3.98r"};this.getPsyVersion=function(){return"0.93"};this.getLameUrl=function(){return"http://www.mp3dev.org/"};this.getLameOsBitness=function(){return"32bits"}} +function Gc(){function d(b,g,a,h,k,e,n,c,f,E,z,w,A,v,p){this.vbr_q=b;this.quant_comp=g;this.quant_comp_s=a;this.expY=h;this.st_lrm=k;this.st_s=e;this.masking_adj=n;this.masking_adj_short=c;this.ath_lower=f;this.ath_curve=E;this.ath_sensitivity=z;this.interch=w;this.safejoint=A;this.sfb21mod=v;this.msfix=p}function k(b,g,a,d,k,e,n,c,f,E,z,w,A,v){this.quant_comp=g;this.quant_comp_s=a;this.safejoint=d;this.nsmsfix=k;this.st_lrm=e;this.st_s=n;this.nsbass=c;this.scale=f;this.masking_adj=E;this.ath_lower= +z;this.ath_curve=w;this.interch=A;this.sfscale=v}function q(b,g,a){var d=b.VBR==M.vbr_rh?t:r,k=b.VBR_q_frac,e=d[g],d=d[g+1];e.st_lrm+=k*(d.st_lrm-e.st_lrm);e.st_s+=k*(d.st_s-e.st_s);e.masking_adj+=k*(d.masking_adj-e.masking_adj);e.masking_adj_short+=k*(d.masking_adj_short-e.masking_adj_short);e.ath_lower+=k*(d.ath_lower-e.ath_lower);e.ath_curve+=k*(d.ath_curve-e.ath_curve);e.ath_sensitivity+=k*(d.ath_sensitivity-e.ath_sensitivity);e.interch+=k*(d.interch-e.interch);e.msfix+=k*(d.msfix-e.msfix);d= +e.vbr_q;0>d&&(d=0);9<d&&(d=9);b.VBR_q=d;b.VBR_q_frac=0;0!=a?b.quant_comp=e.quant_comp:0<Math.abs(b.quant_comp- -1)||(b.quant_comp=e.quant_comp);0!=a?b.quant_comp_short=e.quant_comp_s:0<Math.abs(b.quant_comp_short- -1)||(b.quant_comp_short=e.quant_comp_s);0!=e.expY&&(b.experimentalY=0!=e.expY);0!=a?b.internal_flags.nsPsy.attackthre=e.st_lrm:0<Math.abs(b.internal_flags.nsPsy.attackthre- -1)||(b.internal_flags.nsPsy.attackthre=e.st_lrm);0!=a?b.internal_flags.nsPsy.attackthre_s=e.st_s:0<Math.abs(b.internal_flags.nsPsy.attackthre_s- +-1)||(b.internal_flags.nsPsy.attackthre_s=e.st_s);0!=a?b.maskingadjust=e.masking_adj:0<Math.abs(b.maskingadjust-0)||(b.maskingadjust=e.masking_adj);0!=a?b.maskingadjust_short=e.masking_adj_short:0<Math.abs(b.maskingadjust_short-0)||(b.maskingadjust_short=e.masking_adj_short);0!=a?b.ATHlower=-e.ath_lower/10:0<Math.abs(10*-b.ATHlower-0)||(b.ATHlower=-e.ath_lower/10);0!=a?b.ATHcurve=e.ath_curve:0<Math.abs(b.ATHcurve- -1)||(b.ATHcurve=e.ath_curve);0!=a?b.athaa_sensitivity=e.ath_sensitivity:0<Math.abs(b.athaa_sensitivity- +-1)||(b.athaa_sensitivity=e.ath_sensitivity);0<e.interch&&(0!=a?b.interChRatio=e.interch:0<Math.abs(b.interChRatio- -1)||(b.interChRatio=e.interch));0<e.safejoint&&(b.exp_nspsytune|=e.safejoint);0<e.sfb21mod&&(b.exp_nspsytune|=e.sfb21mod<<20);0!=a?b.msfix=e.msfix:0<Math.abs(b.msfix- -1)||(b.msfix=e.msfix);0==a&&(b.VBR_q=g,b.VBR_q_frac=k)}function C(b,d,a){var h=B.nearestBitrateFullIndex(d);b.VBR=M.vbr_abr;b.VBR_mean_bitrate_kbps=d;b.VBR_mean_bitrate_kbps=Math.min(b.VBR_mean_bitrate_kbps,320);b.VBR_mean_bitrate_kbps= +Math.max(b.VBR_mean_bitrate_kbps,8);b.brate=b.VBR_mean_bitrate_kbps;320<b.VBR_mean_bitrate_kbps&&(b.disable_reservoir=!0);0<g[h].safejoint&&(b.exp_nspsytune|=2);0<g[h].sfscale&&(b.internal_flags.noise_shaping=2);if(0<Math.abs(g[h].nsbass)){var k=int(4*g[h].nsbass);0>k&&(k+=64);b.exp_nspsytune|=k<<2}0!=a?b.quant_comp=g[h].quant_comp:0<Math.abs(b.quant_comp- -1)||(b.quant_comp=g[h].quant_comp);0!=a?b.quant_comp_short=g[h].quant_comp_s:0<Math.abs(b.quant_comp_short- -1)||(b.quant_comp_short=g[h].quant_comp_s); +0!=a?b.msfix=g[h].nsmsfix:0<Math.abs(b.msfix- -1)||(b.msfix=g[h].nsmsfix);0!=a?b.internal_flags.nsPsy.attackthre=g[h].st_lrm:0<Math.abs(b.internal_flags.nsPsy.attackthre- -1)||(b.internal_flags.nsPsy.attackthre=g[h].st_lrm);0!=a?b.internal_flags.nsPsy.attackthre_s=g[h].st_s:0<Math.abs(b.internal_flags.nsPsy.attackthre_s- -1)||(b.internal_flags.nsPsy.attackthre_s=g[h].st_s);0!=a?b.scale=g[h].scale:0<Math.abs(b.scale- -1)||(b.scale=g[h].scale);0!=a?b.maskingadjust=g[h].masking_adj:0<Math.abs(b.maskingadjust- +0)||(b.maskingadjust=g[h].masking_adj);0<g[h].masking_adj?0!=a?b.maskingadjust_short=.9*g[h].masking_adj:0<Math.abs(b.maskingadjust_short-0)||(b.maskingadjust_short=.9*g[h].masking_adj):0!=a?b.maskingadjust_short=1.1*g[h].masking_adj:0<Math.abs(b.maskingadjust_short-0)||(b.maskingadjust_short=1.1*g[h].masking_adj);0!=a?b.ATHlower=-g[h].ath_lower/10:0<Math.abs(10*-b.ATHlower-0)||(b.ATHlower=-g[h].ath_lower/10);0!=a?b.ATHcurve=g[h].ath_curve:0<Math.abs(b.ATHcurve- -1)||(b.ATHcurve=g[h].ath_curve);0!= +a?b.interChRatio=g[h].interch:0<Math.abs(b.interChRatio- -1)||(b.interChRatio=g[h].interch);return d}var B;this.setModules=function(b){B=b};var t=[new d(0,9,9,0,5.2,125,-4.2,-6.3,4.8,1,0,0,2,21,.97),new d(1,9,9,0,5.3,125,-3.6,-5.6,4.5,1.5,0,0,2,21,1.35),new d(2,9,9,0,5.6,125,-2.2,-3.5,2.8,2,0,0,2,21,1.49),new d(3,9,9,1,5.8,130,-1.8,-2.8,2.6,3,-4,0,2,20,1.64),new d(4,9,9,1,6,135,-.7,-1.1,1.1,3.5,-8,0,2,0,1.79),new d(5,9,9,1,6.4,140,.5,.4,-7.5,4,-12,2E-4,0,0,1.95),new d(6,9,9,1,6.6,145,.67,.65,-14.7, +6.5,-19,4E-4,0,0,2.3),new d(7,9,9,1,6.6,145,.8,.75,-19.7,8,-22,6E-4,0,0,2.7),new d(8,9,9,1,6.6,145,1.2,1.15,-27.5,10,-23,7E-4,0,0,0),new d(9,9,9,1,6.6,145,1.6,1.6,-36,11,-25,8E-4,0,0,0),new d(10,9,9,1,6.6,145,2,2,-36,12,-25,8E-4,0,0,0)],r=[new d(0,9,9,0,4.2,25,-7,-4,7.5,1,0,0,2,26,.97),new d(1,9,9,0,4.2,25,-5.6,-3.6,4.5,1.5,0,0,2,21,1.35),new d(2,9,9,0,4.2,25,-4.4,-1.8,2,2,0,0,2,18,1.49),new d(3,9,9,1,4.2,25,-3.4,-1.25,1.1,3,-4,0,2,15,1.64),new d(4,9,9,1,4.2,25,-2.2,.1,0,3.5,-8,0,2,0,1.79),new d(5, +9,9,1,4.2,25,-1,1.65,-7.7,4,-12,2E-4,0,0,1.95),new d(6,9,9,1,4.2,25,-0,2.47,-7.7,6.5,-19,4E-4,0,0,2),new d(7,9,9,1,4.2,25,.5,2,-14.5,8,-22,6E-4,0,0,2),new d(8,9,9,1,4.2,25,1,2.4,-22,10,-23,7E-4,0,0,2),new d(9,9,9,1,4.2,25,1.5,2.95,-30,11,-25,8E-4,0,0,2),new d(10,9,9,1,4.2,25,2,2.95,-36,12,-30,8E-4,0,0,2)],g=[new k(8,9,9,0,0,6.6,145,0,.95,0,-30,11,.0012,1),new k(16,9,9,0,0,6.6,145,0,.95,0,-25,11,.001,1),new k(24,9,9,0,0,6.6,145,0,.95,0,-20,11,.001,1),new k(32,9,9,0,0,6.6,145,0,.95,0,-15,11,.001,1), +new k(40,9,9,0,0,6.6,145,0,.95,0,-10,11,9E-4,1),new k(48,9,9,0,0,6.6,145,0,.95,0,-10,11,9E-4,1),new k(56,9,9,0,0,6.6,145,0,.95,0,-6,11,8E-4,1),new k(64,9,9,0,0,6.6,145,0,.95,0,-2,11,8E-4,1),new k(80,9,9,0,0,6.6,145,0,.95,0,0,8,7E-4,1),new k(96,9,9,0,2.5,6.6,145,0,.95,0,1,5.5,6E-4,1),new k(112,9,9,0,2.25,6.6,145,0,.95,0,2,4.5,5E-4,1),new k(128,9,9,0,1.95,6.4,140,0,.95,0,3,4,2E-4,1),new k(160,9,9,1,1.79,6,135,0,.95,-2,5,3.5,0,1),new k(192,9,9,1,1.49,5.6,125,0,.97,-4,7,3,0,0),new k(224,9,9,1,1.25,5.2, +125,0,.98,-6,9,2,0,0),new k(256,9,9,1,.97,5.2,125,0,1,-8,10,1,0,0),new k(320,9,9,1,.9,5.2,125,0,1,-10,12,0,0,0)];this.apply_preset=function(b,d,a){switch(d){case V.R3MIX:d=V.V3;b.VBR=M.vbr_mtrh;break;case V.MEDIUM:d=V.V4;b.VBR=M.vbr_rh;break;case V.MEDIUM_FAST:d=V.V4;b.VBR=M.vbr_mtrh;break;case V.STANDARD:d=V.V2;b.VBR=M.vbr_rh;break;case V.STANDARD_FAST:d=V.V2;b.VBR=M.vbr_mtrh;break;case V.EXTREME:d=V.V0;b.VBR=M.vbr_rh;break;case V.EXTREME_FAST:d=V.V0;b.VBR=M.vbr_mtrh;break;case V.INSANE:return d= +320,b.preset=d,C(b,d,a),b.VBR=M.vbr_off,d}b.preset=d;switch(d){case V.V9:return q(b,9,a),d;case V.V8:return q(b,8,a),d;case V.V7:return q(b,7,a),d;case V.V6:return q(b,6,a),d;case V.V5:return q(b,5,a),d;case V.V4:return q(b,4,a),d;case V.V3:return q(b,3,a),d;case V.V2:return q(b,2,a),d;case V.V1:return q(b,1,a),d;case V.V0:return q(b,0,a),d}if(8<=d&&320>=d)return C(b,d,a);b.preset=0;return d}}function O(){function d(g,b,l,a,h,k){for(;0!=h--;)l[a]=1E-10+g[b+0]*k[0]-l[a-1]*k[1]+g[b-1]*k[2]-l[a-2]*k[3]+ +g[b-2]*k[4]-l[a-3]*k[5]+g[b-3]*k[6]-l[a-4]*k[7]+g[b-4]*k[8]-l[a-5]*k[9]+g[b-5]*k[10]-l[a-6]*k[11]+g[b-6]*k[12]-l[a-7]*k[13]+g[b-7]*k[14]-l[a-8]*k[15]+g[b-8]*k[16]-l[a-9]*k[17]+g[b-9]*k[18]-l[a-10]*k[19]+g[b-10]*k[20],++a,++b}function k(d,b,l,a,h,k){for(;0!=h--;)l[a]=d[b+0]*k[0]-l[a-1]*k[1]+d[b-1]*k[2]-l[a-2]*k[3]+d[b-2]*k[4],++a,++b}function q(d){return d*d}var C=O.RMS_WINDOW_TIME_NUMERATOR,B=O.RMS_WINDOW_TIME_DENOMINATOR,t=[[.038575994352,-3.84664617118067,-.02160367184185,7.81501653005538,-.00123395316851, +-11.34170355132042,-9.291677959E-5,13.05504219327545,-.01655260341619,-12.28759895145294,.02161526843274,9.4829380631979,-.02074045215285,-5.87257861775999,.00594298065125,2.75465861874613,.00306428023191,-.86984376593551,1.2025322027E-4,.13919314567432,.00288463683916],[.0541865640643,-3.47845948550071,-.02911007808948,6.36317777566148,-.00848709379851,-8.54751527471874,-.00851165645469,9.4769360780128,-.00834990904936,-8.81498681370155,.02245293253339,6.85401540936998,-.02596338512915,-4.39470996079559, +.01624864962975,2.19611684890774,-.00240879051584,-.75104302451432,.00674613682247,.13149317958808,-.00187763777362],[.15457299681924,-2.37898834973084,-.09331049056315,2.84868151156327,-.06247880153653,-2.64577170229825,.02163541888798,2.23697657451713,-.05588393329856,-1.67148153367602,.04781476674921,1.00595954808547,.00222312597743,-.45953458054983,.03174092540049,.16378164858596,-.01390589421898,-.05032077717131,.00651420667831,.0234789740702,-.00881362733839],[.30296907319327,-1.61273165137247, +-.22613988682123,1.0797749225997,-.08587323730772,-.2565625775407,.03282930172664,-.1627671912044,-.00915702933434,-.22638893773906,-.02364141202522,.39120800788284,-.00584456039913,-.22138138954925,.06276101321749,.04500235387352,-8.28086748E-6,.02005851806501,.00205861885564,.00302439095741,-.02950134983287],[.33642304856132,-1.49858979367799,-.2557224142557,.87350271418188,-.11828570177555,.12205022308084,.11921148675203,-.80774944671438,-.07834489609479,.47854794562326,-.0046997791438,-.12453458140019, +-.0058950022444,-.04067510197014,.05724228140351,.08333755284107,.00832043980773,-.04237348025746,-.0163538138454,.02977207319925,-.0176017656815],[.4491525660845,-.62820619233671,-.14351757464547,.29661783706366,-.22784394429749,-.372563729424,-.01419140100551,.00213767857124,.04078262797139,-.42029820170918,-.12398163381748,.22199650564824,.04097565135648,.00613424350682,.10478503600251,.06747620744683,-.01863887810927,.05784820375801,-.03193428438915,.03222754072173,.00541907748707],[.56619470757641, +-1.04800335126349,-.75464456939302,.29156311971249,.1624213774223,-.26806001042947,.16744243493672,.00819999645858,-.18901604199609,.45054734505008,.3093178284183,-.33032403314006,-.27562961986224,.0673936833311,.00647310677246,-.04784254229033,.08647503780351,.01639907836189,-.0378898455484,.01807364323573,-.00588215443421],[.58100494960553,-.51035327095184,-.53174909058578,-.31863563325245,-.14289799034253,-.20256413484477,.17520704835522,.1472815413433,.02377945217615,.38952639978999,.15558449135573, +-.23313271880868,-.25344790059353,-.05246019024463,.01628462406333,-.02505961724053,.06920467763959,.02442357316099,-.03721611395801,.01818801111503,-.00749618797172],[.53648789255105,-.2504987195602,-.42163034350696,-.43193942311114,-.00275953611929,-.03424681017675,.04267842219415,-.04678328784242,-.10214864179676,.26408300200955,.14590772289388,.15113130533216,-.02459864859345,-.17556493366449,-.11202315195388,-.18823009262115,-.04060034127,.05477720428674,.0478866554818,.0470440968812,-.02217936801134]], +r=[[.98621192462708,-1.97223372919527,-1.97242384925416,.97261396931306,.98621192462708],[.98500175787242,-1.96977855582618,-1.97000351574484,.9702284756635,.98500175787242],[.97938932735214,-1.95835380975398,-1.95877865470428,.95920349965459,.97938932735214],[.97531843204928,-1.95002759149878,-1.95063686409857,.95124613669835,.97531843204928],[.97316523498161,-1.94561023566527,-1.94633046996323,.94705070426118,.97316523498161],[.96454515552826,-1.92783286977036,-1.92909031105652,.93034775234268, +.96454515552826],[.96009142950541,-1.91858953033784,-1.92018285901082,.92177618768381,.96009142950541],[.95856916599601,-1.9154210807478,-1.91713833199203,.91885558323625,.95856916599601],[.94597685600279,-1.88903307939452,-1.89195371200558,.89487434461664,.94597685600279]];this.InitGainAnalysis=function(d,b){var l;a:{for(l=0;l<MAX_ORDER;l++)d.linprebuf[l]=d.lstepbuf[l]=d.loutbuf[l]=d.rinprebuf[l]=d.rstepbuf[l]=d.routbuf[l]=0;switch(0|b){case 48E3:d.reqindex=0;break;case 44100:d.reqindex=1;break; +case 32E3:d.reqindex=2;break;case 24E3:d.reqindex=3;break;case 22050:d.reqindex=4;break;case 16E3:d.reqindex=5;break;case 12E3:d.reqindex=6;break;case 11025:d.reqindex=7;break;case 8E3:d.reqindex=8;break;default:l=INIT_GAIN_ANALYSIS_ERROR;break a}d.sampleWindow=0|(b*C+B-1)/B;d.lsum=0;d.rsum=0;d.totsamp=0;Ia.ill(d.A,0);l=INIT_GAIN_ANALYSIS_OK}if(l!=INIT_GAIN_ANALYSIS_OK)return INIT_GAIN_ANALYSIS_ERROR;d.linpre=MAX_ORDER;d.rinpre=MAX_ORDER;d.lstep=MAX_ORDER;d.rstep=MAX_ORDER;d.lout=MAX_ORDER;d.rout= +MAX_ORDER;Ia.fill(d.B,0);return INIT_GAIN_ANALYSIS_OK};this.AnalyzeSamples=function(g,b,l,a,h,D,e){var n,c,f,E,z,w;if(0==D)return GAIN_ANALYSIS_OK;w=0;E=D;switch(e){case 1:a=b;h=l;break;case 2:break;default:return GAIN_ANALYSIS_ERROR}D<MAX_ORDER?(K.arraycopy(b,l,g.linprebuf,MAX_ORDER,D),K.arraycopy(a,h,g.rinprebuf,MAX_ORDER,D)):(K.arraycopy(b,l,g.linprebuf,MAX_ORDER,MAX_ORDER),K.arraycopy(a,h,g.rinprebuf,MAX_ORDER,MAX_ORDER));for(;0<E;){z=E>g.sampleWindow-g.totsamp?g.sampleWindow-g.totsamp:E;w<MAX_ORDER? +(e=g.linpre+w,n=g.linprebuf,c=g.rinpre+w,f=g.rinprebuf,z>MAX_ORDER-w&&(z=MAX_ORDER-w)):(e=l+w,n=b,c=h+w,f=a);d(n,e,g.lstepbuf,g.lstep+g.totsamp,z,t[g.reqindex]);d(f,c,g.rstepbuf,g.rstep+g.totsamp,z,t[g.reqindex]);k(g.lstepbuf,g.lstep+g.totsamp,g.loutbuf,g.lout+g.totsamp,z,r[g.reqindex]);k(g.rstepbuf,g.rstep+g.totsamp,g.routbuf,g.rout+g.totsamp,z,r[g.reqindex]);e=g.lout+g.totsamp;n=g.loutbuf;c=g.rout+g.totsamp;f=g.routbuf;for(var A=z%8;0!=A--;)g.lsum+=q(n[e++]),g.rsum+=q(f[c++]);for(A=z/8;0!=A--;)g.lsum+= +q(n[e+0])+q(n[e+1])+q(n[e+2])+q(n[e+3])+q(n[e+4])+q(n[e+5])+q(n[e+6])+q(n[e+7]),e+=8,g.rsum+=q(f[c+0])+q(f[c+1])+q(f[c+2])+q(f[c+3])+q(f[c+4])+q(f[c+5])+q(f[c+6])+q(f[c+7]),c+=8;E-=z;w+=z;g.totsamp+=z;g.totsamp==g.sampleWindow&&(e=10*O.STEPS_per_dB*Math.log10((g.lsum+g.rsum)/g.totsamp*.5+1E-37),e=0>=e?0:0|e,e>=g.A.length&&(e=g.A.length-1),g.A[e]++,g.lsum=g.rsum=0,K.arraycopy(g.loutbuf,g.totsamp,g.loutbuf,0,MAX_ORDER),K.arraycopy(g.routbuf,g.totsamp,g.routbuf,0,MAX_ORDER),K.arraycopy(g.lstepbuf,g.totsamp, +g.lstepbuf,0,MAX_ORDER),K.arraycopy(g.rstepbuf,g.totsamp,g.rstepbuf,0,MAX_ORDER),g.totsamp=0);if(g.totsamp>g.sampleWindow)return GAIN_ANALYSIS_ERROR}D<MAX_ORDER?(K.arraycopy(g.linprebuf,D,g.linprebuf,0,MAX_ORDER-D),K.arraycopy(g.rinprebuf,D,g.rinprebuf,0,MAX_ORDER-D),K.arraycopy(b,l,g.linprebuf,MAX_ORDER-D,D),K.arraycopy(a,h,g.rinprebuf,MAX_ORDER-D,D)):(K.arraycopy(b,l+D-MAX_ORDER,g.linprebuf,0,MAX_ORDER),K.arraycopy(a,h+D-MAX_ORDER,g.rinprebuf,0,MAX_ORDER));return GAIN_ANALYSIS_OK};this.GetTitleGain= +function(d){var b;b=d.A;var l=d.A.length,a,h=0;for(a=0;a<l;a++)h+=b[a];if(0==h)b=GAIN_NOT_ENOUGH_SAMPLES;else{h=0|Math.ceil(h*(1-.95));for(a=l;0<a--&&!(0>=(h-=b[a])););b=64.82-a/O.STEPS_per_dB}for(l=0;l<d.A.length;l++)d.B[l]+=d.A[l],d.A[l]=0;for(l=0;l<MAX_ORDER;l++)d.linprebuf[l]=d.lstepbuf[l]=d.loutbuf[l]=d.rinprebuf[l]=d.rstepbuf[l]=d.routbuf[l]=0;d.totsamp=0;d.lsum=d.rsum=0;return b}}function tb(){function J(a){this.bits=0|a}function k(a,c,b,d,e,p){c=.5946/c;for(a>>=1;0!=a--;)e[p++]=c>b[d++]?0: +1,e[p++]=c>b[d++]?0:1}function q(a,c,b,d,e,p){a>>=1;var m=a%2;for(a>>=1;0!=a--;){var f,n,g,u,h,l,k;f=b[d++]*c;n=b[d++]*c;h=0|f;g=b[d++]*c;l=0|n;u=b[d++]*c;k=0|g;f+=t.adj43[h];h=0|u;n+=t.adj43[l];e[p++]=0|f;g+=t.adj43[k];e[p++]=0|n;u+=t.adj43[h];e[p++]=0|g;e[p++]=0|u}0!=m&&(f=b[d++]*c,n=b[d++]*c,f+=t.adj43[0|f],n+=t.adj43[0|n],e[p++]=0|f,e[p++]=0|n)}function C(a,c,b,d){var e,p=c,m=e=0;do{var f=a[p++],n=a[p++];e<f&&(e=f);m<n&&(m=n)}while(p<b);e<m&&(e=m);switch(e){case 0:return e;case 1:p=c;c=0;e=r.ht[1].hlen; +do m=2*a[p+0]+a[p+1],p+=2,c+=e[m];while(p<b);d.bits+=c;return 1;case 2:case 3:p=c;c=g[e-1];e=0;m=r.ht[c].xlen;f=2==c?r.table23:r.table56;do n=a[p+0]*m+a[p+1],p+=2,e+=f[n];while(p<b);a=e&65535;e>>=16;e>a&&(e=a,c++);d.bits+=e;return c;case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:p=c;c=g[e-1];var f=m=e=0,n=r.ht[c].xlen,h=r.ht[c].hlen,u=r.ht[c+1].hlen,l=r.ht[c+2].hlen;do{var k=a[p+0]*n+a[p+1],p=p+2;e+=h[k];m+=u[k];f+=l[k]}while(p<b);a=c;e>m&&(e=m,a++);e>f&& +(e=f,a=c+2);d.bits+=e;return a;default:if(e>ma.IXMAX_VAL)return d.bits=ma.LARGE_BITS,-1;e-=15;for(p=24;32>p&&!(r.ht[p].linmax>=e);p++);for(m=p-8;24>m&&!(r.ht[m].linmax>=e);m++);e=m;f=65536*r.ht[e].xlen+r.ht[p].xlen;m=0;do n=a[c++],h=a[c++],0!=n&&(14<n&&(n=15,m+=f),n*=16),0!=h&&(14<h&&(h=15,m+=f),n+=h),m+=r.largetbl[n];while(c<b);a=m&65535;m>>=16;m>a&&(m=a,e=p);d.bits+=m;return e}}function B(a,c,e,b,f,p,m,n){for(var y=c.big_values,g=2;g<d.SBMAX_l+1;g++){var h=a.scalefac_band.l[g];if(h>=y)break;var l= +f[g-2]+c.count1bits;if(e.part2_3_length<=l)break;l=new J(l);h=C(b,h,y,l);l=l.bits;e.part2_3_length<=l||(e.assign(c),e.part2_3_length=l,e.region0_count=p[g-2],e.region1_count=g-2-p[g-2],e.table_select[0]=m[g-2],e.table_select[1]=n[g-2],e.table_select[2]=h)}}var t=null;this.qupvt=null;this.setModules=function(a){t=this.qupvt=a};var ta=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,1],[1,1],[1,1],[1,2],[2,2],[2,3],[2,3],[3,4],[3,4],[3,4],[4,5],[4,5],[4,6],[5,6],[5,6],[5,7],[6,7],[6,7]],g=[1,2,5,7,7,10,10,13,13,13, +13,13,13,13,13];this.noquant_count_bits=function(a,c,e){var b=c.l3_enc,f=Math.min(576,c.max_nonzero_coeff+2>>1<<1);null!=e&&(e.sfb_count1=0);for(;1<f&&0==(b[f-1]|b[f-2]);f-=2);c.count1=f;for(var p=0,m=0;3<f;f-=4){var n;if(1<((b[f-1]|b[f-2]|b[f-3]|b[f-4])&2147483647))break;n=2*(2*(2*b[f-4]+b[f-3])+b[f-2])+b[f-1];p+=r.t32l[n];m+=r.t33l[n]}n=p;c.count1table_select=0;p>m&&(n=m,c.count1table_select=1);c.count1bits=n;c.big_values=f;if(0==f)return n;c.block_type==d.SHORT_TYPE?(p=3*a.scalefac_band.s[3],p> +c.big_values&&(p=c.big_values),m=c.big_values):c.block_type==d.NORM_TYPE?(p=c.region0_count=a.bv_scf[f-2],m=c.region1_count=a.bv_scf[f-1],m=a.scalefac_band.l[p+m+2],p=a.scalefac_band.l[p+1],m<f&&(n=new J(n),c.table_select[2]=C(b,m,f,n),n=n.bits)):(c.region0_count=7,c.region1_count=d.SBMAX_l-1-7-1,p=a.scalefac_band.l[8],m=f,p>m&&(p=m));p=Math.min(p,f);m=Math.min(m,f);0<p&&(n=new J(n),c.table_select[0]=C(b,0,p,n),n=n.bits);p<m&&(n=new J(n),c.table_select[1]=C(b,p,m,n),n=n.bits);2==a.use_best_huffman&& +(c.part2_3_length=n,best_huffman_divide(a,c),n=c.part2_3_length);if(null!=e&&c.block_type==d.NORM_TYPE){for(b=0;a.scalefac_band.l[b]<c.big_values;)b++;e.sfb_count1=b}return n};this.count_bits=function(a,c,e,b){var f=e.l3_enc,n=ma.IXMAX_VAL/t.IPOW20(e.global_gain);if(e.xrpow_max>n)return ma.LARGE_BITS;var n=t.IPOW20(e.global_gain),m,g,y=0,h,u=0,l=0,la=0,F=0,G=f,I=0,T=c,U=0;h=null!=b&&e.global_gain==b.global_gain;g=e.block_type==d.SHORT_TYPE?38:21;for(m=0;m<=g;m++){var D=-1;if(h||e.block_type==d.NORM_TYPE)D= +e.global_gain-(e.scalefac[m]+(0!=e.preflag?t.pretab[m]:0)<<e.scalefac_scale+1)-8*e.subblock_gain[e.window[m]];if(h&&b.step[m]==D)0!=u&&(q(u,n,T,U,G,I),u=0),0!=l&&(k(l,n,T,U,G,I),l=0);else{var ia=e.width[m];y+e.width[m]>e.max_nonzero_coeff&&(m=e.max_nonzero_coeff-y+1,Ia.fill(f,e.max_nonzero_coeff,576,0),ia=m,0>ia&&(ia=0),m=g+1);0==u&&0==l&&(G=f,I=F,T=c,U=la);null!=b&&0<b.sfb_count1&&m>=b.sfb_count1&&0<b.step[m]&&D>=b.step[m]?(0!=u&&(q(u,n,T,U,G,I),u=0,G=f,I=F,T=c,U=la),l+=ia):(0!=l&&(k(l,n,T,U,G,I), +l=0,G=f,I=F,T=c,U=la),u+=ia);if(0>=ia){0!=l&&(k(l,n,T,U,G,I),l=0);0!=u&&(q(u,n,T,U,G,I),u=0);break}}m<=g&&(F+=e.width[m],la+=e.width[m],y+=e.width[m])}0!=u&&q(u,n,T,U,G,I);0!=l&&k(l,n,T,U,G,I);if(0!=(a.substep_shaping&2))for(n=0,g=.634521682242439/t.IPOW20(e.global_gain+e.scalefac_scale),y=0;y<e.sfbmax;y++)if(h=e.width[y],0==a.pseudohalf[y])n+=h;else for(u=n,n+=h;u<n;++u)f[u]=c[u]>=g?f[u]:0;return this.noquant_count_bits(a,e,b)};this.best_huffman_divide=function(a,c){var e=new Ab,b=c.l3_enc,f=Y(23), +n=Y(23),m=Y(23),g=Y(23);if(c.block_type!=d.SHORT_TYPE||1!=a.mode_gr){e.assign(c);if(c.block_type==d.NORM_TYPE){for(var y=c.big_values,h=0;22>=h;h++)f[h]=ma.LARGE_BITS;for(h=0;16>h;h++){var l=a.scalefac_band.l[h+1];if(l>=y)break;for(var k=0,q=new J(k),F=C(b,0,l,q),k=q.bits,G=0;8>G;G++){var I=a.scalefac_band.l[h+G+2];if(I>=y)break;q=k;q=new J(q);I=C(b,l,I,q);q=q.bits;f[h+G]>q&&(f[h+G]=q,n[h+G]=h,m[h+G]=F,g[h+G]=I)}}B(a,e,c,b,f,n,m,g)}y=e.big_values;if(!(0==y||1<(b[y-2]|b[y-1])||(y=c.count1+2,576<y))){e.assign(c); +e.count1=y;for(l=h=0;y>e.big_values;y-=4)k=2*(2*(2*b[y-4]+b[y-3])+b[y-2])+b[y-1],h+=r.t32l[k],l+=r.t33l[k];e.big_values=y;e.count1table_select=0;h>l&&(h=l,e.count1table_select=1);e.count1bits=h;e.block_type==d.NORM_TYPE?B(a,e,c,b,f,n,m,g):(e.part2_3_length=h,h=a.scalefac_band.l[8],h>y&&(h=y),0<h&&(f=new J(e.part2_3_length),e.table_select[0]=C(b,0,h,f),e.part2_3_length=f.bits),y>h&&(f=new J(e.part2_3_length),e.table_select[1]=C(b,h,y,f),e.part2_3_length=f.bits),c.part2_3_length>e.part2_3_length&&c.assign(e))}}}; +var b=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],l=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],a=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],h=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];tb.slen1_tab=a;tb.slen2_tab=h;this.best_scalefac_store=function(c,e,f,n){var g=n.tt[e][f],p,m,x,y=0;for(p=m=0;p<g.sfbmax;p++){x=g.width[p];m+=x;for(x=-x;0>x&&0==g.l3_enc[x+m];x++);0==x&&(g.scalefac[p]=y=-2)}if(0==g.scalefac_scale&&0==g.preflag){for(p=m=0;p<g.sfbmax;p++)0<g.scalefac[p]&&(m|=g.scalefac[p]);if(0==(m&1)&&0!=m){for(p=0;p<g.sfbmax;p++)0<g.scalefac[p]&& +(g.scalefac[p]>>=1);g.scalefac_scale=y=1}}if(0==g.preflag&&g.block_type!=d.SHORT_TYPE&&2==c.mode_gr){for(p=11;p<d.SBPSY_l&&!(g.scalefac[p]<t.pretab[p]&&-2!=g.scalefac[p]);p++);if(p==d.SBPSY_l){for(p=11;p<d.SBPSY_l;p++)0<g.scalefac[p]&&(g.scalefac[p]-=t.pretab[p]);g.preflag=y=1}}for(p=0;4>p;p++)n.scfsi[f][p]=0;if(2==c.mode_gr&&1==e&&n.tt[0][f].block_type!=d.SHORT_TYPE&&n.tt[1][f].block_type!=d.SHORT_TYPE){e=n.tt[1][f];m=n.tt[0][f];for(y=0;y<r.scfsi_band.length-1;y++){for(p=r.scfsi_band[y];p<r.scfsi_band[y+ +1]&&!(m.scalefac[p]!=e.scalefac[p]&&0<=e.scalefac[p]);p++);if(p==r.scfsi_band[y+1]){for(p=r.scfsi_band[y];p<r.scfsi_band[y+1];p++)e.scalefac[p]=-1;n.scfsi[f][y]=1}}for(p=n=f=0;11>p;p++)-1!=e.scalefac[p]&&(n++,f<e.scalefac[p]&&(f=e.scalefac[p]));for(x=m=0;p<d.SBPSY_l;p++)-1!=e.scalefac[p]&&(x++,m<e.scalefac[p]&&(m=e.scalefac[p]));for(y=0;16>y;y++)f<b[y]&&m<l[y]&&(p=a[y]*n+h[y]*x,e.part2_length>p&&(e.part2_length=p,e.scalefac_compress=y));y=0}for(p=0;p<g.sfbmax;p++)-2==g.scalefac[p]&&(g.scalefac[p]= +0);0!=y&&(2==c.mode_gr?this.scale_bitcount(g):this.scale_bitcount_lsf(c,g))};var D=[0,18,36,54,54,36,54,72,54,72,90,72,90,108,108,126],e=[0,18,36,54,51,35,53,71,52,70,88,69,87,105,104,122],n=[0,10,20,30,33,21,31,41,32,42,52,43,53,63,64,74];this.scale_bitcount=function(a){var c,f=0,g=0,h,p=a.scalefac;if(a.block_type==d.SHORT_TYPE)h=D,0!=a.mixed_block_flag&&(h=e);else if(h=n,0==a.preflag){for(c=11;c<d.SBPSY_l&&!(p[c]<t.pretab[c]);c++);if(c==d.SBPSY_l)for(a.preflag=1,c=11;c<d.SBPSY_l;c++)p[c]-=t.pretab[c]}for(c= +0;c<a.sfbdivide;c++)f<p[c]&&(f=p[c]);for(;c<a.sfbmax;c++)g<p[c]&&(g=p[c]);a.part2_length=ma.LARGE_BITS;for(c=0;16>c;c++)f<b[c]&&g<l[c]&&a.part2_length>h[c]&&(a.part2_length=h[c],a.scalefac_compress=c);return a.part2_length==ma.LARGE_BITS};var c=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(a,e){var b,n,g,p,m,h,y,l=Y(4),u=e.scalefac;b=0!=e.preflag?2:0;for(h=0;4>h;h++)l[h]=0;if(e.block_type==d.SHORT_TYPE){n=1;var k=t.nr_of_sfb_block[b][n];for(g= +y=0;4>g;g++)for(p=k[g]/3,h=0;h<p;h++,y++)for(m=0;3>m;m++)u[3*y+m]>l[g]&&(l[g]=u[3*y+m])}else for(n=0,k=t.nr_of_sfb_block[b][n],g=y=0;4>g;g++)for(p=k[g],h=0;h<p;h++,y++)u[y]>l[g]&&(l[g]=u[y]);p=!1;for(g=0;4>g;g++)l[g]>c[b][g]&&(p=!0);if(!p){e.sfb_partition_table=t.nr_of_sfb_block[b][n];for(g=0;4>g;g++)e.slen[g]=f[l[g]];n=e.slen[0];g=e.slen[1];l=e.slen[2];m=e.slen[3];switch(b){case 0:e.scalefac_compress=(5*n+g<<4)+(l<<2)+m;break;case 1:e.scalefac_compress=400+(5*n+g<<2)+l;break;case 2:e.scalefac_compress= +500+3*n+g;break;default:K.err.printf("intensity stereo not implemented yet\n")}}if(!p)for(g=e.part2_length=0;4>g;g++)e.part2_length+=e.slen[g]*e.sfb_partition_table[g];return p};var f=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(a){for(var c=2;576>=c;c+=2){for(var e=0,b;a.scalefac_band.l[++e]<c;);for(b=ta[e][0];a.scalefac_band.l[b+1]>c;)b--;0>b&&(b=ta[e][0]);a.bv_scf[c-2]=b;for(b=ta[e][1];a.scalefac_band.l[b+a.bv_scf[c-2]+2]>c;)b--;0>b&&(b=ta[e][1]);a.bv_scf[c-1]=b}}}function Hc(){var d; +this.setModules=function(k){d=k};this.ResvFrameBegin=function(k,q){var C=k.internal_flags,B,t=C.l3_side,r=d.getframebits(k);q.bits=(r-8*C.sideinfo_len)/C.mode_gr;var g=2048*C.mode_gr-8;320<k.brate?B=8*int(1E3*k.brate/(k.out_samplerate/1152)/8+.5):(B=11520,k.strict_ISO&&(B=8*int(32E4/(k.out_samplerate/1152)/8+.5)));C.ResvMax=B-r;C.ResvMax>g&&(C.ResvMax=g);if(0>C.ResvMax||k.disable_reservoir)C.ResvMax=0;r=q.bits*C.mode_gr+Math.min(C.ResvSize,C.ResvMax);r>B&&(r=B);t.resvDrain_pre=0;null!=C.pinfo&&(C.pinfo.mean_bits= +q.bits/2,C.pinfo.resvsize=C.ResvSize);return r};this.ResvMaxBits=function(d,q,J,B){var t=d.internal_flags,r=t.ResvSize,g=t.ResvMax;0!=B&&(r+=q);0!=(t.substep_shaping&1)&&(g*=.9);J.bits=q;10*r>9*g?(B=r-9*g/10,J.bits+=B,t.substep_shaping|=128):(B=0,t.substep_shaping&=127,d.disable_reservoir||0!=(t.substep_shaping&1)||(J.bits-=.1*q));d=r<6*t.ResvMax/10?r:6*t.ResvMax/10;d-=B;0>d&&(d=0);return d};this.ResvAdjust=function(d,q){d.ResvSize-=q.part2_3_length+q.part2_length};this.ResvFrameEnd=function(d,q){var J, +B=d.l3_side;d.ResvSize+=q*d.mode_gr;var t=0;B.resvDrain_post=0;B.resvDrain_pre=0;0!=(J=d.ResvSize%8)&&(t+=J);J=d.ResvSize-t-d.ResvMax;0<J&&(t+=J);J=Math.min(8*B.main_data_begin,t)/8;B.resvDrain_pre+=8*J;t-=8*J;d.ResvSize-=8*J;B.main_data_begin-=J;B.resvDrain_post+=t;d.ResvSize-=t}}function ua(){function J(a,e,b){for(;0<b;){var d;0==z&&(z=8,E++,a.header[a.w_ptr].write_timing==f&&(d=a,K.arraycopy(d.header[d.w_ptr].buf,0,c,E,d.sideinfo_len),E+=d.sideinfo_len,f+=8*d.sideinfo_len,d.w_ptr=d.w_ptr+1&da.MAX_HEADER_BUF- +1),c[E]=0);d=Math.min(b,z);b-=d;z-=d;c[E]|=e>>b<<z;f+=d}}function k(a,c){var b=a.internal_flags,d;8<=c&&(J(b,76,8),c-=8);8<=c&&(J(b,65,8),c-=8);8<=c&&(J(b,77,8),c-=8);8<=c&&(J(b,69,8),c-=8);if(32<=c){var m=e.getLameShortVersion();if(32<=c)for(d=0;d<m.length&&8<=c;++d)c-=8,J(b,m.charAt(d),8)}for(;1<=c;--c)J(b,b.ancillary_flag,1),b.ancillary_flag^=a.disable_reservoir?0:1}function q(a,c,e){for(var b=a.header[a.h_ptr].ptr;0<e;){var m=Math.min(e,8-(b&7));e-=m;a.header[a.h_ptr].buf[b>>3]|=c>>e<<8-(b&7)- +m;b+=m}a.header[a.h_ptr].ptr=b}function C(a,c){a<<=8;for(var e=0;8>e;e++)a<<=1,c<<=1,0!=((c^a)&65536)&&(c^=32773);return c}function B(a,c){var e=r.ht[c.count1table_select+32],b,m=0,d=c.big_values,f=c.big_values;for(b=(c.count1-c.big_values)/4;0<b;--b){var n=0,g=0,h;h=c.l3_enc[d+0];0!=h&&(g+=8,0>c.xr[f+0]&&n++);h=c.l3_enc[d+1];0!=h&&(g+=4,n*=2,0>c.xr[f+1]&&n++);h=c.l3_enc[d+2];0!=h&&(g+=2,n*=2,0>c.xr[f+2]&&n++);h=c.l3_enc[d+3];0!=h&&(g++,n*=2,0>c.xr[f+3]&&n++);d+=4;f+=4;J(a,n+e.table[g],e.hlen[g]); +m+=e.hlen[g]}return m}function t(c,a,e,b,m){var d=r.ht[a],f=0;if(0==a)return f;for(;e<b;e+=2){var n=0,g=0,h=d.xlen,l=d.xlen,k=0,G=m.l3_enc[e],I=m.l3_enc[e+1];0!=G&&(0>m.xr[e]&&k++,n--);15<a&&(14<G&&(k|=G-15<<1,g=h,G=15),14<I&&(l=I-15,k<<=h,k|=l,g+=h,I=15),l=16);0!=I&&(k<<=1,0>m.xr[e+1]&&k++,n--);G=G*l+I;g-=n;n+=d.hlen[G];J(c,d.table[G],n);J(c,k,g);f+=n+g}return f}function H(c,a){var e=3*c.scalefac_band.s[3];e>a.big_values&&(e=a.big_values);var b=t(c,a.table_select[0],0,e,a);return b+=t(c,a.table_select[1], +e,a.big_values,a)}function g(c,a){var e,b,m,d;e=a.big_values;b=a.region0_count+1;m=c.scalefac_band.l[b];b+=a.region1_count+1;d=c.scalefac_band.l[b];m>e&&(m=e);d>e&&(d=e);b=t(c,a.table_select[0],0,m,a);b+=t(c,a.table_select[1],m,d,a);return b+=t(c,a.table_select[2],d,e,a)}function b(){this.total=0}function l(c,e){var b=c.internal_flags,d,m,n,g;g=b.w_ptr;n=b.h_ptr-1;-1==n&&(n=da.MAX_HEADER_BUF-1);d=b.header[n].write_timing-f;e.total=d;0<=d&&(m=1+n-g,n<g&&(m=1+n-g+da.MAX_HEADER_BUF),d-=8*m*b.sideinfo_len); +b=a.getframebits(c);d+=b;e.total+=b;e.total=0!=e.total%8?1+e.total/8:e.total/8;e.total+=E+1;0>d&&K.err.println("strange error flushing buffer ... \n");return d}var a=this,h=null,D=null,e=null,n=null;this.setModules=function(a,c,b,d){h=a;D=c;e=b;n=d};var c=null,f=0,E=0,z=0;this.getframebits=function(a){var c=a.internal_flags;return 8*(0|72E3*(a.version+1)*(0!=c.bitrate_index?r.bitrate_table[a.version][c.bitrate_index]:a.brate)/a.out_samplerate+c.padding)};this.CRC_writeheader=function(a,c){var e;e= +C(c[2]&255,65535);e=C(c[3]&255,e);for(var b=6;b<a.sideinfo_len;b++)e=C(c[b]&255,e);c[4]=byte(e>>8);c[5]=byte(e&255)};this.flush_bitstream=function(c){var a=c.internal_flags,e,d;e=a.l3_side;0>(d=l(c,new b))||(k(c,d),a.ResvSize=0,e.main_data_begin=0,a.findReplayGain&&(e=h.GetTitleGain(a.rgdata),a.RadioGain=Math.floor(10*e+.5)|0),a.findPeakSample&&(a.noclipGainChange=Math.ceil(200*Math.log10(a.PeakSample/32767))|0,0<a.noclipGainChange?EQ(c.scale,1)||EQ(c.scale,0)?a.noclipScale=Math.floor(32767/a.PeakSample* +100)/100:a.noclipScale=-1:a.noclipScale=-1))};this.add_dummy_byte=function(a,e,b){a=a.internal_flags;for(var d;0<b--;){d=e;for(var m=8;0<m;){var n;0==z&&(z=8,E++,c[E]=0);n=Math.min(m,z);m-=n;z-=n;c[E]|=d>>m<<z;f+=n}for(d=0;d<da.MAX_HEADER_BUF;++d)a.header[d].write_timing+=8}};this.format_bitstream=function(a){var c=a.internal_flags,e;e=c.l3_side;var n=this.getframebits(a);k(a,e.resvDrain_pre);var m=a.internal_flags,h,y,E;h=m.l3_side;m.header[m.h_ptr].ptr=0;Ia.fill(m.header[m.h_ptr].buf,0,m.sideinfo_len, +0);16E3>a.out_samplerate?q(m,4094,12):q(m,4095,12);q(m,a.version,1);q(m,1,2);q(m,a.error_protection?0:1,1);q(m,m.bitrate_index,4);q(m,m.samplerate_index,2);q(m,m.padding,1);q(m,a.extension,1);q(m,a.mode.ordinal(),2);q(m,m.mode_ext,2);q(m,a.copyright,1);q(m,a.original,1);q(m,a.emphasis,2);a.error_protection&&q(m,0,16);if(1==a.version){q(m,h.main_data_begin,9);2==m.channels_out?q(m,h.private_bits,3):q(m,h.private_bits,5);for(E=0;E<m.channels_out;E++)for(y=0;4>y;y++)q(m,h.scfsi[E][y],1);for(y=0;2>y;y++)for(E= +0;E<m.channels_out;E++){var u=h.tt[y][E];q(m,u.part2_3_length+u.part2_length,12);q(m,u.big_values/2,9);q(m,u.global_gain,8);q(m,u.scalefac_compress,4);u.block_type!=d.NORM_TYPE?(q(m,1,1),q(m,u.block_type,2),q(m,u.mixed_block_flag,1),14==u.table_select[0]&&(u.table_select[0]=16),q(m,u.table_select[0],5),14==u.table_select[1]&&(u.table_select[1]=16),q(m,u.table_select[1],5),q(m,u.subblock_gain[0],3),q(m,u.subblock_gain[1],3),q(m,u.subblock_gain[2],3)):(q(m,0,1),14==u.table_select[0]&&(u.table_select[0]= +16),q(m,u.table_select[0],5),14==u.table_select[1]&&(u.table_select[1]=16),q(m,u.table_select[1],5),14==u.table_select[2]&&(u.table_select[2]=16),q(m,u.table_select[2],5),q(m,u.region0_count,4),q(m,u.region1_count,3));q(m,u.preflag,1);q(m,u.scalefac_scale,1);q(m,u.count1table_select,1)}}else for(q(m,h.main_data_begin,8),q(m,h.private_bits,m.channels_out),E=y=0;E<m.channels_out;E++)u=h.tt[y][E],q(m,u.part2_3_length+u.part2_length,12),q(m,u.big_values/2,9),q(m,u.global_gain,8),q(m,u.scalefac_compress, +9),u.block_type!=d.NORM_TYPE?(q(m,1,1),q(m,u.block_type,2),q(m,u.mixed_block_flag,1),14==u.table_select[0]&&(u.table_select[0]=16),q(m,u.table_select[0],5),14==u.table_select[1]&&(u.table_select[1]=16),q(m,u.table_select[1],5),q(m,u.subblock_gain[0],3),q(m,u.subblock_gain[1],3),q(m,u.subblock_gain[2],3)):(q(m,0,1),14==u.table_select[0]&&(u.table_select[0]=16),q(m,u.table_select[0],5),14==u.table_select[1]&&(u.table_select[1]=16),q(m,u.table_select[1],5),14==u.table_select[2]&&(u.table_select[2]=16), +q(m,u.table_select[2],5),q(m,u.region0_count,4),q(m,u.region1_count,3)),q(m,u.scalefac_scale,1),q(m,u.count1table_select,1);a.error_protection&&CRC_writeheader(m,m.header[m.h_ptr].buf);h=m.h_ptr;m.h_ptr=h+1&da.MAX_HEADER_BUF-1;m.header[m.h_ptr].write_timing=m.header[h].write_timing+n;m.h_ptr==m.w_ptr&&K.err.println("Error: MAX_HEADER_BUF too small in bitstream.c \n");var m=8*c.sideinfo_len,z=0,t=a.internal_flags,F=t.l3_side;if(1==a.version)for(h=0;2>h;h++)for(E=0;E<t.channels_out;E++){var G=F.tt[h][E], +I=tb.slen1_tab[G.scalefac_compress],T=tb.slen2_tab[G.scalefac_compress];for(y=u=0;y<G.sfbdivide;y++)-1!=G.scalefac[y]&&(J(t,G.scalefac[y],I),u+=I);for(;y<G.sfbmax;y++)-1!=G.scalefac[y]&&(J(t,G.scalefac[y],T),u+=T);u=G.block_type==d.SHORT_TYPE?u+H(t,G):u+g(t,G);u+=B(t,G);z+=u}else for(E=h=0;E<t.channels_out;E++){var G=F.tt[h][E],U=0,T=y=u=0;if(G.block_type==d.SHORT_TYPE){for(;4>T;T++)for(var D=G.sfb_partition_table[T]/3,ia=G.slen[T],I=0;I<D;I++,y++)J(t,Math.max(G.scalefac[3*y+0],0),ia),J(t,Math.max(G.scalefac[3* +y+1],0),ia),J(t,Math.max(G.scalefac[3*y+2],0),ia),U+=3*ia;u+=H(t,G)}else{for(;4>T;T++)for(D=G.sfb_partition_table[T],ia=G.slen[T],I=0;I<D;I++,y++)J(t,Math.max(G.scalefac[y],0),ia),U+=ia;u+=g(t,G)}u+=B(t,G);z+=U+u}m+=z;k(a,e.resvDrain_post);m+=e.resvDrain_post;e.main_data_begin+=(n-m)/8;l(a,new b)!=c.ResvSize&&K.err.println("Internal buffer inconsistency. flushbits <> ResvSize");8*e.main_data_begin!=c.ResvSize&&(K.err.printf("bit reservoir error: \nl3_side.main_data_begin: %d \nResvoir size: %d \nresv drain (post) %d \nresv drain (pre) %d \nheader and sideinfo: %d \ndata bits: %d \ntotal bits: %d (remainder: %d) \nbitsperframe: %d \n", +8*e.main_data_begin,c.ResvSize,e.resvDrain_post,e.resvDrain_pre,8*c.sideinfo_len,m-e.resvDrain_post-8*c.sideinfo_len,m,m%8,n),K.err.println("This is a fatal error. It has several possible causes:"),K.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),K.err.println(" 9%% Your system is overclocked"),K.err.println(" 1%% bug in LAME encoding library"),c.ResvSize=8*e.main_data_begin);if(1E9<f){for(a=0;a<da.MAX_HEADER_BUF;++a)c.header[a].write_timing-=f;f=0}return 0}; +this.copy_buffer=function(a,e,b,d,m){var f=E+1;if(0>=f)return 0;if(0!=d&&f>d)return-1;K.arraycopy(c,0,e,b,f);E=-1;z=0;if(0!=m&&(d=Y(1),d[0]=a.nMusicCRC,n.updateMusicCRC(d,e,b,f),a.nMusicCRC=d[0],0<f&&(a.VBR_seek_table.nBytesWritten+=f),a.decode_on_the_fly)){d=ra([2,1152]);m=f;for(var g=-1,l;0!=g;)if(g=D.hip_decode1_unclipped(a.hip,e,b,m,d[0],d[1]),m=0,-1==g&&(g=0),0<g){if(a.findPeakSample){for(l=0;l<g;l++)d[0][l]>a.PeakSample?a.PeakSample=d[0][l]:-d[0][l]>a.PeakSample&&(a.PeakSample=-d[0][l]);if(1< +a.channels_out)for(l=0;l<g;l++)d[1][l]>a.PeakSample?a.PeakSample=d[1][l]:-d[1][l]>a.PeakSample&&(a.PeakSample=-d[1][l])}if(a.findReplayGain&&h.AnalyzeSamples(a.rgdata,d[0],0,d[1],0,g,a.channels_out)==O.GAIN_ANALYSIS_ERROR)return-6}}return f};this.init_bit_stream_w=function(a){c=new Int8Array(V.LAME_MAXMP3BUFFER);a.h_ptr=a.w_ptr=0;a.header[a.h_ptr].write_timing=0;E=-1;f=z=0}}function ub(){function d(a,b){var c=a[b+0]&255,c=c<<8|a[b+1]&255,c=c<<8,c=c|a[b+2]&255,c=c<<8;return c|=a[b+3]&255}function k(a, +b,c){a[b+0]=c>>24&255;a[b+1]=c>>16&255;a[b+2]=c>>8&255;a[b+3]=c&255}function q(a,b,c){a[b+0]=c>>8&255;a[b+1]=c&255}function C(a,b,c){return 255&(a<<b|c&~(-1<<b))}function B(a,b){var c=a.internal_flags;b[0]=C(b[0],8,255);b[1]=C(b[1],3,7);b[1]=C(b[1],1,16E3>a.out_samplerate?0:1);b[1]=C(b[1],1,a.version);b[1]=C(b[1],2,1);b[1]=C(b[1],1,a.error_protection?0:1);b[2]=C(b[2],4,c.bitrate_index);b[2]=C(b[2],2,c.samplerate_index);b[2]=C(b[2],1,0);b[2]=C(b[2],1,a.extension);b[3]=C(b[3],2,a.mode.ordinal());b[3]= +C(b[3],2,c.mode_ext);b[3]=C(b[3],1,a.copyright);b[3]=C(b[3],1,a.original);b[3]=C(b[3],2,a.emphasis);b[0]=255;var c=b[1]&241,d;d=1==a.version?128:16E3>a.out_samplerate?32:64;a.VBR==M.vbr_off&&(d=a.brate);d=a.free_format?0:255&16*H.BitrateIndex(d,a.version,a.out_samplerate);b[1]=1==a.version?255&(c|10):255&(c|2);c=b[2]&13;b[2]=255&(d|c)}function t(a,b){return b=b>>8^D[(b^a)&255]}var H,g,b;this.setModules=function(a,d,c){H=a;g=d;b=c};var l=ub.NUMTOCENTRIES,a=ub.MAXFRAMESIZE,h=l+4+4+4+4+4+9+1+1+8+1+1+ +3+1+1+2+4+2+2,D=[0,49345,49537,320,49921,960,640,49729,50689,1728,1920,51009,1280,50625,50305,1088,52225,3264,3456,52545,3840,53185,52865,3648,2560,51905,52097,2880,51457,2496,2176,51265,55297,6336,6528,55617,6912,56257,55937,6720,7680,57025,57217,8E3,56577,7616,7296,56385,5120,54465,54657,5440,55041,6080,5760,54849,53761,4800,4992,54081,4352,53697,53377,4160,61441,12480,12672,61761,13056,62401,62081,12864,13824,63169,63361,14144,62721,13760,13440,62529,15360,64705,64897,15680,65281,16320,16E3,65089, +64001,15040,15232,64321,14592,63937,63617,14400,10240,59585,59777,10560,60161,11200,10880,59969,60929,11968,12160,61249,11520,60865,60545,11328,58369,9408,9600,58689,9984,59329,59009,9792,8704,58049,58241,9024,57601,8640,8320,57409,40961,24768,24960,41281,25344,41921,41601,25152,26112,42689,42881,26432,42241,26048,25728,42049,27648,44225,44417,27968,44801,28608,28288,44609,43521,27328,27520,43841,26880,43457,43137,26688,30720,47297,47489,31040,47873,31680,31360,47681,48641,32448,32640,48961,32E3, +48577,48257,31808,46081,29888,30080,46401,30464,47041,46721,30272,29184,45761,45953,29504,45313,29120,28800,45121,20480,37057,37249,20800,37633,21440,21120,37441,38401,22208,22400,38721,21760,38337,38017,21568,39937,23744,23936,40257,24320,40897,40577,24128,23040,39617,39809,23360,39169,22976,22656,38977,34817,18624,18816,35137,19200,35777,35457,19008,19968,36545,36737,20288,36097,19904,19584,35905,17408,33985,34177,17728,34561,18368,18048,34369,33281,17088,17280,33601,16640,33217,32897,16448];this.addVbrFrame= +function(a){var b=a.internal_flags;var c=b.VBR_seek_table;a=r.bitrate_table[a.version][b.bitrate_index];c.nVbrNumFrames++;c.sum+=a;c.seen++;if(!(c.seen<c.want)&&(c.pos<c.size&&(c.bag[c.pos]=c.sum,c.pos++,c.seen=0),c.pos==c.size)){for(a=1;a<c.size;a+=2)c.bag[a/2]=c.bag[a];c.want*=2;c.pos/=2}};this.getVbrTag=function(a){var b=new VBRTagData,c=0;b.flags=0;var f=a[c+1]>>3&1,g=a[c+2]>>2&3,h=a[c+3]>>6&3,k=a[c+2]>>4&15,k=r.bitrate_table[f][k];b.samprate=14==a[c+1]>>4?r.samplerate_table[2][g]:r.samplerate_table[f][g]; +g=c=0!=f?3!=h?c+36:c+21:3!=h?c+21:c+13;if(!(new String(a,g,4(),null)).equals("Xing")&&!(new String(a,g,4(),null)).equals("Info"))return null;c+=4;b.hId=f;g=b.flags=d(a,c);c+=4;0!=(g&1)&&(b.frames=d(a,c),c+=4);0!=(g&2)&&(b.bytes=d(a,c),c+=4);if(0!=(g&4)){if(null!=b.toc)for(h=0;h<l;h++)b.toc[h]=a[c+h];c+=l}b.vbrScale=-1;0!=(g&8)&&(b.vbrScale=d(a,c),c+=4);b.headersize=72E3*(f+1)*k/b.samprate;c+=21;f=a[c+0]<<4;f+=a[c+1]>>4;k=(a[c+1]&15)<<8;k+=a[c+2]&255;if(0>f||3E3<f)f=-1;if(0>k||3E3<k)k=-1;b.encDelay= +f;b.encPadding=k;return b};this.InitVbrTag=function(b){var d=b.internal_flags,c;c=1==b.version?128:16E3>b.out_samplerate?32:64;b.VBR==M.vbr_off&&(c=b.brate);c=72E3*(b.version+1)*c/b.out_samplerate;var f=d.sideinfo_len+h;d.VBR_seek_table.TotalFrameSize=c;if(c<f||c>a)b.bWriteVbrTag=!1;else for(d.VBR_seek_table.nVbrNumFrames=0,d.VBR_seek_table.nBytesWritten=0,d.VBR_seek_table.sum=0,d.VBR_seek_table.seen=0,d.VBR_seek_table.want=1,d.VBR_seek_table.pos=0,null==d.VBR_seek_table.bag&&(d.VBR_seek_table.bag= +new int[400],d.VBR_seek_table.size=400),c=new Int8Array(a),B(b,c),d=d.VBR_seek_table.TotalFrameSize,f=0;f<d;++f)g.add_dummy_byte(b,c[f]&255,1)};this.updateMusicCRC=function(a,b,c,d){for(var g=0;g<d;++g)a[0]=t(b[c+g],a[0])};this.getLameTagFrame=function(a,d){var c=a.internal_flags;if(!a.bWriteVbrTag||c.Class_ID!=V.LAME_ID||0>=c.VBR_seek_table.pos)return 0;if(d.length<c.VBR_seek_table.TotalFrameSize)return c.VBR_seek_table.TotalFrameSize;Ia.fill(d,0,c.VBR_seek_table.TotalFrameSize,0);B(a,d);var f=new Int8Array(l); +if(a.free_format)for(var h=1;h<l;++h)f[h]=255&255*h/100;else{var z=c.VBR_seek_table;if(!(0>=z.pos))for(h=1;h<l;++h){var w=0|Math.floor(h/l*z.pos);w>z.pos-1&&(w=z.pos-1);w=0|256*z.bag[w]/z.sum;255<w&&(w=255);f[h]=255&w}}w=c.sideinfo_len;a.error_protection&&(w-=2);d[w++]=0;d[w++]=0;d[w++]=0;d[w++]=0;k(d,w,15);w+=4;k(d,w,c.VBR_seek_table.nVbrNumFrames);w+=4;z=c.VBR_seek_table.nBytesWritten+c.VBR_seek_table.TotalFrameSize;k(d,w,0|z);w+=4;K.arraycopy(f,0,d,w,f.length);w+=f.length;a.error_protection&&g.CRC_writeheader(c, +d);for(var A=0,h=0;h<w;h++)A=t(d[h],A);var f=w,h=A,v=a.internal_flags,w=0,A=a.encoder_delay,p=a.encoder_padding,m=100-10*a.VBR_q-a.quality,x=b.getLameVeryShortVersion(),y;y=[1,5,3,2,4,0,3];var W=0|(255<a.lowpassfreq/100+.5?255:a.lowpassfreq/100+.5),u=0,D=0,J=a.internal_flags.noise_shaping,F=0,G=0,I=0,T=0,F=0,F=0!=(a.exp_nspsytune&1),I=0!=(a.exp_nspsytune&2),U=!1,qa=!1,ia=a.internal_flags.nogap_total,ya=a.internal_flags.nogap_current,T=a.ATHtype,r=0,C;switch(a.VBR){case vbr_abr:C=a.VBR_mean_bitrate_kbps; +break;case vbr_off:C=a.brate;break;default:C=a.VBR_min_bitrate_kbps}y=0+(a.VBR.ordinal()<y.length?y[a.VBR.ordinal()]:0);v.findReplayGain&&(510<v.RadioGain&&(v.RadioGain=510),-510>v.RadioGain&&(v.RadioGain=-510),D=11264,D=0<=v.RadioGain?D|v.RadioGain:D|512|-v.RadioGain);v.findPeakSample&&(u=Math.abs(0|v.PeakSample/32767*Math.pow(2,23)+.5));-1!=ia&&(0<ya&&(qa=!0),ya<ia-1&&(U=!0));r=T+((F?1:0)<<4)+((I?1:0)<<5)+((U?1:0)<<6)+((qa?1:0)<<7);0>m&&(m=0);switch(a.mode){case MONO:F=0;break;case STEREO:F=1;break; +case DUAL_CHANNEL:F=2;break;case JOINT_STEREO:F=a.force_ms?4:3;break;default:F=7}I=32E3>=a.in_samplerate?0:48E3==a.in_samplerate?2:48E3<a.in_samplerate?3:1;if(a.short_blocks==sa.short_block_forced||a.short_blocks==sa.short_block_dispensed||-1==a.lowpassfreq&&-1==a.highpassfreq||a.scale_left<a.scale_right||a.scale_left>a.scale_right||a.disable_reservoir&&320>a.brate||a.noATH||a.ATHonly||0==T||32E3>=a.in_samplerate)G=1;T=J+(F<<2)+(G<<5)+(I<<6);F=v.nMusicCRC;k(d,f+w,m);w+=4;for(v=0;9>v;v++)d[f+w+v]= +255&x.charAt(v);w+=9;d[f+w]=255&y;w++;d[f+w]=255&W;w++;k(d,f+w,u);w+=4;q(d,f+w,D);w+=2;q(d,f+w,0);w+=2;d[f+w]=255&r;w++;d[f+w]=255<=C?255:255&C;w++;d[f+w]=255&A>>4;d[f+w+1]=255&(A<<4)+(p>>8);d[f+w+2]=255&p;w+=3;d[f+w]=255&T;w++;d[f+w++]=0;q(d,f+w,a.preset);w+=2;k(d,f+w,z);w+=4;q(d,f+w,F);w+=2;for(z=0;z<w;z++)h=t(d[f+z],h);q(d,f+w,h);return c.VBR_seek_table.TotalFrameSize};this.putVbrTag=function(b,d){if(0>=b.internal_flags.VBR_seek_table.pos)return-1;d.seek(d.length());if(0==d.length())return-1;d.seek(0); +var c=new Int8Array(10);d.readFully(c);c=(new String(c,"ISO-8859-1")).startsWith("ID3")?0:((c[6]&127)<<21|(c[7]&127)<<14|(c[8]&127)<<7|c[9]&127)+c.length;d.seek(c);var c=new Int8Array(a),f=getLameTagFrame(b,c);if(f>c.length)return-1;if(1>f)return 0;d.write(c,0,f);return 0}}function Q(d,k,q,r){this.xlen=d;this.linmax=k;this.table=q;this.hlen=r}function eb(d){this.bits=d}function Ic(){this.setModules=function(d,k){}}function $b(){this.bits=this.over_SSD=this.over_count=this.max_noise=this.tot_noise= +this.over_noise=0}function Jc(){this.scale_right=this.scale_left=this.scale=this.out_samplerate=this.in_samplerate=this.num_channels=this.num_samples=this.class_id=0;this.decode_only=this.bWriteVbrTag=this.analysis=!1;this.quality=0;this.mode=ka.STEREO;this.write_id3tag_automatic=this.decode_on_the_fly=this.findReplayGain=this.free_format=this.force_ms=!1;this.error_protection=this.emphasis=this.extension=this.original=this.copyright=this.compression_ratio=this.brate=0;this.disable_reservoir=this.strict_ISO= +!1;this.quant_comp_short=this.quant_comp=0;this.experimentalY=!1;this.preset=this.exp_nspsytune=this.experimentalZ=0;this.VBR=null;this.maskingadjust_short=this.maskingadjust=this.highpasswidth=this.lowpasswidth=this.highpassfreq=this.lowpassfreq=this.VBR_hard_min=this.VBR_max_bitrate_kbps=this.VBR_min_bitrate_kbps=this.VBR_mean_bitrate_kbps=this.VBR_q=this.VBR_q_frac=0;this.noATH=this.ATHshort=this.ATHonly=!1;this.athaa_sensitivity=this.athaa_loudapprox=this.athaa_type=this.ATHlower=this.ATHcurve= +this.ATHtype=0;this.short_blocks=null;this.useTemporal=!1;this.msfix=this.interChRatio=0;this.tune=!1;this.lame_allocated_gfp=this.frameNum=this.framesize=this.encoder_padding=this.encoder_delay=this.version=this.tune_value_a=0;this.internal_flags=null}function Kc(){this.linprebuf=H(2*O.MAX_ORDER);this.linpre=0;this.lstepbuf=H(O.MAX_SAMPLES_PER_WINDOW+O.MAX_ORDER);this.lstep=0;this.loutbuf=H(O.MAX_SAMPLES_PER_WINDOW+O.MAX_ORDER);this.lout=0;this.rinprebuf=H(2*O.MAX_ORDER);this.rinpre=0;this.rstepbuf= +H(O.MAX_SAMPLES_PER_WINDOW+O.MAX_ORDER);this.rstep=0;this.routbuf=H(O.MAX_SAMPLES_PER_WINDOW+O.MAX_ORDER);this.first=this.freqindex=this.rsum=this.lsum=this.totsamp=this.sampleWindow=this.rout=0;this.A=Y(0|O.STEPS_per_dB*O.MAX_dB);this.B=Y(0|O.STEPS_per_dB*O.MAX_dB)}function Lc(){this.floor=this.decay=this.adjustLimit=this.adjust=this.aaSensitivityP=this.useAdjust=0;this.l=H(d.SBMAX_l);this.s=H(d.SBMAX_s);this.psfb21=H(d.PSFB21);this.psfb12=H(d.PSFB12);this.cb_l=H(d.CBANDS);this.cb_s=H(d.CBANDS); +this.eql_w=H(d.BLKSIZE/2)}function Mc(J){this.quantize=J;this.iteration_loop=function(k,q,J,B){var t=k.internal_flags,r=H(na.SFBMAX),g=H(576),b=Y(2),l,a,h=t.l3_side;l=new eb(0);this.quantize.rv.ResvFrameBegin(k,l);l=l.bits;for(var D=0;D<t.mode_gr;D++)for(a=this.quantize.qupvt.on_pe(k,q,b,l,D,D),t.mode_ext==d.MPG_MD_MS_LR&&(this.quantize.ms_convert(t.l3_side,D),this.quantize.qupvt.reduce_side(b,J[D],l,a)),a=0;a<t.channels_out;a++){var e,n=h.tt[D][a];n.block_type!=d.SHORT_TYPE?(e=0,e=t.PSY.mask_adjust- +e):(e=0,e=t.PSY.mask_adjust_short-e);t.masking_lower=Math.pow(10,.1*e);this.quantize.init_outer_loop(t,n);this.quantize.init_xrpow(t,n,g)&&(this.quantize.qupvt.calc_xmin(k,B[D][a],n,r),this.quantize.outer_loop(k,n,r,g,a,b[a]));this.quantize.iteration_finish_one(t,D,a)}this.quantize.rv.ResvFrameEnd(t,l)}}function ha(J,k,q,r){this.l=Y(1+d.SBMAX_l);this.s=Y(1+d.SBMAX_s);this.psfb21=Y(1+d.PSFB21);this.psfb12=Y(1+d.PSFB12);var B=this.l,t=this.s;4==arguments.length&&(this.arrL=arguments[0],this.arrS=arguments[1], +this.arr21=arguments[2],this.arr12=arguments[3],K.arraycopy(this.arrL,0,B,0,Math.min(this.arrL.length,this.l.length)),K.arraycopy(this.arrS,0,t,0,Math.min(this.arrS.length,this.s.length)),K.arraycopy(this.arr21,0,this.psfb21,0,Math.min(this.arr21.length,this.psfb21.length)),K.arraycopy(this.arr12,0,this.psfb12,0,Math.min(this.arr12.length,this.psfb12.length)))}function ma(){function J(a,b){var c=B.ATHformula(b,a);return c=Math.pow(10,(c-100)/10+a.ATHlower)}function k(a){this.s=a}var q=null,r=null, +B=null;this.setModules=function(a,b,c){q=a;r=b;B=c};this.IPOW20=function(b){return a[b]};var t=ma.IXMAX_VAL+2,ta=ma.Q_MAX,g=ma.Q_MAX2;this.nr_of_sfb_block=[[[6,5,5,5],[9,9,9,9],[6,9,9,9]],[[6,5,7,3],[9,9,12,6],[6,9,12,6]],[[11,10,0,0],[18,18,0,0],[15,18,0,0]],[[7,7,7,0],[12,12,12,0],[6,15,12,0]],[[6,6,6,3],[12,9,9,6],[6,12,9,6]],[[8,8,5,0],[15,12,9,0],[6,18,9,0]]];var b=[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0];this.pretab=b;this.sfBandIndex=[new ha([0,6,12,18,24,30,36,44,54,66,80,96,116,140, +168,200,238,284,336,396,464,522,576],[0,4,8,12,18,24,32,42,56,74,100,132,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new ha([0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576],[0,4,8,12,18,26,36,48,62,80,104,136,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new ha([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new ha([0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162, +196,238,288,342,418,576],[0,4,8,12,16,22,30,40,52,66,84,106,136,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new ha([0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576],[0,4,8,12,16,22,28,38,50,64,80,100,126,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new ha([0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576],[0,4,8,12,16,22,30,42,58,78,104,138,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new ha([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464, +522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new ha([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new ha([0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576],[0,8,16,24,36,52,72,96,124,160,162,164,166,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0])];var l=H(ta+g+1),a=H(ta),h=H(t),D=H(t);this.adj43=D;this.iteration_init=function(b){var n= +b.internal_flags,c=n.l3_side;if(0==n.iteration_init_init){n.iteration_init_init=1;c.main_data_begin=0;for(var c=b.internal_flags.ATH.l,f=b.internal_flags.ATH.psfb21,k=b.internal_flags.ATH.s,z=b.internal_flags.ATH.psfb12,w=b.internal_flags,A=b.out_samplerate,v=0;v<d.SBMAX_l;v++){var p=w.scalefac_band.l[v],m=w.scalefac_band.l[v+1];for(c[v]=vb.MAX_VALUE;p<m;p++){var x=p*A/1152,x=J(b,x);c[v]=Math.min(c[v],x)}}for(v=0;v<d.PSFB21;v++)for(p=w.scalefac_band.psfb21[v],m=w.scalefac_band.psfb21[v+1],f[v]=vb.MAX_VALUE;p< +m;p++)x=p*A/1152,x=J(b,x),f[v]=Math.min(f[v],x);for(v=0;v<d.SBMAX_s;v++){p=w.scalefac_band.s[v];m=w.scalefac_band.s[v+1];for(k[v]=vb.MAX_VALUE;p<m;p++)x=p*A/384,x=J(b,x),k[v]=Math.min(k[v],x);k[v]*=w.scalefac_band.s[v+1]-w.scalefac_band.s[v]}for(v=0;v<d.PSFB12;v++){p=w.scalefac_band.psfb12[v];m=w.scalefac_band.psfb12[v+1];for(z[v]=vb.MAX_VALUE;p<m;p++)x=p*A/384,x=J(b,x),z[v]=Math.min(z[v],x);z[v]*=w.scalefac_band.s[13]-w.scalefac_band.s[12]}if(b.noATH){for(v=0;v<d.SBMAX_l;v++)c[v]=1E-20;for(v=0;v< +d.PSFB21;v++)f[v]=1E-20;for(v=0;v<d.SBMAX_s;v++)k[v]=1E-20;for(v=0;v<d.PSFB12;v++)z[v]=1E-20}w.ATH.floor=10*Math.log10(J(b,-1));h[0]=0;for(c=1;c<t;c++)h[c]=Math.pow(c,4/3);for(c=0;c<t-1;c++)D[c]=c+1-Math.pow(.5*(h[c]+h[c+1]),.75);D[c]=.5;for(c=0;c<ta;c++)a[c]=Math.pow(2,-.1875*(c-210));for(c=0;c<=ta+g;c++)l[c]=Math.pow(2,.25*(c-210-g));q.huffman_init(n);c=b.exp_nspsytune>>2&63;32<=c&&(c-=64);f=Math.pow(10,c/4/10);c=b.exp_nspsytune>>8&63;32<=c&&(c-=64);k=Math.pow(10,c/4/10);c=b.exp_nspsytune>>14&63; +32<=c&&(c-=64);z=Math.pow(10,c/4/10);c=b.exp_nspsytune>>20&63;32<=c&&(c-=64);b=z*Math.pow(10,c/4/10);for(c=0;c<d.SBMAX_l;c++)w=6>=c?f:13>=c?k:20>=c?z:b,n.nsPsy.longfact[c]=w;for(c=0;c<d.SBMAX_s;c++)w=5>=c?f:10>=c?k:11>=c?z:b,n.nsPsy.shortfact[c]=w}};this.on_pe=function(a,b,c,d,g,h){var l=a.internal_flags,k=0,v=Y(2),p,k=new eb(k);a=r.ResvMaxBits(a,d,k,h);var k=k.bits,m=k+a;m>da.MAX_BITS_PER_GRANULE&&(m=da.MAX_BITS_PER_GRANULE);for(p=h=0;p<l.channels_out;++p)c[p]=Math.min(da.MAX_BITS_PER_CHANNEL,k/ +l.channels_out),v[p]=0|c[p]*b[g][p]/700-c[p],v[p]>3*d/4&&(v[p]=3*d/4),0>v[p]&&(v[p]=0),v[p]+c[p]>da.MAX_BITS_PER_CHANNEL&&(v[p]=Math.max(0,da.MAX_BITS_PER_CHANNEL-c[p])),h+=v[p];if(h>a)for(p=0;p<l.channels_out;++p)v[p]=a*v[p]/h;for(p=0;p<l.channels_out;++p)c[p]+=v[p],a-=v[p];for(p=h=0;p<l.channels_out;++p)h+=c[p];if(h>da.MAX_BITS_PER_GRANULE)for(p=0;p<l.channels_out;++p)c[p]*=da.MAX_BITS_PER_GRANULE,c[p]/=h;return m};this.reduce_side=function(a,b,c,d){b=.33*(.5-b)/.5;0>b&&(b=0);.5<b&&(b=.5);b=0|.5* +b*(a[0]+a[1]);b>da.MAX_BITS_PER_CHANNEL-a[0]&&(b=da.MAX_BITS_PER_CHANNEL-a[0]);0>b&&(b=0);125<=a[1]&&(125<a[1]-b?(a[0]<c&&(a[0]+=b),a[1]-=b):(a[0]+=a[1]-125,a[1]=125));b=a[0]+a[1];b>d&&(a[0]=d*a[0]/b,a[1]=d*a[1]/b)};this.athAdjust=function(a,b,c){b=X.FAST_LOG10_X(b,10);a*=a;var d=0;b-=c;1E-20<a&&(d=1+X.FAST_LOG10_X(a,10/90.30873362));0>d&&(d=0);b=b*d+(c+90.30873362-94.82444863);return Math.pow(10,.1*b)};this.calc_xmin=function(a,b,c,f){var g=0,h=a.internal_flags,l,k=0,v=0,p=h.ATH,m=c.xr,x=a.VBR== +M.vbr_mtrh?1:0,y=h.masking_lower;if(a.VBR==M.vbr_mtrh||a.VBR==M.vbr_mt)y=1;for(l=0;l<c.psy_lmax;l++){var q,u,t,D,F,G;u=a.VBR==M.vbr_rh||a.VBR==M.vbr_mtrh?athAdjust(p.adjust,p.l[l],p.floor):p.adjust*p.l[l];F=c.width[l];t=u/F;D=2.220446049250313E-16;G=F>>1;q=0;do{var I;I=m[k]*m[k];q+=I;D+=I<t?I:t;k++;I=m[k]*m[k];q+=I;D+=I<t?I:t;k++}while(0<--G);q>u&&v++;l==d.SBPSY_l&&(t=u*h.nsPsy.longfact[l],D<t&&(D=t));0!=x&&(u=D);a.ATHonly||(D=b.en.l[l],0<D&&(t=q*b.thm.l[l]*y/D,0!=x&&(t*=h.nsPsy.longfact[l]),u<t&& +(u=t)));0!=x?f[g++]=u:f[g++]=u*h.nsPsy.longfact[l]}q=575;if(c.block_type!=d.SHORT_TYPE)for(u=576;0!=u--&&ua.EQ(m[u],0);)q=u;c.max_nonzero_coeff=q;for(var T=c.sfb_smin;l<c.psymax;T++,l+=3){var U,J;J=a.VBR==M.vbr_rh||a.VBR==M.vbr_mtrh?athAdjust(p.adjust,p.s[T],p.floor):p.adjust*p.s[T];F=c.width[l];for(U=0;3>U;U++){q=0;G=F>>1;t=J/F;D=2.220446049250313E-16;do I=m[k]*m[k],q+=I,D+=I<t?I:t,k++,I=m[k]*m[k],q+=I,D+=I<t?I:t,k++;while(0<--G);q>J&&v++;T==d.SBPSY_s&&(t=J*h.nsPsy.shortfact[T],D<t&&(D=t));u=0!= +x?D:J;a.ATHonly||a.ATHshort||(D=b.en.s[T][U],0<D&&(t=q*b.thm.s[T][U]*y/D,0!=x&&(t*=h.nsPsy.shortfact[T]),u<t&&(u=t)));0!=x?f[g++]=u:f[g++]=u*h.nsPsy.shortfact[T]}a.useTemporal&&(f[g-3]>f[g-3+1]&&(f[g-3+1]+=(f[g-3]-f[g-3+1])*h.decay),f[g-3+1]>f[g-3+2]&&(f[g-3+2]+=(f[g-3+1]-f[g-3+2])*h.decay))}return v};this.calc_noise_core=function(a,b,c,d){var g=0,l=b.s,k=a.l3_enc;if(l>a.count1)for(;0!=c--;){var q;q=a.xr[l];l++;g+=q*q;q=a.xr[l];l++;g+=q*q}else if(l>a.big_values){var v=H(2);v[0]=0;for(v[1]=d;0!=c--;)q= +Math.abs(a.xr[l])-v[k[l]],l++,g+=q*q,q=Math.abs(a.xr[l])-v[k[l]],l++,g+=q*q}else for(;0!=c--;)q=Math.abs(a.xr[l])-h[k[l]]*d,l++,g+=q*q,q=Math.abs(a.xr[l])-h[k[l]]*d,l++,g+=q*q;b.s=l;return g};this.calc_noise=function(a,d,c,f,g){var h=0,q=0,t,v,p=0,m=0,x=0,y=-20,D=0,u=a.scalefac,J=0;for(t=f.over_SSD=0;t<a.psymax;t++){var B=a.global_gain-(u[J++]+(0!=a.preflag?b[t]:0)<<a.scalefac_scale+1)-8*a.subblock_gain[a.window[t]],F=0;null!=g&&g.step[t]==B?(F=g.noise[t],D+=a.width[t],c[h++]=F/d[q++],F=g.noise_log[t]): +(F=l[B+ma.Q_MAX2],v=a.width[t]>>1,D+a.width[t]>a.max_nonzero_coeff&&(v=a.max_nonzero_coeff-D+1,v=0<v?v>>1:0),D=new k(D),F=this.calc_noise_core(a,D,v,F),D=D.s,null!=g&&(g.step[t]=B,g.noise[t]=F),F=c[h++]=F/d[q++],F=X.FAST_LOG10(Math.max(F,1E-20)),null!=g&&(g.noise_log[t]=F));null!=g&&(g.global_gain=a.global_gain);x+=F;0<F&&(B=Math.max(0|10*F+.5,1),f.over_SSD+=B*B,p++,m+=F);y=Math.max(y,F)}f.over_count=p;f.tot_noise=x;f.over_noise=m;f.max_noise=y;return p};this.set_pinfo=function(a,g,c,f,h){var l=a.internal_flags, +k,q,t,p,m=0==g.scalefac_scale?.5:1,x=g.scalefac,y=H(na.SFBMAX),D=H(na.SFBMAX),u=new $b;calc_xmin(a,c,g,y);calc_noise(g,y,D,u,null);var J=0;q=g.sfb_lmax;g.block_type!=d.SHORT_TYPE&&0==g.mixed_block_flag&&(q=22);for(k=0;k<q;k++){var B=l.scalefac_band.l[k],F=l.scalefac_band.l[k+1],G=F-B;for(p=0;J<F;J++)p+=g.xr[J]*g.xr[J];p/=G;t=1E15;l.pinfo.en[f][h][k]=t*p;l.pinfo.xfsf[f][h][k]=t*y[k]*D[k]/G;p=0<c.en.l[k]&&!a.ATHonly?p/c.en.l[k]:0;l.pinfo.thr[f][h][k]=t*Math.max(p*c.thm.l[k],l.ATH.l[k]);l.pinfo.LAMEsfb[f][h][k]= +0;0!=g.preflag&&11<=k&&(l.pinfo.LAMEsfb[f][h][k]=-m*b[k]);k<d.SBPSY_l&&(l.pinfo.LAMEsfb[f][h][k]-=m*x[k])}if(g.block_type==d.SHORT_TYPE)for(q=k,k=g.sfb_smin;k<d.SBMAX_s;k++)for(var B=l.scalefac_band.s[k],F=l.scalefac_band.s[k+1],G=F-B,I=0;3>I;I++){p=0;for(t=B;t<F;t++)p+=g.xr[J]*g.xr[J],J++;p=Math.max(p/G,1E-20);t=1E15;l.pinfo.en_s[f][h][3*k+I]=t*p;l.pinfo.xfsf_s[f][h][3*k+I]=t*y[q]*D[q]/G;p=0<c.en.s[k][I]?p/c.en.s[k][I]:0;if(a.ATHonly||a.ATHshort)p=0;l.pinfo.thr_s[f][h][3*k+I]=t*Math.max(p*c.thm.s[k][I], +l.ATH.s[k]);l.pinfo.LAMEsfb_s[f][h][3*k+I]=-2*g.subblock_gain[I];k<d.SBPSY_s&&(l.pinfo.LAMEsfb_s[f][h][3*k+I]-=m*x[q]);q++}l.pinfo.LAMEqss[f][h]=g.global_gain;l.pinfo.LAMEmainbits[f][h]=g.part2_3_length+g.part2_length;l.pinfo.LAMEsfbits[f][h]=g.part2_length;l.pinfo.over[f][h]=u.over_count;l.pinfo.max_noise[f][h]=10*u.max_noise;l.pinfo.over_noise[f][h]=10*u.over_noise;l.pinfo.tot_noise[f][h]=10*u.tot_noise;l.pinfo.over_SSD[f][h]=u.over_SSD}}function Nc(){this.sfb_count1=this.global_gain=0;this.step= +Y(39);this.noise=H(39);this.noise_log=H(39)}function Ab(){this.xr=H(576);this.l3_enc=Y(576);this.scalefac=Y(na.SFBMAX);this.mixed_block_flag=this.block_type=this.scalefac_compress=this.global_gain=this.count1=this.big_values=this.part2_3_length=this.xrpow_max=0;this.table_select=Y(3);this.subblock_gain=Y(4);this.sfbdivide=this.psymax=this.sfbmax=this.psy_lmax=this.sfb_smin=this.sfb_lmax=this.part2_length=this.count1table_select=this.scalefac_scale=this.preflag=this.region1_count=this.region0_count= +0;this.width=Y(na.SFBMAX);this.window=Y(na.SFBMAX);this.count1bits=0;this.sfb_partition_table=null;this.slen=Y(4);this.max_nonzero_coeff=0;var d=this;this.assign=function(k){d.xr=new Float32Array(k.xr);d.l3_enc=new Int32Array(k.l3_enc);d.scalefac=new Int32Array(k.scalefac);d.xrpow_max=k.xrpow_max;d.part2_3_length=k.part2_3_length;d.big_values=k.big_values;d.count1=k.count1;d.global_gain=k.global_gain;d.scalefac_compress=k.scalefac_compress;d.block_type=k.block_type;d.mixed_block_flag=k.mixed_block_flag; +d.table_select=new Int32Array(k.table_select);d.subblock_gain=new Int32Array(k.subblock_gain);d.region0_count=k.region0_count;d.region1_count=k.region1_count;d.preflag=k.preflag;d.scalefac_scale=k.scalefac_scale;d.count1table_select=k.count1table_select;d.part2_length=k.part2_length;d.sfb_lmax=k.sfb_lmax;d.sfb_smin=k.sfb_smin;d.psy_lmax=k.psy_lmax;d.sfbmax=k.sfbmax;d.psymax=k.psymax;d.sfbdivide=k.sfbdivide;d.width=new Int32Array(k.width);d.window=new Int32Array(k.window);d.count1bits=k.count1bits; +d.sfb_partition_table=k.sfb_partition_table.slice(0);d.slen=new Int32Array(k.slen);d.max_nonzero_coeff=k.max_nonzero_coeff}}function Oc(){function J(d){this.ordinal=d}function k(d){for(var b=0;b<d.sfbmax;b++)if(0==d.scalefac[b]+d.subblock_gain[d.window[b]])return!1;return!0}var q;this.rv=null;var r;this.qupvt=null;var B,t=new Ic,ta;this.setModules=function(d,b,l,a){q=d;this.rv=r=b;this.qupvt=B=l;ta=a;t.setModules(B,ta)};this.ms_convert=function(d,b){for(var l=0;576>l;++l){var a=d.tt[b][0].xr[l],h= +d.tt[b][1].xr[l];d.tt[b][0].xr[l]=.5*(a+h)*X.SQRT2;d.tt[b][1].xr[l]=.5*(a-h)*X.SQRT2}};this.init_xrpow=function(d,b,l){var a=0,h=0|b.max_nonzero_coeff;b.xrpow_max=0;Ia.fill(l,h,576,0);for(var k=a=0;k<=h;++k){var e=Math.abs(b.xr[k]),a=a+e;l[k]=Math.sqrt(e*Math.sqrt(e));l[k]>b.xrpow_max&&(b.xrpow_max=l[k])}if(1E-20<a){l=0;0!=(d.substep_shaping&2)&&(l=1);for(h=0;h<b.psymax;h++)d.pseudohalf[h]=l;return!0}Ia.fill(b.l3_enc,0,576,0);return!1};this.init_outer_loop=function(g,b){b.part2_3_length=0;b.big_values= +0;b.count1=0;b.global_gain=210;b.scalefac_compress=0;b.table_select[0]=0;b.table_select[1]=0;b.table_select[2]=0;b.subblock_gain[0]=0;b.subblock_gain[1]=0;b.subblock_gain[2]=0;b.subblock_gain[3]=0;b.region0_count=0;b.region1_count=0;b.preflag=0;b.scalefac_scale=0;b.count1table_select=0;b.part2_length=0;b.sfb_lmax=d.SBPSY_l;b.sfb_smin=d.SBPSY_s;b.psy_lmax=g.sfb21_extra?d.SBMAX_l:d.SBPSY_l;b.psymax=b.psy_lmax;b.sfbmax=b.sfb_lmax;b.sfbdivide=11;for(var l=0;l<d.SBMAX_l;l++)b.width[l]=g.scalefac_band.l[l+ +1]-g.scalefac_band.l[l],b.window[l]=3;if(b.block_type==d.SHORT_TYPE){var a=H(576);b.sfb_smin=0;b.sfb_lmax=0;0!=b.mixed_block_flag&&(b.sfb_smin=3,b.sfb_lmax=2*g.mode_gr+4);b.psymax=b.sfb_lmax+3*((g.sfb21_extra?d.SBMAX_s:d.SBPSY_s)-b.sfb_smin);b.sfbmax=b.sfb_lmax+3*(d.SBPSY_s-b.sfb_smin);b.sfbdivide=b.sfbmax-18;b.psy_lmax=b.sfb_lmax;var h=g.scalefac_band.l[b.sfb_lmax];K.arraycopy(b.xr,0,a,0,576);for(l=b.sfb_smin;l<d.SBMAX_s;l++)for(var k=g.scalefac_band.s[l],e=g.scalefac_band.s[l+1],n=0;3>n;n++)for(var c= +k;c<e;c++)b.xr[h++]=a[3*c+n];a=b.sfb_lmax;for(l=b.sfb_smin;l<d.SBMAX_s;l++)b.width[a]=b.width[a+1]=b.width[a+2]=g.scalefac_band.s[l+1]-g.scalefac_band.s[l],b.window[a]=0,b.window[a+1]=1,b.window[a+2]=2,a+=3}b.count1bits=0;b.sfb_partition_table=B.nr_of_sfb_block[0][0];b.slen[0]=0;b.slen[1]=0;b.slen[2]=0;b.slen[3]=0;b.max_nonzero_coeff=575;Ia.fill(b.scalefac,0);l=g.ATH;a=b.xr;if(b.block_type!=d.SHORT_TYPE)for(h=!1,k=d.PSFB21-1;0<=k&&!h;k--)for(e=g.scalefac_band.psfb21[k],n=g.scalefac_band.psfb21[k+ +1],c=B.athAdjust(l.adjust,l.psfb21[k],l.floor),1E-12<g.nsPsy.longfact[21]&&(c*=g.nsPsy.longfact[21]),--n;n>=e;n--)if(Math.abs(a[n])<c)a[n]=0;else{h=!0;break}else for(c=0;3>c;c++)for(h=!1,k=d.PSFB12-1;0<=k&&!h;k--){var e=3*g.scalefac_band.s[12]+(g.scalefac_band.s[13]-g.scalefac_band.s[12])*c+(g.scalefac_band.psfb12[k]-g.scalefac_band.psfb12[0]),n=e+(g.scalefac_band.psfb12[k+1]-g.scalefac_band.psfb12[k]),f=B.athAdjust(l.adjust,l.psfb12[k],l.floor);1E-12<g.nsPsy.shortfact[12]&&(f*=g.nsPsy.shortfact[12]); +for(--n;n>=e;n--)if(Math.abs(a[n])<f)a[n]=0;else{h=!0;break}}};J.BINSEARCH_NONE=new J(0);J.BINSEARCH_UP=new J(1);J.BINSEARCH_DOWN=new J(2);this.trancate_smallspectrums=function(g,b,l,a){var h=H(na.SFBMAX);if((0!=(g.substep_shaping&4)||b.block_type!=d.SHORT_TYPE)&&0==(g.substep_shaping&128)){B.calc_noise(b,l,h,new $b,null);for(var k=0;576>k;k++){var e=0;0!=b.l3_enc[k]&&(e=Math.abs(b.xr[k]));a[k]=e}k=0;e=8;b.block_type==d.SHORT_TYPE&&(e=6);do{var n,c,f,q,t=b.width[e],k=k+t;if(!(1<=h[e]||(Ia.sort(a, +k-t,t),ua.EQ(a[k-1],0)))){n=(1-h[e])*l[e];q=c=0;do{var w;for(f=1;q+f<t&&!ua.NEQ(a[q+k-t],a[q+k+f-t]);f++);w=a[q+k-t]*a[q+k-t]*f;if(n<w){0!=q&&(c=a[q+k-t-1]);break}n-=w;q+=f}while(q<t);if(!ua.EQ(c,0)){do Math.abs(b.xr[k-t])<=c&&(b.l3_enc[k-t]=0);while(0<--t)}}}while(++e<b.psymax);b.part2_3_length=ta.noquant_count_bits(g,b,null)}};this.outer_loop=function(g,b,l,a,h,q){var e=g.internal_flags,n=new Ab,c=H(576),f=H(na.SFBMAX),t=new $b,z,w=new Nc,A=9999999,v=!1,p=!1,m=0,x,y,W=e.CurrentStep[h],u=!1,r=e.OldValue[h]; +z=J.BINSEARCH_NONE;b.global_gain=r;for(x=q-b.part2_length;;){y=ta.count_bits(e,a,b,null);if(1==W||y==x)break;y>x?(z==J.BINSEARCH_DOWN&&(u=!0),u&&(W/=2),z=J.BINSEARCH_UP,y=W):(z==J.BINSEARCH_UP&&(u=!0),u&&(W/=2),z=J.BINSEARCH_DOWN,y=-W);b.global_gain+=y;0>b.global_gain&&(b.global_gain=0,u=!0);255<b.global_gain&&(b.global_gain=255,u=!0)}for(;y>x&&255>b.global_gain;)b.global_gain++,y=ta.count_bits(e,a,b,null);e.CurrentStep[h]=4<=r-b.global_gain?4:2;e.OldValue[h]=b.global_gain;b.part2_3_length=y;if(0== +e.noise_shaping)return 100;B.calc_noise(b,l,f,t,w);t.bits=b.part2_3_length;n.assign(b);h=0;for(K.arraycopy(a,0,c,0,576);!v;){do{x=new $b;u=255;W=0!=(e.substep_shaping&2)?20:3;if(e.sfb21_extra){if(1<f[n.sfbmax])break;if(n.block_type==d.SHORT_TYPE&&(1<f[n.sfbmax+1]||1<f[n.sfbmax+2]))break}r=n;y=a;z=g.internal_flags;for(var C=r,F=f,G=y,I=g.internal_flags,T=void 0,T=0==C.scalefac_scale?1.2968395546510096:1.6817928305074292,U=0,qa=0;qa<C.sfbmax;qa++)U<F[qa]&&(U=F[qa]);qa=I.noise_shaping_amp;3==qa&&(qa= +p?2:1);switch(qa){case 2:break;case 1:U=1<U?Math.pow(U,.5):.95*U;break;default:U=1<U?1:.95*U}for(var ia=0,qa=0;qa<C.sfbmax;qa++){var ya=C.width[qa],ia=ia+ya;if(!(F[qa]<U)){if(0!=(I.substep_shaping&2)&&(I.pseudohalf[qa]=0==I.pseudohalf[qa]?1:0,0==I.pseudohalf[qa]&&2==I.noise_shaping_amp))break;C.scalefac[qa]++;for(ya=-ya;0>ya;ya++)G[ia+ya]*=T,G[ia+ya]>C.xrpow_max&&(C.xrpow_max=G[ia+ya]);if(2==I.noise_shaping_amp)break}}if(C=k(r))r=!1;else if(C=2==z.mode_gr?ta.scale_bitcount(r):ta.scale_bitcount_lsf(z, +r)){if(1<z.noise_shaping)if(Ia.fill(z.pseudohalf,0),0==r.scalefac_scale){C=r;for(G=F=0;G<C.sfbmax;G++){T=C.width[G];I=C.scalefac[G];0!=C.preflag&&(I+=B.pretab[G]);F+=T;if(0!=(I&1))for(I++,T=-T;0>T;T++)y[F+T]*=1.2968395546510096,y[F+T]>C.xrpow_max&&(C.xrpow_max=y[F+T]);C.scalefac[G]=I>>1}C.preflag=0;C.scalefac_scale=1;C=!1}else if(r.block_type==d.SHORT_TYPE&&0<z.subblock_gain){b:{C=z;F=r;G=void 0;I=F.scalefac;for(G=0;G<F.sfb_lmax;G++)if(16<=I[G]){y=!0;break b}for(T=0;3>T;T++){qa=U=0;for(G=F.sfb_lmax+ +T;G<F.sfbdivide;G+=3)U<I[G]&&(U=I[G]);for(;G<F.sfbmax;G+=3)qa<I[G]&&(qa=I[G]);if(!(16>U&&8>qa)){if(7<=F.subblock_gain[T]){y=!0;break b}F.subblock_gain[T]++;U=C.scalefac_band.l[F.sfb_lmax];for(G=F.sfb_lmax+T;G<F.sfbmax;G+=3)if(qa=F.width[G],ia=I[G],ia-=4>>F.scalefac_scale,0<=ia)I[G]=ia,U+=3*qa;else{I[G]=0;ia=B.IPOW20(210+(ia<<F.scalefac_scale+1));U+=qa*(T+1);for(ya=-qa;0>ya;ya++)y[U+ya]*=ia,y[U+ya]>F.xrpow_max&&(F.xrpow_max=y[U+ya]);U+=qa*(3-T-1)}ia=B.IPOW20(202);U+=F.width[G]*(T+1);for(ya=-F.width[G];0> +ya;ya++)y[U+ya]*=ia,y[U+ya]>F.xrpow_max&&(F.xrpow_max=y[U+ya])}}y=!1}C=y||k(r)}C||(C=2==z.mode_gr?ta.scale_bitcount(r):ta.scale_bitcount_lsf(z,r));r=!C}else r=!0;if(!r)break;0!=n.scalefac_scale&&(u=254);r=q-n.part2_length;if(0>=r)break;for(;(n.part2_3_length=ta.count_bits(e,a,n,w))>r&&n.global_gain<=u;)n.global_gain++;if(n.global_gain>u)break;if(0==t.over_count){for(;(n.part2_3_length=ta.count_bits(e,a,n,w))>A&&n.global_gain<=u;)n.global_gain++;if(n.global_gain>u)break}B.calc_noise(n,l,f,x,w);x.bits= +n.part2_3_length;z=b.block_type!=d.SHORT_TYPE?g.quant_comp:g.quant_comp_short;u=t;r=x;C=n;y=f;F=void 0;switch(z){default:case 9:0<u.over_count?(F=r.over_SSD<=u.over_SSD,r.over_SSD==u.over_SSD&&(F=r.bits<u.bits)):F=0>r.max_noise&&10*r.max_noise+r.bits<=10*u.max_noise+u.bits;break;case 0:F=r.over_count<u.over_count||r.over_count==u.over_count&&r.over_noise<u.over_noise||r.over_count==u.over_count&&ua.EQ(r.over_noise,u.over_noise)&&r.tot_noise<u.tot_noise;break;case 8:z=r;G=1E-37;for(F=0;F<C.psymax;F++)I= +y[F],I=X.FAST_LOG10(.368+.632*I*I*I),G+=I;y=Math.max(1E-20,G);z.max_noise=y;case 1:F=r.max_noise<u.max_noise;break;case 2:F=r.tot_noise<u.tot_noise;break;case 3:F=r.tot_noise<u.tot_noise&&r.max_noise<u.max_noise;break;case 4:F=0>=r.max_noise&&.2<u.max_noise||0>=r.max_noise&&0>u.max_noise&&u.max_noise>r.max_noise-.2&&r.tot_noise<u.tot_noise||0>=r.max_noise&&0<u.max_noise&&u.max_noise>r.max_noise-.2&&r.tot_noise<u.tot_noise+u.over_noise||0<r.max_noise&&-.05<u.max_noise&&u.max_noise>r.max_noise-.1&& +r.tot_noise+r.over_noise<u.tot_noise+u.over_noise||0<r.max_noise&&-.1<u.max_noise&&u.max_noise>r.max_noise-.15&&r.tot_noise+r.over_noise+r.over_noise<u.tot_noise+u.over_noise+u.over_noise;break;case 5:F=r.over_noise<u.over_noise||ua.EQ(r.over_noise,u.over_noise)&&r.tot_noise<u.tot_noise;break;case 6:F=r.over_noise<u.over_noise||ua.EQ(r.over_noise,u.over_noise)&&(r.max_noise<u.max_noise||ua.EQ(r.max_noise,u.max_noise)&&r.tot_noise<=u.tot_noise);break;case 7:F=r.over_count<u.over_count||r.over_noise< +u.over_noise}0==u.over_count&&(F=F&&r.bits<u.bits);z=F?1:0;if(0!=z)A=b.part2_3_length,t=x,b.assign(n),h=0,K.arraycopy(a,0,c,0,576);else if(0==e.full_outer_loop){if(++h>W&&0==t.over_count)break;if(3==e.noise_shaping_amp&&p&&30<h)break;if(3==e.noise_shaping_amp&&p&&15<n.global_gain-m)break}}while(255>n.global_gain+n.scalefac_scale);3==e.noise_shaping_amp?p?v=!0:(n.assign(b),K.arraycopy(c,0,a,0,576),h=0,m=n.global_gain,p=!0):v=!0}g.VBR==M.vbr_rh||g.VBR==M.vbr_mtrh?K.arraycopy(c,0,a,0,576):0!=(e.substep_shaping& +1)&&trancate_smallspectrums(e,b,l,a);return t.over_count};this.iteration_finish_one=function(d,b,l){var a=d.l3_side,h=a.tt[b][l];ta.best_scalefac_store(d,b,l,a);1==d.use_best_huffman&&ta.best_huffman_divide(d,h);r.ResvAdjust(d,h)};this.VBR_encode_granule=function(d,b,l,a,h,k,e){var n=d.internal_flags,c=new Ab,f=H(576),q=e,t=e+1,t=(e+k)/2,r,A=0,v=n.sfb21_extra;Ia.fill(c.l3_enc,0);do n.sfb21_extra=t>q-42?!1:v,r=outer_loop(d,b,l,a,h,t),0>=r?(A=1,t=b.part2_3_length,c.assign(b),K.arraycopy(a,0,f,0,576), +e=t-32,r=e-k,t=(e+k)/2):(k=t+32,r=e-k,t=(e+k)/2,0!=A&&(A=2,b.assign(c),K.arraycopy(f,0,a,0,576)));while(12<r);n.sfb21_extra=v;2==A&&K.arraycopy(c.l3_enc,0,b.l3_enc,0,576)};this.get_framebits=function(d,b){var l=d.internal_flags;l.bitrate_index=l.VBR_min_bitrate;var a=q.getframebits(d);l.bitrate_index=1;for(var a=q.getframebits(d),h=1;h<=l.VBR_max_bitrate;h++)l.bitrate_index=h,a=new eb(a),b[h]=r.ResvFrameBegin(d,a),a=a.bits};this.VBR_old_prepare=function(g,b,l,a,h,k,e,n,c){var f=g.internal_flags,q; +q=0;var t=1,w=0;f.bitrate_index=f.VBR_max_bitrate;var A=r.ResvFrameBegin(g,new eb(0))/f.mode_gr;get_framebits(g,k);for(var v=0;v<f.mode_gr;v++){var p=B.on_pe(g,b,n[v],A,v,0);f.mode_ext==d.MPG_MD_MS_LR&&(ms_convert(f.l3_side,v),B.reduce_side(n[v],l[v],A,p));for(p=0;p<f.channels_out;++p){var m=f.l3_side.tt[v][p];m.block_type!=d.SHORT_TYPE?(q=1.28/(1+Math.exp(3.5-b[v][p]/300))-.05,q=f.PSY.mask_adjust-q):(q=2.56/(1+Math.exp(3.5-b[v][p]/300))-.14,q=f.PSY.mask_adjust_short-q);f.masking_lower=Math.pow(10, +.1*q);init_outer_loop(f,m);c[v][p]=B.calc_xmin(g,a[v][p],m,h[v][p]);0!=c[v][p]&&(t=0);e[v][p]=126;w+=n[v][p]}}for(v=0;v<f.mode_gr;v++)for(p=0;p<f.channels_out;p++)w>k[f.VBR_max_bitrate]&&(n[v][p]*=k[f.VBR_max_bitrate],n[v][p]/=w),e[v][p]>n[v][p]&&(e[v][p]=n[v][p]);return t};this.bitpressure_strategy=function(g,b,l,a){for(var h=0;h<g.mode_gr;h++)for(var k=0;k<g.channels_out;k++){for(var e=g.l3_side.tt[h][k],n=b[h][k],c=0,f=0;f<e.psy_lmax;f++)n[c++]*=1+.029*f*f/d.SBMAX_l/d.SBMAX_l;if(e.block_type== +d.SHORT_TYPE)for(f=e.sfb_smin;f<d.SBMAX_s;f++)n[c++]*=1+.029*f*f/d.SBMAX_s/d.SBMAX_s,n[c++]*=1+.029*f*f/d.SBMAX_s/d.SBMAX_s,n[c++]*=1+.029*f*f/d.SBMAX_s/d.SBMAX_s;a[h][k]=0|Math.max(l[h][k],.9*a[h][k])}};this.VBR_new_prepare=function(g,b,k,a,h,q){var e=g.internal_flags,n=1,c=0,f=0,t;g.free_format?(e.bitrate_index=0,c=new eb(c),t=r.ResvFrameBegin(g,c),c=c.bits,h[0]=t):(e.bitrate_index=e.VBR_max_bitrate,c=new eb(c),r.ResvFrameBegin(g,c),c=c.bits,get_framebits(g,h),t=h[e.VBR_max_bitrate]);for(h=0;h< +e.mode_gr;h++){B.on_pe(g,b,q[h],c,h,0);e.mode_ext==d.MPG_MD_MS_LR&&ms_convert(e.l3_side,h);for(var z=0;z<e.channels_out;++z){var w=e.l3_side.tt[h][z];e.masking_lower=Math.pow(10,.1*e.PSY.mask_adjust);init_outer_loop(e,w);0!=B.calc_xmin(g,k[h][z],w,a[h][z])&&(n=0);f+=q[h][z]}}for(h=0;h<e.mode_gr;h++)for(z=0;z<e.channels_out;z++)f>t&&(q[h][z]*=t,q[h][z]/=f);return n};this.calc_target_bits=function(g,b,k,a,h,t){var e=g.internal_flags,n=e.l3_side,c,f;e.bitrate_index=e.VBR_max_bitrate;f=new eb(0);t[0]= +r.ResvFrameBegin(g,f);e.bitrate_index=1;f=q.getframebits(g)-8*e.sideinfo_len;h[0]=f/(e.mode_gr*e.channels_out);f=g.VBR_mean_bitrate_kbps*g.framesize*1E3;0!=(e.substep_shaping&1)&&(f*=1.09);f/=g.out_samplerate;f-=8*e.sideinfo_len;f/=e.mode_gr*e.channels_out;c=.93+.07*(11-g.compression_ratio)/5.5;.9>c&&(c=.9);1<c&&(c=1);for(g=0;g<e.mode_gr;g++){var E=0;for(h=0;h<e.channels_out;h++){a[g][h]=int(c*f);if(700<b[g][h]){var z=int((b[g][h]-700)/1.4),w=n.tt[g][h];a[g][h]=int(c*f);w.block_type==d.SHORT_TYPE&& +z<f/2&&(z=f/2);z>3*f/2?z=3*f/2:0>z&&(z=0);a[g][h]+=z}a[g][h]>da.MAX_BITS_PER_CHANNEL&&(a[g][h]=da.MAX_BITS_PER_CHANNEL);E+=a[g][h]}if(E>da.MAX_BITS_PER_GRANULE)for(h=0;h<e.channels_out;++h)a[g][h]*=da.MAX_BITS_PER_GRANULE,a[g][h]/=E}if(e.mode_ext==d.MPG_MD_MS_LR)for(g=0;g<e.mode_gr;g++)B.reduce_side(a[g],k[g],f*e.channels_out,da.MAX_BITS_PER_GRANULE);for(g=b=0;g<e.mode_gr;g++)for(h=0;h<e.channels_out;h++)a[g][h]>da.MAX_BITS_PER_CHANNEL&&(a[g][h]=da.MAX_BITS_PER_CHANNEL),b+=a[g][h];if(b>t[0])for(g= +0;g<e.mode_gr;g++)for(h=0;h<e.channels_out;h++)a[g][h]*=t[0],a[g][h]/=b}}function Qa(){this.thm=new ic;this.en=new ic}function Pc(){function r(b,d,a){for(var g=10,q=d+238-14-286,e=-15;0>e;e++){var n,c,f;n=k[g+-10];c=b[q+-224]*n;f=b[d+224]*n;n=k[g+-9];c+=b[q+-160]*n;f+=b[d+160]*n;n=k[g+-8];c+=b[q+-96]*n;f+=b[d+96]*n;n=k[g+-7];c+=b[q+-32]*n;f+=b[d+32]*n;n=k[g+-6];c+=b[q+32]*n;f+=b[d+-32]*n;n=k[g+-5];c+=b[q+96]*n;f+=b[d+-96]*n;n=k[g+-4];c+=b[q+160]*n;f+=b[d+-160]*n;n=k[g+-3];c+=b[q+224]*n;f+=b[d+-224]* +n;n=k[g+-2];c+=b[d+-256]*n;f-=b[q+256]*n;n=k[g+-1];c+=b[d+-192]*n;f-=b[q+192]*n;n=k[g+0];c+=b[d+-128]*n;f-=b[q+128]*n;n=k[g+1];c+=b[d+-64]*n;f-=b[q+64]*n;n=k[g+2];c+=b[d+0]*n;f-=b[q+0]*n;n=k[g+3];c+=b[d+64]*n;f-=b[q+-64]*n;n=k[g+4];c+=b[d+128]*n;f-=b[q+-128]*n;n=k[g+5];c+=b[d+192]*n;f-=b[q+-192]*n;c*=k[g+6];n=f-c;a[30+2*e]=f+c;a[31+2*e]=k[g+7]*n;g+=18;d--;q++}f=b[d+-16]*k[g+-10];c=b[d+-32]*k[g+-2];f+=(b[d+-48]-b[d+16])*k[g+-9];c+=b[d+-96]*k[g+-1];f+=(b[d+-80]+b[d+48])*k[g+-8];c+=b[d+-160]*k[g+0]; +f+=(b[d+-112]-b[d+80])*k[g+-7];c+=b[d+-224]*k[g+1];f+=(b[d+-144]+b[d+112])*k[g+-6];c-=b[d+32]*k[g+2];f+=(b[d+-176]-b[d+144])*k[g+-5];c-=b[d+96]*k[g+3];f+=(b[d+-208]+b[d+176])*k[g+-4];c-=b[d+160]*k[g+4];f+=(b[d+-240]-b[d+208])*k[g+-3];c-=b[d+224];b=c-f;d=c+f;f=a[14];c=a[15]-f;a[31]=d+f;a[30]=b+c;a[15]=b-c;a[14]=d-f;c=a[28]-a[0];a[0]+=a[28];a[28]=c*k[g+-36+7];c=a[29]-a[1];a[1]+=a[29];a[29]=c*k[g+-36+7];c=a[26]-a[2];a[2]+=a[26];a[26]=c*k[g+-72+7];c=a[27]-a[3];a[3]+=a[27];a[27]=c*k[g+-72+7];c=a[24]-a[4]; +a[4]+=a[24];a[24]=c*k[g+-108+7];c=a[25]-a[5];a[5]+=a[25];a[25]=c*k[g+-108+7];c=a[22]-a[6];a[6]+=a[22];a[22]=c*X.SQRT2;c=a[23]-a[7];a[7]+=a[23];a[23]=c*X.SQRT2-a[7];a[7]-=a[6];a[22]-=a[7];a[23]-=a[22];c=a[6];a[6]=a[31]-c;a[31]+=c;c=a[7];a[7]=a[30]-c;a[30]+=c;c=a[22];a[22]=a[15]-c;a[15]+=c;c=a[23];a[23]=a[14]-c;a[14]+=c;c=a[20]-a[8];a[8]+=a[20];a[20]=c*k[g+-180+7];c=a[21]-a[9];a[9]+=a[21];a[21]=c*k[g+-180+7];c=a[18]-a[10];a[10]+=a[18];a[18]=c*k[g+-216+7];c=a[19]-a[11];a[11]+=a[19];a[19]=c*k[g+-216+ +7];c=a[16]-a[12];a[12]+=a[16];a[16]=c*k[g+-252+7];c=a[17]-a[13];a[13]+=a[17];a[17]=c*k[g+-252+7];c=-a[20]+a[24];a[20]+=a[24];a[24]=c*k[g+-216+7];c=-a[21]+a[25];a[21]+=a[25];a[25]=c*k[g+-216+7];c=a[4]-a[8];a[4]+=a[8];a[8]=c*k[g+-216+7];c=a[5]-a[9];a[5]+=a[9];a[9]=c*k[g+-216+7];c=a[0]-a[12];a[0]+=a[12];a[12]=c*k[g+-72+7];c=a[1]-a[13];a[1]+=a[13];a[13]=c*k[g+-72+7];c=a[16]-a[28];a[16]+=a[28];a[28]=c*k[g+-72+7];c=-a[17]+a[29];a[17]+=a[29];a[29]=c*k[g+-72+7];c=X.SQRT2*(a[2]-a[10]);a[2]+=a[10];a[10]=c; +c=X.SQRT2*(a[3]-a[11]);a[3]+=a[11];a[11]=c;c=X.SQRT2*(-a[18]+a[26]);a[18]+=a[26];a[26]=c-a[18];c=X.SQRT2*(-a[19]+a[27]);a[19]+=a[27];a[27]=c-a[19];c=a[2];a[19]-=a[3];a[3]-=c;a[2]=a[31]-c;a[31]+=c;c=a[3];a[11]-=a[19];a[18]-=c;a[3]=a[30]-c;a[30]+=c;c=a[18];a[27]-=a[11];a[19]-=c;a[18]=a[15]-c;a[15]+=c;c=a[19];a[10]-=c;a[19]=a[14]-c;a[14]+=c;c=a[10];a[11]-=c;a[10]=a[23]-c;a[23]+=c;c=a[11];a[26]-=c;a[11]=a[22]-c;a[22]+=c;c=a[26];a[27]-=c;a[26]=a[7]-c;a[7]+=c;c=a[27];a[27]=a[6]-c;a[6]+=c;c=X.SQRT2*(a[0]- +a[4]);a[0]+=a[4];a[4]=c;c=X.SQRT2*(a[1]-a[5]);a[1]+=a[5];a[5]=c;c=X.SQRT2*(a[16]-a[20]);a[16]+=a[20];a[20]=c;c=X.SQRT2*(a[17]-a[21]);a[17]+=a[21];a[21]=c;c=-X.SQRT2*(a[8]-a[12]);a[8]+=a[12];a[12]=c-a[8];c=-X.SQRT2*(a[9]-a[13]);a[9]+=a[13];a[13]=c-a[9];c=-X.SQRT2*(a[25]-a[29]);a[25]+=a[29];a[29]=c-a[25];c=-X.SQRT2*(a[24]+a[28]);a[24]-=a[28];a[28]=c-a[24];c=a[24]-a[16];a[24]=c;c=a[20]-c;a[20]=c;c=a[28]-c;a[28]=c;c=a[25]-a[17];a[25]=c;c=a[21]-c;a[21]=c;c=a[29]-c;a[29]=c;c=a[17]-a[1];a[17]=c;c=a[9]-c; +a[9]=c;c=a[25]-c;a[25]=c;c=a[5]-c;a[5]=c;c=a[21]-c;a[21]=c;c=a[13]-c;a[13]=c;c=a[29]-c;a[29]=c;c=a[1]-a[0];a[1]=c;c=a[16]-c;a[16]=c;c=a[17]-c;a[17]=c;c=a[8]-c;a[8]=c;c=a[9]-c;a[9]=c;c=a[24]-c;a[24]=c;c=a[25]-c;a[25]=c;c=a[4]-c;a[4]=c;c=a[5]-c;a[5]=c;c=a[20]-c;a[20]=c;c=a[21]-c;a[21]=c;c=a[12]-c;a[12]=c;c=a[13]-c;a[13]=c;c=a[28]-c;a[28]=c;c=a[29]-c;a[29]=c;c=a[0];a[0]+=a[31];a[31]-=c;c=a[1];a[1]+=a[30];a[30]-=c;c=a[16];a[16]+=a[15];a[15]-=c;c=a[17];a[17]+=a[14];a[14]-=c;c=a[8];a[8]+=a[23];a[23]-=c; +c=a[9];a[9]+=a[22];a[22]-=c;c=a[24];a[24]+=a[7];a[7]-=c;c=a[25];a[25]+=a[6];a[6]-=c;c=a[4];a[4]+=a[27];a[27]-=c;c=a[5];a[5]+=a[26];a[26]-=c;c=a[20];a[20]+=a[11];a[11]-=c;c=a[21];a[21]+=a[10];a[10]-=c;c=a[12];a[12]+=a[19];a[19]-=c;c=a[13];a[13]+=a[18];a[18]-=c;c=a[28];a[28]+=a[3];a[3]-=c;c=a[29];a[29]+=a[2];a[2]-=c}var k=[-.1482523854003001,32.308141959636465,296.40344946382766,883.1344870032432,11113.947376231741,1057.2713659324597,305.7402417275812,30.825928907280012,3.8533188138216365,59.42900443849514, +709.5899960123345,5281.91112291017,-5829.66483675846,-817.6293103748613,-76.91656988279972,-4.594269939176596,.9063471690191471,.1960342806591213,-.15466694054279598,34.324387823855965,301.8067566458425,817.599602898885,11573.795901679885,1181.2520595540152,321.59731579894424,31.232021761053772,3.7107095756221318,53.650946155329365,684.167428119626,5224.56624370173,-6366.391851890084,-908.9766368219582,-89.83068876699639,-5.411397422890401,.8206787908286602,.3901806440322567,-.16070888947830023,36.147034243915876, +304.11815768187864,732.7429163887613,11989.60988270091,1300.012278487897,335.28490093152146,31.48816102859945,3.373875931311736,47.232241542899175,652.7371796173471,5132.414255594984,-6909.087078780055,-1001.9990371107289,-103.62185754286375,-6.104916304710272,.7416505462720353,.5805693545089249,-.16636367662261495,37.751650073343995,303.01103387567713,627.9747488785183,12358.763425278165,1412.2779918482834,346.7496836825721,31.598286663170416,3.1598635433980946,40.57878626349686,616.1671130880391, +5007.833007176154,-7454.040671756168,-1095.7960341867115,-118.24411666465777,-6.818469345853504,.6681786379192989,.7653668647301797,-.1716176790982088,39.11551877123304,298.3413246578966,503.5259106886539,12679.589408408976,1516.5821921214542,355.9850766329023,31.395241710249053,2.9164211881972335,33.79716964664243,574.8943997801362,4853.234992253242,-7997.57021486075,-1189.7624067269965,-133.6444792601766,-7.7202770609839915,.5993769336819237,.9427934736519954,-.17645823955292173,40.21879108166477, +289.9982036694474,359.3226160751053,12950.259102786438,1612.1013903507662,362.85067106591504,31.045922092242872,2.822222032597987,26.988862316190684,529.8996541764288,4671.371946949588,-8535.899136645805,-1282.5898586244496,-149.58553632943463,-8.643494270763135,.5345111359507916,1.111140466039205,-.36174739330527045,41.04429910497807,277.5463268268618,195.6386023135583,13169.43812144731,1697.6433561479398,367.40983966190305,30.557037410382826,2.531473372857427,20.070154905927314,481.50208566532336, +4464.970341588308,-9065.36882077239,-1373.62841526722,-166.1660487028118,-9.58289321133207,.4729647758913199,1.268786568327291,-.36970682634889585,41.393213350082036,261.2935935556502,12.935476055240873,13336.131683328815,1772.508612059496,369.76534388639965,29.751323653701338,2.4023193045459172,13.304795348228817,430.5615775526625,4237.0568611071185,-9581.931701634761,-1461.6913552409758,-183.12733958476446,-10.718010163869403,.41421356237309503,1.414213562373095,-.37677560326535325,41.619486213528496, +241.05423794991074,-187.94665032361226,13450.063605744153,1836.153896465782,369.4908799925761,29.001847876923147,2.0714759319987186,6.779591200894186,377.7767837205709,3990.386575512536,-10081.709459700915,-1545.947424837898,-200.3762958015653,-11.864482073055006,.3578057213145241,1.546020906725474,-.3829366947518991,41.1516456456653,216.47684307105183,-406.1569483347166,13511.136535077321,1887.8076599260432,367.3025214564151,28.136213436723654,1.913880671464418,.3829366947518991,323.85365704338597, +3728.1472257487526,-10561.233882199509,-1625.2025997821418,-217.62525175416,-13.015432208941645,.3033466836073424,1.66293922460509,-.5822628872992417,40.35639251440489,188.20071124269245,-640.2706748618148,13519.21490106562,1927.6022433578062,362.8197642637487,26.968821921868447,1.7463817695935329,-5.62650678237171,269.3016715297017,3453.386536448852,-11016.145278780888,-1698.6569643425091,-234.7658734267683,-14.16351421663124,.2504869601913055,1.76384252869671,-.5887180101749253,39.23429103868072, +155.76096234403798,-889.2492977967378,13475.470561874661,1955.0535223723712,356.4450994756727,25.894952980042156,1.5695032905781554,-11.181939564328772,214.80884394039484,3169.1640829158237,-11443.321309975563,-1765.1588461316153,-251.68908574481912,-15.49755935939164,.198912367379658,1.847759065022573,-.7912582233652842,37.39369355329111,119.699486012458,-1151.0956593239027,13380.446257078214,1970.3952110853447,348.01959814116185,24.731487364283044,1.3850130831637748,-16.421408865300393,161.05030052864092, +2878.3322807850063,-11838.991423510031,-1823.985884688674,-268.2854986386903,-16.81724543849939,.1483359875383474,1.913880671464418,-.7960642926861912,35.2322109610459,80.01928065061526,-1424.0212633405113,13235.794061869668,1973.804052543835,337.9908651258184,23.289159354463873,1.3934255946442087,-21.099669467133474,108.48348407242611,2583.700758091299,-12199.726194855148,-1874.2780658979746,-284.2467154529415,-18.11369784385905,.09849140335716425,1.961570560806461,-.998795456205172,32.56307803611191, +36.958364584370486,-1706.075448829146,13043.287458812016,1965.3831106103316,326.43182772364605,22.175018750622293,1.198638339011324,-25.371248002043963,57.53505923036915,2288.41886619975,-12522.674544337233,-1914.8400385312243,-299.26241273417224,-19.37805630698734,.04912684976946725,1.990369453344394,.0178904535*X.SQRT2/2.384E-6,.008938074*X.SQRT2/2.384E-6,.0015673635*X.SQRT2/2.384E-6,.001228571*X.SQRT2/2.384E-6,4.856585E-4*X.SQRT2/2.384E-6,1.09434E-4*X.SQRT2/2.384E-6,5.0783E-5*X.SQRT2/2.384E-6, +6.914E-6*X.SQRT2/2.384E-6,12804.797818791945,1945.5515939597317,313.4244966442953,20.801593959731544,1995.1556208053692,9.000838926174497,-29.20218120805369],q=[[2.382191739347913E-13,6.423305872147834E-13,9.400849094049688E-13,1.122435026096556E-12,1.183840321267481E-12,1.122435026096556E-12,9.40084909404969E-13,6.423305872147839E-13,2.382191739347918E-13,5.456116108943412E-12,4.878985199565852E-12,4.240448995017367E-12,3.559909094758252E-12,2.858043359288075E-12,2.156177623817898E-12,1.475637723558783E-12, +8.371015190102974E-13,2.599706096327376E-13,-5.456116108943412E-12,-4.878985199565852E-12,-4.240448995017367E-12,-3.559909094758252E-12,-2.858043359288076E-12,-2.156177623817898E-12,-1.475637723558783E-12,-8.371015190102975E-13,-2.599706096327376E-13,-2.382191739347923E-13,-6.423305872147843E-13,-9.400849094049696E-13,-1.122435026096556E-12,-1.183840321267481E-12,-1.122435026096556E-12,-9.400849094049694E-13,-6.42330587214784E-13,-2.382191739347918E-13],[2.382191739347913E-13,6.423305872147834E-13, +9.400849094049688E-13,1.122435026096556E-12,1.183840321267481E-12,1.122435026096556E-12,9.400849094049688E-13,6.423305872147841E-13,2.382191739347918E-13,5.456116108943413E-12,4.878985199565852E-12,4.240448995017367E-12,3.559909094758253E-12,2.858043359288075E-12,2.156177623817898E-12,1.475637723558782E-12,8.371015190102975E-13,2.599706096327376E-13,-5.461314069809755E-12,-4.921085770524055E-12,-4.343405037091838E-12,-3.732668368707687E-12,-3.093523840190885E-12,-2.430835727329465E-12,-1.734679010007751E-12, +-9.74825365660928E-13,-2.797435120168326E-13,0,0,0,0,0,0,-2.283748241799531E-13,-4.037858874020686E-13,-2.146547464825323E-13],[.1316524975873958,.414213562373095,.7673269879789602,1.091308501069271,1.303225372841206,1.56968557711749,1.920982126971166,2.414213562373094,3.171594802363212,4.510708503662055,7.595754112725146,22.90376554843115,.984807753012208,.6427876096865394,.3420201433256688,.9396926207859084,-.1736481776669303,-.7660444431189779,.8660254037844387,.5,-.5144957554275265,-.4717319685649723, +-.3133774542039019,-.1819131996109812,-.09457419252642064,-.04096558288530405,-.01419856857247115,-.003699974673760037,.8574929257125442,.8817419973177052,.9496286491027329,.9833145924917901,.9955178160675857,.9991605581781475,.999899195244447,.9999931550702802],[0,0,0,0,0,0,2.283748241799531E-13,4.037858874020686E-13,2.146547464825323E-13,5.461314069809755E-12,4.921085770524055E-12,4.343405037091838E-12,3.732668368707687E-12,3.093523840190885E-12,2.430835727329466E-12,1.734679010007751E-12,9.74825365660928E-13, +2.797435120168326E-13,-5.456116108943413E-12,-4.878985199565852E-12,-4.240448995017367E-12,-3.559909094758253E-12,-2.858043359288075E-12,-2.156177623817898E-12,-1.475637723558782E-12,-8.371015190102975E-13,-2.599706096327376E-13,-2.382191739347913E-13,-6.423305872147834E-13,-9.400849094049688E-13,-1.122435026096556E-12,-1.183840321267481E-12,-1.122435026096556E-12,-9.400849094049688E-13,-6.423305872147841E-13,-2.382191739347918E-13]],C=q[d.SHORT_TYPE],B=q[d.SHORT_TYPE],t=q[d.SHORT_TYPE],M=q[d.SHORT_TYPE], +g=[0,1,16,17,8,9,24,25,4,5,20,21,12,13,28,29,2,3,18,19,10,11,26,27,6,7,22,23,14,15,30,31];this.mdct_sub48=function(b,k,a){for(var h=286,D=0;D<b.channels_out;D++){for(var e=0;e<b.mode_gr;e++){for(var n,c=b.l3_side.tt[e][D],f=c.xr,E=0,z=b.sb_sample[D][1-e],w=0,A=0;9>A;A++)for(r(k,h,z[w]),r(k,h+32,z[w+1]),w+=2,h+=64,n=1;32>n;n+=2)z[w-1][n]*=-1;for(n=0;32>n;n++,E+=18){var z=c.block_type,w=b.sb_sample[D][e],v=b.sb_sample[D][1-e];0!=c.mixed_block_flag&&2>n&&(z=0);if(1E-12>b.amp_filter[n])Ia.fill(f,E+0, +E+18,0);else{if(1>b.amp_filter[n])for(A=0;18>A;A++)v[A][g[n]]*=b.amp_filter[n];if(z==d.SHORT_TYPE){for(A=-3;0>A;A++){var p=q[d.SHORT_TYPE][A+3];f[E+3*A+9]=w[9+A][g[n]]*p-w[8-A][g[n]];f[E+3*A+18]=w[14-A][g[n]]*p+w[15+A][g[n]];f[E+3*A+10]=w[15+A][g[n]]*p-w[14-A][g[n]];f[E+3*A+19]=v[2-A][g[n]]*p+v[3+A][g[n]];f[E+3*A+11]=v[3+A][g[n]]*p-v[2-A][g[n]];f[E+3*A+20]=v[8-A][g[n]]*p+v[9+A][g[n]]}A=f;w=E;for(p=0;3>p;p++){var m,x,y,W,u;y=A[w+6]*q[d.SHORT_TYPE][0]-A[w+15];v=A[w+0]*q[d.SHORT_TYPE][2]-A[w+9];m=y+ +v;x=y-v;y=A[w+15]*q[d.SHORT_TYPE][0]+A[w+6];v=A[w+9]*q[d.SHORT_TYPE][2]+A[w+0];W=y+v;u=-y+v;v=2.069978111953089E-11*(A[w+3]*q[d.SHORT_TYPE][1]-A[w+12]);y=2.069978111953089E-11*(A[w+12]*q[d.SHORT_TYPE][1]+A[w+3]);A[w+0]=1.90752519173728E-11*m+v;A[w+15]=1.90752519173728E-11*-W+y;x*=1.6519652744032674E-11;W=9.537625958686404E-12*W+y;A[w+3]=x-W;A[w+6]=x+W;m=9.537625958686404E-12*m-v;u*=1.6519652744032674E-11;A[w+9]=m+u;A[w+12]=m-u;w++}}else{p=H(18);for(A=-9;0>A;A++)m=q[z][A+27]*v[A+9][g[n]]+q[z][A+36]* +v[8-A][g[n]],x=q[z][A+9]*w[A+9][g[n]]-q[z][A+18]*w[8-A][g[n]],p[A+9]=m-x*C[3+A+9],p[A+18]=m*C[3+A+9]+x;var A=f,w=E,pa=u=W=y=x=m=v=void 0,la=void 0,F=void 0,G=void 0;x=p[17]-p[9];W=p[15]-p[11];u=p[14]-p[12];pa=p[0]+p[8];la=p[1]+p[7];F=p[2]+p[6];G=p[3]+p[5];A[w+17]=pa+F-G-(la-p[4]);m=(pa+F-G)*B[19]+(la-p[4]);v=(x-W-u)*B[18];A[w+5]=v+m;A[w+6]=v-m;y=(p[16]-p[10])*B[18];la=la*B[19]+p[4];v=x*B[12]+y+W*B[13]+u*B[14];m=-pa*B[16]+la-F*B[17]+G*B[15];A[w+1]=v+m;A[w+2]=v-m;v=x*B[13]-y-W*B[14]+u*B[12];m=-pa*B[17]+ +la-F*B[15]+G*B[16];A[w+9]=v+m;A[w+10]=v-m;v=x*B[14]-y+W*B[12]-u*B[13];m=pa*B[15]-la+F*B[16]-G*B[17];A[w+13]=v+m;A[w+14]=v-m;G=F=la=pa=u=W=y=x=void 0;x=p[8]-p[0];W=p[6]-p[2];u=p[5]-p[3];pa=p[17]+p[9];la=p[16]+p[10];F=p[15]+p[11];G=p[14]+p[12];A[w+0]=pa+F+G+(la+p[13]);v=(pa+F+G)*B[19]-(la+p[13]);m=(x-W+u)*B[18];A[w+11]=v+m;A[w+12]=v-m;y=(p[7]-p[1])*B[18];la=p[13]-la*B[19];v=pa*B[15]-la+F*B[16]+G*B[17];m=x*B[14]+y+W*B[12]+u*B[13];A[w+3]=v+m;A[w+4]=v-m;v=-pa*B[17]+la-F*B[15]-G*B[16];m=x*B[13]+y-W*B[14]- +u*B[12];A[w+7]=v+m;A[w+8]=v-m;v=-pa*B[16]+la-F*B[17]-G*B[15];m=x*B[12]-y+W*B[13]-u*B[14];A[w+15]=v+m;A[w+16]=v-m}}if(z!=d.SHORT_TYPE&&0!=n)for(A=7;0<=A;--A)z=f[E+A]*t[20+A]+f[E+-1-A]*M[28+A],w=f[E+A]*M[28+A]-f[E+-1-A]*t[20+A],f[E+-1-A]=z,f[E+A]=w}}k=a;h=286;if(1==b.mode_gr)for(e=0;18>e;e++)K.arraycopy(b.sb_sample[D][1][e],0,b.sb_sample[D][0][e],0,32)}}}function d(){var r=d.FFTOFFSET,k=d.MPG_MD_MS_LR,q=null,C=this.psy=null,B=null,t=null;this.setModules=function(d,b,k,a){q=d;C=this.psy=b;B=a;t=k};var ta= +new Pc;this.lame_encode_mp3_frame=function(g,b,l,a,h,D){var e=Zb([2,2]);e[0][0]=new Qa;e[0][1]=new Qa;e[1][0]=new Qa;e[1][1]=new Qa;var n=Zb([2,2]);n[0][0]=new Qa;n[0][1]=new Qa;n[1][0]=new Qa;n[1][1]=new Qa;var c=[null,null],f=g.internal_flags,E=ra([2,4]),z=[.5,.5],w=[[0,0],[0,0]],A=[[0,0],[0,0]];c[0]=b;c[1]=l;if(0==f.lame_encode_frame_init){b=g.internal_flags;var v,p;if(0==b.lame_encode_frame_init){l=H(2014);var m=H(2014);b.lame_encode_frame_init=1;for(p=v=0;v<286+576*(1+b.mode_gr);++v)v<576*b.mode_gr? +(l[v]=0,2==b.channels_out&&(m[v]=0)):(l[v]=c[0][p],2==b.channels_out&&(m[v]=c[1][p]),++p);for(p=0;p<b.mode_gr;p++)for(v=0;v<b.channels_out;v++)b.l3_side.tt[p][v].block_type=d.SHORT_TYPE;ta.mdct_sub48(b,l,m)}}f.padding=0;0>(f.slot_lag-=f.frac_SpF)&&(f.slot_lag+=g.out_samplerate,f.padding=1);if(0!=f.psymodel)for(m=[null,null],v=0,p=Y(2),l=0;l<f.mode_gr;l++){for(b=0;b<f.channels_out;b++)m[b]=c[b],v=576+576*l-d.FFTOFFSET;b=g.VBR==M.vbr_mtrh||g.VBR==M.vbr_mt?C.L3psycho_anal_vbr(g,m,v,l,e,n,w[l],A[l],E[l], +p):C.L3psycho_anal_ns(g,m,v,l,e,n,w[l],A[l],E[l],p);if(0!=b)return-4;g.mode==ka.JOINT_STEREO&&(z[l]=E[l][2]+E[l][3],0<z[l]&&(z[l]=E[l][3]/z[l]));for(b=0;b<f.channels_out;b++){var x=f.l3_side.tt[l][b];x.block_type=p[b];x.mixed_block_flag=0}}else for(l=0;l<f.mode_gr;l++)for(b=0;b<f.channels_out;b++)f.l3_side.tt[l][b].block_type=d.NORM_TYPE,f.l3_side.tt[l][b].mixed_block_flag=0,A[l][b]=w[l][b]=700;0==f.ATH.useAdjust?f.ATH.adjust=1:(b=f.loudness_sq[0][0],E=f.loudness_sq[1][0],2==f.channels_out?(b+=f.loudness_sq[0][1], +E+=f.loudness_sq[1][1]):(b+=b,E+=E),2==f.mode_gr&&(b=Math.max(b,E)),b=.5*b*f.ATH.aaSensitivityP,.03125<b?(1<=f.ATH.adjust?f.ATH.adjust=1:f.ATH.adjust<f.ATH.adjustLimit&&(f.ATH.adjust=f.ATH.adjustLimit),f.ATH.adjustLimit=1):(E=31.98*b+6.25E-4,f.ATH.adjust>=E?(f.ATH.adjust*=.075*E+.925,f.ATH.adjust<E&&(f.ATH.adjust=E)):f.ATH.adjustLimit>=E?f.ATH.adjust=E:f.ATH.adjust<f.ATH.adjustLimit&&(f.ATH.adjust=f.ATH.adjustLimit),f.ATH.adjustLimit=E));ta.mdct_sub48(f,c[0],c[1]);f.mode_ext=d.MPG_MD_LR_LR;if(g.force_ms)f.mode_ext= +d.MPG_MD_MS_LR;else if(g.mode==ka.JOINT_STEREO){for(l=m=E=0;l<f.mode_gr;l++)for(b=0;b<f.channels_out;b++)E+=A[l][b],m+=w[l][b];E<=1*m&&(E=f.l3_side.tt[0],b=f.l3_side.tt[f.mode_gr-1],E[0].block_type==E[1].block_type&&b[0].block_type==b[1].block_type&&(f.mode_ext=d.MPG_MD_MS_LR))}f.mode_ext==k&&(e=n,w=A);if(g.analysis&&null!=f.pinfo)for(l=0;l<f.mode_gr;l++)for(b=0;b<f.channels_out;b++)f.pinfo.ms_ratio[l]=f.ms_ratio[l],f.pinfo.ms_ener_ratio[l]=z[l],f.pinfo.blocktype[l][b]=f.l3_side.tt[l][b].block_type, +f.pinfo.pe[l][b]=w[l][b],K.arraycopy(f.l3_side.tt[l][b].xr,0,f.pinfo.xr[l][b],0,576),f.mode_ext==k&&(f.pinfo.ers[l][b]=f.pinfo.ers[l][b+2],K.arraycopy(f.pinfo.energy[l][b+2],0,f.pinfo.energy[l][b],0,f.pinfo.energy[l][b].length));if(g.VBR==M.vbr_off||g.VBR==M.vbr_abr){for(n=0;18>n;n++)f.nsPsy.pefirbuf[n]=f.nsPsy.pefirbuf[n+1];for(l=A=0;l<f.mode_gr;l++)for(b=0;b<f.channels_out;b++)A+=w[l][b];f.nsPsy.pefirbuf[18]=A;A=f.nsPsy.pefirbuf[9];for(n=0;9>n;n++)A+=(f.nsPsy.pefirbuf[n]+f.nsPsy.pefirbuf[18-n])* +d.fircoef[n];A=3350*f.mode_gr*f.channels_out/A;for(l=0;l<f.mode_gr;l++)for(b=0;b<f.channels_out;b++)w[l][b]*=A}f.iteration_loop.iteration_loop(g,w,z,e);q.format_bitstream(g);a=q.copy_buffer(f,a,h,D,1);g.bWriteVbrTag&&B.addVbrFrame(g);if(g.analysis&&null!=f.pinfo){for(b=0;b<f.channels_out;b++){for(h=0;h<r;h++)f.pinfo.pcmdata[b][h]=f.pinfo.pcmdata[b][h+g.framesize];for(h=r;1600>h;h++)f.pinfo.pcmdata[b][h]=c[b][h-r]}t.set_frame_pinfo(g,e)}f.bitrate_stereoMode_Hist[f.bitrate_index][4]++;f.bitrate_stereoMode_Hist[15][4]++; +2==f.channels_out&&(f.bitrate_stereoMode_Hist[f.bitrate_index][f.mode_ext]++,f.bitrate_stereoMode_Hist[15][f.mode_ext]++);for(g=0;g<f.mode_gr;++g)for(c=0;c<f.channels_out;++c)h=f.l3_side.tt[g][c].block_type|0,0!=f.l3_side.tt[g][c].mixed_block_flag&&(h=4),f.bitrate_blockType_Hist[f.bitrate_index][h]++,f.bitrate_blockType_Hist[f.bitrate_index][5]++,f.bitrate_blockType_Hist[15][h]++,f.bitrate_blockType_Hist[15][5]++;return a}}function Qc(){this.size=this.pos=this.want=this.seen=this.sum=0;this.bag=null; +this.TotalFrameSize=this.nBytesWritten=this.nVbrNumFrames=0}function Rc(){this.tt=[[null,null],[null,null]];this.resvDrain_post=this.resvDrain_pre=this.private_bits=this.main_data_begin=0;this.scfsi=[Y(4),Y(4)];for(var d=0;2>d;d++)for(var k=0;2>k;k++)this.tt[d][k]=new Ab}function Sc(){this.last_en_subshort=ra([4,9]);this.lastAttacks=Y(4);this.pefirbuf=H(19);this.longfact=H(d.SBMAX_l);this.shortfact=H(d.SBMAX_s);this.attackthre_s=this.attackthre=0}function ic(){this.l=H(d.SBMAX_l);this.s=ra([d.SBMAX_s, +3]);var r=this;this.assign=function(k){K.arraycopy(k.l,0,r.l,0,d.SBMAX_l);for(var q=0;q<d.SBMAX_s;q++)for(var C=0;3>C;C++)r.s[q][C]=k.s[q][C]}}function da(){function r(){this.ptr=this.write_timing=0;this.buf=new Int8Array(40)}this.fill_buffer_resample_init=this.iteration_init_init=this.lame_encode_frame_init=this.Class_ID=0;this.mfbuf=ra([2,da.MFSIZE]);this.full_outer_loop=this.use_best_huffman=this.subblock_gain=this.noise_shaping_stop=this.psymodel=this.substep_shaping=this.noise_shaping_amp=this.noise_shaping= +this.highpass2=this.highpass1=this.lowpass2=this.lowpass1=this.mode_ext=this.samplerate_index=this.bitrate_index=this.VBR_max_bitrate=this.VBR_min_bitrate=this.mf_size=this.mf_samples_to_encode=this.resample_ratio=this.channels_out=this.channels_in=this.mode_gr=0;this.l3_side=new Rc;this.ms_ratio=H(2);this.slot_lag=this.frac_SpF=this.padding=0;this.tag_spec=null;this.nMusicCRC=0;this.OldValue=Y(2);this.CurrentStep=Y(2);this.masking_lower=0;this.bv_scf=Y(576);this.pseudohalf=Y(na.SFBMAX);this.sfb21_extra= +!1;this.inbuf_old=Array(2);this.blackfilt=Array(2*da.BPC+1);this.itime=new Float64Array(2);this.sideinfo_len=0;this.sb_sample=ra([2,2,18,d.SBLIMIT]);this.amp_filter=H(32);this.header=Array(da.MAX_HEADER_BUF);this.ResvMax=this.ResvSize=this.ancillary_flag=this.w_ptr=this.h_ptr=0;this.scalefac_band=new ha;this.minval_l=H(d.CBANDS);this.minval_s=H(d.CBANDS);this.nb_1=ra([4,d.CBANDS]);this.nb_2=ra([4,d.CBANDS]);this.nb_s1=ra([4,d.CBANDS]);this.nb_s2=ra([4,d.CBANDS]);this.s3_ll=this.s3_ss=null;this.decay= +0;this.thm=Array(4);this.en=Array(4);this.tot_ener=H(4);this.loudness_sq=ra([2,2]);this.loudness_sq_save=H(2);this.mld_l=H(d.SBMAX_l);this.mld_s=H(d.SBMAX_s);this.bm_l=Y(d.SBMAX_l);this.bo_l=Y(d.SBMAX_l);this.bm_s=Y(d.SBMAX_s);this.bo_s=Y(d.SBMAX_s);this.npart_s=this.npart_l=0;this.s3ind=db([d.CBANDS,2]);this.s3ind_s=db([d.CBANDS,2]);this.numlines_s=Y(d.CBANDS);this.numlines_l=Y(d.CBANDS);this.rnumlines_l=H(d.CBANDS);this.mld_cb_l=H(d.CBANDS);this.mld_cb_s=H(d.CBANDS);this.numlines_l_num1=this.numlines_s_num1= +0;this.pe=H(4);this.ms_ener_ratio_old=this.ms_ratio_l_old=this.ms_ratio_s_old=0;this.blocktype_old=Y(2);this.nsPsy=new Sc;this.VBR_seek_table=new Qc;this.PSY=this.ATH=null;this.nogap_current=this.nogap_total=0;this.findPeakSample=this.findReplayGain=this.decode_on_the_fly=!0;this.AudiophileGain=this.RadioGain=this.PeakSample=0;this.rgdata=null;this.noclipScale=this.noclipGainChange=0;this.bitrate_stereoMode_Hist=db([16,5]);this.bitrate_blockType_Hist=db([16,6]);this.hip=this.pinfo=null;this.in_buffer_nsamples= +0;this.iteration_loop=this.in_buffer_1=this.in_buffer_0=null;for(var k=0;k<this.en.length;k++)this.en[k]=new ic;for(k=0;k<this.thm.length;k++)this.thm[k]=new ic;for(k=0;k<this.header.length;k++)this.header[k]=new r}function Tc(){function r(d,k,g){var b=0,l,a,h;g<<=1;var q=k+g;l=4;do{var e,n,c,f,B,z,w;w=l>>1;f=l;B=l<<1;z=B+f;l=B<<1;a=k;h=a+w;do{var A,v,p,m;v=d[a+0]-d[a+f];A=d[a+0]+d[a+f];m=d[a+B]-d[a+z];p=d[a+B]+d[a+z];d[a+B]=A-p;d[a+0]=A+p;d[a+z]=v-m;d[a+f]=v+m;v=d[h+0]-d[h+f];A=d[h+0]+d[h+f];m=X.SQRT2* +d[h+z];p=X.SQRT2*d[h+B];d[h+B]=A-p;d[h+0]=A+p;d[h+z]=v-m;d[h+f]=v+m;h+=l;a+=l}while(a<q);n=C[b+0];e=C[b+1];for(c=1;c<w;c++){var x,y;x=1-2*e*e;y=2*e*n;a=k+c;h=k+f-c;do{var W,u,J,H,F;W=y*d[a+f]-x*d[h+f];p=x*d[a+f]+y*d[h+f];v=d[a+0]-p;A=d[a+0]+p;J=d[h+0]-W;u=d[h+0]+W;W=y*d[a+z]-x*d[h+z];p=x*d[a+z]+y*d[h+z];m=d[a+B]-p;p=d[a+B]+p;F=d[h+B]-W;H=d[h+B]+W;W=e*p-n*F;p=n*p+e*F;d[a+B]=A-p;d[a+0]=A+p;d[h+z]=J-W;d[h+f]=J+W;W=n*H-e*m;p=e*H+n*m;d[h+B]=u-p;d[h+0]=u+p;d[a+z]=v-W;d[a+f]=v+W;h+=l;a+=l}while(a<q);x=n; +n=x*C[b+0]-e*C[b+1];e=x*C[b+1]+e*C[b+0]}b+=2}while(l<g)}var k=H(d.BLKSIZE),q=H(d.BLKSIZE_s/2),C=[.9238795325112867,.3826834323650898,.9951847266721969,.0980171403295606,.9996988186962042,.02454122852291229,.9999811752826011,.006135884649154475],B=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226, +18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254];this.fft_short=function(k,C,g,b,l){for(k=0;3>k;k++){var a=d.BLKSIZE_s/2,h=65535&192*(k+1),D=d.BLKSIZE_s/8-1;do{var e,n,c,f,E,z=B[D<<2]&255;e=q[z]*b[g][l+z+h];E=q[127-z]*b[g][l+z+h+128];n=e-E;e+=E;c=q[z+64]*b[g][l+z+h+64];E=q[63-z]*b[g][l+z+h+192];f=c-E;c+=E;a-=4;C[k][a+0]=e+c;C[k][a+2]=e-c;C[k][a+ +1]=n+f;C[k][a+3]=n-f;e=q[z+1]*b[g][l+z+h+1];E=q[126-z]*b[g][l+z+h+129];n=e-E;e+=E;c=q[z+65]*b[g][l+z+h+65];E=q[62-z]*b[g][l+z+h+193];f=c-E;c+=E;C[k][a+d.BLKSIZE_s/2+0]=e+c;C[k][a+d.BLKSIZE_s/2+2]=e-c;C[k][a+d.BLKSIZE_s/2+1]=n+f;C[k][a+d.BLKSIZE_s/2+3]=n-f}while(0<=--D);r(C[k],a,d.BLKSIZE_s/2)}};this.fft_long=function(q,C,g,b,l){q=d.BLKSIZE/8-1;var a=d.BLKSIZE/2;do{var h,D,e,n,c,f=B[q]&255;h=k[f]*b[g][l+f];c=k[f+512]*b[g][l+f+512];D=h-c;h+=c;e=k[f+256]*b[g][l+f+256];c=k[f+768]*b[g][l+f+768];n=e-c; +e+=c;a-=4;C[a+0]=h+e;C[a+2]=h-e;C[a+1]=D+n;C[a+3]=D-n;h=k[f+1]*b[g][l+f+1];c=k[f+513]*b[g][l+f+513];D=h-c;h+=c;e=k[f+257]*b[g][l+f+257];c=k[f+769]*b[g][l+f+769];n=e-c;e+=c;C[a+d.BLKSIZE/2+0]=h+e;C[a+d.BLKSIZE/2+2]=h-e;C[a+d.BLKSIZE/2+1]=D+n;C[a+d.BLKSIZE/2+3]=D-n}while(0<=--q);r(C,a,d.BLKSIZE/2)};this.init_fft=function(r){for(r=0;r<d.BLKSIZE;r++)k[r]=.42-.5*Math.cos(2*Math.PI*(r+.5)/d.BLKSIZE)+.08*Math.cos(4*Math.PI*(r+.5)/d.BLKSIZE);for(r=0;r<d.BLKSIZE_s/2;r++)q[r]=.5*(1-Math.cos(2*Math.PI*(r+.5)/ +d.BLKSIZE_s))}}function jc(){function r(a,c){for(var b=0,m=0;m<d.BLKSIZE/2;++m)b+=a[m]*c.ATH.eql_w[m];return b*=z}function k(a,d,c,b,g,f){var e;if(d>a)if(d<a*A)e=d/a;else return a+d;else{if(a>=d*A)return a+d;e=a/d}a+=d;if(6>=b+3){if(e>=w)return a;b=0|X.FAST_LOG10_X(e,16);return a*x[b]}b=0|X.FAST_LOG10_X(e,16);d=0!=f?g.ATH.cb_s[c]*g.ATH.adjust:g.ATH.cb_l[c]*g.ATH.adjust;return a<v*d?a>d?(c=1,13>=b&&(c=y[b]),d=X.FAST_LOG10_X(a/d,10/15),a*((m[b]-c)*d+c)):13<b?a:a*y[b]:a*m[b]}function q(a,d,c){var b; +0>a&&(a=0);0>d&&(d=0);if(0>=a)return d;if(0>=d)return a;b=d>a?d/a:a/d;if(-2<=c&&2>=c){if(b>=w)return a+d;c=0|X.FAST_LOG10_X(b,16);return(a+d)*W[c]}if(b<A)return a+d;a<d&&(a=d);return a}function C(a,c,b,m,g){var f,e,k=0,h=0;for(f=e=0;f<d.SBMAX_s;++e,++f){for(var l=a.bo_s[f],n=a.npart_s,l=l<n?l:n;e<l;)k+=c[e],h+=b[e],e++;a.en[m].s[f][g]=k;a.thm[m].s[f][g]=h;if(e>=n){++f;break}h=a.PSY.bo_s_weight[f];n=1-h;k=h*c[e];h*=b[e];a.en[m].s[f][g]+=k;a.thm[m].s[f][g]+=h;k=n*c[e];h=n*b[e]}for(;f<d.SBMAX_s;++f)a.en[m].s[f][g]= +0,a.thm[m].s[f][g]=0}function B(a,c,b,m){var g,f,e=0,k=0;for(g=f=0;g<d.SBMAX_l;++f,++g){for(var h=a.bo_l[g],l=a.npart_l,h=h<l?h:l;f<h;)e+=c[f],k+=b[f],f++;a.en[m].l[g]=e;a.thm[m].l[g]=k;if(f>=l){++g;break}k=a.PSY.bo_l_weight[g];l=1-k;e=k*c[f];k*=b[f];a.en[m].l[g]+=e;a.thm[m].l[g]+=k;e=l*c[f];k=l*b[f]}for(;g<d.SBMAX_l;++g)a.en[m].l[g]=0,a.thm[m].l[g]=0}function t(a,d,c){return 1<=c?a:0>=c?d:0<d?Math.pow(a/d,c)*d:0}function V(a,c){for(var b=309.07,m=0;m<d.SBMAX_s-1;m++)for(var g=0;3>g;g++){var f=a.thm.s[m][g]; +if(0<f){var f=f*c,e=a.en.s[m][g];e>f&&(b=e>1E10*f?b+23.02585092994046*u[m]:b+u[m]*X.FAST_LOG10(e/f))}}return b}function g(a,c){for(var b=281.0575,m=0;m<d.SBMAX_l-1;m++){var g=a.thm.l[m];if(0<g){var g=g*c,f=a.en.l[m];f>g&&(b=f>1E10*g?b+23.02585092994046*pa[m]:b+pa[m]*X.FAST_LOG10(f/g))}}return b}function b(a,d,c,b,m){var g,f;for(g=f=0;g<a.npart_l;++g){var e=0,k=0,h;for(h=0;h<a.numlines_l[g];++h,++f){var l=d[f],e=e+l;k<l&&(k=l)}c[g]=e;b[g]=k;m[g]=e*a.rnumlines_l[g]}}function l(a,d,c,b){var m=p.length- +1,g=0,f=c[g]+c[g+1];if(0<f){var e=d[g];e<d[g+1]&&(e=d[g+1]);f=20*(2*e-f)/(f*(a.numlines_l[g]+a.numlines_l[g+1]-1));f|=0;f>m&&(f=m);b[g]=f}else b[g]=0;for(g=1;g<a.npart_l-1;g++)f=c[g-1]+c[g]+c[g+1],0<f?(e=d[g-1],e<d[g]&&(e=d[g]),e<d[g+1]&&(e=d[g+1]),f=20*(3*e-f)/(f*(a.numlines_l[g-1]+a.numlines_l[g]+a.numlines_l[g+1]-1)),f|=0,f>m&&(f=m),b[g]=f):b[g]=0;f=c[g-1]+c[g];0<f?(e=d[g-1],e<d[g]&&(e=d[g]),f=20*(2*e-f)/(f*(a.numlines_l[g-1]+a.numlines_l[g]-1)),f|=0,f>m&&(f=m),b[g]=f):b[g]=0}function a(a,d,c, +b,m,g,f){var e=2*g;m=0<g?Math.pow(10,m):1;for(var k,h,l=0;l<f;++l){var n=a[2][l],p=a[3][l],y=d[0][l],q=d[1][l],u=d[2][l],x=d[3][l];y<=1.58*q&&q<=1.58*y?(k=c[l]*n,h=Math.max(u,Math.min(x,c[l]*p)),k=Math.max(x,Math.min(u,k))):(h=u,k=x);0<g&&(x=b[l]*m,y=Math.min(Math.max(y,x),Math.max(q,x)),u=Math.max(h,x),x=Math.max(k,x),q=u+x,0<q&&y*e<q&&(y=y*e/q,u*=y,x*=y),h=Math.min(u,h),k=Math.min(x,k));h>n&&(h=n);k>p&&(k=p);d[2][l]=h;d[3][l]=k}}function h(a,d){var c;c=0<=a?27*-a:a*d;return-72>=c?0:Math.exp(.2302585093* +c)}function D(a){0>a&&(a=0);a*=.001;return 13*Math.atan(.76*a)+3.5*Math.atan(a*a/56.25)}function e(a,c,b,m,g,f,e,k,h,l,n,p){var y=H(d.CBANDS+1),q=k/(15<p?1152:384),u=Y(d.HBLKSIZE),x;k/=h;var r=0,v=0;for(x=0;x<d.CBANDS;x++){var t,w;t=D(k*r);y[x]=k*r;for(w=r;.34>D(k*w)-t&&w<=h/2;w++);a[x]=w-r;for(v=x+1;r<w;)u[r++]=x;if(r>h/2){r=h/2;++x;break}}y[x]=k*r;for(r=0;r<p;r++)x=l[r],t=l[r+1],x=0|Math.floor(.5+n*(x-.5)),0>x&&(x=0),w=0|Math.floor(.5+n*(t-.5)),w>h/2&&(w=h/2),b[r]=(u[x]+u[w])/2,c[r]=u[w],e[r]=(q* +t-y[c[r]])/(y[c[r]+1]-y[c[r]]),0>e[r]?e[r]=0:1<e[r]&&(e[r]=1),t=D(k*l[r]*n),t=Math.min(t,15.5)/15.5,f[r]=Math.pow(10,1.25*(1-Math.cos(Math.PI*t))-2.5);for(c=r=0;c<v;c++)b=a[c],t=D(k*r),f=D(k*(r+b-1)),m[c]=.5*(t+f),t=D(k*(r-.5)),f=D(k*(r+b-.5)),g[c]=f-t,r+=b;return v}function n(a,c,b,m,g,f){var e=ra([d.CBANDS,d.CBANDS]),k=0;if(f)for(var l=0;l<c;l++)for(f=0;f<c;f++){var n;var y=n=void 0,y=n=void 0;n=b[l]-b[f];n=0<=n?3*n:1.5*n;.5<=n&&2.5>=n?(y=n-.5,y=8*(y*y-2*y)):y=0;n+=.474;n=15.811389+7.5*n-17.5*Math.sqrt(1+ +n*n);-60>=n?n=0:(n=Math.exp(.2302585093*(y+n)),n/=.6609193);y=n*m[f];e[l][f]=y*g[l]}else for(f=0;f<c;f++){n=15+Math.min(21/b[f],12);var p;var l=n,q=y=0;p=0;var u=q=void 0;for(p=0;1E-20<h(p,l);--p);q=p;for(u=0;1E-12<Math.abs(u-q);)p=(u+q)/2,0<h(p,l)?u=p:q=p;y=q;for(p=0;1E-20<h(p,l);p+=1);q=0;for(u=p;1E-12<Math.abs(u-q);)p=(u+q)/2,0<h(p,l)?q=p:u=p;for(var q=u,u=0,x=void 0,x=0;1E3>=x;++x)p=y+x*(q-y)/1E3,p=h(p,l),u+=p;p=1001/(u*(q-y));for(l=0;l<c;l++)y=p*h(b[l]-b[f],n)*m[f],e[l][f]=y*g[l]}for(l=0;l<c;l++){for(f= +0;f<c&&!(0<e[l][f]);f++);a[l][0]=f;for(f=c-1;0<f&&!(0<e[l][f]);f--);a[l][1]=f;k+=a[l][1]-a[l][0]+1}b=H(k);for(l=m=0;l<c;l++)for(f=a[l][0];f<=a[l][1];f++)b[m++]=e[l][f];return b}function c(a){a=D(a);a=Math.min(a,15.5)/15.5;return Math.pow(10,1.25*(1-Math.cos(Math.PI*a))-2.5)}function f(a,c){-.3>a&&(a=3410);a=Math.max(.1,a/1E3);return 3.64*Math.pow(a,-.8)-6.8*Math.exp(-.6*Math.pow(a-3.4,2))+6*Math.exp(-.15*Math.pow(a-8.7,2))+.001*(.6+.04*c)*Math.pow(a,4)}var E=new Tc,z=1/217621504/(d.BLKSIZE/2),w,A, +v,p=[1,.79433,.63096,.63096,.63096,.63096,.63096,.25119,.11749],m=[3.3246*3.3246,3.23837*3.23837,9.9500500969,9.0247369744,8.1854926609,7.0440875649,2.46209*2.46209,2.284*2.284,4.4892710641,1.96552*1.96552,1.82335*1.82335,1.69146*1.69146,2.4621061921,2.1508568964,1.37074*1.37074,1.31036*1.31036,1.5691069696,1.4555939904,1.16203*1.16203,1.2715945225,1.09428*1.09428,1.0659*1.0659,1.0779838276,1.0382591025,1],x=[1.7782755904,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537, +1.6999465924,1.22321*1.22321,1.3169398564,1],y=[5.5396212496,2.29259*2.29259,4.9868695969,2.12675*2.12675,2.02545*2.02545,1.87894*1.87894,1.74303*1.74303,1.61695*1.61695,2.2499700001,1.39148*1.39148,1.29083*1.29083,1.19746*1.19746,1.2339655056,1.0779838276],W=[1.7782755904,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.6999465924,1.22321*1.22321,1.3169398564,1],u=[11.8,13.6,17.2,32,46.5,51.3,57.5,67.1,71.5,84.6,97.6,130],pa=[6.8,5.8,5.8,6.4,6.5,9.9,12.1,14.4,15,18.9, +21.6,26.9,34.2,40.2,46.8,56.5,60.7,73.9,85.7,93.4,126.1],la=[-1.730326E-17,-.01703172,-1.349528E-17,.0418072,-6.73278E-17,-.0876324,-3.0835E-17,.1863476,-1.104424E-16,-.627638];this.L3psycho_anal_ns=function(a,c,m,f,e,h,n,y,q,u){var x=a.internal_flags,v=ra([2,d.BLKSIZE]),w=ra([2,3,d.BLKSIZE_s]),F=H(d.CBANDS+1),z=H(d.CBANDS+1),A=H(d.CBANDS+2),W=Y(2),D=Y(2),pa,R,Fa,L,K,Z,Da,O,Q=ra([2,576]),P,da=Y(d.CBANDS+2),N=Y(d.CBANDS+2);Ia.fill(N,0);pa=x.channels_out;a.mode==ka.JOINT_STEREO&&(pa=4);P=a.VBR==M.vbr_off? +0==x.ResvMax?0:x.ResvSize/x.ResvMax*.5:a.VBR==M.vbr_rh||a.VBR==M.vbr_mtrh||a.VBR==M.vbr_mt?.6:1;for(R=0;R<x.channels_out;R++){var ua=c[R],ma=m+576-350-21+192;for(L=0;576>L;L++){var Ga,Sa;Ga=ua[ma+L+10];for(K=Sa=0;9>K;K+=2)Ga+=la[K]*(ua[ma+L+K]+ua[ma+L+21-K]),Sa+=la[K+1]*(ua[ma+L+K+1]+ua[ma+L+21-K-1]);Q[R][L]=Ga+Sa}e[f][R].en.assign(x.en[R]);e[f][R].thm.assign(x.thm[R]);2<pa&&(h[f][R].en.assign(x.en[R+2]),h[f][R].thm.assign(x.thm[R+2]))}for(R=0;R<pa;R++){var ea=H(12),Oa=[0,0,0,0],kc=H(12),na=1,Ca, +ha=H(d.CBANDS),Qa=H(d.CBANDS),va=[0,0,0,0],db=H(d.HBLKSIZE),fb=ra([3,d.HBLKSIZE_s]);for(L=0;3>L;L++)ea[L]=x.nsPsy.last_en_subshort[R][L+6],kc[L]=ea[L]/x.nsPsy.last_en_subshort[R][L+4],Oa[0]+=ea[L];if(2==R)for(L=0;576>L;L++){var eb,Gb;eb=Q[0][L];Gb=Q[1][L];Q[0][L]=eb+Gb;Q[1][L]=eb-Gb}var vb=Q[R&1],Hb=0;for(L=0;9>L;L++){for(var tb=Hb+64,Ta=1;Hb<tb;Hb++)Ta<Math.abs(vb[Hb])&&(Ta=Math.abs(vb[Hb]));x.nsPsy.last_en_subshort[R][L]=ea[L+3]=Ta;Oa[1+L/3]+=Ta;Ta=Ta>ea[L+3-2]?Ta/ea[L+3-2]:ea[L+3-2]>10*Ta?ea[L+ +3-2]/(10*Ta):0;kc[L+3]=Ta}if(a.analysis){var Pb=kc[0];for(L=1;12>L;L++)Pb<kc[L]&&(Pb=kc[L]);x.pinfo.ers[f][R]=x.pinfo.ers_save[R];x.pinfo.ers_save[R]=Pb}Ca=3==R?x.nsPsy.attackthre_s:x.nsPsy.attackthre;for(L=0;12>L;L++)0==va[L/3]&&kc[L]>Ca&&(va[L/3]=L%3+1);for(L=1;4>L;L++)1.7>(Oa[L-1]>Oa[L]?Oa[L-1]/Oa[L]:Oa[L]/Oa[L-1])&&(va[L]=0,1==L&&(va[0]=0));0!=va[0]&&0!=x.nsPsy.lastAttacks[R]&&(va[0]=0);if(3==x.nsPsy.lastAttacks[R]||0!=va[0]+va[1]+va[2]+va[3])na=0,0!=va[1]&&0!=va[0]&&(va[1]=0),0!=va[2]&&0!=va[1]&& +(va[2]=0),0!=va[3]&&0!=va[2]&&(va[3]=0);2>R?D[R]=na:0==na&&(D[0]=D[1]=0);q[R]=x.tot_ener[R];var S=a,Pa=db,Qb=fb,Ua=v,wb=R&1,Ya=w,Va=R&1,mb=f,Ja=R,za=c,ub=m,$a=S.internal_flags;if(2>Ja)E.fft_long($a,Ua[wb],Ja,za,ub),E.fft_short($a,Ya[Va],Ja,za,ub);else if(2==Ja){for(var fa=d.BLKSIZE-1;0<=fa;--fa){var Rb=Ua[wb+0][fa],Ib=Ua[wb+1][fa];Ua[wb+0][fa]=(Rb+Ib)*X.SQRT2*.5;Ua[wb+1][fa]=(Rb-Ib)*X.SQRT2*.5}for(var Ka=2;0<=Ka;--Ka)for(fa=d.BLKSIZE_s-1;0<=fa;--fa)Rb=Ya[Va+0][Ka][fa],Ib=Ya[Va+1][Ka][fa],Ya[Va+0][Ka][fa]= +(Rb+Ib)*X.SQRT2*.5,Ya[Va+1][Ka][fa]=(Rb-Ib)*X.SQRT2*.5}Pa[0]=Ua[wb+0][0];Pa[0]*=Pa[0];for(fa=d.BLKSIZE/2-1;0<=fa;--fa){var ac=Ua[wb+0][d.BLKSIZE/2-fa],Bb=Ua[wb+0][d.BLKSIZE/2+fa];Pa[d.BLKSIZE/2-fa]=.5*(ac*ac+Bb*Bb)}for(Ka=2;0<=Ka;--Ka)for(Qb[Ka][0]=Ya[Va+0][Ka][0],Qb[Ka][0]*=Qb[Ka][0],fa=d.BLKSIZE_s/2-1;0<=fa;--fa)ac=Ya[Va+0][Ka][d.BLKSIZE_s/2-fa],Bb=Ya[Va+0][Ka][d.BLKSIZE_s/2+fa],Qb[Ka][d.BLKSIZE_s/2-fa]=.5*(ac*ac+Bb*Bb);for(var Ea=0,fa=11;fa<d.HBLKSIZE;fa++)Ea+=Pa[fa];$a.tot_ener[Ja]=Ea;if(S.analysis){for(fa= +0;fa<d.HBLKSIZE;fa++)$a.pinfo.energy[mb][Ja][fa]=$a.pinfo.energy_save[Ja][fa],$a.pinfo.energy_save[Ja][fa]=Pa[fa];$a.pinfo.pe[mb][Ja]=$a.pe[Ja]}2==S.athaa_loudapprox&&2>Ja&&($a.loudness_sq[mb][Ja]=$a.loudness_sq_save[Ja],$a.loudness_sq_save[Ja]=r(Pa,$a));b(x,db,F,ha,Qa);l(x,ha,Qa,da);for(O=0;3>O;O++){for(var qc,Ba,gb=fb,hb=z,Sb=A,Jb=R,bc=O,aa=a.internal_flags,nb=void 0,oa=void 0,oa=nb=0;oa<aa.npart_s;++oa){for(var ab=0,lc=0,Ab=aa.numlines_s[oa],ib=0;ib<Ab;++ib,++nb){var rc=gb[bc][nb],ab=ab+rc;lc< +rc&&(lc=rc)}hb[oa]=ab}for(nb=oa=0;oa<aa.npart_s;oa++){var ob=aa.s3ind_s[oa][0],Cb=aa.s3_ss[nb++]*hb[ob];for(++ob;ob<=aa.s3ind_s[oa][1];)Cb+=aa.s3_ss[nb]*hb[ob],++nb,++ob;var Tb=2*aa.nb_s1[Jb][oa];Sb[oa]=Math.min(Cb,Tb);aa.blocktype_old[Jb&1]==d.SHORT_TYPE&&(Tb=16*aa.nb_s2[Jb][oa],Sb[oa]=Math.min(Tb,Sb[oa]));aa.nb_s2[Jb][oa]=aa.nb_s1[Jb][oa];aa.nb_s1[Jb][oa]=Cb}for(;oa<=d.CBANDS;++oa)hb[oa]=0,Sb[oa]=0;C(x,z,A,R,O);for(Da=0;Da<d.SBMAX_s;Da++){Ba=x.thm[R].s[Da][O];Ba*=.8;if(2<=va[O]||1==va[O+1]){var Kb= +0!=O?O-1:2,Ta=t(x.thm[R].s[Da][Kb],Ba,.6*P);Ba=Math.min(Ba,Ta)}if(1==va[O])Kb=0!=O?O-1:2,Ta=t(x.thm[R].s[Da][Kb],Ba,.3*P),Ba=Math.min(Ba,Ta);else if(0!=O&&3==va[O-1]||0==O&&3==x.nsPsy.lastAttacks[R])Kb=2!=O?O+1:0,Ta=t(x.thm[R].s[Da][Kb],Ba,.3*P),Ba=Math.min(Ba,Ta);qc=ea[3*O+3]+ea[3*O+4]+ea[3*O+5];6*ea[3*O+5]<qc&&(Ba*=.5,6*ea[3*O+4]<qc&&(Ba*=.5));x.thm[R].s[Da][O]=Ba}}x.nsPsy.lastAttacks[R]=va[2];for(Fa=Z=0;Fa<x.npart_l;Fa++){for(var pb=x.s3ind[Fa][0],Ub=F[pb]*p[da[pb]],qb=x.s3_ll[Z++]*Ub;++pb<=x.s3ind[Fa][1];)Ub= +F[pb]*p[da[pb]],qb=k(qb,x.s3_ll[Z++]*Ub,pb,pb-Fa,x,0);qb*=.158489319246111;A[Fa]=x.blocktype_old[R&1]==d.SHORT_TYPE?qb:t(Math.min(qb,Math.min(2*x.nb_1[R][Fa],16*x.nb_2[R][Fa])),qb,P);x.nb_2[R][Fa]=x.nb_1[R][Fa];x.nb_1[R][Fa]=qb}for(;Fa<=d.CBANDS;++Fa)F[Fa]=0,A[Fa]=0;B(x,F,A,R)}if((a.mode==ka.STEREO||a.mode==ka.JOINT_STEREO)&&0<a.interChRatio){var Db=a.interChRatio,ba=a.internal_flags;if(1<ba.channels_out){for(var La=0;La<d.SBMAX_l;La++){var cc=ba.thm[0].l[La],Lb=ba.thm[1].l[La];ba.thm[0].l[La]+=Lb* +Db;ba.thm[1].l[La]+=cc*Db}for(La=0;La<d.SBMAX_s;La++)for(var rb=0;3>rb;rb++)cc=ba.thm[0].s[La][rb],Lb=ba.thm[1].s[La][rb],ba.thm[0].s[La][rb]+=Lb*Db,ba.thm[1].s[La][rb]+=cc*Db}}if(a.mode==ka.JOINT_STEREO){for(var Wa,ga=0;ga<d.SBMAX_l;ga++)if(!(x.thm[0].l[ga]>1.58*x.thm[1].l[ga]||x.thm[1].l[ga]>1.58*x.thm[0].l[ga])){var Za=x.mld_l[ga]*x.en[3].l[ga],sb=Math.max(x.thm[2].l[ga],Math.min(x.thm[3].l[ga],Za)),Za=x.mld_l[ga]*x.en[2].l[ga],sc=Math.max(x.thm[3].l[ga],Math.min(x.thm[2].l[ga],Za));x.thm[2].l[ga]= +sb;x.thm[3].l[ga]=sc}for(ga=0;ga<d.SBMAX_s;ga++)for(var wa=0;3>wa;wa++)x.thm[0].s[ga][wa]>1.58*x.thm[1].s[ga][wa]||x.thm[1].s[ga][wa]>1.58*x.thm[0].s[ga][wa]||(Za=x.mld_s[ga]*x.en[3].s[ga][wa],sb=Math.max(x.thm[2].s[ga][wa],Math.min(x.thm[3].s[ga][wa],Za)),Za=x.mld_s[ga]*x.en[2].s[ga][wa],sc=Math.max(x.thm[3].s[ga][wa],Math.min(x.thm[2].s[ga][wa],Za)),x.thm[2].s[ga][wa]=sb,x.thm[3].s[ga][wa]=sc);Wa=a.msfix;if(0<Math.abs(Wa)){for(var Mb=Wa,mc=Mb,dc=Math.pow(10,a.ATHlower*x.ATH.adjust),Mb=2*Mb,mc=2* +mc,Aa=0;Aa<d.SBMAX_l;Aa++){var Vb,Ra,Ha,bb;bb=x.ATH.cb_l[x.bm_l[Aa]]*dc;Vb=Math.min(Math.max(x.thm[0].l[Aa],bb),Math.max(x.thm[1].l[Aa],bb));Ra=Math.max(x.thm[2].l[Aa],bb);Ha=Math.max(x.thm[3].l[Aa],bb);if(Vb*Mb<Ra+Ha){var ec=Vb*mc/(Ra+Ha);Ra*=ec;Ha*=ec}x.thm[2].l[Aa]=Math.min(Ra,x.thm[2].l[Aa]);x.thm[3].l[Aa]=Math.min(Ha,x.thm[3].l[Aa])}dc*=d.BLKSIZE_s/d.BLKSIZE;for(Aa=0;Aa<d.SBMAX_s;Aa++)for(var xa=0;3>xa;xa++)bb=x.ATH.cb_s[x.bm_s[Aa]]*dc,Vb=Math.min(Math.max(x.thm[0].s[Aa][xa],bb),Math.max(x.thm[1].s[Aa][xa], +bb)),Ra=Math.max(x.thm[2].s[Aa][xa],bb),Ha=Math.max(x.thm[3].s[Aa][xa],bb),Vb*Mb<Ra+Ha&&(ec=Vb*Mb/(Ra+Ha),Ra*=ec,Ha*=ec),x.thm[2].s[Aa][xa]=Math.min(x.thm[2].s[Aa][xa],Ra),x.thm[3].s[Aa][xa]=Math.min(x.thm[3].s[Aa][xa],Ha)}}var jb=a.internal_flags;a.short_blocks!=sa.short_block_coupled||0!=D[0]&&0!=D[1]||(D[0]=D[1]=0);for(var Na=0;Na<jb.channels_out;Na++)W[Na]=d.NORM_TYPE,a.short_blocks==sa.short_block_dispensed&&(D[Na]=1),a.short_blocks==sa.short_block_forced&&(D[Na]=0),0!=D[Na]?jb.blocktype_old[Na]== +d.SHORT_TYPE&&(W[Na]=d.STOP_TYPE):(W[Na]=d.SHORT_TYPE,jb.blocktype_old[Na]==d.NORM_TYPE&&(jb.blocktype_old[Na]=d.START_TYPE),jb.blocktype_old[Na]==d.STOP_TYPE&&(jb.blocktype_old[Na]=d.SHORT_TYPE)),u[Na]=jb.blocktype_old[Na],jb.blocktype_old[Na]=W[Na];for(R=0;R<pa;R++){var Wb,kb=0,ca,Eb;if(1<R){Wb=y;kb=-2;ca=d.NORM_TYPE;if(u[0]==d.SHORT_TYPE||u[1]==d.SHORT_TYPE)ca=d.SHORT_TYPE;Eb=h[f][R-2]}else Wb=n,kb=0,ca=u[R],Eb=e[f][R];Wb[kb+R]=ca==d.SHORT_TYPE?V(Eb,x.masking_lower):g(Eb,x.masking_lower);a.analysis&& +(x.pinfo.pe[f][R]=Wb[kb+R])}return 0};var F=[-1.730326E-17,-.01703172,-1.349528E-17,.0418072,-6.73278E-17,-.0876324,-3.0835E-17,.1863476,-1.104424E-16,-.627638];this.L3psycho_anal_vbr=function(c,m,f,e,k,h,n,x,y,u){for(var v=c.internal_flags,w,z,A=H(d.HBLKSIZE),W=ra([3,d.HBLKSIZE_s]),D=ra([2,d.BLKSIZE]),M=ra([2,3,d.BLKSIZE_s]),la=ra([4,d.CBANDS]),O=ra([4,d.CBANDS]),R=ra([4,3]),K=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],L=Y(2),pa=c.mode==ka.JOINT_STEREO?4:v.channels_out,Z=ra([2,576]),Q=c.internal_flags, +da=Q.channels_out,ua=c.mode==ka.JOINT_STEREO?4:da,P=0;P<da;P++){firbuf=m[P];for(var ma=f+576-350-21+192,N=0;576>N;N++){var na,Ca;na=firbuf[ma+N+10];for(var Ga=Ca=0;9>Ga;Ga+=2)na+=F[Ga]*(firbuf[ma+N+Ga]+firbuf[ma+N+21-Ga]),Ca+=F[Ga+1]*(firbuf[ma+N+Ga+1]+firbuf[ma+N+21-Ga-1]);Z[P][N]=na+Ca}k[e][P].en.assign(Q.en[P]);k[e][P].thm.assign(Q.thm[P]);2<ua&&(h[e][P].en.assign(Q.en[P+2]),h[e][P].thm.assign(Q.thm[P+2]))}for(P=0;P<ua;P++){var Sa=H(12),ea=H(12),Oa=[0,0,0,0],Ia=Z[P&1],ha=0,eb=3==P?Q.nsPsy.attackthre_s: +Q.nsPsy.attackthre,Qa=1;if(2==P)for(N=0,Ga=576;0<Ga;++N,--Ga){var db=Z[0][N],va=Z[1][N];Z[0][N]=db+va;Z[1][N]=db-va}for(N=0;3>N;N++)ea[N]=Q.nsPsy.last_en_subshort[P][N+6],Sa[N]=ea[N]/Q.nsPsy.last_en_subshort[P][N+4],Oa[0]+=ea[N];for(N=0;9>N;N++){for(var vb=ha+64,fb=1;ha<vb;ha++)fb<Math.abs(Ia[ha])&&(fb=Math.abs(Ia[ha]));Q.nsPsy.last_en_subshort[P][N]=ea[N+3]=fb;Oa[1+N/3]+=fb;fb=fb>ea[N+3-2]?fb/ea[N+3-2]:ea[N+3-2]>10*fb?ea[N+3-2]/(10*fb):0;Sa[N+3]=fb}for(N=0;3>N;++N){var ub=ea[3*N+3]+ea[3*N+4]+ea[3* +N+5],Gb=1;6*ea[3*N+5]<ub&&(Gb*=.5,6*ea[3*N+4]<ub&&(Gb*=.5));R[P][N]=Gb}if(c.analysis){for(var tb=Sa[0],N=1;12>N;N++)tb<Sa[N]&&(tb=Sa[N]);Q.pinfo.ers[e][P]=Q.pinfo.ers_save[P];Q.pinfo.ers_save[P]=tb}for(N=0;12>N;N++)0==K[P][N/3]&&Sa[N]>eb&&(K[P][N/3]=N%3+1);for(N=1;4>N;N++){var Hb=Oa[N-1],Ab=Oa[N];4E4>Math.max(Hb,Ab)&&Hb<1.7*Ab&&Ab<1.7*Hb&&(1==N&&K[P][0]<=K[P][N]&&(K[P][0]=0),K[P][N]=0)}K[P][0]<=Q.nsPsy.lastAttacks[P]&&(K[P][0]=0);if(3==Q.nsPsy.lastAttacks[P]||0!=K[P][0]+K[P][1]+K[P][2]+K[P][3])Qa= +0,0!=K[P][1]&&0!=K[P][0]&&(K[P][1]=0),0!=K[P][2]&&0!=K[P][1]&&(K[P][2]=0),0!=K[P][3]&&0!=K[P][2]&&(K[P][3]=0);2>P?L[P]=Qa:0==Qa&&(L[0]=L[1]=0);y[P]=Q.tot_ener[P]}var Ta=c.internal_flags;c.short_blocks!=sa.short_block_coupled||0!=L[0]&&0!=L[1]||(L[0]=L[1]=0);for(var Pb=0;Pb<Ta.channels_out;Pb++)c.short_blocks==sa.short_block_dispensed&&(L[Pb]=1),c.short_blocks==sa.short_block_forced&&(L[Pb]=0);for(var S=0;S<pa;S++){var Pa=S&1;w=D;var Qb=c,Ua=S,wb=e,Ya=A,Va=w,mb=Pa,Ja=Qb.internal_flags;if(2>Ua)E.fft_long(Ja, +Va[mb],Ua,m,f);else if(2==Ua)for(var za=d.BLKSIZE-1;0<=za;--za){var $b=Va[mb+0][za],$a=Va[mb+1][za];Va[mb+0][za]=($b+$a)*X.SQRT2*.5;Va[mb+1][za]=($b-$a)*X.SQRT2*.5}Ya[0]=Va[mb+0][0];Ya[0]*=Ya[0];for(za=d.BLKSIZE/2-1;0<=za;--za){var fa=Va[mb+0][d.BLKSIZE/2-za],Rb=Va[mb+0][d.BLKSIZE/2+za];Ya[d.BLKSIZE/2-za]=.5*(fa*fa+Rb*Rb)}for(var Ib=0,za=11;za<d.HBLKSIZE;za++)Ib+=Ya[za];Ja.tot_ener[Ua]=Ib;if(Qb.analysis){for(za=0;za<d.HBLKSIZE;za++)Ja.pinfo.energy[wb][Ua][za]=Ja.pinfo.energy_save[Ua][za],Ja.pinfo.energy_save[Ua][za]= +Ya[za];Ja.pinfo.pe[wb][Ua]=Ja.pe[Ua]}var Ka=S,ac=A,Bb=c.internal_flags;2==c.athaa_loudapprox&&2>Ka&&(Bb.loudness_sq[e][Ka]=Bb.loudness_sq_save[Ka],Bb.loudness_sq_save[Ka]=r(ac,Bb));if(0!=L[Pa]){var Ea=v,qc=A,Ba=la[S],gb=O[S],hb=S,Sb=H(d.CBANDS),Jb=H(d.CBANDS),bc=Y(d.CBANDS+2),aa=void 0;b(Ea,qc,Ba,Sb,Jb);l(Ea,Sb,Jb,bc);for(var nb=0,aa=0;aa<Ea.npart_l;aa++){var oa,ab,lc,ic,ib=Ea.s3ind[aa][0],rc=Ea.s3ind[aa][1],ob=0,Cb=0,ob=bc[ib],Cb=Cb+1;ab=Ea.s3_ll[nb]*Ba[ib]*p[bc[ib]];++nb;for(++ib;ib<=rc;)ob+=bc[ib], +Cb+=1,oa=Ea.s3_ll[nb]*Ba[ib]*p[bc[ib]],ab=ic=q(ab,oa,ib-aa),++nb,++ib;ob=(1+2*ob)/(2*Cb);lc=.5*p[ob];ab*=lc;if(Ea.blocktype_old[hb&1]==d.SHORT_TYPE){var Tb=2*Ea.nb_1[hb][aa];gb[aa]=0<Tb?Math.min(ab,Tb):Math.min(ab,.3*Ba[aa])}else{var Kb=16*Ea.nb_2[hb][aa],pb=2*Ea.nb_1[hb][aa];0>=Kb&&(Kb=ab);0>=pb&&(pb=ab);Tb=Ea.blocktype_old[hb&1]==d.NORM_TYPE?Math.min(pb,Kb):pb;gb[aa]=Math.min(ab,Tb)}Ea.nb_2[hb][aa]=Ea.nb_1[hb][aa];Ea.nb_1[hb][aa]=ab;oa=Sb[aa];oa*=Ea.minval_l[aa];oa*=lc;gb[aa]>oa&&(gb[aa]=oa);1< +Ea.masking_lower&&(gb[aa]*=Ea.masking_lower);gb[aa]>Ba[aa]&&(gb[aa]=Ba[aa]);1>Ea.masking_lower&&(gb[aa]*=Ea.masking_lower)}for(;aa<d.CBANDS;++aa)Ba[aa]=0,gb[aa]=0}else for(var Ub=v,qb=S,Db=0;Db<Ub.npart_l;Db++)Ub.nb_2[qb][Db]=Ub.nb_1[qb][Db],Ub.nb_1[qb][Db]=0}2==L[0]+L[1]&&c.mode==ka.JOINT_STEREO&&a(la,O,v.mld_cb_l,v.ATH.cb_l,c.ATHlower*v.ATH.adjust,c.msfix,v.npart_l);for(S=0;S<pa;S++)Pa=S&1,0!=L[Pa]&&B(v,la[S],O[S],S);for(var ba=0;3>ba;ba++){for(S=0;S<pa;++S)if(Pa=S&1,0!=L[Pa]){var La=v,cc=S;if(0== +ba)for(var Lb=0;Lb<La.npart_s;Lb++)La.nb_s2[cc][Lb]=La.nb_s1[cc][Lb],La.nb_s1[cc][Lb]=0}else{z=M;var rb=S,Wa=ba,ga=W,Za=z,sb=Pa,sc=c.internal_flags;0==Wa&&2>rb&&E.fft_short(sc,Za[sb],rb,m,f);if(2==rb)for(var wa=d.BLKSIZE_s-1;0<=wa;--wa){var Mb=Za[sb+0][Wa][wa],mc=Za[sb+1][Wa][wa];Za[sb+0][Wa][wa]=(Mb+mc)*X.SQRT2*.5;Za[sb+1][Wa][wa]=(Mb-mc)*X.SQRT2*.5}ga[Wa][0]=Za[sb+0][Wa][0];ga[Wa][0]*=ga[Wa][0];for(wa=d.BLKSIZE_s/2-1;0<=wa;--wa){var dc=Za[sb+0][Wa][d.BLKSIZE_s/2-wa],Aa=Za[sb+0][Wa][d.BLKSIZE_s/ +2+wa];ga[Wa][d.BLKSIZE_s/2-wa]=.5*(dc*dc+Aa*Aa)}for(var Vb=W,Ra=la[S],Ha=O[S],bb=S,ec=ba,xa=c.internal_flags,jb=new float[d.CBANDS],Na=H(d.CBANDS),Wb=void 0,kb=void 0,ca=void 0,Eb=new int[d.CBANDS],ca=kb=0;ca<xa.npart_s;++ca){for(var Ob=0,Zb=0,jc=xa.numlines_s[ca],Wb=0;Wb<jc;++Wb,++kb){var Bc=Vb[ec][kb],Ob=Ob+Bc;Zb<Bc&&(Zb=Bc)}Ra[ca]=Ob;jb[ca]=Zb;Na[ca]=Ob/jc}for(;ca<d.CBANDS;++ca)jb[ca]=0,Na[ca]=0;var Xb=xa,xb=jb,fc=Na,nc=Eb,oc=p.length-1,ja=0,Xa=fc[ja]+fc[ja+1];if(0<Xa){var lb=xb[ja];lb<xb[ja+1]&& +(lb=xb[ja+1]);var Xa=20*(2*lb-Xa)/(Xa*(Xb.numlines_s[ja]+Xb.numlines_s[ja+1]-1)),yb=0|Xa;yb>oc&&(yb=oc);nc[ja]=yb}else nc[ja]=0;for(ja=1;ja<Xb.npart_s-1;ja++)Xa=fc[ja-1]+fc[ja]+fc[ja+1],0<Xa?(lb=xb[ja-1],lb<xb[ja]&&(lb=xb[ja]),lb<xb[ja+1]&&(lb=xb[ja+1]),Xa=20*(3*lb-Xa)/(Xa*(Xb.numlines_s[ja-1]+Xb.numlines_s[ja]+Xb.numlines_s[ja+1]-1)),yb=0|Xa,yb>oc&&(yb=oc),nc[ja]=yb):nc[ja]=0;Xa=fc[ja-1]+fc[ja];0<Xa?(lb=xb[ja-1],lb<xb[ja]&&(lb=xb[ja]),Xa=20*(2*lb-Xa)/(Xa*(Xb.numlines_s[ja-1]+Xb.numlines_s[ja]-1)), +yb=0|Xa,yb>oc&&(yb=oc),nc[ja]=yb):nc[ja]=0;for(kb=ca=0;ca<xa.npart_s;ca++){var Fb=xa.s3ind_s[ca][0],vc=xa.s3ind_s[ca][1],pc,wc,Nb,gc,Cc;pc=Eb[Fb];wc=1;gc=xa.s3_ss[kb]*Ra[Fb]*p[Eb[Fb]];++kb;for(++Fb;Fb<=vc;)pc+=Eb[Fb],wc+=1,Nb=xa.s3_ss[kb]*Ra[Fb]*p[Eb[Fb]],gc=q(gc,Nb,Fb-ca),++kb,++Fb;pc=(1+2*pc)/(2*wc);Cc=.5*p[pc];gc*=Cc;Ha[ca]=gc;xa.nb_s2[bb][ca]=xa.nb_s1[bb][ca];xa.nb_s1[bb][ca]=gc;Nb=jb[ca];Nb*=xa.minval_s[ca];Nb*=Cc;Ha[ca]>Nb&&(Ha[ca]=Nb);1<xa.masking_lower&&(Ha[ca]*=xa.masking_lower);Ha[ca]>Ra[ca]&& +(Ha[ca]=Ra[ca]);1>xa.masking_lower&&(Ha[ca]*=xa.masking_lower)}for(;ca<d.CBANDS;++ca)Ra[ca]=0,Ha[ca]=0}0==L[0]+L[1]&&c.mode==ka.JOINT_STEREO&&a(la,O,v.mld_cb_s,v.ATH.cb_s,c.ATHlower*v.ATH.adjust,c.msfix,v.npart_s);for(S=0;S<pa;++S)Pa=S&1,0==L[Pa]&&C(v,la[S],O[S],S,ba)}for(S=0;S<pa;S++)if(Pa=S&1,0==L[Pa])for(var hc=0;hc<d.SBMAX_s;hc++){for(var Ec=H(3),ba=0;3>ba;ba++){var cb=v.thm[S].s[hc][ba],cb=.8*cb;if(2<=K[S][ba]||1==K[S][ba+1])var tc=0!=ba?ba-1:2,uc=t(v.thm[S].s[hc][tc],cb,.36),cb=Math.min(cb, +uc);else if(1==K[S][ba])tc=0!=ba?ba-1:2,uc=t(v.thm[S].s[hc][tc],cb,.18),cb=Math.min(cb,uc);else if(0!=ba&&3==K[S][ba-1]||0==ba&&3==v.nsPsy.lastAttacks[S])tc=2!=ba?ba+1:0,uc=t(v.thm[S].s[hc][tc],cb,.18),cb=Math.min(cb,uc);cb*=R[S][ba];Ec[ba]=cb}for(ba=0;3>ba;ba++)v.thm[S].s[hc][ba]=Ec[ba]}for(S=0;S<pa;S++)v.nsPsy.lastAttacks[S]=K[S][2];for(var Yb=c.internal_flags,zb=0;zb<Yb.channels_out;zb++){var Dc=d.NORM_TYPE;0!=L[zb]?Yb.blocktype_old[zb]==d.SHORT_TYPE&&(Dc=d.STOP_TYPE):(Dc=d.SHORT_TYPE,Yb.blocktype_old[zb]== +d.NORM_TYPE&&(Yb.blocktype_old[zb]=d.START_TYPE),Yb.blocktype_old[zb]==d.STOP_TYPE&&(Yb.blocktype_old[zb]=d.SHORT_TYPE));u[zb]=Yb.blocktype_old[zb];Yb.blocktype_old[zb]=Dc}for(S=0;S<pa;S++){var xc,yc,zc,Ac;if(1<S){xc=x;yc=-2;zc=d.NORM_TYPE;if(u[0]==d.SHORT_TYPE||u[1]==d.SHORT_TYPE)zc=d.SHORT_TYPE;Ac=h[e][S-2]}else xc=n,yc=0,zc=u[S],Ac=k[e][S];xc[yc+S]=zc==d.SHORT_TYPE?V(Ac,v.masking_lower):g(Ac,v.masking_lower);c.analysis&&(v.pinfo.pe[e][S]=xc[yc+S])}return 0};this.psymodel_init=function(a){var b= +a.internal_flags,m,f=!0,g=13,k=0,h=0,l=-8.25,p=-4.5,x=H(d.CBANDS),y=H(d.CBANDS),q=H(d.CBANDS),u=a.out_samplerate;switch(a.experimentalZ){default:case 0:f=!0;break;case 1:f=a.VBR==M.vbr_mtrh||a.VBR==M.vbr_mt?!1:!0;break;case 2:f=!1;break;case 3:g=8,k=-1.75,h=-.0125,l=-8.25,p=-2.25}b.ms_ener_ratio_old=.25;b.blocktype_old[0]=b.blocktype_old[1]=d.NORM_TYPE;for(m=0;4>m;++m){for(var r=0;r<d.CBANDS;++r)b.nb_1[m][r]=1E20,b.nb_2[m][r]=1E20,b.nb_s1[m][r]=b.nb_s2[m][r]=1;for(var t=0;t<d.SBMAX_l;t++)b.en[m].l[t]= +1E20,b.thm[m].l[t]=1E20;for(r=0;3>r;++r){for(t=0;t<d.SBMAX_s;t++)b.en[m].s[t][r]=1E20,b.thm[m].s[t][r]=1E20;b.nsPsy.lastAttacks[m]=0}for(r=0;9>r;r++)b.nsPsy.last_en_subshort[m][r]=10}b.loudness_sq_save[0]=b.loudness_sq_save[1]=0;b.npart_l=e(b.numlines_l,b.bo_l,b.bm_l,x,y,b.mld_l,b.PSY.bo_l_weight,u,d.BLKSIZE,b.scalefac_band.l,d.BLKSIZE/1152,d.SBMAX_l);for(m=0;m<b.npart_l;m++)t=k,x[m]>=g&&(t=h*(x[m]-g)/(24-g)+k*(24-x[m])/(24-g)),q[m]=Math.pow(10,t/10),b.rnumlines_l[m]=0<b.numlines_l[m]?1/b.numlines_l[m]: +0;b.s3_ll=n(b.s3ind,b.npart_l,x,y,q,f);for(m=r=0;m<b.npart_l;m++){h=vb.MAX_VALUE;for(t=0;t<b.numlines_l[m];t++,r++)k=u*r/(1E3*d.BLKSIZE),k=this.ATHformula(1E3*k,a)-20,k=Math.pow(10,.1*k),k*=b.numlines_l[m],h>k&&(h=k);b.ATH.cb_l[m]=h;h=-20+20*x[m]/10;6<h&&(h=100);-15>h&&(h=-15);h-=8;b.minval_l[m]=Math.pow(10,h/10)*b.numlines_l[m]}b.npart_s=e(b.numlines_s,b.bo_s,b.bm_s,x,y,b.mld_s,b.PSY.bo_s_weight,u,d.BLKSIZE_s,b.scalefac_band.s,d.BLKSIZE_s/384,d.SBMAX_s);for(m=r=0;m<b.npart_s;m++){t=l;x[m]>=g&&(t= +p*(x[m]-g)/(24-g)+l*(24-x[m])/(24-g));q[m]=Math.pow(10,t/10);h=vb.MAX_VALUE;for(t=0;t<b.numlines_s[m];t++,r++)k=u*r/(1E3*d.BLKSIZE_s),k=this.ATHformula(1E3*k,a)-20,k=Math.pow(10,.1*k),k*=b.numlines_s[m],h>k&&(h=k);b.ATH.cb_s[m]=h;h=-7+7*x[m]/12;12<x[m]&&(h*=1+3.1*Math.log(1+h));12>x[m]&&(h*=1+2.3*Math.log(1-h));-15>h&&(h=-15);h-=8;b.minval_s[m]=Math.pow(10,h/10)*b.numlines_s[m]}b.s3_ss=n(b.s3ind_s,b.npart_s,x,y,q,f);w=Math.pow(10,.5625);A=Math.pow(10,1.5);v=Math.pow(10,1.5);E.init_fft(b);b.decay= +Math.exp(-2.302585092994046/(.01*u/192));m=3.5;0!=(a.exp_nspsytune&2)&&(m=1);0<Math.abs(a.msfix)&&(m=a.msfix);a.msfix=m;for(f=0;f<b.npart_l;f++)b.s3ind[f][1]>b.npart_l-1&&(b.s3ind[f][1]=b.npart_l-1);b.ATH.decay=Math.pow(10,576*b.mode_gr/u*-1.2);b.ATH.adjust=.01;b.ATH.adjustLimit=1;if(-1!=a.ATHtype){r=a.out_samplerate/d.BLKSIZE;for(m=k=f=0;m<d.BLKSIZE/2;++m)k+=r,b.ATH.eql_w[m]=1/Math.pow(10,this.ATHformula(k,a)/10),f+=b.ATH.eql_w[m];f=1/f;for(m=d.BLKSIZE/2;0<=--m;)b.ATH.eql_w[m]*=f}for(f=r=0;f<b.npart_s;++f)for(m= +0;m<b.numlines_s[f];++m)++r;for(f=r=0;f<b.npart_l;++f)for(m=0;m<b.numlines_l[f];++m)++r;for(m=r=0;m<b.npart_l;m++)k=u*(r+b.numlines_l[m]/2)/(1*d.BLKSIZE),b.mld_cb_l[m]=c(k),r+=b.numlines_l[m];for(;m<d.CBANDS;++m)b.mld_cb_l[m]=1;for(m=r=0;m<b.npart_s;m++)k=u*(r+b.numlines_s[m]/2)/(1*d.BLKSIZE_s),b.mld_cb_s[m]=c(k),r+=b.numlines_s[m];for(;m<d.CBANDS;++m)b.mld_cb_s[m]=1;return 0};this.ATHformula=function(a,c){var b;switch(c.ATHtype){case 0:b=f(a,9);break;case 1:b=f(a,-1);break;case 2:b=f(a,0);break; +case 3:b=f(a,1)+6;break;case 4:b=f(a,c.ATHcurve);break;default:b=f(a,0)}return b}}function V(){function J(){this.mask_adjust_short=this.mask_adjust=0;this.bo_l_weight=H(d.SBMAX_l);this.bo_s_weight=H(d.SBMAX_s)}function k(){this.lowerlimit=0}function q(a,c){this.lowpass=c}function C(a){return 1<a?0:0>=a?1:Math.cos(Math.PI/2*a)}function B(a,c){switch(a){case 44100:return c.version=1,0;case 48E3:return c.version=1;case 32E3:return c.version=1,2;case 22050:return c.version=0;case 24E3:return c.version= +0,1;case 16E3:return c.version=0,2;case 11025:return c.version=0;case 12E3:return c.version=0,1;case 8E3:return c.version=0,2;default:return c.version=0,-1}}function t(a,c,b){16E3>b&&(c=2);b=r.bitrate_table[c][1];for(var d=2;14>=d;d++)0<r.bitrate_table[c][d]&&Math.abs(r.bitrate_table[c][d]-a)<Math.abs(b-a)&&(b=r.bitrate_table[c][d]);return b}function Q(a,c,b){16E3>b&&(c=2);for(b=0;14>=b;b++)if(0<r.bitrate_table[c][b]&&r.bitrate_table[c][b]==a)return b;return-1}function g(a,c){var b=[new q(8,2E3), +new q(16,3700),new q(24,3900),new q(32,5500),new q(40,7E3),new q(48,7500),new q(56,1E4),new q(64,11E3),new q(80,13500),new q(96,15100),new q(112,15600),new q(128,17E3),new q(160,17500),new q(192,18600),new q(224,19400),new q(256,19700),new q(320,20500)],d=e.nearestBitrateFullIndex(c);a.lowerlimit=b[d].lowpass}function b(a){var c=d.BLKSIZE+a.framesize-d.FFTOFFSET;return c=Math.max(c,512+a.framesize-32)}function l(m,f,g,k,l,p,q){var r=m.internal_flags,v=0,t,w,A=[null,null],z=[null,null];if(4294479419!= +r.Class_ID)return-3;if(0==k)return 0;t=c.copy_buffer(r,l,p,q,0);if(0>t)return t;p+=t;v+=t;z[0]=f;z[1]=g;if(ua.NEQ(m.scale,0)&&ua.NEQ(m.scale,1))for(t=0;t<k;++t)z[0][t]*=m.scale,2==r.channels_out&&(z[1][t]*=m.scale);if(ua.NEQ(m.scale_left,0)&&ua.NEQ(m.scale_left,1))for(t=0;t<k;++t)z[0][t]*=m.scale_left;if(ua.NEQ(m.scale_right,0)&&ua.NEQ(m.scale_right,1))for(t=0;t<k;++t)z[1][t]*=m.scale_right;if(2==m.num_channels&&1==r.channels_out)for(t=0;t<k;++t)z[0][t]=.5*(z[0][t]+z[1][t]),z[1][t]=0;f=b(m);A[0]= +r.mfbuf[0];A[1]=r.mfbuf[1];for(g=0;0<k;){var B=[null,null];t=w=0;B[0]=z[0];B[1]=z[1];t=new a;var C=m;w=A;var E=g,J=k,K=t,M=C.internal_flags;if(.9999>M.resample_ratio||1.0001<M.resample_ratio)for(var Q=0;Q<M.channels_out;Q++){var V=new h,Y=K,X=w[Q],ta=M.mf_size,ka=C.framesize,ma=B[Q],ra=E,R=J,Fa=V,L=Q,Ma=C.internal_flags,Z=void 0,Da=0,na=void 0,sa=C.out_samplerate/D(C.out_samplerate,C.in_samplerate);sa>da.BPC&&(sa=da.BPC);var P=1E-4>Math.abs(Ma.resample_ratio-Math.floor(.5+Ma.resample_ratio))?1:0, +na=1/Ma.resample_ratio;1<na&&(na=1);var ha=31;0==ha%2&&--ha;ha+=P;P=ha+1;if(0==Ma.fill_buffer_resample_init){Ma.inbuf_old[0]=H(P);Ma.inbuf_old[1]=H(P);for(Z=0;Z<=2*sa;++Z)Ma.blackfilt[Z]=H(P);Ma.itime[0]=0;for(Da=Ma.itime[1]=0;Da<=2*sa;Da++){for(var N=0,Ca=(Da-sa)/(2*sa),Z=0;Z<=ha;Z++){var Ia=Ma.blackfilt[Da],Ga=Z,Sa,ea=Z-Ca;Sa=ha;var Oa=Math.PI*na,ea=ea/Sa;0>ea&&(ea=0);1<ea&&(ea=1);var Qa=ea-.5,ea=.42-.5*Math.cos(2*ea*Math.PI)+.08*Math.cos(4*ea*Math.PI);Sa=1E-9>Math.abs(Qa)?Oa/Math.PI:ea*Math.sin(Sa* +Oa*Qa)/(Math.PI*Sa*Qa);N+=Ia[Ga]=Sa}for(Z=0;Z<=ha;Z++)Ma.blackfilt[Da][Z]/=N}Ma.fill_buffer_resample_init=1}N=Ma.inbuf_old[L];for(na=0;na<ka;na++){Z=na*Ma.resample_ratio;Da=0|Math.floor(Z-Ma.itime[L]);if(ha+Da-ha/2>=R)break;Ca=Z-Ma.itime[L]-(Da+ha%2*.5);Ca=0|Math.floor(2*Ca*sa+sa+.5);for(Z=Ia=0;Z<=ha;++Z)Ga=Z+Da-ha/2,Ia+=(0>Ga?N[P+Ga]:ma[ra+Ga])*Ma.blackfilt[Ca][Z];X[ta+na]=Ia}Fa.num_used=Math.min(R,ha+Da-ha/2);Ma.itime[L]+=Fa.num_used-na*Ma.resample_ratio;if(Fa.num_used>=P)for(Z=0;Z<P;Z++)N[Z]=ma[ra+ +Fa.num_used+Z-P];else{X=P-Fa.num_used;for(Z=0;Z<X;++Z)N[Z]=N[Z+Fa.num_used];for(Da=0;Z<P;++Z,++Da)N[Z]=ma[ra+Da]}Y.n_out=na;K.n_in=V.num_used}else for(K.n_out=Math.min(C.framesize,J),K.n_in=K.n_out,C=0;C<K.n_out;++C)w[0][M.mf_size+C]=B[0][E+C],2==M.channels_out&&(w[1][M.mf_size+C]=B[1][E+C]);w=t.n_in;t=t.n_out;if(r.findReplayGain&&!r.decode_on_the_fly&&n.AnalyzeSamples(r.rgdata,A[0],r.mf_size,A[1],r.mf_size,t,r.channels_out)==O.GAIN_ANALYSIS_ERROR)return-6;k-=w;g+=w;r.mf_size+=t;1>r.mf_samples_to_encode&& +(r.mf_samples_to_encode=d.ENCDELAY+d.POSTDELAY);r.mf_samples_to_encode+=t;if(r.mf_size>=f){w=q-v;0==q&&(w=0);t=m;w=e.enc.lame_encode_mp3_frame(t,A[0],A[1],l,p,w);t.frameNum++;t=w;if(0>t)return t;p+=t;v+=t;r.mf_size-=m.framesize;r.mf_samples_to_encode-=m.framesize;for(w=0;w<r.channels_out;w++)for(t=0;t<r.mf_size;t++)A[w][t]=A[w][t+m.framesize]}}return v}function a(){this.n_out=this.n_in=0}function h(){this.num_used=0}function D(a,c){return 0!=c?D(c,a%c):a}var e=this;V.V9=410;V.V8=420;V.V7=430;V.V6= +440;V.V5=450;V.V4=460;V.V3=470;V.V2=480;V.V1=490;V.V0=500;V.R3MIX=1E3;V.STANDARD=1001;V.EXTREME=1002;V.INSANE=1003;V.STANDARD_FAST=1004;V.EXTREME_FAST=1005;V.MEDIUM=1006;V.MEDIUM_FAST=1007;V.LAME_MAXMP3BUFFER=147456;var n,c,f,E,z,w=new jc,A,v,p;this.enc=new d;this.setModules=function(a,b,d,g,e,k,h,l,q){n=a;c=b;f=d;E=g;z=e;A=k;v=l;p=q;this.enc.setModules(c,w,E,A)};this.lame_init=function(){var a=new Jc,c;a.class_id=4294479419;c=a.internal_flags=new da;a.mode=ka.NOT_SET;a.original=1;a.in_samplerate= +44100;a.num_channels=2;a.num_samples=-1;a.bWriteVbrTag=!0;a.quality=-1;a.short_blocks=null;c.subblock_gain=-1;a.lowpassfreq=0;a.highpassfreq=0;a.lowpasswidth=-1;a.highpasswidth=-1;a.VBR=M.vbr_off;a.VBR_q=4;a.ATHcurve=-1;a.VBR_mean_bitrate_kbps=128;a.VBR_min_bitrate_kbps=0;a.VBR_max_bitrate_kbps=0;a.VBR_hard_min=0;c.VBR_min_bitrate=1;c.VBR_max_bitrate=13;a.quant_comp=-1;a.quant_comp_short=-1;a.msfix=-1;c.resample_ratio=1;c.OldValue[0]=180;c.OldValue[1]=180;c.CurrentStep[0]=4;c.CurrentStep[1]=4;c.masking_lower= +1;c.nsPsy.attackthre=-1;c.nsPsy.attackthre_s=-1;a.scale=-1;a.athaa_type=-1;a.ATHtype=-1;a.athaa_loudapprox=-1;a.athaa_sensitivity=0;a.useTemporal=null;a.interChRatio=-1;c.mf_samples_to_encode=d.ENCDELAY+d.POSTDELAY;a.encoder_padding=0;c.mf_size=d.ENCDELAY-d.MDCTDELAY;a.findReplayGain=!1;a.decode_on_the_fly=!1;c.decode_on_the_fly=!1;c.findReplayGain=!1;c.findPeakSample=!1;c.RadioGain=0;c.AudiophileGain=0;c.noclipGainChange=0;c.noclipScale=-1;a.preset=0;a.write_id3tag_automatic=!0;a.lame_allocated_gfp= +1;return a};this.nearestBitrateFullIndex=function(a){for(var c=[8,16,24,32,40,48,56,64,80,96,112,128,160,192,224,256,320],b=0,d=0,f=0,g=0,g=c[16],f=16,d=c[16],b=16,e=0;16>e;e++)if(Math.max(a,c[e+1])!=a){g=c[e+1];f=e+1;d=c[e];b=e;break}return g-a>a-d?b:f};this.lame_init_params=function(a){var b=a.internal_flags;b.Class_ID=0;null==b.ATH&&(b.ATH=new Lc);null==b.PSY&&(b.PSY=new J);null==b.rgdata&&(b.rgdata=new Kc);b.channels_in=a.num_channels;1==b.channels_in&&(a.mode=ka.MONO);b.channels_out=a.mode== +ka.MONO?1:2;b.mode_ext=d.MPG_MD_MS_LR;a.mode==ka.MONO&&(a.force_ms=!1);a.VBR==M.vbr_off&&128!=a.VBR_mean_bitrate_kbps&&0==a.brate&&(a.brate=a.VBR_mean_bitrate_kbps);a.VBR!=M.vbr_off&&a.VBR!=M.vbr_mtrh&&a.VBR!=M.vbr_mt&&(a.free_format=!1);a.VBR==M.vbr_off&&0==a.brate&&ua.EQ(a.compression_ratio,0)&&(a.compression_ratio=11.025);a.VBR==M.vbr_off&&0<a.compression_ratio&&(0==a.out_samplerate&&(a.out_samplerate=map2MP3Frequency(int(.97*a.in_samplerate))),a.brate=0|16*a.out_samplerate*b.channels_out/(1E3* +a.compression_ratio),b.samplerate_index=B(a.out_samplerate,a),a.free_format||(a.brate=t(a.brate,a.version,a.out_samplerate)));0!=a.out_samplerate&&(16E3>a.out_samplerate?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,64)):32E3>a.out_samplerate?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,160)):(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,32), +a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,320)));if(0==a.lowpassfreq){var e=16E3;switch(a.VBR){case M.vbr_off:e=new k;g(e,a.brate);e=e.lowerlimit;break;case M.vbr_abr:e=new k;g(e,a.VBR_mean_bitrate_kbps);e=e.lowerlimit;break;case M.vbr_rh:var h=[19500,19E3,18600,18E3,17500,16E3,15600,14900,12500,1E4,3950];if(0<=a.VBR_q&&9>=a.VBR_q)var e=h[a.VBR_q],h=h[a.VBR_q+1],l=a.VBR_q_frac,e=linear_int(e,h,l);else e=19500;break;default:h=[19500,19E3,18500,18E3,17500,16500,15500,14500,12500,9500, +3950],0<=a.VBR_q&&9>=a.VBR_q?(e=h[a.VBR_q],h=h[a.VBR_q+1],l=a.VBR_q_frac,e=linear_int(e,h,l)):e=19500}a.mode!=ka.MONO||a.VBR!=M.vbr_off&&a.VBR!=M.vbr_abr||(e*=1.5);a.lowpassfreq=e|0}0==a.out_samplerate&&(2*a.lowpassfreq>a.in_samplerate&&(a.lowpassfreq=a.in_samplerate/2),e=a.lowpassfreq|0,h=a.in_samplerate,l=44100,48E3<=h?l=48E3:44100<=h?l=44100:32E3<=h?l=32E3:24E3<=h?l=24E3:22050<=h?l=22050:16E3<=h?l=16E3:12E3<=h?l=12E3:11025<=h?l=11025:8E3<=h&&(l=8E3),-1==e?e=l:(15960>=e&&(l=44100),15250>=e&&(l= +32E3),11220>=e&&(l=24E3),9970>=e&&(l=22050),7230>=e&&(l=16E3),5420>=e&&(l=12E3),4510>=e&&(l=11025),3970>=e&&(l=8E3),e=h<l?44100<h?48E3:32E3<h?44100:24E3<h?32E3:22050<h?24E3:16E3<h?22050:12E3<h?16E3:11025<h?12E3:8E3<h?11025:8E3:l),a.out_samplerate=e);a.lowpassfreq=Math.min(20500,a.lowpassfreq);a.lowpassfreq=Math.min(a.out_samplerate/2,a.lowpassfreq);a.VBR==M.vbr_off&&(a.compression_ratio=16*a.out_samplerate*b.channels_out/(1E3*a.brate));a.VBR==M.vbr_abr&&(a.compression_ratio=16*a.out_samplerate*b.channels_out/ +(1E3*a.VBR_mean_bitrate_kbps));a.bWriteVbrTag||(a.findReplayGain=!1,a.decode_on_the_fly=!1,b.findPeakSample=!1);b.findReplayGain=a.findReplayGain;b.decode_on_the_fly=a.decode_on_the_fly;b.decode_on_the_fly&&(b.findPeakSample=!0);if(b.findReplayGain&&n.InitGainAnalysis(b.rgdata,a.out_samplerate)==O.INIT_GAIN_ANALYSIS_ERROR)return a.internal_flags=null,-6;b.decode_on_the_fly&&!a.decode_only&&(null!=b.hip&&p.hip_decode_exit(b.hip),b.hip=p.hip_decode_init());b.mode_gr=24E3>=a.out_samplerate?1:2;a.framesize= +576*b.mode_gr;a.encoder_delay=d.ENCDELAY;b.resample_ratio=a.in_samplerate/a.out_samplerate;switch(a.VBR){case M.vbr_mt:case M.vbr_rh:case M.vbr_mtrh:a.compression_ratio=[5.7,6.5,7.3,8.2,10,11.9,13,14,15,16.5][a.VBR_q];break;case M.vbr_abr:a.compression_ratio=16*a.out_samplerate*b.channels_out/(1E3*a.VBR_mean_bitrate_kbps);break;default:a.compression_ratio=16*a.out_samplerate*b.channels_out/(1E3*a.brate)}a.mode==ka.NOT_SET&&(a.mode=ka.JOINT_STEREO);0<a.highpassfreq?(b.highpass1=2*a.highpassfreq,b.highpass2= +0<=a.highpasswidth?2*(a.highpassfreq+a.highpasswidth):2*a.highpassfreq,b.highpass1/=a.out_samplerate,b.highpass2/=a.out_samplerate):(b.highpass1=0,b.highpass2=0);0<a.lowpassfreq?(b.lowpass2=2*a.lowpassfreq,0<=a.lowpasswidth?(b.lowpass1=2*(a.lowpassfreq-a.lowpasswidth),0>b.lowpass1&&(b.lowpass1=0)):b.lowpass1=2*a.lowpassfreq,b.lowpass1/=a.out_samplerate,b.lowpass2/=a.out_samplerate):(b.lowpass1=0,b.lowpass2=0);var e=a.internal_flags,q=32,D=-1;if(0<e.lowpass1){for(var F=999,h=0;31>=h;h++)l=h/31,l>= +e.lowpass2&&(q=Math.min(q,h)),e.lowpass1<l&&l<e.lowpass2&&(F=Math.min(F,h));e.lowpass1=999==F?(q-.75)/31:(F-.75)/31;e.lowpass2=q/31}0<e.highpass2&&e.highpass2<.75/31*.9&&(e.highpass1=0,e.highpass2=0,K.err.println("Warning: highpass filter disabled. highpass frequency too small\n"));if(0<e.highpass2){q=-1;for(h=0;31>=h;h++)l=h/31,l<=e.highpass1&&(D=Math.max(D,h)),e.highpass1<l&&l<e.highpass2&&(q=Math.max(q,h));e.highpass1=D/31;e.highpass2=-1==q?(D+.75)/31:(q+.75)/31}for(h=0;32>h;h++)l=h/31,D=e.highpass2> +e.highpass1?C((e.highpass2-l)/(e.highpass2-e.highpass1+1E-20)):1,l=e.lowpass2>e.lowpass1?C((l-e.lowpass1)/(e.lowpass2-e.lowpass1+1E-20)):1,e.amp_filter[h]=D*l;b.samplerate_index=B(a.out_samplerate,a);if(0>b.samplerate_index)return a.internal_flags=null,-1;if(a.VBR==M.vbr_off)if(a.free_format)b.bitrate_index=0;else{if(a.brate=t(a.brate,a.version,a.out_samplerate),b.bitrate_index=Q(a.brate,a.version,a.out_samplerate),0>=b.bitrate_index)return a.internal_flags=null,-1}else b.bitrate_index=1;a.analysis&& +(a.bWriteVbrTag=!1);null!=b.pinfo&&(a.bWriteVbrTag=!1);c.init_bit_stream_w(b);e=b.samplerate_index+3*a.version+6*(16E3>a.out_samplerate?1:0);for(h=0;h<d.SBMAX_l+1;h++)b.scalefac_band.l[h]=E.sfBandIndex[e].l[h];for(h=0;h<d.PSFB21+1;h++)l=(b.scalefac_band.l[22]-b.scalefac_band.l[21])/d.PSFB21,l=b.scalefac_band.l[21]+h*l,b.scalefac_band.psfb21[h]=l;b.scalefac_band.psfb21[d.PSFB21]=576;for(h=0;h<d.SBMAX_s+1;h++)b.scalefac_band.s[h]=E.sfBandIndex[e].s[h];for(h=0;h<d.PSFB12+1;h++)l=(b.scalefac_band.s[13]- +b.scalefac_band.s[12])/d.PSFB12,l=b.scalefac_band.s[12]+h*l,b.scalefac_band.psfb12[h]=l;b.scalefac_band.psfb12[d.PSFB12]=192;b.sideinfo_len=1==a.version?1==b.channels_out?21:36:1==b.channels_out?13:21;a.error_protection&&(b.sideinfo_len+=2);e=a.internal_flags;a.frameNum=0;a.write_id3tag_automatic&&v.id3tag_write_v2(a);e.bitrate_stereoMode_Hist=db([16,5]);e.bitrate_blockType_Hist=db([16,6]);e.PeakSample=0;a.bWriteVbrTag&&A.InitVbrTag(a);b.Class_ID=4294479419;for(e=0;19>e;e++)b.nsPsy.pefirbuf[e]=700* +b.mode_gr*b.channels_out;-1==a.ATHtype&&(a.ATHtype=4);switch(a.VBR){case M.vbr_mt:a.VBR=M.vbr_mtrh;case M.vbr_mtrh:null==a.useTemporal&&(a.useTemporal=!1);f.apply_preset(a,500-10*a.VBR_q,0);0>a.quality&&(a.quality=LAME_DEFAULT_QUALITY);5>a.quality&&(a.quality=0);5<a.quality&&(a.quality=5);b.PSY.mask_adjust=a.maskingadjust;b.PSY.mask_adjust_short=a.maskingadjust_short;b.sfb21_extra=a.experimentalY?!1:44E3<a.out_samplerate;b.iteration_loop=new VBRNewIterationLoop(z);break;case M.vbr_rh:f.apply_preset(a, +500-10*a.VBR_q,0);b.PSY.mask_adjust=a.maskingadjust;b.PSY.mask_adjust_short=a.maskingadjust_short;b.sfb21_extra=a.experimentalY?!1:44E3<a.out_samplerate;6<a.quality&&(a.quality=6);0>a.quality&&(a.quality=LAME_DEFAULT_QUALITY);b.iteration_loop=new VBROldIterationLoop(z);break;default:b.sfb21_extra=!1,0>a.quality&&(a.quality=LAME_DEFAULT_QUALITY),e=a.VBR,e==M.vbr_off&&(a.VBR_mean_bitrate_kbps=a.brate),f.apply_preset(a,a.VBR_mean_bitrate_kbps,0),a.VBR=e,b.PSY.mask_adjust=a.maskingadjust,b.PSY.mask_adjust_short= +a.maskingadjust_short,b.iteration_loop=e==M.vbr_off?new Mc(z):new ABRIterationLoop(z)}if(a.VBR!=M.vbr_off){b.VBR_min_bitrate=1;b.VBR_max_bitrate=14;16E3>a.out_samplerate&&(b.VBR_max_bitrate=8);if(0!=a.VBR_min_bitrate_kbps&&(a.VBR_min_bitrate_kbps=t(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),b.VBR_min_bitrate=Q(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),0>b.VBR_min_bitrate)||0!=a.VBR_max_bitrate_kbps&&(a.VBR_max_bitrate_kbps=t(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),b.VBR_max_bitrate= +Q(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),0>b.VBR_max_bitrate))return-1;a.VBR_min_bitrate_kbps=r.bitrate_table[a.version][b.VBR_min_bitrate];a.VBR_max_bitrate_kbps=r.bitrate_table[a.version][b.VBR_max_bitrate];a.VBR_mean_bitrate_kbps=Math.min(r.bitrate_table[a.version][b.VBR_max_bitrate],a.VBR_mean_bitrate_kbps);a.VBR_mean_bitrate_kbps=Math.max(r.bitrate_table[a.version][b.VBR_min_bitrate],a.VBR_mean_bitrate_kbps)}a.tune&&(b.PSY.mask_adjust+=a.tune_value_a,b.PSY.mask_adjust_short+=a.tune_value_a); +e=a.internal_flags;switch(a.quality){default:case 9:e.psymodel=0;e.noise_shaping=0;e.noise_shaping_amp=0;e.noise_shaping_stop=0;e.use_best_huffman=0;e.full_outer_loop=0;break;case 8:a.quality=7;case 7:e.psymodel=1;e.noise_shaping=0;e.noise_shaping_amp=0;e.noise_shaping_stop=0;e.use_best_huffman=0;e.full_outer_loop=0;break;case 6:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=0;e.noise_shaping_stop=0;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=0;e.full_outer_loop= +0;break;case 5:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=0;e.noise_shaping_stop=0;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=0;e.full_outer_loop=0;break;case 4:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=0;e.noise_shaping_stop=0;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 3:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=1;e.noise_shaping_stop=1;-1== +e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 2:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);0==e.substep_shaping&&(e.substep_shaping=2);e.noise_shaping_amp=1;e.noise_shaping_stop=1;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 1:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);0==e.substep_shaping&&(e.substep_shaping=2);e.noise_shaping_amp=2;e.noise_shaping_stop=1;-1==e.subblock_gain&&(e.subblock_gain= +1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 0:e.psymodel=1,0==e.noise_shaping&&(e.noise_shaping=1),0==e.substep_shaping&&(e.substep_shaping=2),e.noise_shaping_amp=2,e.noise_shaping_stop=1,-1==e.subblock_gain&&(e.subblock_gain=1),e.use_best_huffman=1,e.full_outer_loop=0}b.ATH.useAdjust=0>a.athaa_type?3:a.athaa_type;b.ATH.aaSensitivityP=Math.pow(10,a.athaa_sensitivity/-10);null==a.short_blocks&&(a.short_blocks=sa.short_block_allowed);a.short_blocks!=sa.short_block_allowed||a.mode!=ka.JOINT_STEREO&& +a.mode!=ka.STEREO||(a.short_blocks=sa.short_block_coupled);0>a.quant_comp&&(a.quant_comp=1);0>a.quant_comp_short&&(a.quant_comp_short=0);0>a.msfix&&(a.msfix=0);a.exp_nspsytune|=1;0>a.internal_flags.nsPsy.attackthre&&(a.internal_flags.nsPsy.attackthre=jc.NSATTACKTHRE);0>a.internal_flags.nsPsy.attackthre_s&&(a.internal_flags.nsPsy.attackthre_s=jc.NSATTACKTHRE_S);0>a.scale&&(a.scale=1);0>a.ATHtype&&(a.ATHtype=4);0>a.ATHcurve&&(a.ATHcurve=4);0>a.athaa_loudapprox&&(a.athaa_loudapprox=2);0>a.interChRatio&& +(a.interChRatio=0);null==a.useTemporal&&(a.useTemporal=!0);b.slot_lag=b.frac_SpF=0;a.VBR==M.vbr_off&&(b.slot_lag=b.frac_SpF=72E3*(a.version+1)*a.brate%a.out_samplerate|0);E.iteration_init(a);w.psymodel_init(a);return 0};this.lame_encode_flush=function(a,e,f,g){var h=a.internal_flags,k=vc([2,1152]),l=0,n,p,q=h.mf_samples_to_encode-d.POSTDELAY,r=b(a);if(1>h.mf_samples_to_encode)return 0;n=0;a.in_samplerate!=a.out_samplerate&&(q+=16*a.out_samplerate/a.in_samplerate);p=a.framesize-q%a.framesize;576>p&& +(p+=a.framesize);a.encoder_padding=p;for(p=(q+p)/a.framesize;0<p&&0<=l;){var t=r-h.mf_size,q=a.frameNum,t=t*a.in_samplerate,t=t/a.out_samplerate;1152<t&&(t=1152);1>t&&(t=1);l=g-n;0==g&&(l=0);l=this.lame_encode_buffer(a,k[0],k[1],t,e,f,l);f+=l;n+=l;p-=q!=a.frameNum?1:0}h.mf_samples_to_encode=0;if(0>l)return l;l=g-n;0==g&&(l=0);c.flush_bitstream(a);l=c.copy_buffer(h,e,f,l,1);if(0>l)return l;f+=l;n+=l;l=g-n;0==g&&(l=0);if(a.write_id3tag_automatic){v.id3tag_write_v1(a);l=c.copy_buffer(h,e,f,l,0);if(0> +l)return l;n+=l}return n};this.lame_encode_buffer=function(a,b,c,d,e,f,g){var h=a.internal_flags,k=[null,null];if(4294479419!=h.Class_ID)return-3;if(0==d)return 0;if(null==h.in_buffer_0||h.in_buffer_nsamples<d)h.in_buffer_0=H(d),h.in_buffer_1=H(d),h.in_buffer_nsamples=d;k[0]=h.in_buffer_0;k[1]=h.in_buffer_1;for(var n=0;n<d;n++)k[0][n]=b[n],1<h.channels_in&&(k[1][n]=c[n]);return l(a,k[0],k[1],d,e,f,g)}}function Uc(){this.setModules=function(d,k){}}function Vc(){this.setModules=function(d,k,q){}}function Wc(){} +function Xc(){this.setModules=function(d,k){}}function Ca(){this.sampleRate=this.channels=this.dataLen=this.dataOffset=0}function Ob(d){return d.charCodeAt(0)<<24|d.charCodeAt(1)<<16|d.charCodeAt(2)<<8|d.charCodeAt(3)}var Ia={fill:function(d,k,q,r){if(2==arguments.length)for(var B=0;B<d.length;B++)d[B]=arguments[1];else for(B=k;B<q;B++)d[B]=r}},K={arraycopy:function(d,k,q,r,B){for(B=k+B;k<B;)q[r++]=d[k++]}},X={SQRT2:1.4142135623730951,FAST_LOG10:function(d){return Math.log10(d)},FAST_LOG10_X:function(d, +k){return Math.log10(d)*k}};sa.short_block_allowed=new sa(0);sa.short_block_coupled=new sa(1);sa.short_block_dispensed=new sa(2);sa.short_block_forced=new sa(3);var vb={MAX_VALUE:3.4028235E38};M.vbr_off=new M(0);M.vbr_mt=new M(1);M.vbr_rh=new M(2);M.vbr_abr=new M(3);M.vbr_mtrh=new M(4);M.vbr_default=M.vbr_mtrh;ka.STEREO=new ka(0);ka.JOINT_STEREO=new ka(1);ka.DUAL_CHANNEL=new ka(2);ka.MONO=new ka(3);ka.NOT_SET=new ka(4);O.STEPS_per_dB=100;O.MAX_dB=120;O.GAIN_NOT_ENOUGH_SAMPLES=-24601;O.GAIN_ANALYSIS_ERROR= +0;O.GAIN_ANALYSIS_OK=1;O.INIT_GAIN_ANALYSIS_ERROR=0;O.INIT_GAIN_ANALYSIS_OK=1;O.YULE_ORDER=10;O.MAX_ORDER=O.YULE_ORDER;O.MAX_SAMP_FREQ=48E3;O.RMS_WINDOW_TIME_NUMERATOR=1;O.RMS_WINDOW_TIME_DENOMINATOR=20;O.MAX_SAMPLES_PER_WINDOW=O.MAX_SAMP_FREQ*O.RMS_WINDOW_TIME_NUMERATOR/O.RMS_WINDOW_TIME_DENOMINATOR+1;ua.EQ=function(d,k){return Math.abs(d)>Math.abs(k)?Math.abs(d-k)<=1E-6*Math.abs(d):Math.abs(d-k)<=1E-6*Math.abs(k)};ua.NEQ=function(d,k){return!ua.EQ(d,k)};ub.NUMTOCENTRIES=100;ub.MAXFRAMESIZE=2880; +var r={t1HB:[1,1,1,0],t2HB:[1,2,1,3,1,1,3,2,0],t3HB:[3,2,1,1,1,1,3,2,0],t5HB:[1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0],t6HB:[7,3,5,1,6,2,3,2,5,4,4,1,3,3,2,0],t7HB:[1,2,10,19,16,10,3,3,7,10,5,3,11,4,13,17,8,4,12,11,18,15,11,2,7,6,9,14,3,1,6,4,5,3,2,0],t8HB:[3,4,6,18,12,5,5,1,2,16,9,3,7,3,5,14,7,3,19,17,15,13,10,4,13,5,8,11,5,1,12,4,4,1,1,0],t9HB:[7,5,9,14,15,7,6,4,5,5,6,7,7,6,8,8,8,5,15,6,9,10,5,1,11,7,9,6,4,1,14,4,6,2,6,0],t10HB:[1,2,10,23,35,30,12,17,3,3,8,12,18,21,12,7,11,9,15,21,32,40,19,6,14,13,22,34, +46,23,18,7,20,19,33,47,27,22,9,3,31,22,41,26,21,20,5,3,14,13,10,11,16,6,5,1,9,8,7,8,4,4,2,0],t11HB:[3,4,10,24,34,33,21,15,5,3,4,10,32,17,11,10,11,7,13,18,30,31,20,5,25,11,19,59,27,18,12,5,35,33,31,58,30,16,7,5,28,26,32,19,17,15,8,14,14,12,9,13,14,9,4,1,11,4,6,6,6,3,2,0],t12HB:[9,6,16,33,41,39,38,26,7,5,6,9,23,16,26,11,17,7,11,14,21,30,10,7,17,10,15,12,18,28,14,5,32,13,22,19,18,16,9,5,40,17,31,29,17,13,4,2,27,12,11,15,10,7,4,1,27,12,8,12,6,3,1,0],t13HB:[1,5,14,21,34,51,46,71,42,52,68,52,67,44,43,19, +3,4,12,19,31,26,44,33,31,24,32,24,31,35,22,14,15,13,23,36,59,49,77,65,29,40,30,40,27,33,42,16,22,20,37,61,56,79,73,64,43,76,56,37,26,31,25,14,35,16,60,57,97,75,114,91,54,73,55,41,48,53,23,24,58,27,50,96,76,70,93,84,77,58,79,29,74,49,41,17,47,45,78,74,115,94,90,79,69,83,71,50,59,38,36,15,72,34,56,95,92,85,91,90,86,73,77,65,51,44,43,42,43,20,30,44,55,78,72,87,78,61,46,54,37,30,20,16,53,25,41,37,44,59,54,81,66,76,57,54,37,18,39,11,35,33,31,57,42,82,72,80,47,58,55,21,22,26,38,22,53,25,23,38,70,60,51, +36,55,26,34,23,27,14,9,7,34,32,28,39,49,75,30,52,48,40,52,28,18,17,9,5,45,21,34,64,56,50,49,45,31,19,12,15,10,7,6,3,48,23,20,39,36,35,53,21,16,23,13,10,6,1,4,2,16,15,17,27,25,20,29,11,17,12,16,8,1,1,0,1],t15HB:[7,12,18,53,47,76,124,108,89,123,108,119,107,81,122,63,13,5,16,27,46,36,61,51,42,70,52,83,65,41,59,36,19,17,15,24,41,34,59,48,40,64,50,78,62,80,56,33,29,28,25,43,39,63,55,93,76,59,93,72,54,75,50,29,52,22,42,40,67,57,95,79,72,57,89,69,49,66,46,27,77,37,35,66,58,52,91,74,62,48,79,63,90,62,40, +38,125,32,60,56,50,92,78,65,55,87,71,51,73,51,70,30,109,53,49,94,88,75,66,122,91,73,56,42,64,44,21,25,90,43,41,77,73,63,56,92,77,66,47,67,48,53,36,20,71,34,67,60,58,49,88,76,67,106,71,54,38,39,23,15,109,53,51,47,90,82,58,57,48,72,57,41,23,27,62,9,86,42,40,37,70,64,52,43,70,55,42,25,29,18,11,11,118,68,30,55,50,46,74,65,49,39,24,16,22,13,14,7,91,44,39,38,34,63,52,45,31,52,28,19,14,8,9,3,123,60,58,53,47,43,32,22,37,24,17,12,15,10,2,1,71,37,34,30,28,20,17,26,21,16,10,6,8,6,2,0],t16HB:[1,5,14,44,74,63, +110,93,172,149,138,242,225,195,376,17,3,4,12,20,35,62,53,47,83,75,68,119,201,107,207,9,15,13,23,38,67,58,103,90,161,72,127,117,110,209,206,16,45,21,39,69,64,114,99,87,158,140,252,212,199,387,365,26,75,36,68,65,115,101,179,164,155,264,246,226,395,382,362,9,66,30,59,56,102,185,173,265,142,253,232,400,388,378,445,16,111,54,52,100,184,178,160,133,257,244,228,217,385,366,715,10,98,48,91,88,165,157,148,261,248,407,397,372,380,889,884,8,85,84,81,159,156,143,260,249,427,401,392,383,727,713,708,7,154,76,73, +141,131,256,245,426,406,394,384,735,359,710,352,11,139,129,67,125,247,233,229,219,393,743,737,720,885,882,439,4,243,120,118,115,227,223,396,746,742,736,721,712,706,223,436,6,202,224,222,218,216,389,386,381,364,888,443,707,440,437,1728,4,747,211,210,208,370,379,734,723,714,1735,883,877,876,3459,865,2,377,369,102,187,726,722,358,711,709,866,1734,871,3458,870,434,0,12,10,7,11,10,17,11,9,13,12,10,7,5,3,1,3],t24HB:[15,13,46,80,146,262,248,434,426,669,653,649,621,517,1032,88,14,12,21,38,71,130,122,216, +209,198,327,345,319,297,279,42,47,22,41,74,68,128,120,221,207,194,182,340,315,295,541,18,81,39,75,70,134,125,116,220,204,190,178,325,311,293,271,16,147,72,69,135,127,118,112,210,200,188,352,323,306,285,540,14,263,66,129,126,119,114,214,202,192,180,341,317,301,281,262,12,249,123,121,117,113,215,206,195,185,347,330,308,291,272,520,10,435,115,111,109,211,203,196,187,353,332,313,298,283,531,381,17,427,212,208,205,201,193,186,177,169,320,303,286,268,514,377,16,335,199,197,191,189,181,174,333,321,305,289, +275,521,379,371,11,668,184,183,179,175,344,331,314,304,290,277,530,383,373,366,10,652,346,171,168,164,318,309,299,287,276,263,513,375,368,362,6,648,322,316,312,307,302,292,284,269,261,512,376,370,364,359,4,620,300,296,294,288,282,273,266,515,380,374,369,365,361,357,2,1033,280,278,274,267,264,259,382,378,372,367,363,360,358,356,0,43,20,19,17,15,13,11,9,7,6,4,7,5,3,1,3],t32HB:[1,10,8,20,12,20,16,32,14,12,24,0,28,16,24,16],t33HB:[15,28,26,48,22,40,36,64,14,24,20,32,12,16,8,0],t1l:[1,4,3,5],t2l:[1,4, +7,4,5,7,6,7,8],t3l:[2,3,7,4,4,7,6,7,8],t5l:[1,4,7,8,4,5,8,9,7,8,9,10,8,8,9,10],t6l:[3,4,6,8,4,4,6,7,5,6,7,8,7,7,8,9],t7l:[1,4,7,9,9,10,4,6,8,9,9,10,7,7,9,10,10,11,8,9,10,11,11,11,8,9,10,11,11,12,9,10,11,12,12,12],t8l:[2,4,7,9,9,10,4,4,6,10,10,10,7,6,8,10,10,11,9,10,10,11,11,12,9,9,10,11,12,12,10,10,11,11,13,13],t9l:[3,4,6,7,9,10,4,5,6,7,8,10,5,6,7,8,9,10,7,7,8,9,9,10,8,8,9,9,10,11,9,9,10,10,11,11],t10l:[1,4,7,9,10,10,10,11,4,6,8,9,10,11,10,10,7,8,9,10,11,12,11,11,8,9,10,11,12,12,11,12,9,10,11,12, +12,12,12,12,10,11,12,12,13,13,12,13,9,10,11,12,12,12,13,13,10,10,11,12,12,13,13,13],t11l:[2,4,6,8,9,10,9,10,4,5,6,8,10,10,9,10,6,7,8,9,10,11,10,10,8,8,9,11,10,12,10,11,9,10,10,11,11,12,11,12,9,10,11,12,12,13,12,13,9,9,9,10,11,12,12,12,9,9,10,11,12,12,12,12],t12l:[4,4,6,8,9,10,10,10,4,5,6,7,9,9,10,10,6,6,7,8,9,10,9,10,7,7,8,8,9,10,10,10,8,8,9,9,10,10,10,11,9,9,10,10,10,11,10,11,9,9,9,10,10,11,11,12,10,10,10,11,11,11,11,12],t13l:[1,5,7,8,9,10,10,11,10,11,12,12,13,13,14,14,4,6,8,9,10,10,11,11,11,11, +12,12,13,14,14,14,7,8,9,10,11,11,12,12,11,12,12,13,13,14,15,15,8,9,10,11,11,12,12,12,12,13,13,13,13,14,15,15,9,9,11,11,12,12,13,13,12,13,13,14,14,15,15,16,10,10,11,12,12,12,13,13,13,13,14,13,15,15,16,16,10,11,12,12,13,13,13,13,13,14,14,14,15,15,16,16,11,11,12,13,13,13,14,14,14,14,15,15,15,16,18,18,10,10,11,12,12,13,13,14,14,14,14,15,15,16,17,17,11,11,12,12,13,13,13,15,14,15,15,16,16,16,18,17,11,12,12,13,13,14,14,15,14,15,16,15,16,17,18,19,12,12,12,13,14,14,14,14,15,15,15,16,17,17,17,18,12,13,13,14, +14,15,14,15,16,16,17,17,17,18,18,18,13,13,14,15,15,15,16,16,16,16,16,17,18,17,18,18,14,14,14,15,15,15,17,16,16,19,17,17,17,19,18,18,13,14,15,16,16,16,17,16,17,17,18,18,21,20,21,18],t15l:[3,5,6,8,8,9,10,10,10,11,11,12,12,12,13,14,5,5,7,8,9,9,10,10,10,11,11,12,12,12,13,13,6,7,7,8,9,9,10,10,10,11,11,12,12,13,13,13,7,8,8,9,9,10,10,11,11,11,12,12,12,13,13,13,8,8,9,9,10,10,11,11,11,11,12,12,12,13,13,13,9,9,9,10,10,10,11,11,11,11,12,12,13,13,13,14,10,9,10,10,10,11,11,11,11,12,12,12,13,13,14,14,10,10,10, +11,11,11,11,12,12,12,12,12,13,13,13,14,10,10,10,11,11,11,11,12,12,12,12,13,13,14,14,14,10,10,11,11,11,11,12,12,12,13,13,13,13,14,14,14,11,11,11,11,12,12,12,12,12,13,13,13,13,14,15,14,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,15,12,12,11,12,12,12,13,13,13,13,13,13,14,14,15,15,12,12,12,12,12,13,13,13,13,14,14,14,14,14,15,15,13,13,13,13,13,13,13,13,14,14,14,14,15,15,14,15,13,13,13,13,13,13,13,14,14,14,14,14,15,15,15,15],t16_5l:[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,11,4,6,8,9,10,11,11,11,12,12, +12,13,14,13,14,11,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,12,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,13,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,12,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,13,11,11,11,12,13,13,13,13,14,14,14,14,15,15,16,13,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,13,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,13,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,14,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,13,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,14,13,14,14, +14,14,15,15,15,15,17,16,16,16,16,18,14,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,14,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,14,11,11,11,12,12,13,13,13,14,14,14,14,14,14,14,12],t16l:[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,10,4,6,8,9,10,11,11,11,12,12,12,13,14,13,14,10,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,11,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,12,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,11,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,12,11,11,11,12,13,13,13,13,14,14,14,14, +15,15,16,12,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,12,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,12,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,13,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,12,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,13,13,14,14,14,14,15,15,15,15,17,16,16,16,16,18,13,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,13,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,13,10,10,10,11,11,12,12,12,13,13,13,13,13,13,13,10],t24l:[4,5,7,8,9,10,10,11,11,12,12,12,12,12,13,10,5,6,7,8, +9,10,10,11,11,11,12,12,12,12,12,10,7,7,8,9,9,10,10,11,11,11,11,12,12,12,13,9,8,8,9,9,10,10,10,11,11,11,11,12,12,12,12,9,9,9,9,10,10,10,10,11,11,11,12,12,12,12,13,9,10,9,10,10,10,10,11,11,11,11,12,12,12,12,12,9,10,10,10,10,10,11,11,11,11,12,12,12,12,12,13,9,11,10,10,10,11,11,11,11,12,12,12,12,12,13,13,10,11,11,11,11,11,11,11,11,11,12,12,12,12,13,13,10,11,11,11,11,11,11,11,12,12,12,12,12,13,13,13,10,12,11,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12, +12,12,12,12,12,12,12,12,13,13,13,13,13,10,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,10,13,12,12,12,12,12,12,13,13,13,13,13,13,13,13,10,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,6],t32l:[1,5,5,7,5,8,7,9,5,7,7,9,7,9,9,10],t33l:[4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]};r.ht=[new Q(0,0,null,null),new Q(2,0,r.t1HB,r.t1l),new Q(3,0,r.t2HB,r.t2l),new Q(3,0,r.t3HB,r.t3l),new Q(0,0,null,null),new Q(4,0,r.t5HB,r.t5l),new Q(4,0,r.t6HB,r.t6l),new Q(6,0,r.t7HB,r.t7l),new Q(6,0,r.t8HB,r.t8l),new Q(6,0,r.t9HB,r.t9l),new Q(8, +0,r.t10HB,r.t10l),new Q(8,0,r.t11HB,r.t11l),new Q(8,0,r.t12HB,r.t12l),new Q(16,0,r.t13HB,r.t13l),new Q(0,0,null,r.t16_5l),new Q(16,0,r.t15HB,r.t15l),new Q(1,1,r.t16HB,r.t16l),new Q(2,3,r.t16HB,r.t16l),new Q(3,7,r.t16HB,r.t16l),new Q(4,15,r.t16HB,r.t16l),new Q(6,63,r.t16HB,r.t16l),new Q(8,255,r.t16HB,r.t16l),new Q(10,1023,r.t16HB,r.t16l),new Q(13,8191,r.t16HB,r.t16l),new Q(4,15,r.t24HB,r.t24l),new Q(5,31,r.t24HB,r.t24l),new Q(6,63,r.t24HB,r.t24l),new Q(7,127,r.t24HB,r.t24l),new Q(8,255,r.t24HB,r.t24l), +new Q(9,511,r.t24HB,r.t24l),new Q(11,2047,r.t24HB,r.t24l),new Q(13,8191,r.t24HB,r.t24l),new Q(0,0,r.t32HB,r.t32l),new Q(0,0,r.t33HB,r.t33l)];r.largetbl=[65540,327685,458759,589832,655369,655370,720906,720907,786443,786444,786444,851980,851980,851980,917517,655370,262149,393222,524295,589832,655369,720906,720906,720907,786443,786443,786444,851980,917516,851980,917516,655370,458759,524295,589832,655369,720905,720906,786442,786443,851979,786443,851979,851980,851980,917516,917517,720905,589832,589832, +655369,720905,720906,786442,786442,786443,851979,851979,917515,917516,917516,983052,983052,786441,655369,655369,720905,720906,786442,786442,851978,851979,851979,917515,917516,917516,983052,983052,983053,720905,655370,655369,720906,720906,786442,851978,851979,917515,851979,917515,917516,983052,983052,983052,1048588,786441,720906,720906,720906,786442,851978,851979,851979,851979,917515,917516,917516,917516,983052,983052,1048589,786441,720907,720906,786442,786442,851979,851979,851979,917515,917516,983052, +983052,983052,983052,1114125,1114125,786442,720907,786443,786443,851979,851979,851979,917515,917515,983051,983052,983052,983052,1048588,1048589,1048589,786442,786443,786443,786443,851979,851979,917515,917515,983052,983052,983052,983052,1048588,983053,1048589,983053,851978,786444,851979,786443,851979,917515,917516,917516,917516,983052,1048588,1048588,1048589,1114125,1114125,1048589,786442,851980,851980,851979,851979,917515,917516,983052,1048588,1048588,1048588,1048588,1048589,1048589,983053,1048589, +851978,851980,917516,917516,917516,917516,983052,983052,983052,983052,1114124,1048589,1048589,1048589,1048589,1179661,851978,983052,917516,917516,917516,983052,983052,1048588,1048588,1048589,1179661,1114125,1114125,1114125,1245197,1114125,851978,917517,983052,851980,917516,1048588,1048588,983052,1048589,1048589,1114125,1179661,1114125,1245197,1114125,1048589,851978,655369,655369,655369,720905,720905,786441,786441,786441,851977,851977,851977,851978,851978,851978,851978,655366];r.table23=[65538,262147, +458759,262148,327684,458759,393222,458759,524296];r.table56=[65539,262148,458758,524296,262148,327684,524294,589831,458757,524294,589831,655368,524295,524295,589832,655369];r.bitrate_table=[[0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1],[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1],[0,8,16,24,32,40,48,56,64,-1,-1,-1,-1,-1,-1,-1]];r.samplerate_table=[[22050,24E3,16E3,-1],[44100,48E3,32E3,-1],[11025,12E3,8E3,-1]];r.scfsi_band=[0,6,11,16,21];ma.Q_MAX=257;ma.Q_MAX2=116;ma.LARGE_BITS=1E5; +ma.IXMAX_VAL=8206;var na={};na.SFBMAX=3*d.SBMAX_s;d.ENCDELAY=576;d.POSTDELAY=1152;d.MDCTDELAY=48;d.FFTOFFSET=224+d.MDCTDELAY;d.DECDELAY=528;d.SBLIMIT=32;d.CBANDS=64;d.SBPSY_l=21;d.SBPSY_s=12;d.SBMAX_l=22;d.SBMAX_s=13;d.PSFB21=6;d.PSFB12=6;d.BLKSIZE=1024;d.HBLKSIZE=d.BLKSIZE/2+1;d.BLKSIZE_s=256;d.HBLKSIZE_s=d.BLKSIZE_s/2+1;d.NORM_TYPE=0;d.START_TYPE=1;d.SHORT_TYPE=2;d.STOP_TYPE=3;d.MPG_MD_LR_LR=0;d.MPG_MD_LR_I=1;d.MPG_MD_MS_LR=2;d.MPG_MD_MS_I=3;d.fircoef=[-.1039435,-.1892065,-.0432472*5,-.155915,3.898045E-17, +.0467745*5,.50455,.756825,.187098*5];da.MFSIZE=3456+d.ENCDELAY-d.MDCTDELAY;da.MAX_HEADER_BUF=256;da.MAX_BITS_PER_CHANNEL=4095;da.MAX_BITS_PER_GRANULE=7680;da.BPC=320;Ca.RIFF=Ob("RIFF");Ca.WAVE=Ob("WAVE");Ca.fmt_=Ob("fmt ");Ca.data=Ob("data");Ca.readHeader=function(d){var k=new Ca,q=d.getUint32(0,!1);if(Ca.RIFF==q&&(d.getUint32(4,!0),Ca.WAVE==d.getUint32(8,!1)&&Ca.fmt_==d.getUint32(12,!1))){var r=d.getUint32(16,!0),B=20;switch(r){case 16:case 18:k.channels=d.getUint16(B+2,!0);k.sampleRate=d.getUint32(B+ +4,!0);break;default:throw"extended fmt chunk not implemented";}for(var B=B+r,r=Ca.data,t=0;r!=q;){q=d.getUint32(B,!1);t=d.getUint32(B+4,!0);if(r==q)break;B+=t+8}k.dataLen=t;k.dataOffset=B+8;return k}};na.SFBMAX=3*d.SBMAX_s;this.Mp3Encoder=function(d,k,q){3!=arguments.length&&(console.error("WARN: Mp3Encoder(channels, samplerate, kbps) not specified"),d=1,k=44100,q=128);var r=new V,B=new Uc,t=new O,H=new ua,g=new Gc,b=new ma,l=new Oc,a=new ub,h=new Fc,D=new Xc,e=new Hc,n=new tb,c=new Vc,f=new Wc;r.setModules(t, +H,g,b,l,a,h,D,f);H.setModules(t,f,h,a);D.setModules(H,h);g.setModules(r);l.setModules(H,e,b,n);b.setModules(n,e,r.enc.psy);e.setModules(H);n.setModules(b);a.setModules(r,H,h);B.setModules(c,f);c.setModules(h,D,g);var E=r.lame_init();E.num_channels=d;E.in_samplerate=k;E.brate=q;E.mode=ka.STEREO;E.quality=3;E.bWriteVbrTag=!1;E.disable_reservoir=!0;E.write_id3tag_automatic=!1;r.lame_init_params(E);var z=1152,w=0|1.25*z+7200,A=new Int8Array(w);this.encodeBuffer=function(a,b){1==d&&(b=a);a.length>z&&(z= +a.length,w=0|1.25*z+7200,A=new Int8Array(w));var c=r.lame_encode_buffer(E,a,b,a.length,A,0,w);return new Int8Array(A.subarray(0,c))};this.flush=function(){var a=r.lame_encode_flush(E,A,0,w);return new Int8Array(A.subarray(0,a))}};this.WavHeader=Ca}; diff --git a/src/assets/libs/audio-recorder/recorder.js b/src/assets/libs/audio-recorder/recorder.js new file mode 100755 index 0000000..fba7241 --- /dev/null +++ b/src/assets/libs/audio-recorder/recorder.js @@ -0,0 +1,141 @@ +(function (exports) { + //公共方法 + var Util = { + //åˆå§‹åŒ– + init: function () { + navigator.getUserMedia = navigator.getUserMedia || + navigator.webkitGetUserMedia || + navigator.mozGetUserMedia || + navigator.msGetUserMedia; + + window.AudioContext = window.AudioContext || + window.webkitAudioContext; + }, + //日志 + log: function () { + console.log.apply(console, arguments); + } + }; + //æž„é€ å‡½æ•° + var Recorder = function (config) { + + var _this = this; + config = config || {}; //åˆå§‹åŒ–é…置对象 + config.sampleRate = config.sampleRate || 44100; //é‡‡æ ·é¢‘çŽ‡ï¼Œé»˜è®¤ä¸º44100Hz(æ ‡å‡†MP3é‡‡æ ·çŽ‡) + config.bitRate = config.bitRate || 128; //比特率,默认为128kbps(æ ‡å‡†MP3è´¨é‡) + + Util.init(); + + if (navigator.getUserMedia) { + navigator.getUserMedia({ + audio: true //é…置对象 + }, + function (stream) { //æˆåŠŸå›žè°ƒ + var context = new AudioContext(), + microphone = context.createMediaStreamSource(stream), //媒体æµéŸ³é¢‘æº + processor = context.createScriptProcessor(16384, 1, 1), //js音频处ç†å™¨ + successCallback, errorCallback; + + config.sampleRate = context.sampleRate; + + processor.onaudioprocess = function (event) { + //监å¬éŸ³é¢‘录制过程 + var array = event.inputBuffer.getChannelData(0); + realTimeWorker.postMessage({cmd: 'encode', buf: array}); + }; + + var realTimeWorker = new Worker('assets/libs/audio-recorder/worker.js'); //å¼€å¯åŽå°çº¿ç¨‹ + _this.worker = realTimeWorker; + realTimeWorker.onmessage = function (e) { //主线程监å¬åŽå°çº¿ç¨‹ï¼Œå®žæ—¶é€šä¿¡ + switch (e.data.cmd) { + case 'init': + Util.log('åˆå§‹åŒ–æˆåŠŸ'); + if (config.success) { + config.success(); + } + break; + case 'end': + if (successCallback) { + var blob = new Blob(e.data.buf, {type: 'audio/mp3'}); + successCallback(blob); + Util.log('MP3大å°ï¼š' + blob.size + '%cB', 'color:#0000EE'); + } + break; + case 'error': + Util.log('错误信æ¯ï¼š' + e.data.error); + if (errorCallback) { + errorCallback(e.data.error); + } + break; + default: + Util.log('未知信æ¯ï¼š' + e.data); + } + }; + //接å£åˆ—表 + //开始录音 + _this.start = function () { + if (processor && microphone) { + microphone.connect(processor); + processor.connect(context.destination); + Util.log('开始录音'); + } + }; + //结æŸå½•音 + _this.stop = function () { + if (processor && microphone) { + microphone.disconnect(); + processor.disconnect(); + Util.log('录音结æŸ'); + } + }; + //获å–blobæ ¼å¼å½•音文件 + _this.getBlob = function (onSuccess, onError) { + successCallback = onSuccess; + errorCallback = onError; + realTimeWorker.postMessage({cmd: 'finish'}); + }; + + realTimeWorker.postMessage({ + cmd: 'init', + config: { + sampleRate: config.sampleRate, + bitRate: config.bitRate + } + }); + }, + function (error) { //失败回调 + var msg; + switch (error.code || error.name) { + case 'PermissionDeniedError': + case 'PERMISSION_DENIED': + case 'NotAllowedError': + msg = '用户拒ç»è®¿é—®éº¦å…‹é£Ž'; + break; + case 'NOT_SUPPORTED_ERROR': + case 'NotSupportedError': + msg = 'æµè§ˆå™¨ä¸æ”¯æŒéº¦å…‹é£Ž'; + break; + case 'MANDATORY_UNSATISFIED_ERROR': + case 'MandatoryUnsatisfiedError': + msg = '找ä¸åˆ°éº¦å…‹é£Žè®¾å¤‡'; + break; + default: + msg = 'æ— æ³•æ‰“å¼€éº¦å…‹é£Žï¼Œå¼‚å¸¸ä¿¡æ¯:' + (error.code || error.name); + break; + } + Util.log(msg); + if (config.error) { + config.error(msg); + } + }); + } else { + Util.log('当剿µè§ˆå™¨ä¸æ”¯æŒå½•音功能'); + if (config.fix) { + config.fix('当剿µè§ˆå™¨ä¸æ”¯æŒå½•音功能'); + } + } + + }; + //æ¨¡å—æŽ¥å£ + exports.Recorder = Recorder; +})(window); diff --git a/src/assets/libs/audio-recorder/worker.js b/src/assets/libs/audio-recorder/worker.js new file mode 100755 index 0000000..653f959 --- /dev/null +++ b/src/assets/libs/audio-recorder/worker.js @@ -0,0 +1,108 @@ +(function () { + 'use strict'; + if (!importScripts) { + var importScripts = (function (globalEval) { + var xhr = new XMLHttpRequest; + return function importScripts() { + var + args = Array.prototype.slice.call(arguments) + , len = args.length + , i = 0 + , meta + , data + , content + ; + for (; i < len; i++) { + if (args[i].substr(0, 5).toLowerCase() === "data:") { + data = args[i]; + content = data.indexOf(","); + meta = data.substr(5, content).toLowerCase(); + data = decodeURIComponent(data.substr(content + 1)); + if (/;\s*base64\s*[;,]/.test(meta)) { + data = atob(data); + } + if (/;\s*charset=[uU][tT][fF]-?8\s*[;,]/.test(meta)) { + data = decodeURIComponent(escape(data)); + } + } else { + xhr.open("GET", args[i], false); + xhr.send(null); + data = xhr.responseText; + } + globalEval(data); + } + }; + }(eval)); + } + + + importScripts('/assets/libs/audio-recorder/lame.min.js'); + + var mp3Encoder, maxSamples = 1152, samplesMono, lame, config, dataBuffer; + + var clearBuffer = function () { + dataBuffer = []; + }; + + var appendToBuffer = function (mp3Buf) { + dataBuffer.push(new Int8Array(mp3Buf)); + }; + + var init = function (prefConfig) { + config = prefConfig || {}; + lame = new lamejs(); + mp3Encoder = new lame.Mp3Encoder(1, config.sampleRate || 44100, config.bitRate || 128); + clearBuffer(); + self.postMessage({ + cmd: 'init' + }); + }; + + var floatTo16BitPCM = function (input, output) { + for (var i = 0; i < input.length; i++) { + var s = Math.max(-1, Math.min(1, input[i])); + output[i] = (s < 0 ? s * 0x8000 : s * 0x7FFF); + } + }; + + var convertBuffer = function (arrayBuffer) { + var data = new Float32Array(arrayBuffer); + var out = new Int16Array(arrayBuffer.length); + floatTo16BitPCM(data, out); + return out; + }; + + var encode = function (arrayBuffer) { + samplesMono = convertBuffer(arrayBuffer); + var remaining = samplesMono.length; + for (var i = 0; remaining >= 0; i += maxSamples) { + var left = samplesMono.subarray(i, i + maxSamples); + var mp3buf = mp3Encoder.encodeBuffer(left); + appendToBuffer(mp3buf); + remaining -= maxSamples; + } + }; + + var finish = function () { + appendToBuffer(mp3Encoder.flush()); + self.postMessage({ + cmd: 'end', + buf: dataBuffer + }); + clearBuffer(); + }; + + self.onmessage = function (e) { + switch (e.data.cmd) { + case 'init': + init(e.data.config); + break; + case 'encode': + encode(e.data.buf); + break; + case 'finish': + finish(); + break; + } + }; +})(); diff --git a/src/assets/libs/service-worker/cache-service.js b/src/assets/libs/service-worker/cache-service.js new file mode 100644 index 0000000..d9111ae --- /dev/null +++ b/src/assets/libs/service-worker/cache-service.js @@ -0,0 +1,535 @@ +/* + Copyright 2014 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +// While overkill for this specific sample in which there is only one cache, +// this is one best practice that can be followed in general to keep track of +// multiple caches used by a given service worker, and keep them all versioned. +// It maps a shorthand identifier for a cache to a specific, versioned cache name. + +// Note that since global state is discarded in between service worker restarts, these +// variables will be reinitialized each time the service worker handles an event, and you +// should not attempt to change their values inside an event handler. (Treat them as constants.) + +// If at any point you want to force pages that use this service worker to start using a fresh +// cache, then increment the CACHE_VERSION value. It will kick off the service worker update +// flow and the old cache(s) will be purged as part of the activate event handler when the +// updated service worker is activated. +var CACHE_SID = 0; +var CACHE_VER = ''; +var isPlayerPage = false; +// var CURRENT_CACHES = {}; +// var CURRENT_CACHES = null; + +async function progressDownloader(urlOrRequest, port, sid) { + let url = urlOrRequest; + let response = await fetch(url); + if (urlOrRequest instanceof Request) { + url = urlOrRequest.url; + } + let isBin = false; + if (url.endsWith('.mp4') + || url.endsWith('.mp3') + || url.endsWith('.jpg') + || url.endsWith('.png')){ + isBin = true; + } + + const reader = response.body.getReader(); + const contentLength = +response.headers.get('Content-Length'); + port.postMessage({ + len: contentLength, + status: 'init', + sid + }); + let receivedLength = 0; + let mb = 0; + let timeS = new Date().getTime(); + let timeD = 0; + let speed = 0; + let chunks = []; // array of received binary chunks (comprises the body) + while(true) { + const {done, value} = await reader.read(); + if (done) { + break; + } + chunks.push(value); + receivedLength += value.length; + /*mb += value.length; + if(mb > 1000 * 1000) { + timeD = new Date().getTime() - timeS; + // timeD = timeD /1000; + speed = mb / timeD; + mb = 0; + timeS = new Date().getTime(); + }*/ + // console.log(`Received ${receivedLength} of ${contentLength}`) + // cb && cb(receivedLength , contentLength) + port.postMessage({ + loaded: value.length, + status: 'downloading', + sid + }); + } + + if (isBin) { + return new Blob(chunks); + } else { + let chunksAll = new Uint8Array(receivedLength); + let position = 0; + for(let chunk of chunks) { + chunksAll.set(chunk, position); + position += chunk.length; + } + return chunksAll; //new TextDecoder("utf-8").decode(chunksAll); + } + +} +self.addEventListener('install', function(event) { + event.waitUntil(self.skipWaiting()); // Activate worker immediately +}); + +self.addEventListener('activate', function(event) { + event.waitUntil(self.clients.claim({ + includeUncontrolled: true + }).then(function() { + // After the activation and claiming is complete, send a message to each of the controlled + // pages letting it know that it's active. + // This will trigger navigator.serviceWorker.onmessage in each client. + return self.clients.matchAll().then(function(clients) { + return Promise.all(clients.map(function(client) { + // return client.postMessage('The service worker has activated and ' + + // 'taken control.'); + return client.postMessage({ + name: 'initOk', + }); + + })); + }); + })); // Become available to all pages +}); +/* +self.addEventListener('activate', function(event) { + // Delete all caches that aren't named in CURRENT_CACHES. + // While there is only one cache in this example, the same logic will handle the case where + // there are multiple versioned caches. + // var expectedCacheNames = Object.keys(CURRENT_CACHES).map(function(key) { + // return CURRENT_CACHES[key]; + // }); + + event.waitUntil( + caches.keys().then(function(cacheNames) { + // return Promise.all( + // cacheNames.map(function(cacheName) { + // if (expectedCacheNames.indexOf(cacheName) === -1) { + // // If this cache name isn't present in the array of "expected" cache names, then delete it. + // console.log('Deleting out of date cache:', cacheName); + // return caches.delete(cacheName); + // } + // }) + // ); + }).then(function() { + return clients.claim(); + }).then(function() { + // After the activation and claiming is complete, send a message to each of the controlled + // pages letting it know that it's active. + // This will trigger navigator.serviceWorker.onmessage in each client. + return self.clients.matchAll().then(function(clients) { + return Promise.all(clients.map(function(client) { + return client.postMessage('The service worker has activated and ' + + 'taken control.'); + })); + }); + }) + ); +});*/ + +self.addEventListener('message', function(event) { + // console.log('Handling message event:', event); + if (event.data.command === 'remove') { + if (!event.data.key) { + return; + } + caches.delete(event.data.key) + /*caches.keys().then(function(cacheNames) { + console.log('clear', cacheNames); + // return caches.delete(event.data.ver); + // CACHE_VER = event.data.newVer; + // CACHE_SID = event.data.sid; + if (!event.data.key) { + return; + } + return caches.delete(event.data.key); + return Promise.all( + cacheNames.map(function(cacheName) { + if ( cache_ver === cacheName) { + // If this cache name isn't present in the array of "expected" cache names, then delete it. + console.log('Deleting out of date cache:', cacheName); + // localStorage.removeItem('item-cache-'+event.data.sid); + // self.clients.matchAll().then(function(clients) { + // clients.forEach(function(client) { + // client.postMessage({ + // + // }); + // }); + // }); + console.log('delete', cacheName) + return caches.delete(cacheName); + } + }) + ); + })*/ + /*.then(function() { + return clients.claim(); + })*/ + /*.then(function() { + // After the activation and claiming is complete, send a message to each of the controlled + // pages letting it know that it's active. + // This will trigger navigator.serviceWorker.onmessage in each client. + return self.clients.matchAll().then(function(clients) { + return Promise.all(clients.map(function(client) { + return client.postMessage('The service worker has activated and ' + + 'taken control.'); + })); + }); + })*/ + .then(function() { + console.log('delete finished') + event.ports[0].postMessage({ + error: null + }); + }); + return; + } + if (event.data.command === 'clearAll') { + event.waitUntil( + caches.keys().then(function(cacheNames) { + return Promise.all( + cacheNames.map(function(cacheName) { + return caches.delete(cacheName); + }) + ); + }).then(function() { + event.ports[0].postMessage({ + error: null + }); + }).catch(err => { + event.ports[0].postMessage({ + error: err, + }); + }) + ); + return; + } + if (event.data.command === 'listCachedCoursewares') { + var cacheData = {} + // caches.open('item-cache-c965d3a0630911e994fa058136a96bb1-1556518161000').then(r=>{console.log(r.keys().then(items=>console.log(items[0])))}) + caches.keys().then((cacheNames) => { + cacheNames.map((cacheName) => { + if (cacheName.indexOf('item-cache') > -1) { + var size = 0; + caches.open(cacheName).then((cache) => { + console.log(cacheName) + cache.keys().then((requests) => { + console.log(requests[0]) + for(var req of requests) { + console.log(req) + cache.match(req.url).then(resp => { + console.log(resp.headers.entries()) + }) + // cache.match(req.url).then((resp) => { + // console.log(req.url, resp.length) + // size += parseInt(resp.headers['Content-Length']) + // }).catch(err => { + // console.log(err) + // }); + } + }).then(() => { + cacheData.cacheName = size; + }) + }); + + } + }); + }).then(function(result) { + // event.ports[0].postMessage({ + // error: null, + // urls: urls + // }); + }); + return; + } + + // var key = 'item-cache-' + event.data.sid + '-'+ event.data.ver; + var key = event.data.key; + var p = caches.open(key).then(function(cache) { + // throw {name: 'QuotaExceededError'} + switch (event.data.command) { + // This command returns a list of the URLs corresponding to the Request objects + // that serve as keys for the current cache. + case 'keys': + return cache.keys().then(function(requests) { + var urls = requests.map(function(request) { + return request.url; + }); + + return urls.sort(); + }).then(function(urls) { + // event.ports[0] corresponds to the MessagePort that was transferred as part of the controlled page's + // call to controller.postMessage(). Therefore, event.ports[0].postMessage() will trigger the onmessage + // handler from the controlled page. + // It's up to you how to structure the messages that you send back; this is just one example. + event.ports[0].postMessage({ + error: null, + urls: urls + }); + }); + + // This command adds a new request/response pair to the cache. + case 'add': + // If event.data.url isn't a valid URL, new Request() will throw a TypeError which will be handled + // by the outer .catch(). + // Hardcode {mode: 'no-cors} since the default for new Requests constructed from strings is to require + // CORS, and we don't have any way of knowing whether an arbitrary URL that a user entered supports CORS. + var request = new Request(event.data.url, {mode: 'cors', cache: 'reload'}); // {mode: 'no-cors'} + // console.log('start', event.data.url); + // return fetch(request) + // .then(function(res){ + // return res.arrayBuffer(); + // }) + const startTime = new Date().getTime(); + let len = 0; + return progressDownloader(request, event.ports[0], event.data.sid).then((ab) => { + var cl = ab.size ? ab.size : ab.byteLength; + len = cl; + return cache.put(event.data.url, new Response(ab, { + // url: event.data.url, + // type: 'cors', + status: 200, + statusText: 'OK', + headers: [ + ['Content-Length', cl+''], + ] + })); + }).then(function(r) { + event.ports[0].postMessage({ + error: null, + status: 'finished', + len: len, + time: new Date().getTime() - startTime + }); + }); + + // This command removes a request/response pair from the cache (assuming it exists). + case 'delete': + return cache.delete(event.data.url).then(function(success) { + event.ports[0].postMessage({ + error: success ? null : 'Item was not found in the cache.' + }); + }); + + default: + // This will be handled by the outer .catch(). + throw Error('Unknown command: ' + event.data.command); + } + }).catch(function(error) { + // If the promise rejects, handle it by returning a standardized error message to the controlled page. + console.log('Message handling failed:', event.data.url, error); + // if (error.name == 'QuotaExceededError') { + event.ports[0].postMessage({ + //error: {name: 'QuotaExceededError'} + error: {name: error.name, message: error.message}, + status: 'error' + }); + // } + }); + + // Beginning in Chrome 51, event is an ExtendableMessageEvent, which supports + // the waitUntil() method for extending the lifetime of the event handler + // until the promise is resolved. + if ('waitUntil' in event) { + event.waitUntil(p); + } + + // Without support for waitUntil(), there's a chance that if the promise chain + // takes "too long" to execute, the service worker might be automatically + // stopped before it's complete. +}); + + +self.addEventListener('fetch', function(event) { + + // console.log('Handling fetch event for', event.request.method, event.request.url); + // if (event.request.method !== 'GET' || !CACHE_SID || !CACHE_VER) { + // event.respondWith(function(){ + // return fetch(request).then(networkResponse => { + // return networkResponse; + // }).catch(_ => { + // console.error('direct Fetching failed:', error); + // + // throw error; + // }) + // }); + // + // return; + // } + + /*if (!CACHE_SID || !CACHE_VER) { + event.request.mode = 'no-cors'; + return fetch(event.request).then(function(response) { + // console.log('Response from network is:', response); + console.log(999) + return response; + }).catch(function(error) { + // This catch() will handle exceptions thrown from the fetch() operation. + // Note that a HTTP error response (e.g. 404) will NOT trigger an exception. + // It will return a normal response object that has the appropriate error code set. + console.error('Fetching failed 9:', error); + + throw error; + }); + }*/ + // var isNormReq = !CACHE_SID || !CACHE_VER; + // var key = 'item-cache-' + CACHE_SID + '-'+ CACHE_VER; + if (event.request.method == 'GET' ) { + if (event.request.headers.get('range')) { + var pos = + Number(/^bytes\=(\d+)\-$/g.exec(event.request.headers.get('range'))[1]); + // console.log('Range request for', event.request.url, + // ', starting position:', pos); + event.respondWith( + caches.match(event.request.url, { + ignoreSearch: true, + ignoreVary: true + }).then(function(response) { + if (response) { + console.log('Found response in cache:', event.request.url); + return response.arrayBuffer().then(ab => { + return new Response( + ab.slice(pos), + { + status: 206, + statusText: 'Partial Content', + headers: [ + ['Content-Length', ab.byteLength+''], + ['Content-Range', 'bytes ' + pos + '-' + + (ab.byteLength - 1) + '/' + ab.byteLength]] + }); + }); + + // return response; + } + // event.request.mode = 'cors'; + // event.request.cache = 'reload'; + var request = new Request(event.request.url, + { + method: event.request.method, + mode: 'cors', + cache: 'reload', + headers: event.request.headers + }); + return fetch(request).then(function(response) { + console.log('Response from network is:', event.request.url); + return response; + })/*.then(res => { + return res.arrayBuffer(); + }).then(ab => { + return new Response( + ab.slice(pos), + { + status: 206, + statusText: 'Partial Content', + headers: [ + ['Content-Length', ab.byteLength+''], + ['Content-Range', 'bytes ' + pos + '-' + + (ab.byteLength - 1) + '/' + (pos + ab.byteLength)]] + }); + })*/ + }) + /*caches.open(key) + .then(function(cache) { + return cache.match(event.request.url); + }).then(function(res) { + if (!res) { + return fetch(event.request) + .then(res => { + return res.arrayBuffer(); + }); + } + return res.arrayBuffer(); + }).then(function(ab) { + return new Response( + ab.slice(pos), + { + status: 206, + statusText: 'Partial Content', + headers: [ + ['Content-Length', ab.byteLength+''], + ['Content-Range', 'bytes ' + pos + '-' + + (ab.byteLength - 1) + '/' + ab.byteLength]] + }); + })*/ + ); + } else { + // console.log('Non-range request for', event.request.url); + event.respondWith( + // caches.match() will look for a cache entry in all of the caches available to the service worker. + // It's an alternative to first opening a specific named cache and then matching on that. + caches.match(event.request, { + ignoreSearch: true, + ignoreVary: true + }).then(function(response) { + if (response) { + // console.log('%c Response in cache:', 'color:DodgerBlue;', response); + return response; + } + + // event.request will always have the proper mode set ('cors, 'no-cors', etc.) so we don't + // have to hardcode 'no-cors' like we do when fetch()ing in the install handler. + // event.request.mode = 'cors'; + // cache: 'reload' + if (event.request.cache === 'only-if-cached' && event.request.mode !== 'same-origin') { + return; + } + // console.log('No response found in cache.', event.request.url); + return fetch(event.request).then(function(response) { + // console.log('%c Response from network is:', 'color:#bada55', response); + + return response; + }).catch(function(error) { + // This catch() will handle exceptions thrown from the fetch() operation. + // Note that a HTTP error response (e.g. 404) will NOT trigger an exception. + // It will return a normal response object that has the appropriate error code set. + console.error('Fetching failed:', error); + + // throw error; + }); + }) + ); + } + } else { + event.respondWith( + fetch(event.request).then(function(response) { + // console.log('not get from network:', response); + // console.log(888) + return response; + }).catch(function(error) { + // This catch() will handle exceptions thrown from the fetch() operation. + // Note that a HTTP error response (e.g. 404) will NOT trigger an exception. + // It will return a normal response object that has the appropriate error code set. + console.error('Fetching failed 8:', error); + throw error; + }) + ); + } +}); + diff --git a/src/assets/libs/video-js-7.0.0/video-js.css b/src/assets/libs/video-js-7.0.0/video-js.css new file mode 100644 index 0000000..aff41ca --- /dev/null +++ b/src/assets/libs/video-js-7.0.0/video-js.css @@ -0,0 +1,1699 @@ +.video-js .vjs-big-play-button .vjs-icon-placeholder:before, .vjs-button > .vjs-icon-placeholder:before, .video-js .vjs-modal-dialog, .vjs-modal-dialog .vjs-modal-dialog-content { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.video-js .vjs-big-play-button .vjs-icon-placeholder:before, .vjs-button > .vjs-icon-placeholder:before { + text-align: center; +} + +@font-face { + font-family: VideoJS; + src: url(data:application/font-woff;charset=utf-8;base64,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) format("woff"); + font-weight: normal; + font-style: normal; +} + +.vjs-icon-play, .video-js .vjs-big-play-button .vjs-icon-placeholder:before, .video-js .vjs-play-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-play:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before, .video-js .vjs-play-control .vjs-icon-placeholder:before { + content: "\f101"; +} + +.vjs-icon-play-circle { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-play-circle:before { + content: "\f102"; +} + +.vjs-icon-pause, .video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-pause:before, .video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before { + content: "\f103"; +} + +.vjs-icon-volume-mute, .video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-volume-mute:before, .video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before { + content: "\f104"; +} + +.vjs-icon-volume-low, .video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-volume-low:before, .video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before { + content: "\f105"; +} + +.vjs-icon-volume-mid, .video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-volume-mid:before, .video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before { + content: "\f106"; +} + +.vjs-icon-volume-high, .video-js .vjs-mute-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-volume-high:before, .video-js .vjs-mute-control .vjs-icon-placeholder:before { + content: "\f107"; +} + +.vjs-icon-fullscreen-enter, .video-js .vjs-fullscreen-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-fullscreen-enter:before, .video-js .vjs-fullscreen-control .vjs-icon-placeholder:before { + content: "\f108"; +} + +.vjs-icon-fullscreen-exit, .video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-fullscreen-exit:before, .video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before { + content: "\f109"; +} + +.vjs-icon-square { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-square:before { + content: "\f10a"; +} + +.vjs-icon-spinner { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-spinner:before { + content: "\f10b"; +} + +.vjs-icon-subtitles, .video-js .vjs-subtitles-button .vjs-icon-placeholder, .video-js .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-subtitles:before, .video-js .vjs-subtitles-button .vjs-icon-placeholder:before, .video-js .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before { + content: "\f10c"; +} + +.vjs-icon-captions, .video-js .vjs-captions-button .vjs-icon-placeholder, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-captions:before, .video-js .vjs-captions-button .vjs-icon-placeholder:before, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before { + content: "\f10d"; +} + +.vjs-icon-chapters, .video-js .vjs-chapters-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-chapters:before, .video-js .vjs-chapters-button .vjs-icon-placeholder:before { + content: "\f10e"; +} + +.vjs-icon-share { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-share:before { + content: "\f10f"; +} + +.vjs-icon-cog { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-cog:before { + content: "\f110"; +} + +.vjs-icon-circle, .video-js .vjs-play-progress, .video-js .vjs-volume-level { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-circle:before, .video-js .vjs-play-progress:before, .video-js .vjs-volume-level:before { + content: "\f111"; +} + +.vjs-icon-circle-outline { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-circle-outline:before { + content: "\f112"; +} + +.vjs-icon-circle-inner-circle { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-circle-inner-circle:before { + content: "\f113"; +} + +.vjs-icon-hd { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-hd:before { + content: "\f114"; +} + +.vjs-icon-cancel, .video-js .vjs-control.vjs-close-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-cancel:before, .video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before { + content: "\f115"; +} + +.vjs-icon-replay, .video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-replay:before, .video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before { + content: "\f116"; +} + +.vjs-icon-facebook { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-facebook:before { + content: "\f117"; +} + +.vjs-icon-gplus { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-gplus:before { + content: "\f118"; +} + +.vjs-icon-linkedin { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-linkedin:before { + content: "\f119"; +} + +.vjs-icon-twitter { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-twitter:before { + content: "\f11a"; +} + +.vjs-icon-tumblr { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-tumblr:before { + content: "\f11b"; +} + +.vjs-icon-pinterest { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-pinterest:before { + content: "\f11c"; +} + +.vjs-icon-audio-description, .video-js .vjs-descriptions-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-audio-description:before, .video-js .vjs-descriptions-button .vjs-icon-placeholder:before { + content: "\f11d"; +} + +.vjs-icon-audio, .video-js .vjs-audio-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-audio:before, .video-js .vjs-audio-button .vjs-icon-placeholder:before { + content: "\f11e"; +} + +.vjs-icon-next-item { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-next-item:before { + content: "\f11f"; +} + +.vjs-icon-previous-item { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} + +.vjs-icon-previous-item:before { + content: "\f120"; +} + +.video-js { + display: block; + vertical-align: top; + box-sizing: border-box; + color: #fff; + background-color: #000; + position: relative; + padding: 0; + font-size: 10px; + line-height: 1; + font-weight: normal; + font-style: normal; + font-family: Arial, Helvetica, sans-serif; + word-break: initial; +} + +.video-js:-moz-full-screen { + position: absolute; +} + +.video-js:-webkit-full-screen { + width: 100% !important; + height: 100% !important; +} + +.video-js[tabindex="-1"] { + outline: none; +} + +.video-js *, +.video-js *:before, +.video-js *:after { + box-sizing: inherit; +} + +.video-js ul { + font-family: inherit; + font-size: inherit; + line-height: inherit; + list-style-position: outside; + margin-left: 0; + margin-right: 0; + margin-top: 0; + margin-bottom: 0; +} + +.video-js.vjs-fluid, +.video-js.vjs-16-9, +.video-js.vjs-4-3 { + width: 100%; + max-width: 100%; + height: 0; +} + +.video-js.vjs-16-9 { + padding-top: 56.25%; +} + +.video-js.vjs-4-3 { + padding-top: 75%; +} + +.video-js.vjs-fill { + width: 100%; + height: 100%; +} + +.video-js .vjs-tech { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +body.vjs-full-window { + padding: 0; + margin: 0; + height: 100%; +} + +.vjs-full-window .video-js.vjs-fullscreen { + position: fixed; + overflow: hidden; + z-index: 1000; + left: 0; + top: 0; + bottom: 0; + right: 0; +} + +.video-js.vjs-fullscreen { + width: 100% !important; + height: 100% !important; + padding-top: 0 !important; +} + +.video-js.vjs-fullscreen.vjs-user-inactive { + cursor: none; +} + +.vjs-hidden { + display: none !important; +} + +.vjs-disabled { + opacity: 0.5; + cursor: default; +} + +.video-js .vjs-offscreen { + height: 1px; + left: -9999px; + position: absolute; + top: 0; + width: 1px; +} + +.vjs-lock-showing { + display: block !important; + opacity: 1; + visibility: visible; +} + +.vjs-no-js { + padding: 20px; + color: #fff; + background-color: #000; + font-size: 18px; + font-family: Arial, Helvetica, sans-serif; + text-align: center; + width: 300px; + height: 150px; + margin: 0px auto; +} + +.vjs-no-js a, +.vjs-no-js a:visited { + color: #66A8CC; +} + +.video-js .vjs-big-play-button { + font-size: 3em; + line-height: 1.5em; + height: 1.5em; + width: 3em; + display: block; + position: absolute; + top: 10px; + left: 10px; + padding: 0; + cursor: pointer; + opacity: 1; + border: 0.06666em solid #fff; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); + -webkit-border-radius: 0.3em; + -moz-border-radius: 0.3em; + border-radius: 0.3em; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -ms-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; +} + +.vjs-big-play-centered .vjs-big-play-button { + top: 50%; + left: 50%; + margin-top: -0.75em; + margin-left: -1.5em; +} + +.video-js:hover .vjs-big-play-button, +.video-js .vjs-big-play-button:focus { + border-color: #fff; + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); + -webkit-transition: all 0s; + -moz-transition: all 0s; + -ms-transition: all 0s; + -o-transition: all 0s; + transition: all 0s; +} + +.vjs-controls-disabled .vjs-big-play-button, +.vjs-has-started .vjs-big-play-button, +.vjs-using-native-controls .vjs-big-play-button, +.vjs-error .vjs-big-play-button { + display: none; +} + +.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button { + display: block; +} + +.video-js button { + background: none; + border: none; + color: inherit; + display: inline-block; + font-size: inherit; + line-height: inherit; + text-transform: none; + text-decoration: none; + transition: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.vjs-control .vjs-button { + width: 100%; + height: 100%; +} + +.video-js .vjs-control.vjs-close-button { + cursor: pointer; + height: 3em; + position: absolute; + right: 0; + top: 0.5em; + z-index: 2; +} + +.video-js .vjs-modal-dialog { + background: rgba(0, 0, 0, 0.8); + background: -webkit-linear-gradient(-90deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0)); + background: linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0)); + overflow: auto; +} + +.video-js .vjs-modal-dialog > * { + box-sizing: border-box; +} + +.vjs-modal-dialog .vjs-modal-dialog-content { + font-size: 1.2em; + line-height: 1.5; + padding: 20px 24px; + z-index: 1; +} + +.vjs-menu-button { + cursor: pointer; +} + +.vjs-menu-button.vjs-disabled { + cursor: default; +} + +.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu { + display: none; +} + +.vjs-menu .vjs-menu-content { + display: block; + padding: 0; + margin: 0; + font-family: Arial, Helvetica, sans-serif; + overflow: auto; +} + +.vjs-menu .vjs-menu-content > * { + box-sizing: border-box; +} + +.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu { + display: none; +} + +.vjs-menu li { + list-style: none; + margin: 0; + padding: 0.2em 0; + line-height: 1.4em; + font-size: 1.2em; + text-align: center; + text-transform: lowercase; +} + +.vjs-menu li.vjs-menu-item:focus, +.vjs-menu li.vjs-menu-item:hover { + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); +} + +.vjs-menu li.vjs-selected, +.vjs-menu li.vjs-selected:focus, +.vjs-menu li.vjs-selected:hover { + background-color: #fff; + color: #2B333F; +} + +.vjs-menu li.vjs-menu-title { + text-align: center; + text-transform: uppercase; + font-size: 1em; + line-height: 2em; + padding: 0; + margin: 0 0 0.3em 0; + font-weight: bold; + cursor: default; +} + +.vjs-menu-button-popup .vjs-menu { + display: none; + position: absolute; + bottom: 0; + width: 10em; + left: -3em; + height: 0em; + margin-bottom: 1.5em; + border-top-color: rgba(43, 51, 63, 0.7); +} + +.vjs-menu-button-popup .vjs-menu .vjs-menu-content { + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); + position: absolute; + width: 100%; + bottom: 1.5em; + max-height: 15em; +} + +.vjs-workinghover .vjs-menu-button-popup:hover .vjs-menu, +.vjs-menu-button-popup .vjs-menu.vjs-lock-showing { + display: block; +} + +.video-js .vjs-menu-button-inline { + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -ms-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; + overflow: hidden; +} + +.video-js .vjs-menu-button-inline:before { + width: 2.222222222em; +} + +.video-js .vjs-menu-button-inline:hover, +.video-js .vjs-menu-button-inline:focus, +.video-js .vjs-menu-button-inline.vjs-slider-active, +.video-js.vjs-no-flex .vjs-menu-button-inline { + width: 12em; +} + +.vjs-menu-button-inline .vjs-menu { + opacity: 0; + height: 100%; + width: auto; + position: absolute; + left: 4em; + top: 0; + padding: 0; + margin: 0; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -ms-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; +} + +.vjs-menu-button-inline:hover .vjs-menu, +.vjs-menu-button-inline:focus .vjs-menu, +.vjs-menu-button-inline.vjs-slider-active .vjs-menu { + display: block; + opacity: 1; +} + +.vjs-no-flex .vjs-menu-button-inline .vjs-menu { + display: block; + opacity: 1; + position: relative; + width: auto; +} + +.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu, +.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu, +.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu { + width: auto; +} + +.vjs-menu-button-inline .vjs-menu-content { + width: auto; + height: 100%; + margin: 0; + overflow: hidden; +} + +.video-js .vjs-control-bar { + display: none; + width: 100%; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 3.0em; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); +} + +.vjs-has-started .vjs-control-bar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + visibility: visible; + opacity: 1; + -webkit-transition: visibility 0.1s, opacity 0.1s; + -moz-transition: visibility 0.1s, opacity 0.1s; + -ms-transition: visibility 0.1s, opacity 0.1s; + -o-transition: visibility 0.1s, opacity 0.1s; + transition: visibility 0.1s, opacity 0.1s; +} + +.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { + visibility: visible; + opacity: 0; + -webkit-transition: visibility 1s, opacity 1s; + -moz-transition: visibility 1s, opacity 1s; + -ms-transition: visibility 1s, opacity 1s; + -o-transition: visibility 1s, opacity 1s; + transition: visibility 1s, opacity 1s; +} + +.vjs-controls-disabled .vjs-control-bar, +.vjs-using-native-controls .vjs-control-bar, +.vjs-error .vjs-control-bar { + display: none !important; +} + +.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { + opacity: 1; + visibility: visible; +} + +.vjs-has-started.vjs-no-flex .vjs-control-bar { + display: table; +} + +.video-js .vjs-control { + position: relative; + text-align: center; + margin: 0; + padding: 0; + height: 100%; + width: 4em; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; +} + +.vjs-button > .vjs-icon-placeholder:before { + font-size: 1.8em; + line-height: 1.67; +} + +.video-js .vjs-control:focus:before, +.video-js .vjs-control:hover:before, +.video-js .vjs-control:focus { + text-shadow: 0em 0em 1em white; +} + +.video-js .vjs-control-text { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.vjs-no-flex .vjs-control { + display: table-cell; + vertical-align: middle; +} + +.video-js .vjs-custom-control-spacer { + display: none; +} + +.video-js .vjs-progress-control { + cursor: pointer; + -webkit-box-flex: auto; + -moz-box-flex: auto; + -webkit-flex: auto; + -ms-flex: auto; + flex: auto; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + min-width: 4em; +} + +.video-js .vjs-progress-control.disabled { + cursor: default; +} + +.vjs-live .vjs-progress-control { + display: none; +} + +.vjs-no-flex .vjs-progress-control { + width: auto; +} + +.video-js .vjs-progress-holder { + -webkit-box-flex: auto; + -moz-box-flex: auto; + -webkit-flex: auto; + -ms-flex: auto; + flex: auto; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -ms-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + height: 0.3em; +} + +.video-js .vjs-progress-control .vjs-progress-holder { + margin: 0 10px; +} + +.video-js .vjs-progress-control:hover .vjs-progress-holder { + font-size: 1.666666666666666666em; +} + +.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled { + font-size: 1em; +} + +.video-js .vjs-progress-holder .vjs-play-progress, +.video-js .vjs-progress-holder .vjs-load-progress, +.video-js .vjs-progress-holder .vjs-load-progress div { + position: absolute; + display: block; + height: 100%; + margin: 0; + padding: 0; + width: 0; +} + +.video-js .vjs-play-progress { + background-color: #fff; +} + +.video-js .vjs-play-progress:before { + font-size: 0.9em; + position: absolute; + right: -0.5em; + top: -0.333333333333333em; + z-index: 1; +} + +.video-js .vjs-load-progress { + background: rgba(115, 133, 159, 0.5); +} + +.video-js .vjs-load-progress div { + background: rgba(115, 133, 159, 0.75); +} + +.video-js .vjs-time-tooltip { + background-color: #fff; + background-color: rgba(255, 255, 255, 0.8); + -webkit-border-radius: 0.3em; + -moz-border-radius: 0.3em; + border-radius: 0.3em; + color: #000; + float: right; + font-family: Arial, Helvetica, sans-serif; + font-size: 1em; + padding: 6px 8px 8px 8px; + pointer-events: none; + position: relative; + top: -3.4em; + visibility: hidden; + z-index: 1; +} + +.video-js .vjs-progress-holder:focus .vjs-time-tooltip { + display: none; +} + +.video-js .vjs-progress-control:hover .vjs-time-tooltip, +.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip { + display: block; + font-size: 0.6em; + visibility: visible; +} + +.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip { + font-size: 1em; +} + +.video-js .vjs-progress-control .vjs-mouse-display { + display: none; + position: absolute; + width: 1px; + height: 100%; + background-color: #000; + z-index: 1; +} + +.vjs-no-flex .vjs-progress-control .vjs-mouse-display { + z-index: 0; +} + +.video-js .vjs-progress-control:hover .vjs-mouse-display { + display: block; +} + +.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display { + visibility: hidden; + opacity: 0; + -webkit-transition: visibility 1s, opacity 1s; + -moz-transition: visibility 1s, opacity 1s; + -ms-transition: visibility 1s, opacity 1s; + -o-transition: visibility 1s, opacity 1s; + transition: visibility 1s, opacity 1s; +} + +.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display { + display: none; +} + +.vjs-mouse-display .vjs-time-tooltip { + color: #fff; + background-color: #000; + background-color: rgba(0, 0, 0, 0.8); +} + +.video-js .vjs-slider { + position: relative; + cursor: pointer; + padding: 0; + margin: 0 0.45em 0 0.45em; + /* iOS Safari */ + -webkit-touch-callout: none; + /* Safari */ + -webkit-user-select: none; + /* Konqueror HTML */ + -khtml-user-select: none; + /* Firefox */ + -moz-user-select: none; + /* Internet Explorer/Edge */ + -ms-user-select: none; + /* Non-prefixed version, currently supported by Chrome and Opera */ + user-select: none; + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); +} + +.video-js .vjs-slider.disabled { + cursor: default; +} + +.video-js .vjs-slider:focus { + text-shadow: 0em 0em 1em white; + -webkit-box-shadow: 0 0 1em #fff; + -moz-box-shadow: 0 0 1em #fff; + box-shadow: 0 0 1em #fff; +} + +.video-js .vjs-mute-control { + cursor: pointer; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; +} + +.video-js .vjs-volume-control { + cursor: pointer; + margin-right: 1em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.video-js .vjs-volume-control.vjs-volume-horizontal { + width: 5em; +} + +.video-js .vjs-volume-panel .vjs-volume-control { + visibility: visible; + opacity: 0; + width: 1px; + height: 1px; + margin-left: -1px; +} + +.video-js .vjs-volume-panel { + -webkit-transition: width 1s; + -moz-transition: width 1s; + -ms-transition: width 1s; + -o-transition: width 1s; + transition: width 1s; +} + +.video-js .vjs-volume-panel:hover .vjs-volume-control, +.video-js .vjs-volume-panel:active .vjs-volume-control, +.video-js .vjs-volume-panel:focus .vjs-volume-control, +.video-js .vjs-volume-panel .vjs-volume-control:hover, +.video-js .vjs-volume-panel .vjs-volume-control:active, +.video-js .vjs-volume-panel .vjs-mute-control:hover ~ .vjs-volume-control, +.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active { + visibility: visible; + opacity: 1; + position: relative; + -webkit-transition: visibility 0.1s, opacity 0.1s, height 0.1s, width 0.1s, left 0s, top 0s; + -moz-transition: visibility 0.1s, opacity 0.1s, height 0.1s, width 0.1s, left 0s, top 0s; + -ms-transition: visibility 0.1s, opacity 0.1s, height 0.1s, width 0.1s, left 0s, top 0s; + -o-transition: visibility 0.1s, opacity 0.1s, height 0.1s, width 0.1s, left 0s, top 0s; + transition: visibility 0.1s, opacity 0.1s, height 0.1s, width 0.1s, left 0s, top 0s; +} + +.video-js .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal, +.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal, +.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal, +.video-js .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal, +.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal, +.video-js .vjs-volume-panel .vjs-mute-control:hover ~ .vjs-volume-control.vjs-volume-horizontal, +.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal { + width: 5em; + height: 3em; +} + +.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:hover, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active { + width: 9em; + -webkit-transition: width 0.1s; + -moz-transition: width 0.1s; + -ms-transition: width 0.1s; + -o-transition: width 0.1s; + transition: width 0.1s; +} + +.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical { + height: 8em; + width: 3em; + left: -3.5em; + -webkit-transition: visibility 1s, opacity 1s, height 1s 1s, width 1s 1s, left 1s 1s, top 1s 1s; + -moz-transition: visibility 1s, opacity 1s, height 1s 1s, width 1s 1s, left 1s 1s, top 1s 1s; + -ms-transition: visibility 1s, opacity 1s, height 1s 1s, width 1s 1s, left 1s 1s, top 1s 1s; + -o-transition: visibility 1s, opacity 1s, height 1s 1s, width 1s 1s, left 1s 1s, top 1s 1s; + transition: visibility 1s, opacity 1s, height 1s 1s, width 1s 1s, left 1s 1s, top 1s 1s; +} + +.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal { + -webkit-transition: visibility 1s, opacity 1s, height 1s 1s, width 1s, left 1s 1s, top 1s 1s; + -moz-transition: visibility 1s, opacity 1s, height 1s 1s, width 1s, left 1s 1s, top 1s 1s; + -ms-transition: visibility 1s, opacity 1s, height 1s 1s, width 1s, left 1s 1s, top 1s 1s; + -o-transition: visibility 1s, opacity 1s, height 1s 1s, width 1s, left 1s 1s, top 1s 1s; + transition: visibility 1s, opacity 1s, height 1s 1s, width 1s, left 1s 1s, top 1s 1s; +} + +.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal { + width: 5em; + height: 3em; + visibility: visible; + opacity: 1; + position: relative; + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; +} + +.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical, +.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical { + position: absolute; + bottom: 3em; + left: 0.5em; +} + +.video-js .vjs-volume-panel { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.video-js .vjs-volume-bar { + margin: 1.35em 0.45em; +} + +.vjs-volume-bar.vjs-slider-horizontal { + width: 5em; + height: 0.3em; +} + +.vjs-volume-bar.vjs-slider-vertical { + width: 0.3em; + height: 5em; + margin: 1.35em auto; +} + +.video-js .vjs-volume-level { + position: absolute; + bottom: 0; + left: 0; + background-color: #fff; +} + +.video-js .vjs-volume-level:before { + position: absolute; + font-size: 0.9em; +} + +.vjs-slider-vertical .vjs-volume-level { + width: 0.3em; +} + +.vjs-slider-vertical .vjs-volume-level:before { + top: -0.5em; + left: -0.3em; +} + +.vjs-slider-horizontal .vjs-volume-level { + height: 0.3em; +} + +.vjs-slider-horizontal .vjs-volume-level:before { + top: -0.3em; + right: -0.5em; +} + +.video-js .vjs-volume-panel.vjs-volume-panel-vertical { + width: 4em; +} + +.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level { + height: 100%; +} + +.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level { + width: 100%; +} + +.video-js .vjs-volume-vertical { + width: 3em; + height: 8em; + bottom: 8em; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); +} + +.video-js .vjs-volume-horizontal .vjs-menu { + left: -2em; +} + +.vjs-poster { + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-position: 50% 50%; + background-size: contain; + background-color: #000000; + cursor: pointer; + margin: 0; + padding: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: 100%; +} + +.vjs-has-started .vjs-poster { + display: none; +} + +.vjs-audio.vjs-has-started .vjs-poster { + display: block; +} + +.vjs-using-native-controls .vjs-poster { + display: none; +} + +.video-js .vjs-live-control { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: flex-start; + -webkit-align-items: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-flex: auto; + -moz-box-flex: auto; + -webkit-flex: auto; + -ms-flex: auto; + flex: auto; + font-size: 1em; + line-height: 3em; +} + +.vjs-no-flex .vjs-live-control { + display: table-cell; + width: auto; + text-align: left; +} + +.video-js .vjs-time-control { + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; + font-size: 1em; + line-height: 3em; + min-width: 2em; + width: auto; + padding-left: 1em; + padding-right: 1em; +} + +.vjs-live .vjs-time-control { + display: none; +} + +.video-js .vjs-current-time, +.vjs-no-flex .vjs-current-time { + display: none; +} + +.video-js .vjs-duration, +.vjs-no-flex .vjs-duration { + display: none; +} + +.vjs-time-divider { + display: none; + line-height: 3em; +} + +.vjs-live .vjs-time-divider { + display: none; +} + +.video-js .vjs-play-control .vjs-icon-placeholder { + cursor: pointer; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; +} + +.vjs-text-track-display { + position: absolute; + bottom: 3em; + left: 0; + right: 0; + top: 0; + pointer-events: none; +} + +.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display { + bottom: 1em; +} + +.video-js .vjs-text-track { + font-size: 1.4em; + text-align: center; + margin-bottom: 0.1em; +} + +.vjs-subtitles { + color: #fff; +} + +.vjs-captions { + color: #fc6; +} + +.vjs-tt-cue { + display: block; +} + +video::-webkit-media-text-track-display { + -moz-transform: translateY(-3em); + -ms-transform: translateY(-3em); + -o-transform: translateY(-3em); + -webkit-transform: translateY(-3em); + transform: translateY(-3em); +} + +.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display { + -moz-transform: translateY(-1.5em); + -ms-transform: translateY(-1.5em); + -o-transform: translateY(-1.5em); + -webkit-transform: translateY(-1.5em); + transform: translateY(-1.5em); +} + +.video-js .vjs-fullscreen-control { + cursor: pointer; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; +} + +.vjs-playback-rate > .vjs-menu-button, +.vjs-playback-rate .vjs-playback-rate-value { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.vjs-playback-rate .vjs-playback-rate-value { + pointer-events: none; + font-size: 1.5em; + line-height: 2; + text-align: center; +} + +.vjs-playback-rate .vjs-menu { + width: 4em; + left: 0em; +} + +.vjs-error .vjs-error-display .vjs-modal-dialog-content { + font-size: 1.4em; + text-align: center; +} + +.vjs-error .vjs-error-display:before { + color: #fff; + content: 'X'; + font-family: Arial, Helvetica, sans-serif; + font-size: 4em; + left: 0; + line-height: 1; + margin-top: -0.5em; + position: absolute; + text-shadow: 0.05em 0.05em 0.1em #000; + text-align: center; + top: 50%; + vertical-align: middle; + width: 100%; +} + +.vjs-loading-spinner { + display: none; + position: absolute; + top: 50%; + left: 50%; + margin: -25px 0 0 -25px; + opacity: 0.85; + text-align: left; + border: 6px solid rgba(43, 51, 63, 0.7); + box-sizing: border-box; + background-clip: padding-box; + width: 50px; + height: 50px; + border-radius: 25px; + visibility: hidden; +} + +.vjs-seeking .vjs-loading-spinner, +.vjs-waiting .vjs-loading-spinner { + display: block; + animation: 0s linear 0.3s forwards vjs-spinner-show; +} + +.vjs-loading-spinner:before, +.vjs-loading-spinner:after { + content: ""; + position: absolute; + margin: -6px; + box-sizing: inherit; + width: inherit; + height: inherit; + border-radius: inherit; + opacity: 1; + border: inherit; + border-color: transparent; + border-top-color: white; +} + +.vjs-seeking .vjs-loading-spinner:before, +.vjs-seeking .vjs-loading-spinner:after, +.vjs-waiting .vjs-loading-spinner:before, +.vjs-waiting .vjs-loading-spinner:after { + -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; + animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; +} + +.vjs-seeking .vjs-loading-spinner:before, +.vjs-waiting .vjs-loading-spinner:before { + border-top-color: white; +} + +.vjs-seeking .vjs-loading-spinner:after, +.vjs-waiting .vjs-loading-spinner:after { + border-top-color: white; + -webkit-animation-delay: 0.44s; + animation-delay: 0.44s; +} + +@keyframes vjs-spinner-show { + to { + visibility: visible; + } +} + +@-webkit-keyframes vjs-spinner-show { + to { + visibility: visible; + } +} + +@keyframes vjs-spinner-spin { + 100% { + transform: rotate(360deg); + } +} + +@-webkit-keyframes vjs-spinner-spin { + 100% { + -webkit-transform: rotate(360deg); + } +} + +@keyframes vjs-spinner-fade { + 0% { + border-top-color: #73859f; + } + 20% { + border-top-color: #73859f; + } + 35% { + border-top-color: white; + } + 60% { + border-top-color: #73859f; + } + 100% { + border-top-color: #73859f; + } +} + +@-webkit-keyframes vjs-spinner-fade { + 0% { + border-top-color: #73859f; + } + 20% { + border-top-color: #73859f; + } + 35% { + border-top-color: white; + } + 60% { + border-top-color: #73859f; + } + 100% { + border-top-color: #73859f; + } +} + +.vjs-chapters-button .vjs-menu ul { + width: 24em; +} + +.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder { + position: absolute; +} + +.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before { + font-family: VideoJS; + content: "\f10d"; + font-size: 1.5em; + line-height: inherit; +} + +.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer { + -webkit-box-flex: auto; + -moz-box-flex: auto; + -webkit-flex: auto; + -ms-flex: auto; + flex: auto; +} + +.video-js.vjs-layout-tiny:not(.vjs-fullscreen).vjs-no-flex .vjs-custom-control-spacer { + width: auto; +} + +.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-remaining-time, +.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-playback-rate, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control, +.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control, +.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-descriptions-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button, +.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-subtitles-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-audio-button { + display: none; +} + +.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-remaining-time, +.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-playback-rate, +.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-control, +.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-descriptions-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button, +.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-audio-button { + display: none; +} + +.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-remaining-time, +.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-playback-rate, +.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-volume-control, +.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-descriptions-button, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button, +.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-subtitles-button .vjs-audio-button { + display: none; +} + +.vjs-modal-dialog.vjs-text-track-settings { + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.75); + color: #fff; + height: 70%; +} + +.vjs-text-track-settings .vjs-modal-dialog-content { + display: table; +} + +.vjs-text-track-settings .vjs-track-settings-colors, +.vjs-text-track-settings .vjs-track-settings-font, +.vjs-text-track-settings .vjs-track-settings-controls { + display: table-cell; +} + +.vjs-text-track-settings .vjs-track-settings-controls { + text-align: right; + vertical-align: bottom; +} + +@supports (display: grid) { + .vjs-text-track-settings .vjs-modal-dialog-content { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr auto; + } + + .vjs-text-track-settings .vjs-track-settings-colors { + display: block; + grid-column: 1; + grid-row: 1; + } + + .vjs-text-track-settings .vjs-track-settings-font { + grid-column: 2; + grid-row: 1; + } + + .vjs-text-track-settings .vjs-track-settings-controls { + grid-column: 2; + grid-row: 2; + } +} + +.vjs-track-setting > select { + margin-right: 5px; +} + +.vjs-text-track-settings fieldset { + margin: 5px; + padding: 3px; + border: none; +} + +.vjs-text-track-settings fieldset span { + display: inline-block; +} + +.vjs-text-track-settings legend { + color: #fff; + margin: 0 0 5px 0; +} + +.vjs-text-track-settings .vjs-label { + position: absolute; + clip: rect(1px 1px 1px 1px); + clip: rect(1px, 1px, 1px, 1px); + display: block; + margin: 0 0 5px 0; + padding: 0; + border: 0; + height: 1px; + width: 1px; + overflow: hidden; +} + +.vjs-track-settings-controls button:focus, +.vjs-track-settings-controls button:active { + outline-style: solid; + outline-width: medium; + background-image: linear-gradient(0deg, #fff 88%, #73859f 100%); +} + +.vjs-track-settings-controls button:hover { + color: rgba(43, 51, 63, 0.75); +} + +.vjs-track-settings-controls button { + background-color: #fff; + background-image: linear-gradient(-180deg, #fff 88%, #73859f 100%); + color: #2B333F; + cursor: pointer; + border-radius: 2px; +} + +.vjs-track-settings-controls .vjs-default-button { + margin-right: 1em; +} + +@media print { + .video-js > *:not(.vjs-tech):not(.vjs-poster) { + visibility: hidden; + } +} + +.vjs-resize-manager { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: none; + visibility: hidden; +} diff --git a/src/assets/libs/video-js-7.0.0/video-js.min.css b/src/assets/libs/video-js-7.0.0/video-js.min.css new file mode 100644 index 0000000..10c2521 --- /dev/null +++ b/src/assets/libs/video-js-7.0.0/video-js.min.css @@ -0,0 +1 @@ +.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.vjs-modal-dialog .vjs-modal-dialog-content{position:absolute;top:0;left:0;width:100%;height:100%}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.vjs-button>.vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,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) format("woff");font-weight:400;font-style:normal}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder,.vjs-icon-play{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.vjs-icon-play:before{content:"\f101"}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:"\f102"}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder,.vjs-icon-pause{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before,.vjs-icon-pause:before{content:"\f103"}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder,.vjs-icon-volume-mute{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before,.vjs-icon-volume-mute:before{content:"\f104"}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder,.vjs-icon-volume-low{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before,.vjs-icon-volume-low:before{content:"\f105"}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder,.vjs-icon-volume-mid{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before,.vjs-icon-volume-mid:before{content:"\f106"}.video-js .vjs-mute-control .vjs-icon-placeholder,.vjs-icon-volume-high{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control .vjs-icon-placeholder:before,.vjs-icon-volume-high:before{content:"\f107"}.video-js .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-enter{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-enter:before{content:"\f108"}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-exit{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-exit:before{content:"\f109"}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:"\f10a"}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:"\f10b"}.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-subtitles{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-subtitles:before{content:"\f10c"}.video-js .vjs-captions-button .vjs-icon-placeholder,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-captions{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-captions-button .vjs-icon-placeholder:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-captions:before{content:"\f10d"}.video-js .vjs-chapters-button .vjs-icon-placeholder,.vjs-icon-chapters{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-chapters-button .vjs-icon-placeholder:before,.vjs-icon-chapters:before{content:"\f10e"}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:"\f10f"}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:"\f110"}.video-js .vjs-play-progress,.video-js .vjs-volume-level,.vjs-icon-circle{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-progress:before,.video-js .vjs-volume-level:before,.vjs-icon-circle:before{content:"\f111"}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:"\f112"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:"\f113"}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:"\f114"}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder,.vjs-icon-cancel{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before,.vjs-icon-cancel:before{content:"\f115"}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder,.vjs-icon-replay{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before,.vjs-icon-replay:before{content:"\f116"}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:"\f117"}.vjs-icon-gplus{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-gplus:before{content:"\f118"}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:"\f119"}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:"\f11a"}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:"\f11b"}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:"\f11c"}.video-js .vjs-descriptions-button .vjs-icon-placeholder,.vjs-icon-audio-description{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-descriptions-button .vjs-icon-placeholder:before,.vjs-icon-audio-description:before{content:"\f11d"}.video-js .vjs-audio-button .vjs-icon-placeholder,.vjs-icon-audio{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-audio-button .vjs-icon-placeholder:before,.vjs-icon-audio:before{content:"\f11e"}.vjs-icon-next-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-next-item:before{content:"\f11f"}.vjs-icon-previous-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-previous-item:before{content:"\f120"}.video-js{display:block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;word-break:initial}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js[tabindex="-1"]{outline:0}.video-js *,.video-js :after,.video-js :before{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.video-js.vjs-16-9,.video-js.vjs-4-3,.video-js.vjs-fluid{width:100%;max-width:100%;height:0}.video-js.vjs-16-9{padding-top:56.25%}.video-js.vjs-4-3{padding-top:75%}.video-js.vjs-fill{width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}body.vjs-full-window{padding:0;margin:0;height:100%}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen{width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.5em;width:3em;display:block;position:absolute;top:10px;left:10px;padding:0;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2b333f;background-color:rgba(43,51,63,.7);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;-webkit-transition:all .4s;-moz-transition:all .4s;-ms-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-.75em;margin-left:-1.5em}.video-js .vjs-big-play-button:focus,.video-js:hover .vjs-big-play-button{border-color:#fff;background-color:#73859f;background-color:rgba(115,133,159,.5);-webkit-transition:all 0s;-moz-transition:all 0s;-ms-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-error .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button{display:block}.video-js button{background:0 0;border:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vjs-control .vjs-button{width:100%;height:100%}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:-webkit-linear-gradient(-90deg,rgba(0,0,0,.8),rgba(255,255,255,0));background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0));overflow:auto}.video-js .vjs-modal-dialog>*{box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;font-family:Arial,Helvetica,sans-serif;overflow:auto}.vjs-menu .vjs-menu-content>*{box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover{background-color:#73859f;background-color:rgba(115,133,159,.5)}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2b333f}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em 0;font-weight:700;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0;margin-bottom:1.5em;border-top-color:rgba(43,51,63,.7)}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333f;background-color:rgba(43,51,63,.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-menu-button-popup .vjs-menu.vjs-lock-showing,.vjs-workinghover .vjs-menu-button-popup:hover .vjs-menu{display:block}.video-js .vjs-menu-button-inline{-webkit-transition:all .4s;-moz-transition:all .4s;-ms-transition:all .4s;-o-transition:all .4s;transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline:hover,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;-webkit-transition:all .4s;-moz-transition:all .4s;-ms-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline:hover .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2b333f;background-color:rgba(43,51,63,.7)}.vjs-has-started .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-ms-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-ms-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-error .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.video-js .vjs-control:focus,.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before{text-shadow:0 0 1em #fff}.video-js .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{cursor:pointer;-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;min-width:4em}.video-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-progress-holder{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;-webkit-transition:all .2s;-moz-transition:all .2s;-ms-transition:all .2s;-o-transition:all .2s;transition:all .2s;height:.3em}.video-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.666666666666666666em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div,.video-js .vjs-progress-holder .vjs-play-progress{position:absolute;display:block;height:100%;margin:0;padding:0;width:0}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{font-size:.9em;position:absolute;right:-.5em;top:-.333333333333333em;z-index:1}.video-js .vjs-load-progress{background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:rgba(115,133,159,.75)}.video-js .vjs-time-tooltip{background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:relative;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-time-tooltip{display:block;font-size:.6em;visibility:visible}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-ms-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.video-js .vjs-slider{position:relative;cursor:pointer;padding:0;margin:0 .45em 0 .45em;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#73859f;background-color:rgba(115,133,159,.5)}.video-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus{text-shadow:0 0 1em #fff;-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .vjs-volume-control{cursor:pointer;margin-right:1em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.video-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control{visibility:visible;opacity:0;width:1px;height:1px;margin-left:-1px}.video-js .vjs-volume-panel{-webkit-transition:width 1s;-moz-transition:width 1s;-ms-transition:width 1s;-o-transition:width 1s;transition:width 1s}.video-js .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active,.video-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel .vjs-volume-control:hover,.video-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control,.video-js .vjs-volume-panel:hover .vjs-volume-control{visibility:visible;opacity:1;position:relative;-webkit-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;-moz-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;-ms-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;-o-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s}.video-js .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal{width:5em;height:3em}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:hover{width:9em;-webkit-transition:width .1s;-moz-transition:width .1s;-ms-transition:width .1s;-o-transition:width .1s;transition:width .1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{height:8em;width:3em;left:-3.5em;-webkit-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;-moz-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;-ms-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;-o-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{-webkit-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;-moz-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;-ms-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;-o-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{width:5em;height:3em;visibility:visible;opacity:1;position:relative;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical,.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{position:absolute;bottom:3em;left:.5em}.video-js .vjs-volume-panel{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{top:-.3em;right:-.5em}.video-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical{width:3em;height:8em;bottom:8em;background-color:#2b333f;background-color:rgba(43,51,63,.7)}.video-js .vjs-volume-horizontal .vjs-menu{left:-2em}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;background-color:#000;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-has-started .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster{display:block}.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-live-control{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;width:auto;text-align:left}.video-js .vjs-time-control{-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.vjs-live .vjs-time-control{display:none}.video-js .vjs-current-time,.vjs-no-flex .vjs-current-time{display:none}.video-js .vjs-duration,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control .vjs-icon-placeholder{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{-moz-transform:translateY(-3em);-ms-transform:translateY(-3em);-o-transform:translateY(-3em);-webkit-transform:translateY(-3em);transform:translateY(-3em)}.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{-moz-transform:translateY(-1.5em);-ms-transform:translateY(-1.5em);-o-transform:translateY(-1.5em);-webkit-transform:translateY(-1.5em);transform:translateY(-1.5em)}.video-js .vjs-fullscreen-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-playback-rate .vjs-playback-rate-value,.vjs-playback-rate>.vjs-menu-button{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-playback-rate .vjs-playback-rate-value{pointer-events:none;font-size:1.5em;line-height:2;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:'X';font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,.7);box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;border-radius:25px;visibility:hidden}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block;animation:0s linear .3s forwards vjs-spinner-show}.vjs-loading-spinner:after,.vjs-loading-spinner:before{content:"";position:absolute;margin:-6px;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}@keyframes vjs-spinner-show{to{visibility:visible}}@-webkit-keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-spin{100%{transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{position:absolute}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:"\f10d";font-size:1.5em;line-height:inherit}.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto}.video-js.vjs-layout-tiny:not(.vjs-fullscreen).vjs-no-flex .vjs-custom-control-spacer{width:auto}.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-audio-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-descriptions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control{display:none}.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-audio-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-descriptions-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-control{display:none}.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-descriptions-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-subtitles-button .vjs-audio-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-volume-control{display:none}.vjs-modal-dialog.vjs-text-track-settings{background-color:#2b333f;background-color:rgba(43,51,63,.75);color:#fff;height:70%}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-controls,.vjs-text-track-settings .vjs-track-settings-font{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports (display:grid){.vjs-text-track-settings .vjs-modal-dialog-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr auto}.vjs-text-track-settings .vjs-track-settings-colors{display:block;grid-column:1;grid-row:1}.vjs-text-track-settings .vjs-track-settings-font{grid-column:2;grid-row:1}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:2;grid-row:2}}.vjs-track-setting>select{margin-right:5px}.vjs-text-track-settings fieldset{margin:5px;padding:3px;border:none}.vjs-text-track-settings fieldset span{display:inline-block}.vjs-text-track-settings legend{color:#fff;margin:0 0 5px 0}.vjs-text-track-settings .vjs-label{position:absolute;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);display:block;margin:0 0 5px 0;padding:0;border:0;height:1px;width:1px;overflow:hidden}.vjs-track-settings-controls button:active,.vjs-track-settings-controls button:focus{outline-style:solid;outline-width:medium;background-image:linear-gradient(0deg,#fff 88%,#73859f 100%)}.vjs-track-settings-controls button:hover{color:rgba(43,51,63,.75)}.vjs-track-settings-controls button{background-color:#fff;background-image:linear-gradient(-180deg,#fff 88%,#73859f 100%);color:#2b333f;cursor:pointer;border-radius:2px}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}@media print{.video-js>:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{position:absolute;top:0;left:0;width:100%;height:100%;border:none;visibility:hidden} diff --git a/src/assets/libs/video-js-7.0.0/video.js b/src/assets/libs/video-js-7.0.0/video.js new file mode 100644 index 0000000..f64bace --- /dev/null +++ b/src/assets/libs/video-js-7.0.0/video.js @@ -0,0 +1,47623 @@ +/** + * @license + * Video.js 7.0.0 <http://videojs.com/> + * Copyright Brightcove, Inc. <https://www.brightcove.com/> + * Available under Apache License Version 2.0 + * <https://github.com/videojs/video.js/blob/master/LICENSE> + * + * Includes vtt.js <https://github.com/mozilla/vtt.js> + * Available under Apache License Version 2.0 + * <https://github.com/mozilla/vtt.js/blob/master/LICENSE> + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.videojs = factory()); +}(this, (function () { + + var version = "7.0.0"; + + var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, module) { + return module = {exports: {}}, fn(module, module.exports), module.exports; + } + + var win; + + if (typeof window !== "undefined") { + win = window; + } else if (typeof commonjsGlobal !== "undefined") { + win = commonjsGlobal; + } else if (typeof self !== "undefined") { + win = self; + } else { + win = {}; + } + + var window_1 = win; + + var empty = {}; + + var empty$1 = /*#__PURE__*/Object.freeze({ + default: empty + }); + + var minDoc = (empty$1 && empty) || empty$1; + + var topLevel = typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : {}; + + var doccy; + + if (typeof document !== 'undefined') { + doccy = document; + } else { + doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4']; + + if (!doccy) { + doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc; + } + } + + var document_1 = doccy; + + /** + * @file log.js + * @module log + */ + + var log = void 0; + + // This is the private tracking variable for logging level. + var level = 'info'; + + // This is the private tracking variable for the logging history. + var history = []; + + /** + * Log messages to the console and history based on the type of message + * + * @private + * @param {string} type + * The name of the console method to use. + * + * @param {Array} args + * The arguments to be passed to the matching console method. + */ + var logByType = function logByType(type, args) { + var lvl = log.levels[level]; + var lvlRegExp = new RegExp('^(' + lvl + ')$'); + + if (type !== 'log') { + + // Add the type to the front of the message when it's not "log". + args.unshift(type.toUpperCase() + ':'); + } + + // Add a clone of the args at this point to history. + if (history) { + history.push([].concat(args)); + } + + // Add console prefix after adding to history. + args.unshift('VIDEOJS:'); + + // If there's no console then don't try to output messages, but they will + // still be stored in history. + if (!window_1.console) { + return; + } + + // Was setting these once outside of this function, but containing them + // in the function makes it easier to test cases where console doesn't exist + // when the module is executed. + var fn = window_1.console[type]; + + if (!fn && type === 'debug') { + // Certain browsers don't have support for console.debug. For those, we + // should default to the closest comparable log. + fn = window_1.console.info || window_1.console.log; + } + + // Bail out if there's no console or if this type is not allowed by the + // current logging level. + if (!fn || !lvl || !lvlRegExp.test(type)) { + return; + } + + fn[Array.isArray(args) ? 'apply' : 'call'](window_1.console, args); + }; + + /** + * Logs plain debug messages. Similar to `console.log`. + * + * @class + * @param {Mixed[]} args + * One or more messages or objects that should be logged. + */ + log = function log() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + logByType('log', args); + }; + + /** + * Enumeration of available logging levels, where the keys are the level names + * and the values are `|`-separated strings containing logging methods allowed + * in that logging level. These strings are used to create a regular expression + * matching the function name being called. + * + * Levels provided by video.js are: + * + * - `off`: Matches no calls. Any value that can be cast to `false` will have + * this effect. The most restrictive. + * - `all`: Matches only Video.js-provided functions (`debug`, `log`, + * `log.warn`, and `log.error`). + * - `debug`: Matches `log.debug`, `log`, `log.warn`, and `log.error` calls. + * - `info` (default): Matches `log`, `log.warn`, and `log.error` calls. + * - `warn`: Matches `log.warn` and `log.error` calls. + * - `error`: Matches only `log.error` calls. + * + * @type {Object} + */ + log.levels = { + all: 'debug|log|warn|error', + off: '', + debug: 'debug|log|warn|error', + info: 'log|warn|error', + warn: 'warn|error', + error: 'error', + DEFAULT: level + }; + + /** + * Get or set the current logging level. If a string matching a key from + * {@link log.levels} is provided, acts as a setter. Regardless of argument, + * returns the current logging level. + * + * @param {string} [lvl] + * Pass to set a new logging level. + * + * @return {string} + * The current logging level. + */ + log.level = function (lvl) { + if (typeof lvl === 'string') { + if (!log.levels.hasOwnProperty(lvl)) { + throw new Error('"' + lvl + '" in not a valid log level'); + } + level = lvl; + } + return level; + }; + + /** + * Returns an array containing everything that has been logged to the history. + * + * This array is a shallow clone of the internal history record. However, its + * contents are _not_ cloned; so, mutating objects inside this array will + * mutate them in history. + * + * @return {Array} + */ + log.history = function () { + return history ? [].concat(history) : []; + }; + + /** + * Clears the internal history tracking, but does not prevent further history + * tracking. + */ + log.history.clear = function () { + if (history) { + history.length = 0; + } + }; + + /** + * Disable history tracking if it is currently enabled. + */ + log.history.disable = function () { + if (history !== null) { + history.length = 0; + history = null; + } + }; + + /** + * Enable history tracking if it is currently disabled. + */ + log.history.enable = function () { + if (history === null) { + history = []; + } + }; + + /** + * Logs error messages. Similar to `console.error`. + * + * @param {Mixed[]} args + * One or more messages or objects that should be logged as an error + */ + log.error = function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return logByType('error', args); + }; + + /** + * Logs warning messages. Similar to `console.warn`. + * + * @param {Mixed[]} args + * One or more messages or objects that should be logged as a warning. + */ + log.warn = function () { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + return logByType('warn', args); + }; + + /** + * Logs debug messages. Similar to `console.debug`, but may also act as a comparable + * log if `console.debug` is not available + * + * @param {Mixed[]} args + * One or more messages or objects that should be logged as debug. + */ + log.debug = function () { + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + return logByType('debug', args); + }; + + var log$1 = log; + + function clean(s) { + return s.replace(/\n\r?\s*/g, ''); + } + + var tsml = function tsml(sa) { + var s = '', + i = 0; + + for (; i < arguments.length; i++) { + s += clean(sa[i]) + (arguments[i + 1] || ''); + } + return s; + }; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + + var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + var inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + }; + + var possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; + }; + + var taggedTemplateLiteralLoose = function (strings, raw) { + strings.raw = raw; + return strings; + }; + + /** + * @file obj.js + * @module obj + */ + + /** + * @callback obj:EachCallback + * + * @param {Mixed} value + * The current key for the object that is being iterated over. + * + * @param {string} key + * The current key-value for object that is being iterated over + */ + + /** + * @callback obj:ReduceCallback + * + * @param {Mixed} accum + * The value that is accumulating over the reduce loop. + * + * @param {Mixed} value + * The current key for the object that is being iterated over. + * + * @param {string} key + * The current key-value for object that is being iterated over + * + * @return {Mixed} + * The new accumulated value. + */ + var toString = Object.prototype.toString; + + /** + * Get the keys of an Object + * + * @param {Object} + * The Object to get the keys from + * + * @return {string[]} + * An array of the keys from the object. Returns an empty array if the + * object passed in was invalid or had no keys. + * + * @private + */ + var keys = function keys(object) { + return isObject(object) ? Object.keys(object) : []; + }; + + /** + * Array-like iteration for objects. + * + * @param {Object} object + * The object to iterate over + * + * @param {obj:EachCallback} fn + * The callback function which is called for each key in the object. + */ + function each(object, fn) { + keys(object).forEach(function (key) { + return fn(object[key], key); + }); + } + + /** + * Array-like reduce for objects. + * + * @param {Object} object + * The Object that you want to reduce. + * + * @param {Function} fn + * A callback function which is called for each key in the object. It + * receives the accumulated value and the per-iteration value and key + * as arguments. + * + * @param {Mixed} [initial = 0] + * Starting value + * + * @return {Mixed} + * The final accumulated value. + */ + function reduce(object, fn) { + var initial = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + return keys(object).reduce(function (accum, key) { + return fn(accum, object[key], key); + }, initial); + } + + /** + * Object.assign-style object shallow merge/extend. + * + * @param {Object} target + * @param {Object} ...sources + * @return {Object} + */ + function assign(target) { + for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + sources[_key - 1] = arguments[_key]; + } + + if (Object.assign) { + return Object.assign.apply(Object, [target].concat(sources)); + } + + sources.forEach(function (source) { + if (!source) { + return; + } + + each(source, function (value, key) { + target[key] = value; + }); + }); + + return target; + } + + /** + * Returns whether a value is an object of any kind - including DOM nodes, + * arrays, regular expressions, etc. Not functions, though. + * + * This avoids the gotcha where using `typeof` on a `null` value + * results in `'object'`. + * + * @param {Object} value + * @return {Boolean} + */ + function isObject(value) { + return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object'; + } + + /** + * Returns whether an object appears to be a "plain" object - that is, a + * direct instance of `Object`. + * + * @param {Object} value + * @return {Boolean} + */ + function isPlain(value) { + return isObject(value) && toString.call(value) === '[object Object]' && value.constructor === Object; + } + + /** + * @file computed-style.js + * @module computed-style + */ + + /** + * A safe getComputedStyle. + * + * This is needed because in Firefox, if the player is loaded in an iframe with + * `display:none`, then `getComputedStyle` returns `null`, so, we do a null-check to + * make sure that the player doesn't break in these cases. + * + * @param {Element} el + * The element you want the computed style of + * + * @param {string} prop + * The property name you want + * + * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397 + * + * @static + * @const + */ + function computedStyle(el, prop) { + if (!el || !prop) { + return ''; + } + + if (typeof window_1.getComputedStyle === 'function') { + var cs = window_1.getComputedStyle(el); + + return cs ? cs[prop] : ''; + } + + return ''; + } + + var _templateObject = taggedTemplateLiteralLoose(['Setting attributes in the second argument of createEl()\n has been deprecated. Use the third argument instead.\n createEl(type, properties, attributes). Attempting to set ', ' to ', '.'], ['Setting attributes in the second argument of createEl()\n has been deprecated. Use the third argument instead.\n createEl(type, properties, attributes). Attempting to set ', ' to ', '.']); + + /** + * Detect if a value is a string with any non-whitespace characters. + * + * @param {string} str + * The string to check + * + * @return {boolean} + * - True if the string is non-blank + * - False otherwise + * + */ + function isNonBlankString(str) { + return typeof str === 'string' && /\S/.test(str); + } + + /** + * Throws an error if the passed string has whitespace. This is used by + * class methods to be relatively consistent with the classList API. + * + * @param {string} str + * The string to check for whitespace. + * + * @throws {Error} + * Throws an error if there is whitespace in the string. + * + */ + function throwIfWhitespace(str) { + if (/\s/.test(str)) { + throw new Error('class has illegal whitespace characters'); + } + } + + /** + * Produce a regular expression for matching a className within an elements className. + * + * @param {string} className + * The className to generate the RegExp for. + * + * @return {RegExp} + * The RegExp that will check for a specific `className` in an elements + * className. + */ + function classRegExp(className) { + return new RegExp('(^|\\s)' + className + '($|\\s)'); + } + + /** + * Whether the current DOM interface appears to be real. + * + * @return {Boolean} + */ + function isReal() { + // Both document and window will never be undefined thanks to `global`. + return document_1 === window_1.document; + } + + /** + * Determines, via duck typing, whether or not a value is a DOM element. + * + * @param {Mixed} value + * The thing to check + * + * @return {boolean} + * - True if it is a DOM element + * - False otherwise + */ + function isEl(value) { + return isObject(value) && value.nodeType === 1; + } + + /** + * Determines if the current DOM is embedded in an iframe. + * + * @return {boolean} + * + */ + function isInFrame() { + + // We need a try/catch here because Safari will throw errors when attempting + // to get either `parent` or `self` + try { + return window_1.parent !== window_1.self; + } catch (x) { + return true; + } + } + + /** + * Creates functions to query the DOM using a given method. + * + * @param {string} method + * The method to create the query with. + * + * @return {Function} + * The query method + */ + function createQuerier(method) { + return function (selector, context) { + if (!isNonBlankString(selector)) { + return document_1[method](null); + } + if (isNonBlankString(context)) { + context = document_1.querySelector(context); + } + + var ctx = isEl(context) ? context : document_1; + + return ctx[method] && ctx[method](selector); + }; + } + + /** + * Creates an element and applies properties. + * + * @param {string} [tagName='div'] + * Name of tag to be created. + * + * @param {Object} [properties={}] + * Element properties to be applied. + * + * @param {Object} [attributes={}] + * Element attributes to be applied. + * + * @param {String|Element|TextNode|Array|Function} [content] + * Contents for the element (see: {@link dom:normalizeContent}) + * + * @return {Element} + * The element that was created. + */ + function createEl() { + var tagName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'div'; + var properties = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var content = arguments[3]; + + var el = document_1.createElement(tagName); + + Object.getOwnPropertyNames(properties).forEach(function (propName) { + var val = properties[propName]; + + // See #2176 + // We originally were accepting both properties and attributes in the + // same object, but that doesn't work so well. + if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') { + log$1.warn(tsml(_templateObject, propName, val)); + el.setAttribute(propName, val); + + // Handle textContent since it's not supported everywhere and we have a + // method for it. + } else if (propName === 'textContent') { + textContent(el, val); + } else { + el[propName] = val; + } + }); + + Object.getOwnPropertyNames(attributes).forEach(function (attrName) { + el.setAttribute(attrName, attributes[attrName]); + }); + + if (content) { + appendContent(el, content); + } + + return el; + } + + /** + * Injects text into an element, replacing any existing contents entirely. + * + * @param {Element} el + * The element to add text content into + * + * @param {string} text + * The text content to add. + * + * @return {Element} + * The element with added text content. + */ + function textContent(el, text) { + if (typeof el.textContent === 'undefined') { + el.innerText = text; + } else { + el.textContent = text; + } + return el; + } + + /** + * Insert an element as the first child node of another + * + * @param {Element} child + * Element to insert + * + * @param {Element} parent + * Element to insert child into + */ + function prependTo(child, parent) { + if (parent.firstChild) { + parent.insertBefore(child, parent.firstChild); + } else { + parent.appendChild(child); + } + } + + /** + * Check if an element has a CSS class + * + * @param {Element} element + * Element to check + * + * @param {string} classToCheck + * Class name to check for + * + * @return {boolean} + * - True if the element had the class + * - False otherwise. + * + * @throws {Error} + * Throws an error if `classToCheck` has white space. + */ + function hasClass(element, classToCheck) { + throwIfWhitespace(classToCheck); + if (element.classList) { + return element.classList.contains(classToCheck); + } + return classRegExp(classToCheck).test(element.className); + } + + /** + * Add a CSS class name to an element + * + * @param {Element} element + * Element to add class name to. + * + * @param {string} classToAdd + * Class name to add. + * + * @return {Element} + * The dom element with the added class name. + */ + function addClass(element, classToAdd) { + if (element.classList) { + element.classList.add(classToAdd); + + // Don't need to `throwIfWhitespace` here because `hasElClass` will do it + // in the case of classList not being supported. + } else if (!hasClass(element, classToAdd)) { + element.className = (element.className + ' ' + classToAdd).trim(); + } + + return element; + } + + /** + * Remove a CSS class name from an element + * + * @param {Element} element + * Element to remove a class name from. + * + * @param {string} classToRemove + * Class name to remove + * + * @return {Element} + * The dom element with class name removed. + */ + function removeClass(element, classToRemove) { + if (element.classList) { + element.classList.remove(classToRemove); + } else { + throwIfWhitespace(classToRemove); + element.className = element.className.split(/\s+/).filter(function (c) { + return c !== classToRemove; + }).join(' '); + } + + return element; + } + + /** + * The callback definition for toggleElClass. + * + * @callback Dom~PredicateCallback + * @param {Element} element + * The DOM element of the Component. + * + * @param {string} classToToggle + * The `className` that wants to be toggled + * + * @return {boolean|undefined} + * - If true the `classToToggle` will get added to `element`. + * - If false the `classToToggle` will get removed from `element`. + * - If undefined this callback will be ignored + */ + + /** + * Adds or removes a CSS class name on an element depending on an optional + * condition or the presence/absence of the class name. + * + * @param {Element} element + * The element to toggle a class name on. + * + * @param {string} classToToggle + * The class that should be toggled + * + * @param {boolean|PredicateCallback} [predicate] + * See the return value for {@link Dom~PredicateCallback} + * + * @return {Element} + * The element with a class that has been toggled. + */ + function toggleClass(element, classToToggle, predicate) { + + // This CANNOT use `classList` internally because IE11 does not support the + // second parameter to the `classList.toggle()` method! Which is fine because + // `classList` will be used by the add/remove functions. + var has = hasClass(element, classToToggle); + + if (typeof predicate === 'function') { + predicate = predicate(element, classToToggle); + } + + if (typeof predicate !== 'boolean') { + predicate = !has; + } + + // If the necessary class operation matches the current state of the + // element, no action is required. + if (predicate === has) { + return; + } + + if (predicate) { + addClass(element, classToToggle); + } else { + removeClass(element, classToToggle); + } + + return element; + } + + /** + * Apply attributes to an HTML element. + * + * @param {Element} el + * Element to add attributes to. + * + * @param {Object} [attributes] + * Attributes to be applied. + */ + function setAttributes(el, attributes) { + Object.getOwnPropertyNames(attributes).forEach(function (attrName) { + var attrValue = attributes[attrName]; + + if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) { + el.removeAttribute(attrName); + } else { + el.setAttribute(attrName, attrValue === true ? '' : attrValue); + } + }); + } + + /** + * Get an element's attribute values, as defined on the HTML tag + * Attributes are not the same as properties. They're defined on the tag + * or with setAttribute (which shouldn't be used with HTML) + * This will return true or false for boolean attributes. + * + * @param {Element} tag + * Element from which to get tag attributes. + * + * @return {Object} + * All attributes of the element. + */ + function getAttributes(tag) { + var obj = {}; + + // known boolean attributes + // we can check for matching boolean properties, but not all browsers + // and not all tags know about these attributes, so, we still want to check them manually + var knownBooleans = ',' + 'autoplay,controls,playsinline,loop,muted,default,defaultMuted' + ','; + + if (tag && tag.attributes && tag.attributes.length > 0) { + var attrs = tag.attributes; + + for (var i = attrs.length - 1; i >= 0; i--) { + var attrName = attrs[i].name; + var attrVal = attrs[i].value; + + // check for known booleans + // the matching element property will return a value for typeof + if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(',' + attrName + ',') !== -1) { + // the value of an included boolean attribute is typically an empty + // string ('') which would equal false if we just check for a false value. + // we also don't want support bad code like autoplay='false' + attrVal = attrVal !== null ? true : false; + } + + obj[attrName] = attrVal; + } + } + + return obj; + } + + /** + * Get the value of an element's attribute + * + * @param {Element} el + * A DOM element + * + * @param {string} attribute + * Attribute to get the value of + * + * @return {string} + * value of the attribute + */ + function getAttribute(el, attribute) { + return el.getAttribute(attribute); + } + + /** + * Set the value of an element's attribute + * + * @param {Element} el + * A DOM element + * + * @param {string} attribute + * Attribute to set + * + * @param {string} value + * Value to set the attribute to + */ + function setAttribute(el, attribute, value) { + el.setAttribute(attribute, value); + } + + /** + * Remove an element's attribute + * + * @param {Element} el + * A DOM element + * + * @param {string} attribute + * Attribute to remove + */ + function removeAttribute(el, attribute) { + el.removeAttribute(attribute); + } + + /** + * Attempt to block the ability to select text while dragging controls + */ + function blockTextSelection() { + document_1.body.focus(); + document_1.onselectstart = function () { + return false; + }; + } + + /** + * Turn off text selection blocking + */ + function unblockTextSelection() { + document_1.onselectstart = function () { + return true; + }; + } + + /** + * Identical to the native `getBoundingClientRect` function, but ensures that + * the method is supported at all (it is in all browsers we claim to support) + * and that the element is in the DOM before continuing. + * + * This wrapper function also shims properties which are not provided by some + * older browsers (namely, IE8). + * + * Additionally, some browsers do not support adding properties to a + * `ClientRect`/`DOMRect` object; so, we shallow-copy it with the standard + * properties (except `x` and `y` which are not widely supported). This helps + * avoid implementations where keys are non-enumerable. + * + * @param {Element} el + * Element whose `ClientRect` we want to calculate. + * + * @return {Object|undefined} + * Always returns a plain + */ + function getBoundingClientRect(el) { + if (el && el.getBoundingClientRect && el.parentNode) { + var rect = el.getBoundingClientRect(); + var result = {}; + + ['bottom', 'height', 'left', 'right', 'top', 'width'].forEach(function (k) { + if (rect[k] !== undefined) { + result[k] = rect[k]; + } + }); + + if (!result.height) { + result.height = parseFloat(computedStyle(el, 'height')); + } + + if (!result.width) { + result.width = parseFloat(computedStyle(el, 'width')); + } + + return result; + } + } + + /** + * The postion of a DOM element on the page. + * + * @typedef {Object} module:dom~Position + * + * @property {number} left + * Pixels to the left + * + * @property {number} top + * Pixels on top + */ + + /** + * Offset Left. + * getBoundingClientRect technique from + * John Resig + * + * @see http://ejohn.org/blog/getboundingclientrect-is-awesome/ + * + * @param {Element} el + * Element from which to get offset + * + * @return {module:dom~Position} + * The position of the element that was passed in. + */ + function findPosition(el) { + var box = void 0; + + if (el.getBoundingClientRect && el.parentNode) { + box = el.getBoundingClientRect(); + } + + if (!box) { + return { + left: 0, + top: 0 + }; + } + + var docEl = document_1.documentElement; + var body = document_1.body; + + var clientLeft = docEl.clientLeft || body.clientLeft || 0; + var scrollLeft = window_1.pageXOffset || body.scrollLeft; + var left = box.left + scrollLeft - clientLeft; + + var clientTop = docEl.clientTop || body.clientTop || 0; + var scrollTop = window_1.pageYOffset || body.scrollTop; + var top = box.top + scrollTop - clientTop; + + // Android sometimes returns slightly off decimal values, so need to round + return { + left: Math.round(left), + top: Math.round(top) + }; + } + + /** + * x and y coordinates for a dom element or mouse pointer + * + * @typedef {Object} Dom~Coordinates + * + * @property {number} x + * x coordinate in pixels + * + * @property {number} y + * y coordinate in pixels + */ + + /** + * Get pointer position in element + * Returns an object with x and y coordinates. + * The base on the coordinates are the bottom left of the element. + * + * @param {Element} el + * Element on which to get the pointer position on + * + * @param {EventTarget~Event} event + * Event object + * + * @return {Dom~Coordinates} + * A Coordinates object corresponding to the mouse position. + * + */ + function getPointerPosition(el, event) { + var position = {}; + var box = findPosition(el); + var boxW = el.offsetWidth; + var boxH = el.offsetHeight; + + var boxY = box.top; + var boxX = box.left; + var pageY = event.pageY; + var pageX = event.pageX; + + if (event.changedTouches) { + pageX = event.changedTouches[0].pageX; + pageY = event.changedTouches[0].pageY; + } + + position.y = Math.max(0, Math.min(1, (boxY - pageY + boxH) / boxH)); + position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW)); + + return position; + } + + /** + * Determines, via duck typing, whether or not a value is a text node. + * + * @param {Mixed} value + * Check if this value is a text node. + * + * @return {boolean} + * - True if it is a text node + * - False otherwise + */ + function isTextNode(value) { + return isObject(value) && value.nodeType === 3; + } + + /** + * Empties the contents of an element. + * + * @param {Element} el + * The element to empty children from + * + * @return {Element} + * The element with no children + */ + function emptyEl(el) { + while (el.firstChild) { + el.removeChild(el.firstChild); + } + return el; + } + + /** + * Normalizes content for eventual insertion into the DOM. + * + * This allows a wide range of content definition methods, but protects + * from falling into the trap of simply writing to `innerHTML`, which is + * an XSS concern. + * + * The content for an element can be passed in multiple types and + * combinations, whose behavior is as follows: + * + * @param {String|Element|TextNode|Array|Function} content + * - String: Normalized into a text node. + * - Element/TextNode: Passed through. + * - Array: A one-dimensional array of strings, elements, nodes, or functions + * (which return single strings, elements, or nodes). + * - Function: If the sole argument, is expected to produce a string, element, + * node, or array as defined above. + * + * @return {Array} + * All of the content that was passed in normalized. + */ + function normalizeContent(content) { + + // First, invoke content if it is a function. If it produces an array, + // that needs to happen before normalization. + if (typeof content === 'function') { + content = content(); + } + + // Next up, normalize to an array, so one or many items can be normalized, + // filtered, and returned. + return (Array.isArray(content) ? content : [content]).map(function (value) { + + // First, invoke value if it is a function to produce a new value, + // which will be subsequently normalized to a Node of some kind. + if (typeof value === 'function') { + value = value(); + } + + if (isEl(value) || isTextNode(value)) { + return value; + } + + if (typeof value === 'string' && /\S/.test(value)) { + return document_1.createTextNode(value); + } + }).filter(function (value) { + return value; + }); + } + + /** + * Normalizes and appends content to an element. + * + * @param {Element} el + * Element to append normalized content to. + * + * + * @param {String|Element|TextNode|Array|Function} content + * See the `content` argument of {@link dom:normalizeContent} + * + * @return {Element} + * The element with appended normalized content. + */ + function appendContent(el, content) { + normalizeContent(content).forEach(function (node) { + return el.appendChild(node); + }); + return el; + } + + /** + * Normalizes and inserts content into an element; this is identical to + * `appendContent()`, except it empties the element first. + * + * @param {Element} el + * Element to insert normalized content into. + * + * @param {String|Element|TextNode|Array|Function} content + * See the `content` argument of {@link dom:normalizeContent} + * + * @return {Element} + * The element with inserted normalized content. + * + */ + function insertContent(el, content) { + return appendContent(emptyEl(el), content); + } + + /** + * Check if event was a single left click + * + * @param {EventTarget~Event} event + * Event object + * + * @return {boolean} + * - True if a left click + * - False if not a left click + */ + function isSingleLeftClick(event) { + // Note: if you create something draggable, be sure to + // call it on both `mousedown` and `mousemove` event, + // otherwise `mousedown` should be enough for a button + + if (event.button === undefined && event.buttons === undefined) { + // Why do we need `buttons` ? + // Because, middle mouse sometimes have this: + // e.button === 0 and e.buttons === 4 + // Furthermore, we want to prevent combination click, something like + // HOLD middlemouse then left click, that would be + // e.button === 0, e.buttons === 5 + // just `button` is not gonna work + + // Alright, then what this block does ? + // this is for chrome `simulate mobile devices` + // I want to support this as well + + return true; + } + + if (event.button === 0 && event.buttons === undefined) { + // Touch screen, sometimes on some specific device, `buttons` + // doesn't have anything (safari on ios, blackberry...) + + return true; + } + + if (event.button !== 0 || event.buttons !== 1) { + // This is the reason we have those if else block above + // if any special case we can catch and let it slide + // we do it above, when get to here, this definitely + // is-not-left-click + + return false; + } + + return true; + } + + /** + * Finds a single DOM element matching `selector` within the optional + * `context` of another DOM element (defaulting to `document`). + * + * @param {string} selector + * A valid CSS selector, which will be passed to `querySelector`. + * + * @param {Element|String} [context=document] + * A DOM element within which to query. Can also be a selector + * string in which case the first matching element will be used + * as context. If missing (or no element matches selector), falls + * back to `document`. + * + * @return {Element|null} + * The element that was found or null. + */ + var $ = createQuerier('querySelector'); + + /** + * Finds a all DOM elements matching `selector` within the optional + * `context` of another DOM element (defaulting to `document`). + * + * @param {string} selector + * A valid CSS selector, which will be passed to `querySelectorAll`. + * + * @param {Element|String} [context=document] + * A DOM element within which to query. Can also be a selector + * string in which case the first matching element will be used + * as context. If missing (or no element matches selector), falls + * back to `document`. + * + * @return {NodeList} + * A element list of elements that were found. Will be empty if none were found. + * + */ + var $$ = createQuerier('querySelectorAll'); + + var Dom = /*#__PURE__*/Object.freeze({ + isReal: isReal, + isEl: isEl, + isInFrame: isInFrame, + createEl: createEl, + textContent: textContent, + prependTo: prependTo, + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + toggleClass: toggleClass, + setAttributes: setAttributes, + getAttributes: getAttributes, + getAttribute: getAttribute, + setAttribute: setAttribute, + removeAttribute: removeAttribute, + blockTextSelection: blockTextSelection, + unblockTextSelection: unblockTextSelection, + getBoundingClientRect: getBoundingClientRect, + findPosition: findPosition, + getPointerPosition: getPointerPosition, + isTextNode: isTextNode, + emptyEl: emptyEl, + normalizeContent: normalizeContent, + appendContent: appendContent, + insertContent: insertContent, + isSingleLeftClick: isSingleLeftClick, + $: $, + $$: $$ + }); + + /** + * @file guid.js + * @module guid + */ + + /** + * Unique ID for an element or function + * @type {Number} + */ + var _guid = 1; + + /** + * Get a unique auto-incrementing ID by number that has not been returned before. + * + * @return {number} + * A new unique ID. + */ + function newGUID() { + return _guid++; + } + + /** + * @file dom-data.js + * @module dom-data + */ + + /** + * Element Data Store. + * + * Allows for binding data to an element without putting it directly on the + * element. Ex. Event listeners are stored here. + * (also from jsninja.com, slightly modified and updated for closure compiler) + * + * @type {Object} + * @private + */ + var elData = {}; + + /* + * Unique attribute name to store an element's guid in + * + * @type {String} + * @constant + * @private + */ + var elIdAttr = 'vdata' + new Date().getTime(); + + /** + * Returns the cache object where data for an element is stored + * + * @param {Element} el + * Element to store data for. + * + * @return {Object} + * The cache object for that el that was passed in. + */ + function getData(el) { + var id = el[elIdAttr]; + + if (!id) { + id = el[elIdAttr] = newGUID(); + } + + if (!elData[id]) { + elData[id] = {}; + } + + return elData[id]; + } + + /** + * Returns whether or not an element has cached data + * + * @param {Element} el + * Check if this element has cached data. + * + * @return {boolean} + * - True if the DOM element has cached data. + * - False otherwise. + */ + function hasData(el) { + var id = el[elIdAttr]; + + if (!id) { + return false; + } + + return !!Object.getOwnPropertyNames(elData[id]).length; + } + + /** + * Delete data for the element from the cache and the guid attr from getElementById + * + * @param {Element} el + * Remove cached data for this element. + */ + function removeData(el) { + var id = el[elIdAttr]; + + if (!id) { + return; + } + + // Remove all stored data + delete elData[id]; + + // Remove the elIdAttr property from the DOM node + try { + delete el[elIdAttr]; + } catch (e) { + if (el.removeAttribute) { + el.removeAttribute(elIdAttr); + } else { + // IE doesn't appear to support removeAttribute on the document element + el[elIdAttr] = null; + } + } + } + + /** + * @file events.js. An Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/) + * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible) + * This should work very similarly to jQuery's events, however it's based off the book version which isn't as + * robust as jquery's, so there's probably some differences. + * + * @module events + */ + + /** + * Clean up the listener cache and dispatchers + * + * @param {Element|Object} elem + * Element to clean up + * + * @param {string} type + * Type of event to clean up + */ + function _cleanUpEvents(elem, type) { + var data = getData(elem); + + // Remove the events of a particular type if there are none left + if (data.handlers[type].length === 0) { + delete data.handlers[type]; + // data.handlers[type] = null; + // Setting to null was causing an error with data.handlers + + // Remove the meta-handler from the element + if (elem.removeEventListener) { + elem.removeEventListener(type, data.dispatcher, false); + } else if (elem.detachEvent) { + elem.detachEvent('on' + type, data.dispatcher); + } + } + + // Remove the events object if there are no types left + if (Object.getOwnPropertyNames(data.handlers).length <= 0) { + delete data.handlers; + delete data.dispatcher; + delete data.disabled; + } + + // Finally remove the element data if there is no data left + if (Object.getOwnPropertyNames(data).length === 0) { + removeData(elem); + } + } + + /** + * Loops through an array of event types and calls the requested method for each type. + * + * @param {Function} fn + * The event method we want to use. + * + * @param {Element|Object} elem + * Element or object to bind listeners to + * + * @param {string} type + * Type of event to bind to. + * + * @param {EventTarget~EventListener} callback + * Event listener. + */ + function _handleMultipleEvents(fn, elem, types, callback) { + types.forEach(function (type) { + // Call the event method for each one of the types + fn(elem, type, callback); + }); + } + + /** + * Fix a native event to have standard property values + * + * @param {Object} event + * Event object to fix. + * + * @return {Object} + * Fixed event object. + */ + function fixEvent(event) { + + function returnTrue() { + return true; + } + + function returnFalse() { + return false; + } + + // Test if fixing up is needed + // Used to check if !event.stopPropagation instead of isPropagationStopped + // But native events return true for stopPropagation, but don't have + // other expected methods like isPropagationStopped. Seems to be a problem + // with the Javascript Ninja code. So we're just overriding all events now. + if (!event || !event.isPropagationStopped) { + var old = event || window_1.event; + + event = {}; + // Clone the old object so that we can modify the values event = {}; + // IE8 Doesn't like when you mess with native event properties + // Firefox returns false for event.hasOwnProperty('type') and other props + // which makes copying more difficult. + // TODO: Probably best to create a whitelist of event props + for (var key in old) { + // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y + // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation + // and webkitMovementX/Y + if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' && key !== 'webkitMovementX' && key !== 'webkitMovementY') { + // Chrome 32+ warns if you try to copy deprecated returnValue, but + // we still want to if preventDefault isn't supported (IE8). + if (!(key === 'returnValue' && old.preventDefault)) { + event[key] = old[key]; + } + } + } + + // The event occurred on this element + if (!event.target) { + event.target = event.srcElement || document_1; + } + + // Handle which other element the event is related to + if (!event.relatedTarget) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Stop the default browser action + event.preventDefault = function () { + if (old.preventDefault) { + old.preventDefault(); + } + event.returnValue = false; + old.returnValue = false; + event.defaultPrevented = true; + }; + + event.defaultPrevented = false; + + // Stop the event from bubbling + event.stopPropagation = function () { + if (old.stopPropagation) { + old.stopPropagation(); + } + event.cancelBubble = true; + old.cancelBubble = true; + event.isPropagationStopped = returnTrue; + }; + + event.isPropagationStopped = returnFalse; + + // Stop the event from bubbling and executing other handlers + event.stopImmediatePropagation = function () { + if (old.stopImmediatePropagation) { + old.stopImmediatePropagation(); + } + event.isImmediatePropagationStopped = returnTrue; + event.stopPropagation(); + }; + + event.isImmediatePropagationStopped = returnFalse; + + // Handle mouse position + if (event.clientX !== null && event.clientX !== undefined) { + var doc = document_1.documentElement; + var body = document_1.body; + + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Handle key presses + event.which = event.charCode || event.keyCode; + + // Fix button for mouse clicks: + // 0 == left; 1 == middle; 2 == right + if (event.button !== null && event.button !== undefined) { + + // The following is disabled because it does not pass videojs-standard + // and... yikes. + /* eslint-disable */ + event.button = event.button & 1 ? 0 : event.button & 4 ? 1 : event.button & 2 ? 2 : 0; + /* eslint-enable */ + } + } + + // Returns fixed-up instance + return event; + } + + /** + * Whether passive event listeners are supported + */ + var _supportsPassive = false; + + (function () { + try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + _supportsPassive = true; + } + }); + + window_1.addEventListener('test', null, opts); + window_1.removeEventListener('test', null, opts); + } catch (e) { + // disregard + } + })(); + + /** + * Touch events Chrome expects to be passive + */ + var passiveEvents = ['touchstart', 'touchmove']; + + /** + * Add an event listener to element + * It stores the handler function in a separate cache object + * and adds a generic handler to the element's event, + * along with a unique id (guid) to the element. + * + * @param {Element|Object} elem + * Element or object to bind listeners to + * + * @param {string|string[]} type + * Type of event to bind to. + * + * @param {EventTarget~EventListener} fn + * Event listener. + */ + function on(elem, type, fn) { + if (Array.isArray(type)) { + return _handleMultipleEvents(on, elem, type, fn); + } + + var data = getData(elem); + + // We need a place to store all our handler data + if (!data.handlers) { + data.handlers = {}; + } + + if (!data.handlers[type]) { + data.handlers[type] = []; + } + + if (!fn.guid) { + fn.guid = newGUID(); + } + + data.handlers[type].push(fn); + + if (!data.dispatcher) { + data.disabled = false; + + data.dispatcher = function (event, hash) { + + if (data.disabled) { + return; + } + + event = fixEvent(event); + + var handlers = data.handlers[event.type]; + + if (handlers) { + // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off. + var handlersCopy = handlers.slice(0); + + for (var m = 0, n = handlersCopy.length; m < n; m++) { + if (event.isImmediatePropagationStopped()) { + break; + } else { + try { + handlersCopy[m].call(elem, event, hash); + } catch (e) { + log$1.error(e); + } + } + } + } + }; + } + + if (data.handlers[type].length === 1) { + if (elem.addEventListener) { + var options = false; + + if (_supportsPassive && passiveEvents.indexOf(type) > -1) { + options = {passive: true}; + } + elem.addEventListener(type, data.dispatcher, options); + } else if (elem.attachEvent) { + elem.attachEvent('on' + type, data.dispatcher); + } + } + } + + /** + * Removes event listeners from an element + * + * @param {Element|Object} elem + * Object to remove listeners from. + * + * @param {string|string[]} [type] + * Type of listener to remove. Don't include to remove all events from element. + * + * @param {EventTarget~EventListener} [fn] + * Specific listener to remove. Don't include to remove listeners for an event + * type. + */ + function off(elem, type, fn) { + // Don't want to add a cache object through getElData if not needed + if (!hasData(elem)) { + return; + } + + var data = getData(elem); + + // If no events exist, nothing to unbind + if (!data.handlers) { + return; + } + + if (Array.isArray(type)) { + return _handleMultipleEvents(off, elem, type, fn); + } + + // Utility function + var removeType = function removeType(el, t) { + data.handlers[t] = []; + _cleanUpEvents(el, t); + }; + + // Are we removing all bound events? + if (type === undefined) { + for (var t in data.handlers) { + if (Object.prototype.hasOwnProperty.call(data.handlers || {}, t)) { + removeType(elem, t); + } + } + return; + } + + var handlers = data.handlers[type]; + + // If no handlers exist, nothing to unbind + if (!handlers) { + return; + } + + // If no listener was provided, remove all listeners for type + if (!fn) { + removeType(elem, type); + return; + } + + // We're only removing a single handler + if (fn.guid) { + for (var n = 0; n < handlers.length; n++) { + if (handlers[n].guid === fn.guid) { + handlers.splice(n--, 1); + } + } + } + + _cleanUpEvents(elem, type); + } + + /** + * Trigger an event for an element + * + * @param {Element|Object} elem + * Element to trigger an event on + * + * @param {EventTarget~Event|string} event + * A string (the type) or an event object with a type attribute + * + * @param {Object} [hash] + * data hash to pass along with the event + * + * @return {boolean|undefined} + * - Returns the opposite of `defaultPrevented` if default was prevented + * - Otherwise returns undefined + */ + function trigger(elem, event, hash) { + // Fetches element data and a reference to the parent (for bubbling). + // Don't want to add a data object to cache for every parent, + // so checking hasElData first. + var elemData = hasData(elem) ? getData(elem) : {}; + var parent = elem.parentNode || elem.ownerDocument; + // type = event.type || event, + // handler; + + // If an event name was passed as a string, creates an event out of it + if (typeof event === 'string') { + event = {type: event, target: elem}; + } else if (!event.target) { + event.target = elem; + } + + // Normalizes the event properties. + event = fixEvent(event); + + // If the passed element has a dispatcher, executes the established handlers. + if (elemData.dispatcher) { + elemData.dispatcher.call(elem, event, hash); + } + + // Unless explicitly stopped or the event does not bubble (e.g. media events) + // recursively calls this function to bubble the event up the DOM. + if (parent && !event.isPropagationStopped() && event.bubbles === true) { + trigger.call(null, parent, event, hash); + + // If at the top of the DOM, triggers the default action unless disabled. + } else if (!parent && !event.defaultPrevented) { + var targetData = getData(event.target); + + // Checks if the target has a default action for this event. + if (event.target[event.type]) { + // Temporarily disables event dispatching on the target as we have already executed the handler. + targetData.disabled = true; + // Executes the default action. + if (typeof event.target[event.type] === 'function') { + event.target[event.type](); + } + // Re-enables event dispatching. + targetData.disabled = false; + } + } + + // Inform the triggerer if the default was prevented by returning false + return !event.defaultPrevented; + } + + /** + * Trigger a listener only once for an event + * + * @param {Element|Object} elem + * Element or object to bind to. + * + * @param {string|string[]} type + * Name/type of event + * + * @param {Event~EventListener} fn + * Event Listener function + */ + function one(elem, type, fn) { + if (Array.isArray(type)) { + return _handleMultipleEvents(one, elem, type, fn); + } + var func = function func() { + off(elem, type, func); + fn.apply(this, arguments); + }; + + // copy the guid to the new function so it can removed using the original function's ID + func.guid = fn.guid = fn.guid || newGUID(); + on(elem, type, func); + } + + var Events = /*#__PURE__*/Object.freeze({ + fixEvent: fixEvent, + on: on, + off: off, + trigger: trigger, + one: one + }); + + /** + * @file setup.js - Functions for setting up a player without + * user interaction based on the data-setup `attribute` of the video tag. + * + * @module setup + */ + + var _windowLoaded = false; + var videojs = void 0; + + /** + * Set up any tags that have a data-setup `attribute` when the player is started. + */ + var autoSetup = function autoSetup() { + + // Protect against breakage in non-browser environments and check global autoSetup option. + if (!isReal() || videojs.options.autoSetup === false) { + return; + } + + var vids = Array.prototype.slice.call(document_1.getElementsByTagName('video')); + var audios = Array.prototype.slice.call(document_1.getElementsByTagName('audio')); + var divs = Array.prototype.slice.call(document_1.getElementsByTagName('video-js')); + var mediaEls = vids.concat(audios, divs); + + // Check if any media elements exist + if (mediaEls && mediaEls.length > 0) { + + for (var i = 0, e = mediaEls.length; i < e; i++) { + var mediaEl = mediaEls[i]; + + // Check if element exists, has getAttribute func. + if (mediaEl && mediaEl.getAttribute) { + + // Make sure this player hasn't already been set up. + if (mediaEl.player === undefined) { + var options = mediaEl.getAttribute('data-setup'); + + // Check if data-setup attr exists. + // We only auto-setup if they've added the data-setup attr. + if (options !== null) { + // Create new video.js instance. + videojs(mediaEl); + } + } + + // If getAttribute isn't defined, we need to wait for the DOM. + } else { + autoSetupTimeout(1); + break; + } + } + + // No videos were found, so keep looping unless page is finished loading. + } else if (!_windowLoaded) { + autoSetupTimeout(1); + } + }; + + /** + * Wait until the page is loaded before running autoSetup. This will be called in + * autoSetup if `hasLoaded` returns false. + * + * @param {number} wait + * How long to wait in ms + * + * @param {module:videojs} [vjs] + * The videojs library function + */ + function autoSetupTimeout(wait, vjs) { + if (vjs) { + videojs = vjs; + } + + window_1.setTimeout(autoSetup, wait); + } + + if (isReal() && document_1.readyState === 'complete') { + _windowLoaded = true; + } else { + /** + * Listen for the load event on window, and set _windowLoaded to true. + * + * @listens load + */ + one(window_1, 'load', function () { + _windowLoaded = true; + }); + } + + /** + * @file stylesheet.js + * @module stylesheet + */ + + /** + * Create a DOM syle element given a className for it. + * + * @param {string} className + * The className to add to the created style element. + * + * @return {Element} + * The element that was created. + */ + var createStyleElement = function createStyleElement(className) { + var style = document_1.createElement('style'); + + style.className = className; + + return style; + }; + + /** + * Add text to a DOM element. + * + * @param {Element} el + * The Element to add text content to. + * + * @param {string} content + * The text to add to the element. + */ + var setTextContent = function setTextContent(el, content) { + if (el.styleSheet) { + el.styleSheet.cssText = content; + } else { + el.textContent = content; + } + }; + + /** + * @file fn.js + * @module fn + */ + + /** + * Bind (a.k.a proxy or Context). A simple method for changing the context of a function + * It also stores a unique id on the function so it can be easily removed from events. + * + * @param {Mixed} context + * The object to bind as scope. + * + * @param {Function} fn + * The function to be bound to a scope. + * + * @param {number} [uid] + * An optional unique ID for the function to be set + * + * @return {Function} + * The new function that will be bound into the context given + */ + var bind = function bind(context, fn, uid) { + // Make sure the function has a unique ID + if (!fn.guid) { + fn.guid = newGUID(); + } + + // Create the new function that changes the context + var bound = function bound() { + return fn.apply(context, arguments); + }; + + // Allow for the ability to individualize this function + // Needed in the case where multiple objects might share the same prototype + // IF both items add an event listener with the same function, then you try to remove just one + // it will remove both because they both have the same guid. + // when using this, you need to use the bind method when you remove the listener as well. + // currently used in text tracks + bound.guid = uid ? uid + '_' + fn.guid : fn.guid; + + return bound; + }; + + /** + * Wraps the given function, `fn`, with a new function that only invokes `fn` + * at most once per every `wait` milliseconds. + * + * @param {Function} fn + * The function to be throttled. + * + * @param {Number} wait + * The number of milliseconds by which to throttle. + * + * @return {Function} + */ + var throttle = function throttle(fn, wait) { + var last = Date.now(); + + var throttled = function throttled() { + var now = Date.now(); + + if (now - last >= wait) { + fn.apply(undefined, arguments); + last = now; + } + }; + + return throttled; + }; + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. + * + * Inspired by lodash and underscore implementations. + * + * @param {Function} func + * The function to wrap with debounce behavior. + * + * @param {number} wait + * The number of milliseconds to wait after the last invocation. + * + * @param {boolean} [immediate] + * Whether or not to invoke the function immediately upon creation. + * + * @param {Object} [context=window] + * The "context" in which the debounced function should debounce. For + * example, if this function should be tied to a Video.js player, + * the player can be passed here. Alternatively, defaults to the + * global `window` object. + * + * @return {Function} + * A debounced function. + */ + var debounce = function debounce(func, wait, immediate) { + var context = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : window_1; + + var timeout = void 0; + + /* eslint-disable consistent-this */ + return function () { + var self = this; + var args = arguments; + + var _later = function later() { + timeout = null; + _later = null; + if (!immediate) { + func.apply(self, args); + } + }; + + if (!timeout && immediate) { + func.apply(self, args); + } + + context.clearTimeout(timeout); + timeout = context.setTimeout(_later, wait); + }; + /* eslint-enable consistent-this */ + }; + + /** + * @file src/js/event-target.js + */ + + /** + * `EventTarget` is a class that can have the same API as the DOM `EventTarget`. It + * adds shorthand functions that wrap around lengthy functions. For example: + * the `on` function is a wrapper around `addEventListener`. + * + * @see [EventTarget Spec]{@link https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget} + * @class EventTarget + */ + var EventTarget = function EventTarget() { + }; + + /** + * A Custom DOM event. + * + * @typedef {Object} EventTarget~Event + * @see [Properties]{@link https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent} + */ + + /** + * All event listeners should follow the following format. + * + * @callback EventTarget~EventListener + * @this {EventTarget} + * + * @param {EventTarget~Event} event + * the event that triggered this function + * + * @param {Object} [hash] + * hash of data sent during the event + */ + + /** + * An object containing event names as keys and booleans as values. + * + * > NOTE: If an event name is set to a true value here {@link EventTarget#trigger} + * will have extra functionality. See that function for more information. + * + * @property EventTarget.prototype.allowedEvents_ + * @private + */ + EventTarget.prototype.allowedEvents_ = {}; + + /** + * Adds an `event listener` to an instance of an `EventTarget`. An `event listener` is a + * function that will get called when an event with a certain name gets triggered. + * + * @param {string|string[]} type + * An event name or an array of event names. + * + * @param {EventTarget~EventListener} fn + * The function to call with `EventTarget`s + */ + EventTarget.prototype.on = function (type, fn) { + // Remove the addEventListener alias before calling Events.on + // so we don't get into an infinite type loop + var ael = this.addEventListener; + + this.addEventListener = function () { + }; + on(this, type, fn); + this.addEventListener = ael; + }; + + /** + * An alias of {@link EventTarget#on}. Allows `EventTarget` to mimic + * the standard DOM API. + * + * @function + * @see {@link EventTarget#on} + */ + EventTarget.prototype.addEventListener = EventTarget.prototype.on; + + /** + * Removes an `event listener` for a specific event from an instance of `EventTarget`. + * This makes it so that the `event listener` will no longer get called when the + * named event happens. + * + * @param {string|string[]} type + * An event name or an array of event names. + * + * @param {EventTarget~EventListener} fn + * The function to remove. + */ + EventTarget.prototype.off = function (type, fn) { + off(this, type, fn); + }; + + /** + * An alias of {@link EventTarget#off}. Allows `EventTarget` to mimic + * the standard DOM API. + * + * @function + * @see {@link EventTarget#off} + */ + EventTarget.prototype.removeEventListener = EventTarget.prototype.off; + + /** + * This function will add an `event listener` that gets triggered only once. After the + * first trigger it will get removed. This is like adding an `event listener` + * with {@link EventTarget#on} that calls {@link EventTarget#off} on itself. + * + * @param {string|string[]} type + * An event name or an array of event names. + * + * @param {EventTarget~EventListener} fn + * The function to be called once for each event name. + */ + EventTarget.prototype.one = function (type, fn) { + // Remove the addEventListener alialing Events.on + // so we don't get into an infinite type loop + var ael = this.addEventListener; + + this.addEventListener = function () { + }; + one(this, type, fn); + this.addEventListener = ael; + }; + + /** + * This function causes an event to happen. This will then cause any `event listeners` + * that are waiting for that event, to get called. If there are no `event listeners` + * for an event then nothing will happen. + * + * If the name of the `Event` that is being triggered is in `EventTarget.allowedEvents_`. + * Trigger will also call the `on` + `uppercaseEventName` function. + * + * Example: + * 'click' is in `EventTarget.allowedEvents_`, so, trigger will attempt to call + * `onClick` if it exists. + * + * @param {string|EventTarget~Event|Object} event + * The name of the event, an `Event`, or an object with a key of type set to + * an event name. + */ + EventTarget.prototype.trigger = function (event) { + var type = event.type || event; + + if (typeof event === 'string') { + event = {type: type}; + } + event = fixEvent(event); + + if (this.allowedEvents_[type] && this['on' + type]) { + this['on' + type](event); + } + + trigger(this, event); + }; + + /** + * An alias of {@link EventTarget#trigger}. Allows `EventTarget` to mimic + * the standard DOM API. + * + * @function + * @see {@link EventTarget#trigger} + */ + EventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger; + + /** + * @file mixins/evented.js + * @module evented + */ + + /** + * Returns whether or not an object has had the evented mixin applied. + * + * @param {Object} object + * An object to test. + * + * @return {boolean} + * Whether or not the object appears to be evented. + */ + var isEvented = function isEvented(object) { + return object instanceof EventTarget || !!object.eventBusEl_ && ['on', 'one', 'off', 'trigger'].every(function (k) { + return typeof object[k] === 'function'; + }); + }; + + /** + * Whether a value is a valid event type - non-empty string or array. + * + * @private + * @param {string|Array} type + * The type value to test. + * + * @return {boolean} + * Whether or not the type is a valid event type. + */ + var isValidEventType = function isValidEventType(type) { + return ( + // The regex here verifies that the `type` contains at least one non- + // whitespace character. + typeof type === 'string' && /\S/.test(type) || Array.isArray(type) && !!type.length + ); + }; + + /** + * Validates a value to determine if it is a valid event target. Throws if not. + * + * @private + * @throws {Error} + * If the target does not appear to be a valid event target. + * + * @param {Object} target + * The object to test. + */ + var validateTarget = function validateTarget(target) { + if (!target.nodeName && !isEvented(target)) { + throw new Error('Invalid target; must be a DOM node or evented object.'); + } + }; + + /** + * Validates a value to determine if it is a valid event target. Throws if not. + * + * @private + * @throws {Error} + * If the type does not appear to be a valid event type. + * + * @param {string|Array} type + * The type to test. + */ + var validateEventType = function validateEventType(type) { + if (!isValidEventType(type)) { + throw new Error('Invalid event type; must be a non-empty string or array.'); + } + }; + + /** + * Validates a value to determine if it is a valid listener. Throws if not. + * + * @private + * @throws {Error} + * If the listener is not a function. + * + * @param {Function} listener + * The listener to test. + */ + var validateListener = function validateListener(listener) { + if (typeof listener !== 'function') { + throw new Error('Invalid listener; must be a function.'); + } + }; + + /** + * Takes an array of arguments given to `on()` or `one()`, validates them, and + * normalizes them into an object. + * + * @private + * @param {Object} self + * The evented object on which `on()` or `one()` was called. This + * object will be bound as the `this` value for the listener. + * + * @param {Array} args + * An array of arguments passed to `on()` or `one()`. + * + * @return {Object} + * An object containing useful values for `on()` or `one()` calls. + */ + var normalizeListenArgs = function normalizeListenArgs(self, args) { + + // If the number of arguments is less than 3, the target is always the + // evented object itself. + var isTargetingSelf = args.length < 3 || args[0] === self || args[0] === self.eventBusEl_; + var target = void 0; + var type = void 0; + var listener = void 0; + + if (isTargetingSelf) { + target = self.eventBusEl_; + + // Deal with cases where we got 3 arguments, but we are still listening to + // the evented object itself. + if (args.length >= 3) { + args.shift(); + } + + type = args[0]; + listener = args[1]; + } else { + target = args[0]; + type = args[1]; + listener = args[2]; + } + + validateTarget(target); + validateEventType(type); + validateListener(listener); + + listener = bind(self, listener); + + return {isTargetingSelf: isTargetingSelf, target: target, type: type, listener: listener}; + }; + + /** + * Adds the listener to the event type(s) on the target, normalizing for + * the type of target. + * + * @private + * @param {Element|Object} target + * A DOM node or evented object. + * + * @param {string} method + * The event binding method to use ("on" or "one"). + * + * @param {string|Array} type + * One or more event type(s). + * + * @param {Function} listener + * A listener function. + */ + var listen = function listen(target, method, type, listener) { + validateTarget(target); + + if (target.nodeName) { + Events[method](target, type, listener); + } else { + target[method](type, listener); + } + }; + + /** + * Contains methods that provide event capabilities to an object which is passed + * to {@link module:evented|evented}. + * + * @mixin EventedMixin + */ + var EventedMixin = { + + /** + * Add a listener to an event (or events) on this object or another evented + * object. + * + * @param {string|Array|Element|Object} targetOrType + * If this is a string or array, it represents the event type(s) + * that will trigger the listener. + * + * Another evented object can be passed here instead, which will + * cause the listener to listen for events on _that_ object. + * + * In either case, the listener's `this` value will be bound to + * this object. + * + * @param {string|Array|Function} typeOrListener + * If the first argument was a string or array, this should be the + * listener function. Otherwise, this is a string or array of event + * type(s). + * + * @param {Function} [listener] + * If the first argument was another evented object, this will be + * the listener function. + */ + on: function on$$1() { + var _this = this; + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var _normalizeListenArgs = normalizeListenArgs(this, args), + isTargetingSelf = _normalizeListenArgs.isTargetingSelf, + target = _normalizeListenArgs.target, + type = _normalizeListenArgs.type, + listener = _normalizeListenArgs.listener; + + listen(target, 'on', type, listener); + + // If this object is listening to another evented object. + if (!isTargetingSelf) { + + // If this object is disposed, remove the listener. + var removeListenerOnDispose = function removeListenerOnDispose() { + return _this.off(target, type, listener); + }; + + // Use the same function ID as the listener so we can remove it later it + // using the ID of the original listener. + removeListenerOnDispose.guid = listener.guid; + + // Add a listener to the target's dispose event as well. This ensures + // that if the target is disposed BEFORE this object, we remove the + // removal listener that was just added. Otherwise, we create a memory leak. + var removeRemoverOnTargetDispose = function removeRemoverOnTargetDispose() { + return _this.off('dispose', removeListenerOnDispose); + }; + + // Use the same function ID as the listener so we can remove it later + // it using the ID of the original listener. + removeRemoverOnTargetDispose.guid = listener.guid; + + listen(this, 'on', 'dispose', removeListenerOnDispose); + listen(target, 'on', 'dispose', removeRemoverOnTargetDispose); + } + }, + + + /** + * Add a listener to an event (or events) on this object or another evented + * object. The listener will only be called once and then removed. + * + * @param {string|Array|Element|Object} targetOrType + * If this is a string or array, it represents the event type(s) + * that will trigger the listener. + * + * Another evented object can be passed here instead, which will + * cause the listener to listen for events on _that_ object. + * + * In either case, the listener's `this` value will be bound to + * this object. + * + * @param {string|Array|Function} typeOrListener + * If the first argument was a string or array, this should be the + * listener function. Otherwise, this is a string or array of event + * type(s). + * + * @param {Function} [listener] + * If the first argument was another evented object, this will be + * the listener function. + */ + one: function one$$1() { + var _this2 = this; + + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var _normalizeListenArgs2 = normalizeListenArgs(this, args), + isTargetingSelf = _normalizeListenArgs2.isTargetingSelf, + target = _normalizeListenArgs2.target, + type = _normalizeListenArgs2.type, + listener = _normalizeListenArgs2.listener; + + // Targeting this evented object. + + + if (isTargetingSelf) { + listen(target, 'one', type, listener); + + // Targeting another evented object. + } else { + var wrapper = function wrapper() { + for (var _len3 = arguments.length, largs = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + largs[_key3] = arguments[_key3]; + } + + _this2.off(target, type, wrapper); + listener.apply(null, largs); + }; + + // Use the same function ID as the listener so we can remove it later + // it using the ID of the original listener. + wrapper.guid = listener.guid; + listen(target, 'one', type, wrapper); + } + }, + + + /** + * Removes listener(s) from event(s) on an evented object. + * + * @param {string|Array|Element|Object} [targetOrType] + * If this is a string or array, it represents the event type(s). + * + * Another evented object can be passed here instead, in which case + * ALL 3 arguments are _required_. + * + * @param {string|Array|Function} [typeOrListener] + * If the first argument was a string or array, this may be the + * listener function. Otherwise, this is a string or array of event + * type(s). + * + * @param {Function} [listener] + * If the first argument was another evented object, this will be + * the listener function; otherwise, _all_ listeners bound to the + * event type(s) will be removed. + */ + off: function off$$1(targetOrType, typeOrListener, listener) { + + // Targeting this evented object. + if (!targetOrType || isValidEventType(targetOrType)) { + off(this.eventBusEl_, targetOrType, typeOrListener); + + // Targeting another evented object. + } else { + var target = targetOrType; + var type = typeOrListener; + + // Fail fast and in a meaningful way! + validateTarget(target); + validateEventType(type); + validateListener(listener); + + // Ensure there's at least a guid, even if the function hasn't been used + listener = bind(this, listener); + + // Remove the dispose listener on this evented object, which was given + // the same guid as the event listener in on(). + this.off('dispose', listener); + + if (target.nodeName) { + off(target, type, listener); + off(target, 'dispose', listener); + } else if (isEvented(target)) { + target.off(type, listener); + target.off('dispose', listener); + } + } + }, + + + /** + * Fire an event on this evented object, causing its listeners to be called. + * + * @param {string|Object} event + * An event type or an object with a type property. + * + * @param {Object} [hash] + * An additional object to pass along to listeners. + * + * @returns {boolean} + * Whether or not the default behavior was prevented. + */ + trigger: function trigger$$1(event, hash) { + return trigger(this.eventBusEl_, event, hash); + } + }; + + /** + * Applies {@link module:evented~EventedMixin|EventedMixin} to a target object. + * + * @param {Object} target + * The object to which to add event methods. + * + * @param {Object} [options={}] + * Options for customizing the mixin behavior. + * + * @param {String} [options.eventBusKey] + * By default, adds a `eventBusEl_` DOM element to the target object, + * which is used as an event bus. If the target object already has a + * DOM element that should be used, pass its key here. + * + * @return {Object} + * The target object. + */ + function evented(target) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var eventBusKey = options.eventBusKey; + + // Set or create the eventBusEl_. + + if (eventBusKey) { + if (!target[eventBusKey].nodeName) { + throw new Error('The eventBusKey "' + eventBusKey + '" does not refer to an element.'); + } + target.eventBusEl_ = target[eventBusKey]; + } else { + target.eventBusEl_ = createEl('span', {className: 'vjs-event-bus'}); + } + + assign(target, EventedMixin); + + // When any evented object is disposed, it removes all its listeners. + target.on('dispose', function () { + target.off(); + window_1.setTimeout(function () { + target.eventBusEl_ = null; + }, 0); + }); + + return target; + } + + /** + * @file mixins/stateful.js + * @module stateful + */ + + /** + * Contains methods that provide statefulness to an object which is passed + * to {@link module:stateful}. + * + * @mixin StatefulMixin + */ + var StatefulMixin = { + + /** + * A hash containing arbitrary keys and values representing the state of + * the object. + * + * @type {Object} + */ + state: {}, + + /** + * Set the state of an object by mutating its + * {@link module:stateful~StatefulMixin.state|state} object in place. + * + * @fires module:stateful~StatefulMixin#statechanged + * @param {Object|Function} stateUpdates + * A new set of properties to shallow-merge into the plugin state. + * Can be a plain object or a function returning a plain object. + * + * @returns {Object|undefined} + * An object containing changes that occurred. If no changes + * occurred, returns `undefined`. + */ + setState: function setState(stateUpdates) { + var _this = this; + + // Support providing the `stateUpdates` state as a function. + if (typeof stateUpdates === 'function') { + stateUpdates = stateUpdates(); + } + + var changes = void 0; + + each(stateUpdates, function (value, key) { + + // Record the change if the value is different from what's in the + // current state. + if (_this.state[key] !== value) { + changes = changes || {}; + changes[key] = { + from: _this.state[key], + to: value + }; + } + + _this.state[key] = value; + }); + + // Only trigger "statechange" if there were changes AND we have a trigger + // function. This allows us to not require that the target object be an + // evented object. + if (changes && isEvented(this)) { + + /** + * An event triggered on an object that is both + * {@link module:stateful|stateful} and {@link module:evented|evented} + * indicating that its state has changed. + * + * @event module:stateful~StatefulMixin#statechanged + * @type {Object} + * @property {Object} changes + * A hash containing the properties that were changed and + * the values they were changed `from` and `to`. + */ + this.trigger({ + changes: changes, + type: 'statechanged' + }); + } + + return changes; + } + }; + + /** + * Applies {@link module:stateful~StatefulMixin|StatefulMixin} to a target + * object. + * + * If the target object is {@link module:evented|evented} and has a + * `handleStateChanged` method, that method will be automatically bound to the + * `statechanged` event on itself. + * + * @param {Object} target + * The object to be made stateful. + * + * @param {Object} [defaultState] + * A default set of properties to populate the newly-stateful object's + * `state` property. + * + * @returns {Object} + * Returns the `target`. + */ + function stateful(target, defaultState) { + assign(target, StatefulMixin); + + // This happens after the mixing-in because we need to replace the `state` + // added in that step. + target.state = assign({}, target.state, defaultState); + + // Auto-bind the `handleStateChanged` method of the target object if it exists. + if (typeof target.handleStateChanged === 'function' && isEvented(target)) { + target.on('statechanged', target.handleStateChanged); + } + + return target; + } + + /** + * @file to-title-case.js + * @module to-title-case + */ + + /** + * Uppercase the first letter of a string. + * + * @param {string} string + * String to be uppercased + * + * @return {string} + * The string with an uppercased first letter + */ + function toTitleCase(string) { + if (typeof string !== 'string') { + return string; + } + + return string.charAt(0).toUpperCase() + string.slice(1); + } + + /** + * Compares the TitleCase versions of the two strings for equality. + * + * @param {string} str1 + * The first string to compare + * + * @param {string} str2 + * The second string to compare + * + * @return {boolean} + * Whether the TitleCase versions of the strings are equal + */ + function titleCaseEquals(str1, str2) { + return toTitleCase(str1) === toTitleCase(str2); + } + + /** + * @file merge-options.js + * @module merge-options + */ + + /** + * Deep-merge one or more options objects, recursively merging **only** plain + * object properties. + * + * @param {Object[]} sources + * One or more objects to merge into a new object. + * + * @returns {Object} + * A new object that is the merged result of all sources. + */ + function mergeOptions() { + var result = {}; + + for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } + + sources.forEach(function (source) { + if (!source) { + return; + } + + each(source, function (value, key) { + if (!isPlain(value)) { + result[key] = value; + return; + } + + if (!isPlain(result[key])) { + result[key] = {}; + } + + result[key] = mergeOptions(result[key], value); + }); + }); + + return result; + } + + /** + * Player Component - Base class for all UI objects + * + * @file component.js + */ + + /** + * Base class for all UI Components. + * Components are UI objects which represent both a javascript object and an element + * in the DOM. They can be children of other components, and can have + * children themselves. + * + * Components can also use methods from {@link EventTarget} + */ + + var Component = function () { + + /** + * A callback that is called when a component is ready. Does not have any + * paramters and any callback value will be ignored. + * + * @callback Component~ReadyCallback + * @this Component + */ + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Object[]} [options.children] + * An array of children objects to intialize this component with. Children objects have + * a name property that will be used if more than one component of the same type needs to be + * added. + * + * @param {Component~ReadyCallback} [ready] + * Function that gets called when the `Component` is ready. + */ + function Component(player, options, ready) { + classCallCheck(this, Component); + + + // The component might be the player itself and we can't pass `this` to super + if (!player && this.play) { + this.player_ = player = this; // eslint-disable-line + } else { + this.player_ = player; + } + + // Make a copy of prototype.options_ to protect against overriding defaults + this.options_ = mergeOptions({}, this.options_); + + // Updated options with supplied options + options = this.options_ = mergeOptions(this.options_, options); + + // Get ID from options or options element if one is supplied + this.id_ = options.id || options.el && options.el.id; + + // If there was no ID from the options, generate one + if (!this.id_) { + // Don't require the player ID function in the case of mock players + var id = player && player.id && player.id() || 'no_player'; + + this.id_ = id + '_component_' + newGUID(); + } + + this.name_ = options.name || null; + + // Create element if one wasn't provided in options + if (options.el) { + this.el_ = options.el; + } else if (options.createEl !== false) { + this.el_ = this.createEl(); + } + + // if evented is anything except false, we want to mixin in evented + if (options.evented !== false) { + // Make this an evented object and use `el_`, if available, as its event bus + evented(this, {eventBusKey: this.el_ ? 'el_' : null}); + } + stateful(this, this.constructor.defaultState); + + this.children_ = []; + this.childIndex_ = {}; + this.childNameIndex_ = {}; + + // Add any child components in options + if (options.initChildren !== false) { + this.initChildren(); + } + + this.ready(ready); + // Don't want to trigger ready here or it will before init is actually + // finished for all children that run this constructor + + if (options.reportTouchActivity !== false) { + this.enableTouchActivity(); + } + } + + /** + * Dispose of the `Component` and all child components. + * + * @fires Component#dispose + */ + + + Component.prototype.dispose = function dispose() { + + /** + * Triggered when a `Component` is disposed. + * + * @event Component#dispose + * @type {EventTarget~Event} + * + * @property {boolean} [bubbles=false] + * set to false so that the close event does not + * bubble up + */ + this.trigger({type: 'dispose', bubbles: false}); + + // Dispose all children. + if (this.children_) { + for (var i = this.children_.length - 1; i >= 0; i--) { + if (this.children_[i].dispose) { + this.children_[i].dispose(); + } + } + } + + // Delete child references + this.children_ = null; + this.childIndex_ = null; + this.childNameIndex_ = null; + + if (this.el_) { + // Remove element from DOM + if (this.el_.parentNode) { + this.el_.parentNode.removeChild(this.el_); + } + + removeData(this.el_); + this.el_ = null; + } + + // remove reference to the player after disposing of the element + this.player_ = null; + }; + + /** + * Return the {@link Player} that the `Component` has attached to. + * + * @return {Player} + * The player that this `Component` has attached to. + */ + + + Component.prototype.player = function player() { + return this.player_; + }; + + /** + * Deep merge of options objects with new options. + * > Note: When both `obj` and `options` contain properties whose values are objects. + * The two properties get merged using {@link module:mergeOptions} + * + * @param {Object} obj + * The object that contains new options. + * + * @return {Object} + * A new object of `this.options_` and `obj` merged together. + * + * @deprecated since version 5 + */ + + + Component.prototype.options = function options(obj) { + log$1.warn('this.options() has been deprecated and will be moved to the constructor in 6.0'); + + if (!obj) { + return this.options_; + } + + this.options_ = mergeOptions(this.options_, obj); + return this.options_; + }; + + /** + * Get the `Component`s DOM element + * + * @return {Element} + * The DOM element for this `Component`. + */ + + + Component.prototype.el = function el() { + return this.el_; + }; + + /** + * Create the `Component`s DOM element. + * + * @param {string} [tagName] + * Element's DOM node type. e.g. 'div' + * + * @param {Object} [properties] + * An object of properties that should be set. + * + * @param {Object} [attributes] + * An object of attributes that should be set. + * + * @return {Element} + * The element that gets created. + */ + + + Component.prototype.createEl = function createEl$$1(tagName, properties, attributes) { + return createEl(tagName, properties, attributes); + }; + + /** + * Localize a string given the string in english. + * + * If tokens are provided, it'll try and run a simple token replacement on the provided string. + * The tokens it looks for look like `{1}` with the index being 1-indexed into the tokens array. + * + * If a `defaultValue` is provided, it'll use that over `string`, + * if a value isn't found in provided language files. + * This is useful if you want to have a descriptive key for token replacement + * but have a succinct localized string and not require `en.json` to be included. + * + * Currently, it is used for the progress bar timing. + * ```js + * { + * "progress bar timing: currentTime={1} duration={2}": "{1} of {2}" + * } + * ``` + * It is then used like so: + * ```js + * this.localize('progress bar timing: currentTime={1} duration{2}', + * [this.player_.currentTime(), this.player_.duration()], + * '{1} of {2}'); + * ``` + * + * Which outputs something like: `01:23 of 24:56`. + * + * + * @param {string} string + * The string to localize and the key to lookup in the language files. + * @param {string[]} [tokens] + * If the current item has token replacements, provide the tokens here. + * @param {string} [defaultValue] + * Defaults to `string`. Can be a default value to use for token replacement + * if the lookup key is needed to be separate. + * + * @return {string} + * The localized string or if no localization exists the english string. + */ + + + Component.prototype.localize = function localize(string, tokens) { + var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : string; + + var code = this.player_.language && this.player_.language(); + var languages = this.player_.languages && this.player_.languages(); + var language = languages && languages[code]; + var primaryCode = code && code.split('-')[0]; + var primaryLang = languages && languages[primaryCode]; + + var localizedString = defaultValue; + + if (language && language[string]) { + localizedString = language[string]; + } else if (primaryLang && primaryLang[string]) { + localizedString = primaryLang[string]; + } + + if (tokens) { + localizedString = localizedString.replace(/\{(\d+)\}/g, function (match, index) { + var value = tokens[index - 1]; + var ret = value; + + if (typeof value === 'undefined') { + ret = match; + } + + return ret; + }); + } + + return localizedString; + }; + + /** + * Return the `Component`s DOM element. This is where children get inserted. + * This will usually be the the same as the element returned in {@link Component#el}. + * + * @return {Element} + * The content element for this `Component`. + */ + + + Component.prototype.contentEl = function contentEl() { + return this.contentEl_ || this.el_; + }; + + /** + * Get this `Component`s ID + * + * @return {string} + * The id of this `Component` + */ + + + Component.prototype.id = function id() { + return this.id_; + }; + + /** + * Get the `Component`s name. The name gets used to reference the `Component` + * and is set during registration. + * + * @return {string} + * The name of this `Component`. + */ + + + Component.prototype.name = function name() { + return this.name_; + }; + + /** + * Get an array of all child components + * + * @return {Array} + * The children + */ + + + Component.prototype.children = function children() { + return this.children_; + }; + + /** + * Returns the child `Component` with the given `id`. + * + * @param {string} id + * The id of the child `Component` to get. + * + * @return {Component|undefined} + * The child `Component` with the given `id` or undefined. + */ + + + Component.prototype.getChildById = function getChildById(id) { + return this.childIndex_[id]; + }; + + /** + * Returns the child `Component` with the given `name`. + * + * @param {string} name + * The name of the child `Component` to get. + * + * @return {Component|undefined} + * The child `Component` with the given `name` or undefined. + */ + + + Component.prototype.getChild = function getChild(name) { + if (!name) { + return; + } + + name = toTitleCase(name); + + return this.childNameIndex_[name]; + }; + + /** + * Add a child `Component` inside the current `Component`. + * + * + * @param {string|Component} child + * The name or instance of a child to add. + * + * @param {Object} [options={}] + * The key/value store of options that will get passed to children of + * the child. + * + * @param {number} [index=this.children_.length] + * The index to attempt to add a child into. + * + * @return {Component} + * The `Component` that gets added as a child. When using a string the + * `Component` will get created by this process. + */ + + + Component.prototype.addChild = function addChild(child) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.children_.length; + + var component = void 0; + var componentName = void 0; + + // If child is a string, create component with options + if (typeof child === 'string') { + componentName = toTitleCase(child); + + var componentClassName = options.componentClass || componentName; + + // Set name through options + options.name = componentName; + + // Create a new object & element for this controls set + // If there's no .player_, this is a player + var ComponentClass = Component.getComponent(componentClassName); + + if (!ComponentClass) { + throw new Error('Component ' + componentClassName + ' does not exist'); + } + + // data stored directly on the videojs object may be + // misidentified as a component to retain + // backwards-compatibility with 4.x. check to make sure the + // component class can be instantiated. + if (typeof ComponentClass !== 'function') { + return null; + } + + component = new ComponentClass(this.player_ || this, options); + + // child is a component instance + } else { + component = child; + } + + this.children_.splice(index, 0, component); + + if (typeof component.id === 'function') { + this.childIndex_[component.id()] = component; + } + + // If a name wasn't used to create the component, check if we can use the + // name function of the component + componentName = componentName || component.name && toTitleCase(component.name()); + + if (componentName) { + this.childNameIndex_[componentName] = component; + } + + // Add the UI object's element to the container div (box) + // Having an element is not required + if (typeof component.el === 'function' && component.el()) { + var childNodes = this.contentEl().children; + var refNode = childNodes[index] || null; + + this.contentEl().insertBefore(component.el(), refNode); + } + + // Return so it can stored on parent object if desired. + return component; + }; + + /** + * Remove a child `Component` from this `Component`s list of children. Also removes + * the child `Component`s element from this `Component`s element. + * + * @param {Component} component + * The child `Component` to remove. + */ + + + Component.prototype.removeChild = function removeChild(component) { + if (typeof component === 'string') { + component = this.getChild(component); + } + + if (!component || !this.children_) { + return; + } + + var childFound = false; + + for (var i = this.children_.length - 1; i >= 0; i--) { + if (this.children_[i] === component) { + childFound = true; + this.children_.splice(i, 1); + break; + } + } + + if (!childFound) { + return; + } + + this.childIndex_[component.id()] = null; + this.childNameIndex_[component.name()] = null; + + var compEl = component.el(); + + if (compEl && compEl.parentNode === this.contentEl()) { + this.contentEl().removeChild(component.el()); + } + }; + + /** + * Add and initialize default child `Component`s based upon options. + */ + + + Component.prototype.initChildren = function initChildren() { + var _this = this; + + var children = this.options_.children; + + if (children) { + // `this` is `parent` + var parentOptions = this.options_; + + var handleAdd = function handleAdd(child) { + var name = child.name; + var opts = child.opts; + + // Allow options for children to be set at the parent options + // e.g. videojs(id, { controlBar: false }); + // instead of videojs(id, { children: { controlBar: false }); + if (parentOptions[name] !== undefined) { + opts = parentOptions[name]; + } + + // Allow for disabling default components + // e.g. options['children']['posterImage'] = false + if (opts === false) { + return; + } + + // Allow options to be passed as a simple boolean if no configuration + // is necessary. + if (opts === true) { + opts = {}; + } + + // We also want to pass the original player options + // to each component as well so they don't need to + // reach back into the player for options later. + opts.playerOptions = _this.options_.playerOptions; + + // Create and add the child component. + // Add a direct reference to the child by name on the parent instance. + // If two of the same component are used, different names should be supplied + // for each + var newChild = _this.addChild(name, opts); + + if (newChild) { + _this[name] = newChild; + } + }; + + // Allow for an array of children details to passed in the options + var workingChildren = void 0; + var Tech = Component.getComponent('Tech'); + + if (Array.isArray(children)) { + workingChildren = children; + } else { + workingChildren = Object.keys(children); + } + + workingChildren + // children that are in this.options_ but also in workingChildren would + // give us extra children we do not want. So, we want to filter them out. + .concat(Object.keys(this.options_).filter(function (child) { + return !workingChildren.some(function (wchild) { + if (typeof wchild === 'string') { + return child === wchild; + } + return child === wchild.name; + }); + })).map(function (child) { + var name = void 0; + var opts = void 0; + + if (typeof child === 'string') { + name = child; + opts = children[name] || _this.options_[name] || {}; + } else { + name = child.name; + opts = child; + } + + return {name: name, opts: opts}; + }).filter(function (child) { + // we have to make sure that child.name isn't in the techOrder since + // techs are registerd as Components but can't aren't compatible + // See https://github.com/videojs/video.js/issues/2772 + var c = Component.getComponent(child.opts.componentClass || toTitleCase(child.name)); + + return c && !Tech.isTech(c); + }).forEach(handleAdd); + } + }; + + /** + * Builds the default DOM class name. Should be overriden by sub-components. + * + * @return {string} + * The DOM class name for this object. + * + * @abstract + */ + + + Component.prototype.buildCSSClass = function buildCSSClass() { + // Child classes can include a function that does: + // return 'CLASS NAME' + this._super(); + return ''; + }; + + /** + * Bind a listener to the component's ready state. + * Different from event listeners in that if the ready event has already happened + * it will trigger the function immediately. + * + * @return {Component} + * Returns itself; method can be chained. + */ + + + Component.prototype.ready = function ready(fn) { + var sync = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (!fn) { + return; + } + + if (!this.isReady_) { + this.readyQueue_ = this.readyQueue_ || []; + this.readyQueue_.push(fn); + return; + } + + if (sync) { + fn.call(this); + } else { + // Call the function asynchronously by default for consistency + this.setTimeout(fn, 1); + } + }; + + /** + * Trigger all the ready listeners for this `Component`. + * + * @fires Component#ready + */ + + + Component.prototype.triggerReady = function triggerReady() { + this.isReady_ = true; + + // Ensure ready is triggered asynchronously + this.setTimeout(function () { + var readyQueue = this.readyQueue_; + + // Reset Ready Queue + this.readyQueue_ = []; + + if (readyQueue && readyQueue.length > 0) { + readyQueue.forEach(function (fn) { + fn.call(this); + }, this); + } + + // Allow for using event listeners also + /** + * Triggered when a `Component` is ready. + * + * @event Component#ready + * @type {EventTarget~Event} + */ + this.trigger('ready'); + }, 1); + }; + + /** + * Find a single DOM element matching a `selector`. This can be within the `Component`s + * `contentEl()` or another custom context. + * + * @param {string} selector + * A valid CSS selector, which will be passed to `querySelector`. + * + * @param {Element|string} [context=this.contentEl()] + * A DOM element within which to query. Can also be a selector string in + * which case the first matching element will get used as context. If + * missing `this.contentEl()` gets used. If `this.contentEl()` returns + * nothing it falls back to `document`. + * + * @return {Element|null} + * the dom element that was found, or null + * + * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors) + */ + + + Component.prototype.$ = function $$$1(selector, context) { + return $(selector, context || this.contentEl()); + }; + + /** + * Finds all DOM element matching a `selector`. This can be within the `Component`s + * `contentEl()` or another custom context. + * + * @param {string} selector + * A valid CSS selector, which will be passed to `querySelectorAll`. + * + * @param {Element|string} [context=this.contentEl()] + * A DOM element within which to query. Can also be a selector string in + * which case the first matching element will get used as context. If + * missing `this.contentEl()` gets used. If `this.contentEl()` returns + * nothing it falls back to `document`. + * + * @return {NodeList} + * a list of dom elements that were found + * + * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors) + */ + + + Component.prototype.$$ = function $$$$1(selector, context) { + return $$(selector, context || this.contentEl()); + }; + + /** + * Check if a component's element has a CSS class name. + * + * @param {string} classToCheck + * CSS class name to check. + * + * @return {boolean} + * - True if the `Component` has the class. + * - False if the `Component` does not have the class` + */ + + + Component.prototype.hasClass = function hasClass$$1(classToCheck) { + return hasClass(this.el_, classToCheck); + }; + + /** + * Add a CSS class name to the `Component`s element. + * + * @param {string} classToAdd + * CSS class name to add + */ + + + Component.prototype.addClass = function addClass$$1(classToAdd) { + addClass(this.el_, classToAdd); + }; + + /** + * Remove a CSS class name from the `Component`s element. + * + * @param {string} classToRemove + * CSS class name to remove + */ + + + Component.prototype.removeClass = function removeClass$$1(classToRemove) { + removeClass(this.el_, classToRemove); + }; + + /** + * Add or remove a CSS class name from the component's element. + * - `classToToggle` gets added when {@link Component#hasClass} would return false. + * - `classToToggle` gets removed when {@link Component#hasClass} would return true. + * + * @param {string} classToToggle + * The class to add or remove based on (@link Component#hasClass} + * + * @param {boolean|Dom~predicate} [predicate] + * An {@link Dom~predicate} function or a boolean + */ + + + Component.prototype.toggleClass = function toggleClass$$1(classToToggle, predicate) { + toggleClass(this.el_, classToToggle, predicate); + }; + + /** + * Show the `Component`s element if it is hidden by removing the + * 'vjs-hidden' class name from it. + */ + + + Component.prototype.show = function show() { + this.removeClass('vjs-hidden'); + }; + + /** + * Hide the `Component`s element if it is currently showing by adding the + * 'vjs-hidden` class name to it. + */ + + + Component.prototype.hide = function hide() { + this.addClass('vjs-hidden'); + }; + + /** + * Lock a `Component`s element in its visible state by adding the 'vjs-lock-showing' + * class name to it. Used during fadeIn/fadeOut. + * + * @private + */ + + + Component.prototype.lockShowing = function lockShowing() { + this.addClass('vjs-lock-showing'); + }; + + /** + * Unlock a `Component`s element from its visible state by removing the 'vjs-lock-showing' + * class name from it. Used during fadeIn/fadeOut. + * + * @private + */ + + + Component.prototype.unlockShowing = function unlockShowing() { + this.removeClass('vjs-lock-showing'); + }; + + /** + * Get the value of an attribute on the `Component`s element. + * + * @param {string} attribute + * Name of the attribute to get the value from. + * + * @return {string|null} + * - The value of the attribute that was asked for. + * - Can be an empty string on some browsers if the attribute does not exist + * or has no value + * - Most browsers will return null if the attibute does not exist or has + * no value. + * + * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute} + */ + + + Component.prototype.getAttribute = function getAttribute$$1(attribute) { + return getAttribute(this.el_, attribute); + }; + + /** + * Set the value of an attribute on the `Component`'s element + * + * @param {string} attribute + * Name of the attribute to set. + * + * @param {string} value + * Value to set the attribute to. + * + * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute} + */ + + + Component.prototype.setAttribute = function setAttribute$$1(attribute, value) { + setAttribute(this.el_, attribute, value); + }; + + /** + * Remove an attribute from the `Component`s element. + * + * @param {string} attribute + * Name of the attribute to remove. + * + * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute} + */ + + + Component.prototype.removeAttribute = function removeAttribute$$1(attribute) { + removeAttribute(this.el_, attribute); + }; + + /** + * Get or set the width of the component based upon the CSS styles. + * See {@link Component#dimension} for more detailed information. + * + * @param {number|string} [num] + * The width that you want to set postfixed with '%', 'px' or nothing. + * + * @param {boolean} [skipListeners] + * Skip the componentresize event trigger + * + * @return {number|string} + * The width when getting, zero if there is no width. Can be a string + * postpixed with '%' or 'px'. + */ + + + Component.prototype.width = function width(num, skipListeners) { + return this.dimension('width', num, skipListeners); + }; + + /** + * Get or set the height of the component based upon the CSS styles. + * See {@link Component#dimension} for more detailed information. + * + * @param {number|string} [num] + * The height that you want to set postfixed with '%', 'px' or nothing. + * + * @param {boolean} [skipListeners] + * Skip the componentresize event trigger + * + * @return {number|string} + * The width when getting, zero if there is no width. Can be a string + * postpixed with '%' or 'px'. + */ + + + Component.prototype.height = function height(num, skipListeners) { + return this.dimension('height', num, skipListeners); + }; + + /** + * Set both the width and height of the `Component` element at the same time. + * + * @param {number|string} width + * Width to set the `Component`s element to. + * + * @param {number|string} height + * Height to set the `Component`s element to. + */ + + + Component.prototype.dimensions = function dimensions(width, height) { + // Skip componentresize listeners on width for optimization + this.width(width, true); + this.height(height); + }; + + /** + * Get or set width or height of the `Component` element. This is the shared code + * for the {@link Component#width} and {@link Component#height}. + * + * Things to know: + * - If the width or height in an number this will return the number postfixed with 'px'. + * - If the width/height is a percent this will return the percent postfixed with '%' + * - Hidden elements have a width of 0 with `window.getComputedStyle`. This function + * defaults to the `Component`s `style.width` and falls back to `window.getComputedStyle`. + * See [this]{@link http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/} + * for more information + * - If you want the computed style of the component, use {@link Component#currentWidth} + * and {@link {Component#currentHeight} + * + * @fires Component#componentresize + * + * @param {string} widthOrHeight + 8 'width' or 'height' + * + * @param {number|string} [num] + 8 New dimension + * + * @param {boolean} [skipListeners] + * Skip componentresize event trigger + * + * @return {number} + * The dimension when getting or 0 if unset + */ + + + Component.prototype.dimension = function dimension(widthOrHeight, num, skipListeners) { + if (num !== undefined) { + // Set to zero if null or literally NaN (NaN !== NaN) + if (num === null || num !== num) { + num = 0; + } + + // Check if using css width/height (% or px) and adjust + if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) { + this.el_.style[widthOrHeight] = num; + } else if (num === 'auto') { + this.el_.style[widthOrHeight] = ''; + } else { + this.el_.style[widthOrHeight] = num + 'px'; + } + + // skipListeners allows us to avoid triggering the resize event when setting both width and height + if (!skipListeners) { + /** + * Triggered when a component is resized. + * + * @event Component#componentresize + * @type {EventTarget~Event} + */ + this.trigger('componentresize'); + } + + return; + } + + // Not setting a value, so getting it + // Make sure element exists + if (!this.el_) { + return 0; + } + + // Get dimension value from style + var val = this.el_.style[widthOrHeight]; + var pxIndex = val.indexOf('px'); + + if (pxIndex !== -1) { + // Return the pixel value with no 'px' + return parseInt(val.slice(0, pxIndex), 10); + } + + // No px so using % or no style was set, so falling back to offsetWidth/height + // If component has display:none, offset will return 0 + // TODO: handle display:none and no dimension style using px + return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10); + }; + + /** + * Get the width or the height of the `Component` elements computed style. Uses + * `window.getComputedStyle`. + * + * @param {string} widthOrHeight + * A string containing 'width' or 'height'. Whichever one you want to get. + * + * @return {number} + * The dimension that gets asked for or 0 if nothing was set + * for that dimension. + */ + + + Component.prototype.currentDimension = function currentDimension(widthOrHeight) { + var computedWidthOrHeight = 0; + + if (widthOrHeight !== 'width' && widthOrHeight !== 'height') { + throw new Error('currentDimension only accepts width or height value'); + } + + if (typeof window_1.getComputedStyle === 'function') { + var computedStyle = window_1.getComputedStyle(this.el_); + + computedWidthOrHeight = computedStyle.getPropertyValue(widthOrHeight) || computedStyle[widthOrHeight]; + } + + // remove 'px' from variable and parse as integer + computedWidthOrHeight = parseFloat(computedWidthOrHeight); + + // if the computed value is still 0, it's possible that the browser is lying + // and we want to check the offset values. + // This code also runs wherever getComputedStyle doesn't exist. + if (computedWidthOrHeight === 0) { + var rule = 'offset' + toTitleCase(widthOrHeight); + + computedWidthOrHeight = this.el_[rule]; + } + + return computedWidthOrHeight; + }; + + /** + * An object that contains width and height values of the `Component`s + * computed style. Uses `window.getComputedStyle`. + * + * @typedef {Object} Component~DimensionObject + * + * @property {number} width + * The width of the `Component`s computed style. + * + * @property {number} height + * The height of the `Component`s computed style. + */ + + /** + * Get an object that contains width and height values of the `Component`s + * computed style. + * + * @return {Component~DimensionObject} + * The dimensions of the components element + */ + + + Component.prototype.currentDimensions = function currentDimensions() { + return { + width: this.currentDimension('width'), + height: this.currentDimension('height') + }; + }; + + /** + * Get the width of the `Component`s computed style. Uses `window.getComputedStyle`. + * + * @return {number} width + * The width of the `Component`s computed style. + */ + + + Component.prototype.currentWidth = function currentWidth() { + return this.currentDimension('width'); + }; + + /** + * Get the height of the `Component`s computed style. Uses `window.getComputedStyle`. + * + * @return {number} height + * The height of the `Component`s computed style. + */ + + + Component.prototype.currentHeight = function currentHeight() { + return this.currentDimension('height'); + }; + + /** + * Set the focus to this component + */ + + + Component.prototype.focus = function focus() { + this.el_.focus(); + }; + + /** + * Remove the focus from this component + */ + + + Component.prototype.blur = function blur() { + this.el_.blur(); + }; + + /** + * Emit a 'tap' events when touch event support gets detected. This gets used to + * support toggling the controls through a tap on the video. They get enabled + * because every sub-component would have extra overhead otherwise. + * + * @private + * @fires Component#tap + * @listens Component#touchstart + * @listens Component#touchmove + * @listens Component#touchleave + * @listens Component#touchcancel + * @listens Component#touchend + */ + + + Component.prototype.emitTapEvents = function emitTapEvents() { + // Track the start time so we can determine how long the touch lasted + var touchStart = 0; + var firstTouch = null; + + // Maximum movement allowed during a touch event to still be considered a tap + // Other popular libs use anywhere from 2 (hammer.js) to 15, + // so 10 seems like a nice, round number. + var tapMovementThreshold = 10; + + // The maximum length a touch can be while still being considered a tap + var touchTimeThreshold = 200; + + var couldBeTap = void 0; + + this.on('touchstart', function (event) { + // If more than one finger, don't consider treating this as a click + if (event.touches.length === 1) { + // Copy pageX/pageY from the object + firstTouch = { + pageX: event.touches[0].pageX, + pageY: event.touches[0].pageY + }; + // Record start time so we can detect a tap vs. "touch and hold" + touchStart = new Date().getTime(); + // Reset couldBeTap tracking + couldBeTap = true; + } + }); + + this.on('touchmove', function (event) { + // If more than one finger, don't consider treating this as a click + if (event.touches.length > 1) { + couldBeTap = false; + } else if (firstTouch) { + // Some devices will throw touchmoves for all but the slightest of taps. + // So, if we moved only a small distance, this could still be a tap + var xdiff = event.touches[0].pageX - firstTouch.pageX; + var ydiff = event.touches[0].pageY - firstTouch.pageY; + var touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff); + + if (touchDistance > tapMovementThreshold) { + couldBeTap = false; + } + } + }); + + var noTap = function noTap() { + couldBeTap = false; + }; + + // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s + this.on('touchleave', noTap); + this.on('touchcancel', noTap); + + // When the touch ends, measure how long it took and trigger the appropriate + // event + this.on('touchend', function (event) { + firstTouch = null; + // Proceed only if the touchmove/leave/cancel event didn't happen + if (couldBeTap === true) { + // Measure how long the touch lasted + var touchTime = new Date().getTime() - touchStart; + + // Make sure the touch was less than the threshold to be considered a tap + if (touchTime < touchTimeThreshold) { + // Don't let browser turn this into a click + event.preventDefault(); + /** + * Triggered when a `Component` is tapped. + * + * @event Component#tap + * @type {EventTarget~Event} + */ + this.trigger('tap'); + // It may be good to copy the touchend event object and change the + // type to tap, if the other event properties aren't exact after + // Events.fixEvent runs (e.g. event.target) + } + } + }); + }; + + /** + * This function reports user activity whenever touch events happen. This can get + * turned off by any sub-components that wants touch events to act another way. + * + * Report user touch activity when touch events occur. User activity gets used to + * determine when controls should show/hide. It is simple when it comes to mouse + * events, because any mouse event should show the controls. So we capture mouse + * events that bubble up to the player and report activity when that happens. + * With touch events it isn't as easy as `touchstart` and `touchend` toggle player + * controls. So touch events can't help us at the player level either. + * + * User activity gets checked asynchronously. So what could happen is a tap event + * on the video turns the controls off. Then the `touchend` event bubbles up to + * the player. Which, if it reported user activity, would turn the controls right + * back on. We also don't want to completely block touch events from bubbling up. + * Furthermore a `touchmove` event and anything other than a tap, should not turn + * controls back on. + * + * @listens Component#touchstart + * @listens Component#touchmove + * @listens Component#touchend + * @listens Component#touchcancel + */ + + + Component.prototype.enableTouchActivity = function enableTouchActivity() { + // Don't continue if the root player doesn't support reporting user activity + if (!this.player() || !this.player().reportUserActivity) { + return; + } + + // listener for reporting that the user is active + var report = bind(this.player(), this.player().reportUserActivity); + + var touchHolding = void 0; + + this.on('touchstart', function () { + report(); + // For as long as the they are touching the device or have their mouse down, + // we consider them active even if they're not moving their finger or mouse. + // So we want to continue to update that they are active + this.clearInterval(touchHolding); + // report at the same interval as activityCheck + touchHolding = this.setInterval(report, 250); + }); + + var touchEnd = function touchEnd(event) { + report(); + // stop the interval that maintains activity if the touch is holding + this.clearInterval(touchHolding); + }; + + this.on('touchmove', report); + this.on('touchend', touchEnd); + this.on('touchcancel', touchEnd); + }; + + /** + * A callback that has no parameters and is bound into `Component`s context. + * + * @callback Component~GenericCallback + * @this Component + */ + + /** + * Creates a function that runs after an `x` millisecond timeout. This function is a + * wrapper around `window.setTimeout`. There are a few reasons to use this one + * instead though: + * 1. It gets cleared via {@link Component#clearTimeout} when + * {@link Component#dispose} gets called. + * 2. The function callback will gets turned into a {@link Component~GenericCallback} + * + * > Note: You can use `window.clearTimeout` on the id returned by this function. This + * will cause its dispose listener not to get cleaned up! Please use + * {@link Component#clearTimeout} or {@link Component#dispose}. + * + * @param {Component~GenericCallback} fn + * The function that will be run after `timeout`. + * + * @param {number} timeout + * Timeout in milliseconds to delay before executing the specified function. + * + * @return {number} + * Returns a timeout ID that gets used to identify the timeout. It can also + * get used in {@link Component#clearTimeout} to clear the timeout that + * was set. + * + * @listens Component#dispose + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout} + */ + + + Component.prototype.setTimeout = function setTimeout(fn, timeout) { + var _this2 = this; + + fn = bind(this, fn); + + var timeoutId = window_1.setTimeout(fn, timeout); + var disposeFn = function disposeFn() { + return _this2.clearTimeout(timeoutId); + }; + + disposeFn.guid = 'vjs-timeout-' + timeoutId; + + this.on('dispose', disposeFn); + + return timeoutId; + }; + + /** + * Clears a timeout that gets created via `window.setTimeout` or + * {@link Component#setTimeout}. If you set a timeout via {@link Component#setTimeout} + * use this function instead of `window.clearTimout`. If you don't your dispose + * listener will not get cleaned up until {@link Component#dispose}! + * + * @param {number} timeoutId + * The id of the timeout to clear. The return value of + * {@link Component#setTimeout} or `window.setTimeout`. + * + * @return {number} + * Returns the timeout id that was cleared. + * + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout} + */ + + + Component.prototype.clearTimeout = function clearTimeout(timeoutId) { + window_1.clearTimeout(timeoutId); + + var disposeFn = function disposeFn() { + }; + + disposeFn.guid = 'vjs-timeout-' + timeoutId; + + this.off('dispose', disposeFn); + + return timeoutId; + }; + + /** + * Creates a function that gets run every `x` milliseconds. This function is a wrapper + * around `window.setInterval`. There are a few reasons to use this one instead though. + * 1. It gets cleared via {@link Component#clearInterval} when + * {@link Component#dispose} gets called. + * 2. The function callback will be a {@link Component~GenericCallback} + * + * @param {Component~GenericCallback} fn + * The function to run every `x` seconds. + * + * @param {number} interval + * Execute the specified function every `x` milliseconds. + * + * @return {number} + * Returns an id that can be used to identify the interval. It can also be be used in + * {@link Component#clearInterval} to clear the interval. + * + * @listens Component#dispose + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval} + */ + + + Component.prototype.setInterval = function setInterval(fn, interval) { + var _this3 = this; + + fn = bind(this, fn); + + var intervalId = window_1.setInterval(fn, interval); + + var disposeFn = function disposeFn() { + return _this3.clearInterval(intervalId); + }; + + disposeFn.guid = 'vjs-interval-' + intervalId; + + this.on('dispose', disposeFn); + + return intervalId; + }; + + /** + * Clears an interval that gets created via `window.setInterval` or + * {@link Component#setInterval}. If you set an inteval via {@link Component#setInterval} + * use this function instead of `window.clearInterval`. If you don't your dispose + * listener will not get cleaned up until {@link Component#dispose}! + * + * @param {number} intervalId + * The id of the interval to clear. The return value of + * {@link Component#setInterval} or `window.setInterval`. + * + * @return {number} + * Returns the interval id that was cleared. + * + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval} + */ + + + Component.prototype.clearInterval = function clearInterval(intervalId) { + window_1.clearInterval(intervalId); + + var disposeFn = function disposeFn() { + }; + + disposeFn.guid = 'vjs-interval-' + intervalId; + + this.off('dispose', disposeFn); + + return intervalId; + }; + + /** + * Queues up a callback to be passed to requestAnimationFrame (rAF), but + * with a few extra bonuses: + * + * - Supports browsers that do not support rAF by falling back to + * {@link Component#setTimeout}. + * + * - The callback is turned into a {@link Component~GenericCallback} (i.e. + * bound to the component). + * + * - Automatic cancellation of the rAF callback is handled if the component + * is disposed before it is called. + * + * @param {Component~GenericCallback} fn + * A function that will be bound to this component and executed just + * before the browser's next repaint. + * + * @return {number} + * Returns an rAF ID that gets used to identify the timeout. It can + * also be used in {@link Component#cancelAnimationFrame} to cancel + * the animation frame callback. + * + * @listens Component#dispose + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame} + */ + + + Component.prototype.requestAnimationFrame = function requestAnimationFrame(fn) { + var _this4 = this; + + if (this.supportsRaf_) { + fn = bind(this, fn); + + var id = window_1.requestAnimationFrame(fn); + var disposeFn = function disposeFn() { + return _this4.cancelAnimationFrame(id); + }; + + disposeFn.guid = 'vjs-raf-' + id; + this.on('dispose', disposeFn); + + return id; + } + + // Fall back to using a timer. + return this.setTimeout(fn, 1000 / 60); + }; + + /** + * Cancels a queued callback passed to {@link Component#requestAnimationFrame} + * (rAF). + * + * If you queue an rAF callback via {@link Component#requestAnimationFrame}, + * use this function instead of `window.cancelAnimationFrame`. If you don't, + * your dispose listener will not get cleaned up until {@link Component#dispose}! + * + * @param {number} id + * The rAF ID to clear. The return value of {@link Component#requestAnimationFrame}. + * + * @return {number} + * Returns the rAF ID that was cleared. + * + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/cancelAnimationFrame} + */ + + + Component.prototype.cancelAnimationFrame = function cancelAnimationFrame(id) { + if (this.supportsRaf_) { + window_1.cancelAnimationFrame(id); + + var disposeFn = function disposeFn() { + }; + + disposeFn.guid = 'vjs-raf-' + id; + + this.off('dispose', disposeFn); + + return id; + } + + // Fall back to using a timer. + return this.clearTimeout(id); + }; + + /** + * Register a `Component` with `videojs` given the name and the component. + * + * > NOTE: {@link Tech}s should not be registered as a `Component`. {@link Tech}s + * should be registered using {@link Tech.registerTech} or + * {@link videojs:videojs.registerTech}. + * + * > NOTE: This function can also be seen on videojs as + * {@link videojs:videojs.registerComponent}. + * + * @param {string} name + * The name of the `Component` to register. + * + * @param {Component} ComponentToRegister + * The `Component` class to register. + * + * @return {Component} + * The `Component` that was registered. + */ + + + Component.registerComponent = function registerComponent(name, ComponentToRegister) { + if (typeof name !== 'string' || !name) { + throw new Error('Illegal component name, "' + name + '"; must be a non-empty string.'); + } + + var Tech = Component.getComponent('Tech'); + + // We need to make sure this check is only done if Tech has been registered. + var isTech = Tech && Tech.isTech(ComponentToRegister); + var isComp = Component === ComponentToRegister || Component.prototype.isPrototypeOf(ComponentToRegister.prototype); + + if (isTech || !isComp) { + var reason = void 0; + + if (isTech) { + reason = 'techs must be registered using Tech.registerTech()'; + } else { + reason = 'must be a Component subclass'; + } + + throw new Error('Illegal component, "' + name + '"; ' + reason + '.'); + } + + name = toTitleCase(name); + + if (!Component.components_) { + Component.components_ = {}; + } + + var Player = Component.getComponent('Player'); + + if (name === 'Player' && Player && Player.players) { + var players = Player.players; + var playerNames = Object.keys(players); + + // If we have players that were disposed, then their name will still be + // in Players.players. So, we must loop through and verify that the value + // for each item is not null. This allows registration of the Player component + // after all players have been disposed or before any were created. + if (players && playerNames.length > 0 && playerNames.map(function (pname) { + return players[pname]; + }).every(Boolean)) { + throw new Error('Can not register Player component after player has been created.'); + } + } + + Component.components_[name] = ComponentToRegister; + + return ComponentToRegister; + }; + + /** + * Get a `Component` based on the name it was registered with. + * + * @param {string} name + * The Name of the component to get. + * + * @return {Component} + * The `Component` that got registered under the given name. + * + * @deprecated In `videojs` 6 this will not return `Component`s that were not + * registered using {@link Component.registerComponent}. Currently we + * check the global `videojs` object for a `Component` name and + * return that if it exists. + */ + + + Component.getComponent = function getComponent(name) { + if (!name) { + return; + } + + name = toTitleCase(name); + + if (Component.components_ && Component.components_[name]) { + return Component.components_[name]; + } + }; + + return Component; + }(); + + /** + * Whether or not this component supports `requestAnimationFrame`. + * + * This is exposed primarily for testing purposes. + * + * @private + * @type {Boolean} + */ + + + Component.prototype.supportsRaf_ = typeof window_1.requestAnimationFrame === 'function' && typeof window_1.cancelAnimationFrame === 'function'; + + Component.registerComponent('Component', Component); + + /** + * @file browser.js + * @module browser + */ + + var USER_AGENT = window_1.navigator && window_1.navigator.userAgent || ''; + var webkitVersionMap = /AppleWebKit\/([\d.]+)/i.exec(USER_AGENT); + var appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null; + + /* + * Device is an iPhone + * + * @type {Boolean} + * @constant + * @private + */ + var IS_IPAD = /iPad/i.test(USER_AGENT); + + // The Facebook app's UIWebView identifies as both an iPhone and iPad, so + // to identify iPhones, we need to exclude iPads. + // http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/ + var IS_IPHONE = /iPhone/i.test(USER_AGENT) && !IS_IPAD; + var IS_IPOD = /iPod/i.test(USER_AGENT); + var IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD; + + var IOS_VERSION = function () { + var match = USER_AGENT.match(/OS (\d+)_/i); + + if (match && match[1]) { + return match[1]; + } + return null; + }(); + + var IS_ANDROID = /Android/i.test(USER_AGENT); + var ANDROID_VERSION = function () { + // This matches Android Major.Minor.Patch versions + // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned + var match = USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i); + + if (!match) { + return null; + } + + var major = match[1] && parseFloat(match[1]); + var minor = match[2] && parseFloat(match[2]); + + if (major && minor) { + return parseFloat(match[1] + '.' + match[2]); + } else if (major) { + return major; + } + return null; + }(); + + var IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537; + + var IS_FIREFOX = /Firefox/i.test(USER_AGENT); + var IS_EDGE = /Edge/i.test(USER_AGENT); + var IS_CHROME = !IS_EDGE && /Chrome/i.test(USER_AGENT); + var CHROME_VERSION = function () { + var match = USER_AGENT.match(/Chrome\/(\d+)/); + + if (match && match[1]) { + return parseFloat(match[1]); + } + return null; + }(); + var IE_VERSION = function () { + var result = /MSIE\s(\d+)\.\d/.exec(USER_AGENT); + var version = result && parseFloat(result[1]); + + if (!version && /Trident\/7.0/i.test(USER_AGENT) && /rv:11.0/.test(USER_AGENT)) { + // IE 11 has a different user agent string than other IE versions + version = 11.0; + } + + return version; + }(); + + var IS_SAFARI = /Safari/i.test(USER_AGENT) && !IS_CHROME && !IS_ANDROID && !IS_EDGE; + var IS_ANY_SAFARI = IS_SAFARI || IS_IOS; + + var TOUCH_ENABLED = isReal() && ('ontouchstart' in window_1 || window_1.DocumentTouch && window_1.document instanceof window_1.DocumentTouch); + + var browser = /*#__PURE__*/Object.freeze({ + IS_IPAD: IS_IPAD, + IS_IPHONE: IS_IPHONE, + IS_IPOD: IS_IPOD, + IS_IOS: IS_IOS, + IOS_VERSION: IOS_VERSION, + IS_ANDROID: IS_ANDROID, + ANDROID_VERSION: ANDROID_VERSION, + IS_NATIVE_ANDROID: IS_NATIVE_ANDROID, + IS_FIREFOX: IS_FIREFOX, + IS_EDGE: IS_EDGE, + IS_CHROME: IS_CHROME, + CHROME_VERSION: CHROME_VERSION, + IE_VERSION: IE_VERSION, + IS_SAFARI: IS_SAFARI, + IS_ANY_SAFARI: IS_ANY_SAFARI, + TOUCH_ENABLED: TOUCH_ENABLED + }); + + /** + * @file time-ranges.js + * @module time-ranges + */ + + /** + * Returns the time for the specified index at the start or end + * of a TimeRange object. + * + * @function time-ranges:indexFunction + * + * @param {number} [index=0] + * The range number to return the time for. + * + * @return {number} + * The time that offset at the specified index. + * + * @depricated index must be set to a value, in the future this will throw an error. + */ + + /** + * An object that contains ranges of time for various reasons. + * + * @typedef {Object} TimeRange + * + * @property {number} length + * The number of time ranges represented by this Object + * + * @property {time-ranges:indexFunction} start + * Returns the time offset at which a specified time range begins. + * + * @property {time-ranges:indexFunction} end + * Returns the time offset at which a specified time range ends. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges + */ + + /** + * Check if any of the time ranges are over the maximum index. + * + * @param {string} fnName + * The function name to use for logging + * + * @param {number} index + * The index to check + * + * @param {number} maxIndex + * The maximum possible index + * + * @throws {Error} if the timeRanges provided are over the maxIndex + */ + function rangeCheck(fnName, index, maxIndex) { + if (typeof index !== 'number' || index < 0 || index > maxIndex) { + throw new Error('Failed to execute \'' + fnName + '\' on \'TimeRanges\': The index provided (' + index + ') is non-numeric or out of bounds (0-' + maxIndex + ').'); + } + } + + /** + * Get the time for the specified index at the start or end + * of a TimeRange object. + * + * @param {string} fnName + * The function name to use for logging + * + * @param {string} valueIndex + * The property that should be used to get the time. should be 'start' or 'end' + * + * @param {Array} ranges + * An array of time ranges + * + * @param {Array} [rangeIndex=0] + * The index to start the search at + * + * @return {number} + * The time that offset at the specified index. + * + * + * @depricated rangeIndex must be set to a value, in the future this will throw an error. + * @throws {Error} if rangeIndex is more than the length of ranges + */ + function getRange(fnName, valueIndex, ranges, rangeIndex) { + rangeCheck(fnName, rangeIndex, ranges.length - 1); + return ranges[rangeIndex][valueIndex]; + } + + /** + * Create a time range object given ranges of time. + * + * @param {Array} [ranges] + * An array of time ranges. + */ + function createTimeRangesObj(ranges) { + if (ranges === undefined || ranges.length === 0) { + return { + length: 0, + start: function start() { + throw new Error('This TimeRanges object is empty'); + }, + end: function end() { + throw new Error('This TimeRanges object is empty'); + } + }; + } + return { + length: ranges.length, + start: getRange.bind(null, 'start', 0, ranges), + end: getRange.bind(null, 'end', 1, ranges) + }; + } + + /** + * Should create a fake `TimeRange` object which mimics an HTML5 time range instance. + * + * @param {number|Array} start + * The start of a single range or an array of ranges + * + * @param {number} end + * The end of a single range. + * + * @private + */ + function createTimeRanges(start, end) { + if (Array.isArray(start)) { + return createTimeRangesObj(start); + } else if (start === undefined || end === undefined) { + return createTimeRangesObj(); + } + return createTimeRangesObj([[start, end]]); + } + + /** + * @file buffer.js + * @module buffer + */ + + /** + * Compute the percentage of the media that has been buffered. + * + * @param {TimeRange} buffered + * The current `TimeRange` object representing buffered time ranges + * + * @param {number} duration + * Total duration of the media + * + * @return {number} + * Percent buffered of the total duration in decimal form. + */ + function bufferedPercent(buffered, duration) { + var bufferedDuration = 0; + var start = void 0; + var end = void 0; + + if (!duration) { + return 0; + } + + if (!buffered || !buffered.length) { + buffered = createTimeRanges(0, 0); + } + + for (var i = 0; i < buffered.length; i++) { + start = buffered.start(i); + end = buffered.end(i); + + // buffered end can be bigger than duration by a very small fraction + if (end > duration) { + end = duration; + } + + bufferedDuration += end - start; + } + + return bufferedDuration / duration; + } + + /** + * @file fullscreen-api.js + * @module fullscreen-api + * @private + */ + + /** + * Store the browser-specific methods for the fullscreen API. + * + * @type {Object} + * @see [Specification]{@link https://fullscreen.spec.whatwg.org} + * @see [Map Approach From Screenfull.js]{@link https://github.com/sindresorhus/screenfull.js} + */ + var FullscreenApi = {}; + + // browser API methods + var apiMap = [['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'], + // WebKit + ['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror'], + // Old WebKit (Safari 5.1) + ['webkitRequestFullScreen', 'webkitCancelFullScreen', 'webkitCurrentFullScreenElement', 'webkitCancelFullScreen', 'webkitfullscreenchange', 'webkitfullscreenerror'], + // Mozilla + ['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'], + // Microsoft + ['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']]; + + var specApi = apiMap[0]; + var browserApi = void 0; + + // determine the supported set of functions + for (var i = 0; i < apiMap.length; i++) { + // check for exitFullscreen function + if (apiMap[i][1] in document_1) { + browserApi = apiMap[i]; + break; + } + } + + // map the browser API names to the spec API names + if (browserApi) { + for (var _i = 0; _i < browserApi.length; _i++) { + FullscreenApi[specApi[_i]] = browserApi[_i]; + } + } + + /** + * @file media-error.js + */ + + /** + * A Custom `MediaError` class which mimics the standard HTML5 `MediaError` class. + * + * @param {number|string|Object|MediaError} value + * This can be of multiple types: + * - number: should be a standard error code + * - string: an error message (the code will be 0) + * - Object: arbitrary properties + * - `MediaError` (native): used to populate a video.js `MediaError` object + * - `MediaError` (video.js): will return itself if it's already a + * video.js `MediaError` object. + * + * @see [MediaError Spec]{@link https://dev.w3.org/html5/spec-author-view/video.html#mediaerror} + * @see [Encrypted MediaError Spec]{@link https://www.w3.org/TR/2013/WD-encrypted-media-20130510/#error-codes} + * + * @class MediaError + */ + function MediaError(value) { + + // Allow redundant calls to this constructor to avoid having `instanceof` + // checks peppered around the code. + if (value instanceof MediaError) { + return value; + } + + if (typeof value === 'number') { + this.code = value; + } else if (typeof value === 'string') { + // default code is zero, so this is a custom error + this.message = value; + } else if (isObject(value)) { + + // We assign the `code` property manually because native `MediaError` objects + // do not expose it as an own/enumerable property of the object. + if (typeof value.code === 'number') { + this.code = value.code; + } + + assign(this, value); + } + + if (!this.message) { + this.message = MediaError.defaultMessages[this.code] || ''; + } + } + + /** + * The error code that refers two one of the defined `MediaError` types + * + * @type {Number} + */ + MediaError.prototype.code = 0; + + /** + * An optional message that to show with the error. Message is not part of the HTML5 + * video spec but allows for more informative custom errors. + * + * @type {String} + */ + MediaError.prototype.message = ''; + + /** + * An optional status code that can be set by plugins to allow even more detail about + * the error. For example a plugin might provide a specific HTTP status code and an + * error message for that code. Then when the plugin gets that error this class will + * know how to display an error message for it. This allows a custom message to show + * up on the `Player` error overlay. + * + * @type {Array} + */ + MediaError.prototype.status = null; + + /** + * Errors indexed by the W3C standard. The order **CANNOT CHANGE**! See the + * specification listed under {@link MediaError} for more information. + * + * @enum {array} + * @readonly + * @property {string} 0 - MEDIA_ERR_CUSTOM + * @property {string} 1 - MEDIA_ERR_CUSTOM + * @property {string} 2 - MEDIA_ERR_ABORTED + * @property {string} 3 - MEDIA_ERR_NETWORK + * @property {string} 4 - MEDIA_ERR_SRC_NOT_SUPPORTED + * @property {string} 5 - MEDIA_ERR_ENCRYPTED + */ + MediaError.errorTypes = ['MEDIA_ERR_CUSTOM', 'MEDIA_ERR_ABORTED', 'MEDIA_ERR_NETWORK', 'MEDIA_ERR_DECODE', 'MEDIA_ERR_SRC_NOT_SUPPORTED', 'MEDIA_ERR_ENCRYPTED']; + + /** + * The default `MediaError` messages based on the {@link MediaError.errorTypes}. + * + * @type {Array} + * @constant + */ + MediaError.defaultMessages = { + 1: 'You aborted the media playback', + 2: 'A network error caused the media download to fail part-way.', + 3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.', + 4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.', + 5: 'The media is encrypted and we do not have the keys to decrypt it.' + }; + + // Add types as properties on MediaError + // e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4; + for (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) { + MediaError[MediaError.errorTypes[errNum]] = errNum; + // values should be accessible on both the class and instance + MediaError.prototype[MediaError.errorTypes[errNum]] = errNum; + } + + var tuple = SafeParseTuple; + + function SafeParseTuple(obj, reviver) { + var json; + var error = null; + + try { + json = JSON.parse(obj, reviver); + } catch (err) { + error = err; + } + + return [error, json]; + } + + /** + * Returns whether an object is `Promise`-like (i.e. has a `then` method). + * + * @param {Object} value + * An object that may or may not be `Promise`-like. + * + * @return {Boolean} + * Whether or not the object is `Promise`-like. + */ + function isPromise(value) { + return value !== undefined && value !== null && typeof value.then === 'function'; + } + + /** + * Silence a Promise-like object. + * + * This is useful for avoiding non-harmful, but potentially confusing "uncaught + * play promise" rejection error messages. + * + * @param {Object} value + * An object that may or may not be `Promise`-like. + */ + function silencePromise(value) { + if (isPromise(value)) { + value.then(null, function (e) { + }); + } + } + + /** + * @file text-track-list-converter.js Utilities for capturing text track state and + * re-creating tracks based on a capture. + * + * @module text-track-list-converter + */ + + /** + * Examine a single {@link TextTrack} and return a JSON-compatible javascript object that + * represents the {@link TextTrack}'s state. + * + * @param {TextTrack} track + * The text track to query. + * + * @return {Object} + * A serializable javascript representation of the TextTrack. + * @private + */ + var trackToJson_ = function trackToJson_(track) { + var ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce(function (acc, prop, i) { + + if (track[prop]) { + acc[prop] = track[prop]; + } + + return acc; + }, { + cues: track.cues && Array.prototype.map.call(track.cues, function (cue) { + return { + startTime: cue.startTime, + endTime: cue.endTime, + text: cue.text, + id: cue.id + }; + }) + }); + + return ret; + }; + + /** + * Examine a {@link Tech} and return a JSON-compatible javascript array that represents the + * state of all {@link TextTrack}s currently configured. The return array is compatible with + * {@link text-track-list-converter:jsonToTextTracks}. + * + * @param {Tech} tech + * The tech object to query + * + * @return {Array} + * A serializable javascript representation of the {@link Tech}s + * {@link TextTrackList}. + */ + var textTracksToJson = function textTracksToJson(tech) { + + var trackEls = tech.$$('track'); + + var trackObjs = Array.prototype.map.call(trackEls, function (t) { + return t.track; + }); + var tracks = Array.prototype.map.call(trackEls, function (trackEl) { + var json = trackToJson_(trackEl.track); + + if (trackEl.src) { + json.src = trackEl.src; + } + return json; + }); + + return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) { + return trackObjs.indexOf(track) === -1; + }).map(trackToJson_)); + }; + + /** + * Create a set of remote {@link TextTrack}s on a {@link Tech} based on an array of javascript + * object {@link TextTrack} representations. + * + * @param {Array} json + * An array of `TextTrack` representation objects, like those that would be + * produced by `textTracksToJson`. + * + * @param {Tech} tech + * The `Tech` to create the `TextTrack`s on. + */ + var jsonToTextTracks = function jsonToTextTracks(json, tech) { + json.forEach(function (track) { + var addedTrack = tech.addRemoteTextTrack(track).track; + + if (!track.src && track.cues) { + track.cues.forEach(function (cue) { + return addedTrack.addCue(cue); + }); + } + }); + + return tech.textTracks(); + }; + + var textTrackConverter = { + textTracksToJson: textTracksToJson, + jsonToTextTracks: jsonToTextTracks, + trackToJson_: trackToJson_ + }; + + /** + * @file modal-dialog.js + */ + + var MODAL_CLASS_NAME = 'vjs-modal-dialog'; + var ESC = 27; + + /** + * The `ModalDialog` displays over the video and its controls, which blocks + * interaction with the player until it is closed. + * + * Modal dialogs include a "Close" button and will close when that button + * is activated - or when ESC is pressed anywhere. + * + * @extends Component + */ + + var ModalDialog = function (_Component) { + inherits(ModalDialog, _Component); + + /** + * Create an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Mixed} [options.content=undefined] + * Provide customized content for this modal. + * + * @param {string} [options.description] + * A text description for the modal, primarily for accessibility. + * + * @param {boolean} [options.fillAlways=false] + * Normally, modals are automatically filled only the first time + * they open. This tells the modal to refresh its content + * every time it opens. + * + * @param {string} [options.label] + * A text label for the modal, primarily for accessibility. + * + * @param {boolean} [options.temporary=true] + * If `true`, the modal can only be opened once; it will be + * disposed as soon as it's closed. + * + * @param {boolean} [options.uncloseable=false] + * If `true`, the user will not be able to close the modal + * through the UI in the normal ways. Programmatic closing is + * still possible. + */ + function ModalDialog(player, options) { + classCallCheck(this, ModalDialog); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + _this.opened_ = _this.hasBeenOpened_ = _this.hasBeenFilled_ = false; + + _this.closeable(!_this.options_.uncloseable); + _this.content(_this.options_.content); + + // Make sure the contentEl is defined AFTER any children are initialized + // because we only want the contents of the modal in the contentEl + // (not the UI elements like the close button). + _this.contentEl_ = createEl('div', { + className: MODAL_CLASS_NAME + '-content' + }, { + role: 'document' + }); + + _this.descEl_ = createEl('p', { + className: MODAL_CLASS_NAME + '-description vjs-control-text', + id: _this.el().getAttribute('aria-describedby') + }); + + textContent(_this.descEl_, _this.description()); + _this.el_.appendChild(_this.descEl_); + _this.el_.appendChild(_this.contentEl_); + return _this; + } + + /** + * Create the `ModalDialog`'s DOM element + * + * @return {Element} + * The DOM element that gets created. + */ + + + ModalDialog.prototype.createEl = function createEl$$1() { + return _Component.prototype.createEl.call(this, 'div', { + className: this.buildCSSClass(), + tabIndex: -1 + }, { + 'aria-describedby': this.id() + '_description', + 'aria-hidden': 'true', + 'aria-label': this.label(), + 'role': 'dialog' + }); + }; + + ModalDialog.prototype.dispose = function dispose() { + this.contentEl_ = null; + this.descEl_ = null; + this.previouslyActiveEl_ = null; + + _Component.prototype.dispose.call(this); + }; + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + ModalDialog.prototype.buildCSSClass = function buildCSSClass() { + return MODAL_CLASS_NAME + ' vjs-hidden ' + _Component.prototype.buildCSSClass.call(this); + }; + + /** + * Handles `keydown` events on the document, looking for ESC, which closes + * the modal. + * + * @param {EventTarget~Event} e + * The keypress that triggered this event. + * + * @listens keydown + */ + + + ModalDialog.prototype.handleKeyPress = function handleKeyPress(e) { + if (e.which === ESC && this.closeable()) { + this.close(); + } + }; + + /** + * Returns the label string for this modal. Primarily used for accessibility. + * + * @return {string} + * the localized or raw label of this modal. + */ + + + ModalDialog.prototype.label = function label() { + return this.localize(this.options_.label || 'Modal Window'); + }; + + /** + * Returns the description string for this modal. Primarily used for + * accessibility. + * + * @return {string} + * The localized or raw description of this modal. + */ + + + ModalDialog.prototype.description = function description() { + var desc = this.options_.description || this.localize('This is a modal window.'); + + // Append a universal closeability message if the modal is closeable. + if (this.closeable()) { + desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.'); + } + + return desc; + }; + + /** + * Opens the modal. + * + * @fires ModalDialog#beforemodalopen + * @fires ModalDialog#modalopen + */ + + + ModalDialog.prototype.open = function open() { + if (!this.opened_) { + var player = this.player(); + + /** + * Fired just before a `ModalDialog` is opened. + * + * @event ModalDialog#beforemodalopen + * @type {EventTarget~Event} + */ + this.trigger('beforemodalopen'); + this.opened_ = true; + + // Fill content if the modal has never opened before and + // never been filled. + if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) { + this.fill(); + } + + // If the player was playing, pause it and take note of its previously + // playing state. + this.wasPlaying_ = !player.paused(); + + if (this.options_.pauseOnOpen && this.wasPlaying_) { + player.pause(); + } + + if (this.closeable()) { + this.on(this.el_.ownerDocument, 'keydown', bind(this, this.handleKeyPress)); + } + + // Hide controls and note if they were enabled. + this.hadControls_ = player.controls(); + player.controls(false); + + this.show(); + this.conditionalFocus_(); + this.el().setAttribute('aria-hidden', 'false'); + + /** + * Fired just after a `ModalDialog` is opened. + * + * @event ModalDialog#modalopen + * @type {EventTarget~Event} + */ + this.trigger('modalopen'); + this.hasBeenOpened_ = true; + } + }; + + /** + * If the `ModalDialog` is currently open or closed. + * + * @param {boolean} [value] + * If given, it will open (`true`) or close (`false`) the modal. + * + * @return {boolean} + * the current open state of the modaldialog + */ + + + ModalDialog.prototype.opened = function opened(value) { + if (typeof value === 'boolean') { + this[value ? 'open' : 'close'](); + } + return this.opened_; + }; + + /** + * Closes the modal, does nothing if the `ModalDialog` is + * not open. + * + * @fires ModalDialog#beforemodalclose + * @fires ModalDialog#modalclose + */ + + + ModalDialog.prototype.close = function close() { + if (!this.opened_) { + return; + } + var player = this.player(); + + /** + * Fired just before a `ModalDialog` is closed. + * + * @event ModalDialog#beforemodalclose + * @type {EventTarget~Event} + */ + this.trigger('beforemodalclose'); + this.opened_ = false; + + if (this.wasPlaying_ && this.options_.pauseOnOpen) { + player.play(); + } + + if (this.closeable()) { + this.off(this.el_.ownerDocument, 'keydown', bind(this, this.handleKeyPress)); + } + + if (this.hadControls_) { + player.controls(true); + } + + this.hide(); + this.el().setAttribute('aria-hidden', 'true'); + + /** + * Fired just after a `ModalDialog` is closed. + * + * @event ModalDialog#modalclose + * @type {EventTarget~Event} + */ + this.trigger('modalclose'); + this.conditionalBlur_(); + + if (this.options_.temporary) { + this.dispose(); + } + }; + + /** + * Check to see if the `ModalDialog` is closeable via the UI. + * + * @param {boolean} [value] + * If given as a boolean, it will set the `closeable` option. + * + * @return {boolean} + * Returns the final value of the closable option. + */ + + + ModalDialog.prototype.closeable = function closeable(value) { + if (typeof value === 'boolean') { + var closeable = this.closeable_ = !!value; + var close = this.getChild('closeButton'); + + // If this is being made closeable and has no close button, add one. + if (closeable && !close) { + + // The close button should be a child of the modal - not its + // content element, so temporarily change the content element. + var temp = this.contentEl_; + + this.contentEl_ = this.el_; + close = this.addChild('closeButton', {controlText: 'Close Modal Dialog'}); + this.contentEl_ = temp; + this.on(close, 'close', this.close); + } + + // If this is being made uncloseable and has a close button, remove it. + if (!closeable && close) { + this.off(close, 'close', this.close); + this.removeChild(close); + close.dispose(); + } + } + return this.closeable_; + }; + + /** + * Fill the modal's content element with the modal's "content" option. + * The content element will be emptied before this change takes place. + */ + + + ModalDialog.prototype.fill = function fill() { + this.fillWith(this.content()); + }; + + /** + * Fill the modal's content element with arbitrary content. + * The content element will be emptied before this change takes place. + * + * @fires ModalDialog#beforemodalfill + * @fires ModalDialog#modalfill + * + * @param {Mixed} [content] + * The same rules apply to this as apply to the `content` option. + */ + + + ModalDialog.prototype.fillWith = function fillWith(content) { + var contentEl = this.contentEl(); + var parentEl = contentEl.parentNode; + var nextSiblingEl = contentEl.nextSibling; + + /** + * Fired just before a `ModalDialog` is filled with content. + * + * @event ModalDialog#beforemodalfill + * @type {EventTarget~Event} + */ + this.trigger('beforemodalfill'); + this.hasBeenFilled_ = true; + + // Detach the content element from the DOM before performing + // manipulation to avoid modifying the live DOM multiple times. + parentEl.removeChild(contentEl); + this.empty(); + insertContent(contentEl, content); + /** + * Fired just after a `ModalDialog` is filled with content. + * + * @event ModalDialog#modalfill + * @type {EventTarget~Event} + */ + this.trigger('modalfill'); + + // Re-inject the re-filled content element. + if (nextSiblingEl) { + parentEl.insertBefore(contentEl, nextSiblingEl); + } else { + parentEl.appendChild(contentEl); + } + + // make sure that the close button is last in the dialog DOM + var closeButton = this.getChild('closeButton'); + + if (closeButton) { + parentEl.appendChild(closeButton.el_); + } + }; + + /** + * Empties the content element. This happens anytime the modal is filled. + * + * @fires ModalDialog#beforemodalempty + * @fires ModalDialog#modalempty + */ + + + ModalDialog.prototype.empty = function empty() { + /** + * Fired just before a `ModalDialog` is emptied. + * + * @event ModalDialog#beforemodalempty + * @type {EventTarget~Event} + */ + this.trigger('beforemodalempty'); + emptyEl(this.contentEl()); + + /** + * Fired just after a `ModalDialog` is emptied. + * + * @event ModalDialog#modalempty + * @type {EventTarget~Event} + */ + this.trigger('modalempty'); + }; + + /** + * Gets or sets the modal content, which gets normalized before being + * rendered into the DOM. + * + * This does not update the DOM or fill the modal, but it is called during + * that process. + * + * @param {Mixed} [value] + * If defined, sets the internal content value to be used on the + * next call(s) to `fill`. This value is normalized before being + * inserted. To "clear" the internal content value, pass `null`. + * + * @return {Mixed} + * The current content of the modal dialog + */ + + + ModalDialog.prototype.content = function content(value) { + if (typeof value !== 'undefined') { + this.content_ = value; + } + return this.content_; + }; + + /** + * conditionally focus the modal dialog if focus was previously on the player. + * + * @private + */ + + + ModalDialog.prototype.conditionalFocus_ = function conditionalFocus_() { + var activeEl = document_1.activeElement; + var playerEl = this.player_.el_; + + this.previouslyActiveEl_ = null; + + if (playerEl.contains(activeEl) || playerEl === activeEl) { + this.previouslyActiveEl_ = activeEl; + + this.focus(); + + this.on(document_1, 'keydown', this.handleKeyDown); + } + }; + + /** + * conditionally blur the element and refocus the last focused element + * + * @private + */ + + + ModalDialog.prototype.conditionalBlur_ = function conditionalBlur_() { + if (this.previouslyActiveEl_) { + this.previouslyActiveEl_.focus(); + this.previouslyActiveEl_ = null; + } + + this.off(document_1, 'keydown', this.handleKeyDown); + }; + + /** + * Keydown handler. Attached when modal is focused. + * + * @listens keydown + */ + + + ModalDialog.prototype.handleKeyDown = function handleKeyDown(event) { + // exit early if it isn't a tab key + if (event.which !== 9) { + return; + } + + var focusableEls = this.focusableEls_(); + var activeEl = this.el_.querySelector(':focus'); + var focusIndex = void 0; + + for (var i = 0; i < focusableEls.length; i++) { + if (activeEl === focusableEls[i]) { + focusIndex = i; + break; + } + } + + if (document_1.activeElement === this.el_) { + focusIndex = 0; + } + + if (event.shiftKey && focusIndex === 0) { + focusableEls[focusableEls.length - 1].focus(); + event.preventDefault(); + } else if (!event.shiftKey && focusIndex === focusableEls.length - 1) { + focusableEls[0].focus(); + event.preventDefault(); + } + }; + + /** + * get all focusable elements + * + * @private + */ + + + ModalDialog.prototype.focusableEls_ = function focusableEls_() { + var allChildren = this.el_.querySelectorAll('*'); + + return Array.prototype.filter.call(allChildren, function (child) { + return (child instanceof window_1.HTMLAnchorElement || child instanceof window_1.HTMLAreaElement) && child.hasAttribute('href') || (child instanceof window_1.HTMLInputElement || child instanceof window_1.HTMLSelectElement || child instanceof window_1.HTMLTextAreaElement || child instanceof window_1.HTMLButtonElement) && !child.hasAttribute('disabled') || child instanceof window_1.HTMLIFrameElement || child instanceof window_1.HTMLObjectElement || child instanceof window_1.HTMLEmbedElement || child.hasAttribute('tabindex') && child.getAttribute('tabindex') !== -1 || child.hasAttribute('contenteditable'); + }); + }; + + return ModalDialog; + }(Component); + + /** + * Default options for `ModalDialog` default options. + * + * @type {Object} + * @private + */ + + + ModalDialog.prototype.options_ = { + pauseOnOpen: true, + temporary: true + }; + + Component.registerComponent('ModalDialog', ModalDialog); + + /** + * @file track-list.js + */ + + /** + * Common functionaliy between {@link TextTrackList}, {@link AudioTrackList}, and + * {@link VideoTrackList} + * + * @extends EventTarget + */ + + var TrackList = function (_EventTarget) { + inherits(TrackList, _EventTarget); + + /** + * Create an instance of this class + * + * @param {Track[]} tracks + * A list of tracks to initialize the list with. + * + * @abstract + */ + function TrackList() { + var tracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + classCallCheck(this, TrackList); + + var _this = possibleConstructorReturn(this, _EventTarget.call(this)); + + _this.tracks_ = []; + + /** + * @memberof TrackList + * @member {number} length + * The current number of `Track`s in the this Trackist. + * @instance + */ + Object.defineProperty(_this, 'length', { + get: function get$$1() { + return this.tracks_.length; + } + }); + + for (var i = 0; i < tracks.length; i++) { + _this.addTrack(tracks[i]); + } + return _this; + } + + /** + * Add a {@link Track} to the `TrackList` + * + * @param {Track} track + * The audio, video, or text track to add to the list. + * + * @fires TrackList#addtrack + */ + + + TrackList.prototype.addTrack = function addTrack(track) { + var index = this.tracks_.length; + + if (!('' + index in this)) { + Object.defineProperty(this, index, { + get: function get$$1() { + return this.tracks_[index]; + } + }); + } + + // Do not add duplicate tracks + if (this.tracks_.indexOf(track) === -1) { + this.tracks_.push(track); + /** + * Triggered when a track is added to a track list. + * + * @event TrackList#addtrack + * @type {EventTarget~Event} + * @property {Track} track + * A reference to track that was added. + */ + this.trigger({ + track: track, + type: 'addtrack' + }); + } + }; + + /** + * Remove a {@link Track} from the `TrackList` + * + * @param {Track} rtrack + * The audio, video, or text track to remove from the list. + * + * @fires TrackList#removetrack + */ + + + TrackList.prototype.removeTrack = function removeTrack(rtrack) { + var track = void 0; + + for (var i = 0, l = this.length; i < l; i++) { + if (this[i] === rtrack) { + track = this[i]; + if (track.off) { + track.off(); + } + + this.tracks_.splice(i, 1); + + break; + } + } + + if (!track) { + return; + } + + /** + * Triggered when a track is removed from track list. + * + * @event TrackList#removetrack + * @type {EventTarget~Event} + * @property {Track} track + * A reference to track that was removed. + */ + this.trigger({ + track: track, + type: 'removetrack' + }); + }; + + /** + * Get a Track from the TrackList by a tracks id + * + * @param {String} id - the id of the track to get + * @method getTrackById + * @return {Track} + * @private + */ + + + TrackList.prototype.getTrackById = function getTrackById(id) { + var result = null; + + for (var i = 0, l = this.length; i < l; i++) { + var track = this[i]; + + if (track.id === id) { + result = track; + break; + } + } + + return result; + }; + + return TrackList; + }(EventTarget); + + /** + * Triggered when a different track is selected/enabled. + * + * @event TrackList#change + * @type {EventTarget~Event} + */ + + /** + * Events that can be called with on + eventName. See {@link EventHandler}. + * + * @property {Object} TrackList#allowedEvents_ + * @private + */ + + + TrackList.prototype.allowedEvents_ = { + change: 'change', + addtrack: 'addtrack', + removetrack: 'removetrack' + }; + + // emulate attribute EventHandler support to allow for feature detection + for (var event in TrackList.prototype.allowedEvents_) { + TrackList.prototype['on' + event] = null; + } + + /** + * @file audio-track-list.js + */ + + /** + * Anywhere we call this function we diverge from the spec + * as we only support one enabled audiotrack at a time + * + * @param {AudioTrackList} list + * list to work on + * + * @param {AudioTrack} track + * The track to skip + * + * @private + */ + var disableOthers = function disableOthers(list, track) { + for (var i = 0; i < list.length; i++) { + if (!Object.keys(list[i]).length || track.id === list[i].id) { + continue; + } + // another audio track is enabled, disable it + list[i].enabled = false; + } + }; + + /** + * The current list of {@link AudioTrack} for a media file. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist} + * @extends TrackList + */ + + var AudioTrackList = function (_TrackList) { + inherits(AudioTrackList, _TrackList); + + /** + * Create an instance of this class. + * + * @param {AudioTrack[]} [tracks=[]] + * A list of `AudioTrack` to instantiate the list with. + */ + function AudioTrackList() { + var tracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + classCallCheck(this, AudioTrackList); + + // make sure only 1 track is enabled + // sorted from last index to first index + for (var i = tracks.length - 1; i >= 0; i--) { + if (tracks[i].enabled) { + disableOthers(tracks, tracks[i]); + break; + } + } + + var _this = possibleConstructorReturn(this, _TrackList.call(this, tracks)); + + _this.changing_ = false; + return _this; + } + + /** + * Add an {@link AudioTrack} to the `AudioTrackList`. + * + * @param {AudioTrack} track + * The AudioTrack to add to the list + * + * @fires TrackList#addtrack + */ + + + AudioTrackList.prototype.addTrack = function addTrack(track) { + var _this2 = this; + + if (track.enabled) { + disableOthers(this, track); + } + + _TrackList.prototype.addTrack.call(this, track); + // native tracks don't have this + if (!track.addEventListener) { + return; + } + + /** + * @listens AudioTrack#enabledchange + * @fires TrackList#change + */ + track.addEventListener('enabledchange', function () { + // when we are disabling other tracks (since we don't support + // more than one track at a time) we will set changing_ + // to true so that we don't trigger additional change events + if (_this2.changing_) { + return; + } + _this2.changing_ = true; + disableOthers(_this2, track); + _this2.changing_ = false; + _this2.trigger('change'); + }); + }; + + return AudioTrackList; + }(TrackList); + + /** + * @file video-track-list.js + */ + + /** + * Un-select all other {@link VideoTrack}s that are selected. + * + * @param {VideoTrackList} list + * list to work on + * + * @param {VideoTrack} track + * The track to skip + * + * @private + */ + var disableOthers$1 = function disableOthers(list, track) { + for (var i = 0; i < list.length; i++) { + if (!Object.keys(list[i]).length || track.id === list[i].id) { + continue; + } + // another video track is enabled, disable it + list[i].selected = false; + } + }; + + /** + * The current list of {@link VideoTrack} for a video. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist} + * @extends TrackList + */ + + var VideoTrackList = function (_TrackList) { + inherits(VideoTrackList, _TrackList); + + /** + * Create an instance of this class. + * + * @param {VideoTrack[]} [tracks=[]] + * A list of `VideoTrack` to instantiate the list with. + */ + function VideoTrackList() { + var tracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + classCallCheck(this, VideoTrackList); + + // make sure only 1 track is enabled + // sorted from last index to first index + for (var i = tracks.length - 1; i >= 0; i--) { + if (tracks[i].selected) { + disableOthers$1(tracks, tracks[i]); + break; + } + } + + var _this = possibleConstructorReturn(this, _TrackList.call(this, tracks)); + + _this.changing_ = false; + + /** + * @member {number} VideoTrackList#selectedIndex + * The current index of the selected {@link VideoTrack`}. + */ + Object.defineProperty(_this, 'selectedIndex', { + get: function get$$1() { + for (var _i = 0; _i < this.length; _i++) { + if (this[_i].selected) { + return _i; + } + } + return -1; + }, + set: function set$$1() { + } + }); + return _this; + } + + /** + * Add a {@link VideoTrack} to the `VideoTrackList`. + * + * @param {VideoTrack} track + * The VideoTrack to add to the list + * + * @fires TrackList#addtrack + */ + + + VideoTrackList.prototype.addTrack = function addTrack(track) { + var _this2 = this; + + if (track.selected) { + disableOthers$1(this, track); + } + + _TrackList.prototype.addTrack.call(this, track); + // native tracks don't have this + if (!track.addEventListener) { + return; + } + + /** + * @listens VideoTrack#selectedchange + * @fires TrackList#change + */ + track.addEventListener('selectedchange', function () { + if (_this2.changing_) { + return; + } + _this2.changing_ = true; + disableOthers$1(_this2, track); + _this2.changing_ = false; + _this2.trigger('change'); + }); + }; + + return VideoTrackList; + }(TrackList); + + /** + * @file text-track-list.js + */ + + /** + * The current list of {@link TextTrack} for a media file. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist} + * @extends TrackList + */ + + var TextTrackList = function (_TrackList) { + inherits(TextTrackList, _TrackList); + + function TextTrackList() { + classCallCheck(this, TextTrackList); + return possibleConstructorReturn(this, _TrackList.apply(this, arguments)); + } + + /** + * Add a {@link TextTrack} to the `TextTrackList` + * + * @param {TextTrack} track + * The text track to add to the list. + * + * @fires TrackList#addtrack + */ + TextTrackList.prototype.addTrack = function addTrack(track) { + _TrackList.prototype.addTrack.call(this, track); + + /** + * @listens TextTrack#modechange + * @fires TrackList#change + */ + track.addEventListener('modechange', bind(this, function () { + this.trigger('change'); + })); + + var nonLanguageTextTrackKind = ['metadata', 'chapters']; + + if (nonLanguageTextTrackKind.indexOf(track.kind) === -1) { + track.addEventListener('modechange', bind(this, function () { + this.trigger('selectedlanguagechange'); + })); + } + }; + + return TextTrackList; + }(TrackList); + + /** + * @file html-track-element-list.js + */ + + /** + * The current list of {@link HtmlTrackElement}s. + */ + var HtmlTrackElementList = function () { + + /** + * Create an instance of this class. + * + * @param {HtmlTrackElement[]} [tracks=[]] + * A list of `HtmlTrackElement` to instantiate the list with. + */ + function HtmlTrackElementList() { + var trackElements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + classCallCheck(this, HtmlTrackElementList); + + this.trackElements_ = []; + + /** + * @memberof HtmlTrackElementList + * @member {number} length + * The current number of `Track`s in the this Trackist. + * @instance + */ + Object.defineProperty(this, 'length', { + get: function get$$1() { + return this.trackElements_.length; + } + }); + + for (var i = 0, length = trackElements.length; i < length; i++) { + this.addTrackElement_(trackElements[i]); + } + } + + /** + * Add an {@link HtmlTrackElement} to the `HtmlTrackElementList` + * + * @param {HtmlTrackElement} trackElement + * The track element to add to the list. + * + * @private + */ + + + HtmlTrackElementList.prototype.addTrackElement_ = function addTrackElement_(trackElement) { + var index = this.trackElements_.length; + + if (!('' + index in this)) { + Object.defineProperty(this, index, { + get: function get$$1() { + return this.trackElements_[index]; + } + }); + } + + // Do not add duplicate elements + if (this.trackElements_.indexOf(trackElement) === -1) { + this.trackElements_.push(trackElement); + } + }; + + /** + * Get an {@link HtmlTrackElement} from the `HtmlTrackElementList` given an + * {@link TextTrack}. + * + * @param {TextTrack} track + * The track associated with a track element. + * + * @return {HtmlTrackElement|undefined} + * The track element that was found or undefined. + * + * @private + */ + + + HtmlTrackElementList.prototype.getTrackElementByTrack_ = function getTrackElementByTrack_(track) { + var trackElement_ = void 0; + + for (var i = 0, length = this.trackElements_.length; i < length; i++) { + if (track === this.trackElements_[i].track) { + trackElement_ = this.trackElements_[i]; + + break; + } + } + + return trackElement_; + }; + + /** + * Remove a {@link HtmlTrackElement} from the `HtmlTrackElementList` + * + * @param {HtmlTrackElement} trackElement + * The track element to remove from the list. + * + * @private + */ + + + HtmlTrackElementList.prototype.removeTrackElement_ = function removeTrackElement_(trackElement) { + for (var i = 0, length = this.trackElements_.length; i < length; i++) { + if (trackElement === this.trackElements_[i]) { + this.trackElements_.splice(i, 1); + + break; + } + } + }; + + return HtmlTrackElementList; + }(); + + /** + * @file text-track-cue-list.js + */ + + /** + * @typedef {Object} TextTrackCueList~TextTrackCue + * + * @property {string} id + * The unique id for this text track cue + * + * @property {number} startTime + * The start time for this text track cue + * + * @property {number} endTime + * The end time for this text track cue + * + * @property {boolean} pauseOnExit + * Pause when the end time is reached if true. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcue} + */ + + /** + * A List of TextTrackCues. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist} + */ + var TextTrackCueList = function () { + + /** + * Create an instance of this class.. + * + * @param {Array} cues + * A list of cues to be initialized with + */ + function TextTrackCueList(cues) { + classCallCheck(this, TextTrackCueList); + + TextTrackCueList.prototype.setCues_.call(this, cues); + + /** + * @memberof TextTrackCueList + * @member {number} length + * The current number of `TextTrackCue`s in the TextTrackCueList. + * @instance + */ + Object.defineProperty(this, 'length', { + get: function get$$1() { + return this.length_; + } + }); + } + + /** + * A setter for cues in this list. Creates getters + * an an index for the cues. + * + * @param {Array} cues + * An array of cues to set + * + * @private + */ + + + TextTrackCueList.prototype.setCues_ = function setCues_(cues) { + var oldLength = this.length || 0; + var i = 0; + var l = cues.length; + + this.cues_ = cues; + this.length_ = cues.length; + + var defineProp = function defineProp(index) { + if (!('' + index in this)) { + Object.defineProperty(this, '' + index, { + get: function get$$1() { + return this.cues_[index]; + } + }); + } + }; + + if (oldLength < l) { + i = oldLength; + + for (; i < l; i++) { + defineProp.call(this, i); + } + } + }; + + /** + * Get a `TextTrackCue` that is currently in the `TextTrackCueList` by id. + * + * @param {string} id + * The id of the cue that should be searched for. + * + * @return {TextTrackCueList~TextTrackCue|null} + * A single cue or null if none was found. + */ + + + TextTrackCueList.prototype.getCueById = function getCueById(id) { + var result = null; + + for (var i = 0, l = this.length; i < l; i++) { + var cue = this[i]; + + if (cue.id === id) { + result = cue; + break; + } + } + + return result; + }; + + return TextTrackCueList; + }(); + + /** + * @file track-kinds.js + */ + + /** + * All possible `VideoTrackKind`s + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind + * @typedef VideoTrack~Kind + * @enum + */ + var VideoTrackKind = { + alternative: 'alternative', + captions: 'captions', + main: 'main', + sign: 'sign', + subtitles: 'subtitles', + commentary: 'commentary' + }; + + /** + * All possible `AudioTrackKind`s + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind + * @typedef AudioTrack~Kind + * @enum + */ + var AudioTrackKind = { + 'alternative': 'alternative', + 'descriptions': 'descriptions', + 'main': 'main', + 'main-desc': 'main-desc', + 'translation': 'translation', + 'commentary': 'commentary' + }; + + /** + * All possible `TextTrackKind`s + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-texttrack-kind + * @typedef TextTrack~Kind + * @enum + */ + var TextTrackKind = { + subtitles: 'subtitles', + captions: 'captions', + descriptions: 'descriptions', + chapters: 'chapters', + metadata: 'metadata' + }; + + /** + * All possible `TextTrackMode`s + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode + * @typedef TextTrack~Mode + * @enum + */ + var TextTrackMode = { + disabled: 'disabled', + hidden: 'hidden', + showing: 'showing' + }; + + /** + * @file track.js + */ + + /** + * A Track class that contains all of the common functionality for {@link AudioTrack}, + * {@link VideoTrack}, and {@link TextTrack}. + * + * > Note: This class should not be used directly + * + * @see {@link https://html.spec.whatwg.org/multipage/embedded-content.html} + * @extends EventTarget + * @abstract + */ + + var Track = function (_EventTarget) { + inherits(Track, _EventTarget); + + /** + * Create an instance of this class. + * + * @param {Object} [options={}] + * Object of option names and values + * + * @param {string} [options.kind=''] + * A valid kind for the track type you are creating. + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this AudioTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @abstract + */ + function Track() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + classCallCheck(this, Track); + + var _this = possibleConstructorReturn(this, _EventTarget.call(this)); + + var trackProps = { + id: options.id || 'vjs_track_' + newGUID(), + kind: options.kind || '', + label: options.label || '', + language: options.language || '' + }; + + /** + * @memberof Track + * @member {string} id + * The id of this track. Cannot be changed after creation. + * @instance + * + * @readonly + */ + + /** + * @memberof Track + * @member {string} kind + * The kind of track that this is. Cannot be changed after creation. + * @instance + * + * @readonly + */ + + /** + * @memberof Track + * @member {string} label + * The label of this track. Cannot be changed after creation. + * @instance + * + * @readonly + */ + + /** + * @memberof Track + * @member {string} language + * The two letter language code for this track. Cannot be changed after + * creation. + * @instance + * + * @readonly + */ + + var _loop = function _loop(key) { + Object.defineProperty(_this, key, { + get: function get$$1() { + return trackProps[key]; + }, + set: function set$$1() { + } + }); + }; + + for (var key in trackProps) { + _loop(key); + } + return _this; + } + + return Track; + }(EventTarget); + + /** + * @file url.js + * @module url + */ + + /** + * @typedef {Object} url:URLObject + * + * @property {string} protocol + * The protocol of the url that was parsed. + * + * @property {string} hostname + * The hostname of the url that was parsed. + * + * @property {string} port + * The port of the url that was parsed. + * + * @property {string} pathname + * The pathname of the url that was parsed. + * + * @property {string} search + * The search query of the url that was parsed. + * + * @property {string} hash + * The hash of the url that was parsed. + * + * @property {string} host + * The host of the url that was parsed. + */ + + /** + * Resolve and parse the elements of a URL. + * + * @param {String} url + * The url to parse + * + * @return {url:URLObject} + * An object of url details + */ + var parseUrl = function parseUrl(url) { + var props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host']; + + // add the url to an anchor and let the browser parse the URL + var a = document_1.createElement('a'); + + a.href = url; + + // IE8 (and 9?) Fix + // ie8 doesn't parse the URL correctly until the anchor is actually + // added to the body, and an innerHTML is needed to trigger the parsing + var addToBody = a.host === '' && a.protocol !== 'file:'; + var div = void 0; + + if (addToBody) { + div = document_1.createElement('div'); + div.innerHTML = '<a href="' + url + '"></a>'; + a = div.firstChild; + // prevent the div from affecting layout + div.setAttribute('style', 'display:none; position:absolute;'); + document_1.body.appendChild(div); + } + + // Copy the specific URL properties to a new object + // This is also needed for IE8 because the anchor loses its + // properties when it's removed from the dom + var details = {}; + + for (var i = 0; i < props.length; i++) { + details[props[i]] = a[props[i]]; + } + + // IE9 adds the port to the host property unlike everyone else. If + // a port identifier is added for standard ports, strip it. + if (details.protocol === 'http:') { + details.host = details.host.replace(/:80$/, ''); + } + + if (details.protocol === 'https:') { + details.host = details.host.replace(/:443$/, ''); + } + + if (!details.protocol) { + details.protocol = window_1.location.protocol; + } + + if (addToBody) { + document_1.body.removeChild(div); + } + + return details; + }; + + /** + * Get absolute version of relative URL. Used to tell flash correct URL. + * + * + * @param {string} url + * URL to make absolute + * + * @return {string} + * Absolute URL + * + * @see http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue + */ + var getAbsoluteURL = function getAbsoluteURL(url) { + // Check if absolute URL + if (!url.match(/^https?:\/\//)) { + // Convert to absolute URL. Flash hosted off-site needs an absolute URL. + var div = document_1.createElement('div'); + + div.innerHTML = '<a href="' + url + '">x</a>'; + url = div.firstChild.href; + } + + return url; + }; + + /** + * Returns the extension of the passed file name. It will return an empty string + * if passed an invalid path. + * + * @param {string} path + * The fileName path like '/path/to/file.mp4' + * + * @returns {string} + * The extension in lower case or an empty string if no + * extension could be found. + */ + var getFileExtension = function getFileExtension(path) { + if (typeof path === 'string') { + var splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/i; + var pathParts = splitPathRe.exec(path); + + if (pathParts) { + return pathParts.pop().toLowerCase(); + } + } + + return ''; + }; + + /** + * Returns whether the url passed is a cross domain request or not. + * + * @param {string} url + * The url to check. + * + * @return {boolean} + * Whether it is a cross domain request or not. + */ + var isCrossOrigin = function isCrossOrigin(url) { + var winLoc = window_1.location; + var urlInfo = parseUrl(url); + + // IE8 protocol relative urls will return ':' for protocol + var srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol; + + // Check if url is for another domain/origin + // IE8 doesn't know location.origin, so we won't rely on it here + var crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host; + + return crossOrigin; + }; + + var Url = /*#__PURE__*/Object.freeze({ + parseUrl: parseUrl, + getAbsoluteURL: getAbsoluteURL, + getFileExtension: getFileExtension, + isCrossOrigin: isCrossOrigin + }); + + var isFunction_1 = isFunction; + + var toString$1 = Object.prototype.toString; + + function isFunction(fn) { + var string = toString$1.call(fn); + return string === '[object Function]' || typeof fn === 'function' && string !== '[object RegExp]' || typeof window !== 'undefined' && ( + // IE8 and below + fn === window.setTimeout || fn === window.alert || fn === window.confirm || fn === window.prompt); + } + + var isFunction$1 = /*#__PURE__*/Object.freeze({ + default: isFunction_1, + __moduleExports: isFunction_1 + }); + + var trim_1 = createCommonjsModule(function (module, exports) { + exports = module.exports = trim; + + function trim(str) { + return str.replace(/^\s*|\s*$/g, ''); + } + + exports.left = function (str) { + return str.replace(/^\s*/, ''); + }; + + exports.right = function (str) { + return str.replace(/\s*$/, ''); + }; + }); + var trim_2 = trim_1.left; + var trim_3 = trim_1.right; + + var trim = /*#__PURE__*/Object.freeze({ + default: trim_1, + __moduleExports: trim_1, + left: trim_2, + right: trim_3 + }); + + var isFunction$2 = (isFunction$1 && isFunction_1) || isFunction$1; + + var forEach_1 = forEach; + + var toString$2 = Object.prototype.toString; + var hasOwnProperty = Object.prototype.hasOwnProperty; + + function forEach(list, iterator, context) { + if (!isFunction$2(iterator)) { + throw new TypeError('iterator must be a function'); + } + + if (arguments.length < 3) { + context = this; + } + + if (toString$2.call(list) === '[object Array]') forEachArray(list, iterator, context); else if (typeof list === 'string') forEachString(list, iterator, context); else forEachObject(list, iterator, context); + } + + function forEachArray(array, iterator, context) { + for (var i = 0, len = array.length; i < len; i++) { + if (hasOwnProperty.call(array, i)) { + iterator.call(context, array[i], i, array); + } + } + } + + function forEachString(string, iterator, context) { + for (var i = 0, len = string.length; i < len; i++) { + // no such thing as a sparse string. + iterator.call(context, string.charAt(i), i, string); + } + } + + function forEachObject(object, iterator, context) { + for (var k in object) { + if (hasOwnProperty.call(object, k)) { + iterator.call(context, object[k], k, object); + } + } + } + + var forEach$1 = /*#__PURE__*/Object.freeze({ + default: forEach_1, + __moduleExports: forEach_1 + }); + + var trim$1 = (trim && trim_1) || trim; + + var forEach$2 = (forEach$1 && forEach_1) || forEach$1; + + var isArray = function isArray(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; + + var parseHeaders = function parseHeaders(headers) { + if (!headers) return {}; + + var result = {}; + + forEach$2(trim$1(headers).split('\n'), function (row) { + var index = row.indexOf(':'), + key = trim$1(row.slice(0, index)).toLowerCase(), + value = trim$1(row.slice(index + 1)); + + if (typeof result[key] === 'undefined') { + result[key] = value; + } else if (isArray(result[key])) { + result[key].push(value); + } else { + result[key] = [result[key], value]; + } + }); + + return result; + }; + + var parseHeaders$1 = /*#__PURE__*/Object.freeze({ + default: parseHeaders, + __moduleExports: parseHeaders + }); + + var immutable = extend; + + var hasOwnProperty$1 = Object.prototype.hasOwnProperty; + + function extend() { + var target = {}; + + for (var i = 0; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (hasOwnProperty$1.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + } + + var immutable$1 = /*#__PURE__*/Object.freeze({ + default: immutable, + __moduleExports: immutable + }); + + var parseHeaders$2 = (parseHeaders$1 && parseHeaders) || parseHeaders$1; + + var xtend = (immutable$1 && immutable) || immutable$1; + + var xhr = createXHR; + createXHR.XMLHttpRequest = window_1.XMLHttpRequest || noop; + createXHR.XDomainRequest = "withCredentials" in new createXHR.XMLHttpRequest() ? createXHR.XMLHttpRequest : window_1.XDomainRequest; + + forEachArray$1(["get", "put", "post", "patch", "head", "delete"], function (method) { + createXHR[method === "delete" ? "del" : method] = function (uri, options, callback) { + options = initParams(uri, options, callback); + options.method = method.toUpperCase(); + return _createXHR(options); + }; + }); + + function forEachArray$1(array, iterator) { + for (var i = 0; i < array.length; i++) { + iterator(array[i]); + } + } + + function isEmpty(obj) { + for (var i in obj) { + if (obj.hasOwnProperty(i)) return false; + } + return true; + } + + function initParams(uri, options, callback) { + var params = uri; + + if (isFunction$2(options)) { + callback = options; + if (typeof uri === "string") { + params = {uri: uri}; + } + } else { + params = xtend(options, {uri: uri}); + } + + params.callback = callback; + return params; + } + + function createXHR(uri, options, callback) { + options = initParams(uri, options, callback); + return _createXHR(options); + } + + function _createXHR(options) { + if (typeof options.callback === "undefined") { + throw new Error("callback argument missing"); + } + + var called = false; + var callback = function cbOnce(err, response, body) { + if (!called) { + called = true; + options.callback(err, response, body); + } + }; + + function readystatechange() { + if (xhr.readyState === 4) { + setTimeout(loadFunc, 0); + } + } + + function getBody() { + // Chrome with requestType=blob throws errors arround when even testing access to responseText + var body = undefined; + + if (xhr.response) { + body = xhr.response; + } else { + body = xhr.responseText || getXml(xhr); + } + + if (isJson) { + try { + body = JSON.parse(body); + } catch (e) { + } + } + + return body; + } + + function errorFunc(evt) { + clearTimeout(timeoutTimer); + if (!(evt instanceof Error)) { + evt = new Error("" + (evt || "Unknown XMLHttpRequest Error")); + } + evt.statusCode = 0; + return callback(evt, failureResponse); + } + + // will load the data & process the response in a special response object + function loadFunc() { + if (aborted) return; + var status; + clearTimeout(timeoutTimer); + if (options.useXDR && xhr.status === undefined) { + //IE8 CORS GET successful response doesn't have a status field, but body is fine + status = 200; + } else { + status = xhr.status === 1223 ? 204 : xhr.status; + } + var response = failureResponse; + var err = null; + + if (status !== 0) { + response = { + body: getBody(), + statusCode: status, + method: method, + headers: {}, + url: uri, + rawRequest: xhr + }; + if (xhr.getAllResponseHeaders) { + //remember xhr can in fact be XDR for CORS in IE + response.headers = parseHeaders$2(xhr.getAllResponseHeaders()); + } + } else { + err = new Error("Internal XMLHttpRequest Error"); + } + return callback(err, response, response.body); + } + + var xhr = options.xhr || null; + + if (!xhr) { + if (options.cors || options.useXDR) { + xhr = new createXHR.XDomainRequest(); + } else { + xhr = new createXHR.XMLHttpRequest(); + } + } + + var key; + var aborted; + var uri = xhr.url = options.uri || options.url; + var method = xhr.method = options.method || "GET"; + var body = options.body || options.data; + var headers = xhr.headers = options.headers || {}; + var sync = !!options.sync; + var isJson = false; + var timeoutTimer; + var failureResponse = { + body: undefined, + headers: {}, + statusCode: 0, + method: method, + url: uri, + rawRequest: xhr + }; + + if ("json" in options && options.json !== false) { + isJson = true; + headers["accept"] || headers["Accept"] || (headers["Accept"] = "application/json"); //Don't override existing accept header declared by user + if (method !== "GET" && method !== "HEAD") { + headers["content-type"] || headers["Content-Type"] || (headers["Content-Type"] = "application/json"); //Don't override existing accept header declared by user + body = JSON.stringify(options.json === true ? body : options.json); + } + } + + xhr.onreadystatechange = readystatechange; + xhr.onload = loadFunc; + xhr.onerror = errorFunc; + // IE9 must have onprogress be set to a unique function. + xhr.onprogress = function () { + // IE must die + }; + xhr.onabort = function () { + aborted = true; + }; + xhr.ontimeout = errorFunc; + xhr.open(method, uri, !sync, options.username, options.password); + //has to be after open + if (!sync) { + xhr.withCredentials = !!options.withCredentials; + } + // Cannot set timeout with sync request + // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly + // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent + if (!sync && options.timeout > 0) { + timeoutTimer = setTimeout(function () { + if (aborted) return; + aborted = true; //IE9 may still call readystatechange + xhr.abort("timeout"); + var e = new Error("XMLHttpRequest timeout"); + e.code = "ETIMEDOUT"; + errorFunc(e); + }, options.timeout); + } + + if (xhr.setRequestHeader) { + for (key in headers) { + if (headers.hasOwnProperty(key)) { + xhr.setRequestHeader(key, headers[key]); + } + } + } else if (options.headers && !isEmpty(options.headers)) { + throw new Error("Headers cannot be set on an XDomainRequest object"); + } + + if ("responseType" in options) { + xhr.responseType = options.responseType; + } + + if ("beforeSend" in options && typeof options.beforeSend === "function") { + options.beforeSend(xhr); + } + + // Microsoft Edge browser sends "undefined" when send is called with undefined value. + // XMLHttpRequest spec says to pass null as body to indicate no body + // See https://github.com/naugtur/xhr/issues/100. + xhr.send(body || null); + + return xhr; + } + + function getXml(xhr) { + if (xhr.responseType === "document") { + return xhr.responseXML; + } + var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === "parsererror"; + if (xhr.responseType === "" && !firefoxBugTakenEffect) { + return xhr.responseXML; + } + + return null; + } + + function noop() { + } + + /** + * @file text-track.js + */ + + /** + * Takes a webvtt file contents and parses it into cues + * + * @param {string} srcContent + * webVTT file contents + * + * @param {TextTrack} track + * TextTrack to add cues to. Cues come from the srcContent. + * + * @private + */ + var parseCues = function parseCues(srcContent, track) { + var parser = new window_1.WebVTT.Parser(window_1, window_1.vttjs, window_1.WebVTT.StringDecoder()); + var errors = []; + + parser.oncue = function (cue) { + track.addCue(cue); + }; + + parser.onparsingerror = function (error) { + errors.push(error); + }; + + parser.onflush = function () { + track.trigger({ + type: 'loadeddata', + target: track + }); + }; + + parser.parse(srcContent); + if (errors.length > 0) { + if (window_1.console && window_1.console.groupCollapsed) { + window_1.console.groupCollapsed('Text Track parsing errors for ' + track.src); + } + errors.forEach(function (error) { + return log$1.error(error); + }); + if (window_1.console && window_1.console.groupEnd) { + window_1.console.groupEnd(); + } + } + + parser.flush(); + }; + + /** + * Load a `TextTrack` from a specified url. + * + * @param {string} src + * Url to load track from. + * + * @param {TextTrack} track + * Track to add cues to. Comes from the content at the end of `url`. + * + * @private + */ + var loadTrack = function loadTrack(src, track) { + var opts = { + uri: src + }; + var crossOrigin = isCrossOrigin(src); + + if (crossOrigin) { + opts.cors = crossOrigin; + } + + xhr(opts, bind(this, function (err, response, responseBody) { + if (err) { + return log$1.error(err, response); + } + + track.loaded_ = true; + + // Make sure that vttjs has loaded, otherwise, wait till it finished loading + // NOTE: this is only used for the alt/video.novtt.js build + if (typeof window_1.WebVTT !== 'function') { + if (track.tech_) { + var loadHandler = function loadHandler() { + return parseCues(responseBody, track); + }; + + track.tech_.on('vttjsloaded', loadHandler); + track.tech_.on('vttjserror', function () { + log$1.error('vttjs failed to load, stopping trying to process ' + track.src); + track.tech_.off('vttjsloaded', loadHandler); + }); + } + } else { + parseCues(responseBody, track); + } + })); + }; + + /** + * A representation of a single `TextTrack`. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack} + * @extends Track + */ + + var TextTrack = function (_Track) { + inherits(TextTrack, _Track); + + /** + * Create an instance of this class. + * + * @param {Object} options={} + * Object of option names and values + * + * @param {Tech} options.tech + * A reference to the tech that owns this TextTrack. + * + * @param {TextTrack~Kind} [options.kind='subtitles'] + * A valid text track kind. + * + * @param {TextTrack~Mode} [options.mode='disabled'] + * A valid text track mode. + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this TextTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @param {string} [options.srclang=''] + * A valid two character language code. An alternative, but deprioritized + * version of `options.language` + * + * @param {string} [options.src] + * A url to TextTrack cues. + * + * @param {boolean} [options.default] + * If this track should default to on or off. + */ + function TextTrack() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + classCallCheck(this, TextTrack); + + if (!options.tech) { + throw new Error('A tech was not provided.'); + } + + var settings = mergeOptions(options, { + kind: TextTrackKind[options.kind] || 'subtitles', + language: options.language || options.srclang || '' + }); + var mode = TextTrackMode[settings.mode] || 'disabled'; + var default_ = settings.default; + + if (settings.kind === 'metadata' || settings.kind === 'chapters') { + mode = 'hidden'; + } + + var _this = possibleConstructorReturn(this, _Track.call(this, settings)); + + _this.tech_ = settings.tech; + + _this.cues_ = []; + _this.activeCues_ = []; + + var cues = new TextTrackCueList(_this.cues_); + var activeCues = new TextTrackCueList(_this.activeCues_); + var changed = false; + var timeupdateHandler = bind(_this, function () { + + // Accessing this.activeCues for the side-effects of updating itself + // due to it's nature as a getter function. Do not remove or cues will + // stop updating! + /* eslint-disable no-unused-expressions */ + this.activeCues; + /* eslint-enable no-unused-expressions */ + if (changed) { + this.trigger('cuechange'); + changed = false; + } + }); + + if (mode !== 'disabled') { + _this.tech_.ready(function () { + _this.tech_.on('timeupdate', timeupdateHandler); + }, true); + } + + Object.defineProperties(_this, { + /** + * @memberof TextTrack + * @member {boolean} default + * If this track was set to be on or off by default. Cannot be changed after + * creation. + * @instance + * + * @readonly + */ + default: { + get: function get$$1() { + return default_; + }, + set: function set$$1() { + } + }, + + /** + * @memberof TextTrack + * @member {string} mode + * Set the mode of this TextTrack to a valid {@link TextTrack~Mode}. Will + * not be set if setting to an invalid mode. + * @instance + * + * @fires TextTrack#modechange + */ + mode: { + get: function get$$1() { + return mode; + }, + set: function set$$1(newMode) { + var _this2 = this; + + if (!TextTrackMode[newMode]) { + return; + } + mode = newMode; + if (mode === 'showing') { + + this.tech_.ready(function () { + _this2.tech_.on('timeupdate', timeupdateHandler); + }, true); + } + /** + * An event that fires when mode changes on this track. This allows + * the TextTrackList that holds this track to act accordingly. + * + * > Note: This is not part of the spec! + * + * @event TextTrack#modechange + * @type {EventTarget~Event} + */ + this.trigger('modechange'); + } + }, + + /** + * @memberof TextTrack + * @member {TextTrackCueList} cues + * The text track cue list for this TextTrack. + * @instance + */ + cues: { + get: function get$$1() { + if (!this.loaded_) { + return null; + } + + return cues; + }, + set: function set$$1() { + } + }, + + /** + * @memberof TextTrack + * @member {TextTrackCueList} activeCues + * The list text track cues that are currently active for this TextTrack. + * @instance + */ + activeCues: { + get: function get$$1() { + if (!this.loaded_) { + return null; + } + + // nothing to do + if (this.cues.length === 0) { + return activeCues; + } + + var ct = this.tech_.currentTime(); + var active = []; + + for (var i = 0, l = this.cues.length; i < l; i++) { + var cue = this.cues[i]; + + if (cue.startTime <= ct && cue.endTime >= ct) { + active.push(cue); + } else if (cue.startTime === cue.endTime && cue.startTime <= ct && cue.startTime + 0.5 >= ct) { + active.push(cue); + } + } + + changed = false; + + if (active.length !== this.activeCues_.length) { + changed = true; + } else { + for (var _i = 0; _i < active.length; _i++) { + if (this.activeCues_.indexOf(active[_i]) === -1) { + changed = true; + } + } + } + + this.activeCues_ = active; + activeCues.setCues_(this.activeCues_); + + return activeCues; + }, + set: function set$$1() { + } + } + }); + + if (settings.src) { + _this.src = settings.src; + loadTrack(settings.src, _this); + } else { + _this.loaded_ = true; + } + return _this; + } + + /** + * Add a cue to the internal list of cues. + * + * @param {TextTrack~Cue} cue + * The cue to add to our internal list + */ + + + TextTrack.prototype.addCue = function addCue(originalCue) { + var cue = originalCue; + + if (window_1.vttjs && !(originalCue instanceof window_1.vttjs.VTTCue)) { + cue = new window_1.vttjs.VTTCue(originalCue.startTime, originalCue.endTime, originalCue.text); + + for (var prop in originalCue) { + if (!(prop in cue)) { + cue[prop] = originalCue[prop]; + } + } + + // make sure that `id` is copied over + cue.id = originalCue.id; + cue.originalCue_ = originalCue; + } + + var tracks = this.tech_.textTracks(); + + for (var i = 0; i < tracks.length; i++) { + if (tracks[i] !== this) { + tracks[i].removeCue(cue); + } + } + + this.cues_.push(cue); + this.cues.setCues_(this.cues_); + }; + + /** + * Remove a cue from our internal list + * + * @param {TextTrack~Cue} removeCue + * The cue to remove from our internal list + */ + + + TextTrack.prototype.removeCue = function removeCue(_removeCue) { + var i = this.cues_.length; + + while (i--) { + var cue = this.cues_[i]; + + if (cue === _removeCue || cue.originalCue_ && cue.originalCue_ === _removeCue) { + this.cues_.splice(i, 1); + this.cues.setCues_(this.cues_); + break; + } + } + }; + + return TextTrack; + }(Track); + + /** + * cuechange - One or more cues in the track have become active or stopped being active. + */ + + + TextTrack.prototype.allowedEvents_ = { + cuechange: 'cuechange' + }; + + /** + * A representation of a single `AudioTrack`. If it is part of an {@link AudioTrackList} + * only one `AudioTrack` in the list will be enabled at a time. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack} + * @extends Track + */ + + var AudioTrack = function (_Track) { + inherits(AudioTrack, _Track); + + /** + * Create an instance of this class. + * + * @param {Object} [options={}] + * Object of option names and values + * + * @param {AudioTrack~Kind} [options.kind=''] + * A valid audio track kind + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this AudioTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @param {boolean} [options.enabled] + * If this track is the one that is currently playing. If this track is part of + * an {@link AudioTrackList}, only one {@link AudioTrack} will be enabled. + */ + function AudioTrack() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + classCallCheck(this, AudioTrack); + + var settings = mergeOptions(options, { + kind: AudioTrackKind[options.kind] || '' + }); + + var _this = possibleConstructorReturn(this, _Track.call(this, settings)); + + var enabled = false; + + /** + * @memberof AudioTrack + * @member {boolean} enabled + * If this `AudioTrack` is enabled or not. When setting this will + * fire {@link AudioTrack#enabledchange} if the state of enabled is changed. + * @instance + * + * @fires VideoTrack#selectedchange + */ + Object.defineProperty(_this, 'enabled', { + get: function get$$1() { + return enabled; + }, + set: function set$$1(newEnabled) { + // an invalid or unchanged value + if (typeof newEnabled !== 'boolean' || newEnabled === enabled) { + return; + } + enabled = newEnabled; + + /** + * An event that fires when enabled changes on this track. This allows + * the AudioTrackList that holds this track to act accordingly. + * + * > Note: This is not part of the spec! Native tracks will do + * this internally without an event. + * + * @event AudioTrack#enabledchange + * @type {EventTarget~Event} + */ + this.trigger('enabledchange'); + } + }); + + // if the user sets this track to selected then + // set selected to that true value otherwise + // we keep it false + if (settings.enabled) { + _this.enabled = settings.enabled; + } + _this.loaded_ = true; + return _this; + } + + return AudioTrack; + }(Track); + + /** + * A representation of a single `VideoTrack`. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack} + * @extends Track + */ + + var VideoTrack = function (_Track) { + inherits(VideoTrack, _Track); + + /** + * Create an instance of this class. + * + * @param {Object} [options={}] + * Object of option names and values + * + * @param {string} [options.kind=''] + * A valid {@link VideoTrack~Kind} + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this AudioTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @param {boolean} [options.selected] + * If this track is the one that is currently playing. + */ + function VideoTrack() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + classCallCheck(this, VideoTrack); + + var settings = mergeOptions(options, { + kind: VideoTrackKind[options.kind] || '' + }); + + var _this = possibleConstructorReturn(this, _Track.call(this, settings)); + + var selected = false; + + /** + * @memberof VideoTrack + * @member {boolean} selected + * If this `VideoTrack` is selected or not. When setting this will + * fire {@link VideoTrack#selectedchange} if the state of selected changed. + * @instance + * + * @fires VideoTrack#selectedchange + */ + Object.defineProperty(_this, 'selected', { + get: function get$$1() { + return selected; + }, + set: function set$$1(newSelected) { + // an invalid or unchanged value + if (typeof newSelected !== 'boolean' || newSelected === selected) { + return; + } + selected = newSelected; + + /** + * An event that fires when selected changes on this track. This allows + * the VideoTrackList that holds this track to act accordingly. + * + * > Note: This is not part of the spec! Native tracks will do + * this internally without an event. + * + * @event VideoTrack#selectedchange + * @type {EventTarget~Event} + */ + this.trigger('selectedchange'); + } + }); + + // if the user sets this track to selected then + // set selected to that true value otherwise + // we keep it false + if (settings.selected) { + _this.selected = settings.selected; + } + return _this; + } + + return VideoTrack; + }(Track); + + /** + * @file html-track-element.js + */ + + /** + * @memberof HTMLTrackElement + * @typedef {HTMLTrackElement~ReadyState} + * @enum {number} + */ + var NONE = 0; + var LOADING = 1; + var LOADED = 2; + var ERROR = 3; + + /** + * A single track represented in the DOM. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement} + * @extends EventTarget + */ + + var HTMLTrackElement = function (_EventTarget) { + inherits(HTMLTrackElement, _EventTarget); + + /** + * Create an instance of this class. + * + * @param {Object} options={} + * Object of option names and values + * + * @param {Tech} options.tech + * A reference to the tech that owns this HTMLTrackElement. + * + * @param {TextTrack~Kind} [options.kind='subtitles'] + * A valid text track kind. + * + * @param {TextTrack~Mode} [options.mode='disabled'] + * A valid text track mode. + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this TextTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @param {string} [options.srclang=''] + * A valid two character language code. An alternative, but deprioritized + * vesion of `options.language` + * + * @param {string} [options.src] + * A url to TextTrack cues. + * + * @param {boolean} [options.default] + * If this track should default to on or off. + */ + function HTMLTrackElement() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + classCallCheck(this, HTMLTrackElement); + + var _this = possibleConstructorReturn(this, _EventTarget.call(this)); + + var readyState = void 0; + + var track = new TextTrack(options); + + _this.kind = track.kind; + _this.src = track.src; + _this.srclang = track.language; + _this.label = track.label; + _this.default = track.default; + + Object.defineProperties(_this, { + + /** + * @memberof HTMLTrackElement + * @member {HTMLTrackElement~ReadyState} readyState + * The current ready state of the track element. + * @instance + */ + readyState: { + get: function get$$1() { + return readyState; + } + }, + + /** + * @memberof HTMLTrackElement + * @member {TextTrack} track + * The underlying TextTrack object. + * @instance + * + */ + track: { + get: function get$$1() { + return track; + } + } + }); + + readyState = NONE; + + /** + * @listens TextTrack#loadeddata + * @fires HTMLTrackElement#load + */ + track.addEventListener('loadeddata', function () { + readyState = LOADED; + + _this.trigger({ + type: 'load', + target: _this + }); + }); + return _this; + } + + return HTMLTrackElement; + }(EventTarget); + + HTMLTrackElement.prototype.allowedEvents_ = { + load: 'load' + }; + + HTMLTrackElement.NONE = NONE; + HTMLTrackElement.LOADING = LOADING; + HTMLTrackElement.LOADED = LOADED; + HTMLTrackElement.ERROR = ERROR; + + /* + * This file contains all track properties that are used in + * player.js, tech.js, html5.js and possibly other techs in the future. + */ + + var NORMAL = { + audio: { + ListClass: AudioTrackList, + TrackClass: AudioTrack, + capitalName: 'Audio' + }, + video: { + ListClass: VideoTrackList, + TrackClass: VideoTrack, + capitalName: 'Video' + }, + text: { + ListClass: TextTrackList, + TrackClass: TextTrack, + capitalName: 'Text' + } + }; + + Object.keys(NORMAL).forEach(function (type) { + NORMAL[type].getterName = type + 'Tracks'; + NORMAL[type].privateName = type + 'Tracks_'; + }); + + var REMOTE = { + remoteText: { + ListClass: TextTrackList, + TrackClass: TextTrack, + capitalName: 'RemoteText', + getterName: 'remoteTextTracks', + privateName: 'remoteTextTracks_' + }, + remoteTextEl: { + ListClass: HtmlTrackElementList, + TrackClass: HTMLTrackElement, + capitalName: 'RemoteTextTrackEls', + getterName: 'remoteTextTrackEls', + privateName: 'remoteTextTrackEls_' + } + }; + + var ALL = mergeOptions(NORMAL, REMOTE); + + REMOTE.names = Object.keys(REMOTE); + NORMAL.names = Object.keys(NORMAL); + ALL.names = [].concat(REMOTE.names).concat(NORMAL.names); + + /** + * Copyright 2013 vtt.js Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ + /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ + var _objCreate = Object.create || function () { + function F() { + } + + return function (o) { + if (arguments.length !== 1) { + throw new Error('Object.create shim only accepts one parameter.'); + } + F.prototype = o; + return new F(); + }; + }(); + + // Creates a new ParserError object from an errorData object. The errorData + // object should have default code and message properties. The default message + // property can be overriden by passing in a message parameter. + // See ParsingError.Errors below for acceptable errors. + function ParsingError(errorData, message) { + this.name = "ParsingError"; + this.code = errorData.code; + this.message = message || errorData.message; + } + + ParsingError.prototype = _objCreate(Error.prototype); + ParsingError.prototype.constructor = ParsingError; + + // ParsingError metadata for acceptable ParsingErrors. + ParsingError.Errors = { + BadSignature: { + code: 0, + message: "Malformed WebVTT signature." + }, + BadTimeStamp: { + code: 1, + message: "Malformed time stamp." + } + }; + + // Try to parse input as a time stamp. + function parseTimeStamp(input) { + + function computeSeconds(h, m, s, f) { + return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000; + } + + var m = input.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/); + if (!m) { + return null; + } + + if (m[3]) { + // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds] + return computeSeconds(m[1], m[2], m[3].replace(":", ""), m[4]); + } else if (m[1] > 59) { + // Timestamp takes the form of [hours]:[minutes].[milliseconds] + // First position is hours as it's over 59. + return computeSeconds(m[1], m[2], 0, m[4]); + } else { + // Timestamp takes the form of [minutes]:[seconds].[milliseconds] + return computeSeconds(0, m[1], m[2], m[4]); + } + } + + // A settings object holds key/value pairs and will ignore anything but the first + // assignment to a specific key. + function Settings() { + this.values = _objCreate(null); + } + + Settings.prototype = { + // Only accept the first assignment to any key. + set: function set(k, v) { + if (!this.get(k) && v !== "") { + this.values[k] = v; + } + }, + // Return the value for a key, or a default value. + // If 'defaultKey' is passed then 'dflt' is assumed to be an object with + // a number of possible default values as properties where 'defaultKey' is + // the key of the property that will be chosen; otherwise it's assumed to be + // a single value. + get: function get(k, dflt, defaultKey) { + if (defaultKey) { + return this.has(k) ? this.values[k] : dflt[defaultKey]; + } + return this.has(k) ? this.values[k] : dflt; + }, + // Check whether we have a value for a key. + has: function has(k) { + return k in this.values; + }, + // Accept a setting if its one of the given alternatives. + alt: function alt(k, v, a) { + for (var n = 0; n < a.length; ++n) { + if (v === a[n]) { + this.set(k, v); + break; + } + } + }, + // Accept a setting if its a valid (signed) integer. + integer: function integer(k, v) { + if (/^-?\d+$/.test(v)) { + // integer + this.set(k, parseInt(v, 10)); + } + }, + // Accept a setting if its a valid percentage. + percent: function percent(k, v) { + var m; + if (m = v.match(/^([\d]{1,3})(\.[\d]*)?%$/)) { + v = parseFloat(v); + if (v >= 0 && v <= 100) { + this.set(k, v); + return true; + } + } + return false; + } + }; + + // Helper function to parse input into groups separated by 'groupDelim', and + // interprete each group as a key/value pair separated by 'keyValueDelim'. + function parseOptions(input, callback, keyValueDelim, groupDelim) { + var groups = groupDelim ? input.split(groupDelim) : [input]; + for (var i in groups) { + if (typeof groups[i] !== "string") { + continue; + } + var kv = groups[i].split(keyValueDelim); + if (kv.length !== 2) { + continue; + } + var k = kv[0]; + var v = kv[1]; + callback(k, v); + } + } + + function parseCue(input, cue, regionList) { + // Remember the original input if we need to throw an error. + var oInput = input; + + // 4.1 WebVTT timestamp + function consumeTimeStamp() { + var ts = parseTimeStamp(input); + if (ts === null) { + throw new ParsingError(ParsingError.Errors.BadTimeStamp, "Malformed timestamp: " + oInput); + } + // Remove time stamp from input. + input = input.replace(/^[^\sa-zA-Z-]+/, ""); + return ts; + } + + // 4.4.2 WebVTT cue settings + function consumeCueSettings(input, cue) { + var settings = new Settings(); + + parseOptions(input, function (k, v) { + switch (k) { + case "region": + // Find the last region we parsed with the same region id. + for (var i = regionList.length - 1; i >= 0; i--) { + if (regionList[i].id === v) { + settings.set(k, regionList[i].region); + break; + } + } + break; + case "vertical": + settings.alt(k, v, ["rl", "lr"]); + break; + case "line": + var vals = v.split(","), + vals0 = vals[0]; + settings.integer(k, vals0); + settings.percent(k, vals0) ? settings.set("snapToLines", false) : null; + settings.alt(k, vals0, ["auto"]); + if (vals.length === 2) { + settings.alt("lineAlign", vals[1], ["start", "middle", "end"]); + } + break; + case "position": + vals = v.split(","); + settings.percent(k, vals[0]); + if (vals.length === 2) { + settings.alt("positionAlign", vals[1], ["start", "middle", "end"]); + } + break; + case "size": + settings.percent(k, v); + break; + case "align": + settings.alt(k, v, ["start", "middle", "end", "left", "right"]); + break; + } + }, /:/, /\s/); + + // Apply default values for any missing fields. + cue.region = settings.get("region", null); + cue.vertical = settings.get("vertical", ""); + cue.line = settings.get("line", "auto"); + cue.lineAlign = settings.get("lineAlign", "start"); + cue.snapToLines = settings.get("snapToLines", true); + cue.size = settings.get("size", 100); + cue.align = settings.get("align", "middle"); + cue.position = settings.get("position", { + start: 0, + left: 0, + middle: 50, + end: 100, + right: 100 + }, cue.align); + cue.positionAlign = settings.get("positionAlign", { + start: "start", + left: "start", + middle: "middle", + end: "end", + right: "end" + }, cue.align); + } + + function skipWhitespace() { + input = input.replace(/^\s+/, ""); + } + + // 4.1 WebVTT cue timings. + skipWhitespace(); + cue.startTime = consumeTimeStamp(); // (1) collect cue start time + skipWhitespace(); + if (input.substr(0, 3) !== "-->") { + // (3) next characters must match "-->" + throw new ParsingError(ParsingError.Errors.BadTimeStamp, "Malformed time stamp (time stamps must be separated by '-->'): " + oInput); + } + input = input.substr(3); + skipWhitespace(); + cue.endTime = consumeTimeStamp(); // (5) collect cue end time + + // 4.1 WebVTT cue settings list. + skipWhitespace(); + consumeCueSettings(input, cue); + } + + var ESCAPE = { + "&": "&", + "<": "<", + ">": ">", + "‎": "\u200E", + "‏": "\u200F", + " ": "\xA0" + }; + + var TAG_NAME = { + c: "span", + i: "i", + b: "b", + u: "u", + ruby: "ruby", + rt: "rt", + v: "span", + lang: "span" + }; + + var TAG_ANNOTATION = { + v: "title", + lang: "lang" + }; + + var NEEDS_PARENT = { + rt: "ruby" + }; + + // Parse content into a document fragment. + function parseContent(window, input) { + function nextToken() { + // Check for end-of-string. + if (!input) { + return null; + } + + // Consume 'n' characters from the input. + function consume(result) { + input = input.substr(result.length); + return result; + } + + var m = input.match(/^([^<]*)(<[^>]*>?)?/); + // If there is some text before the next tag, return it, otherwise return + // the tag. + return consume(m[1] ? m[1] : m[2]); + } + + // Unescape a string 's'. + function unescape1(e) { + return ESCAPE[e]; + } + + function unescape(s) { + while (m = s.match(/&(amp|lt|gt|lrm|rlm|nbsp);/)) { + s = s.replace(m[0], unescape1); + } + return s; + } + + function shouldAdd(current, element) { + return !NEEDS_PARENT[element.localName] || NEEDS_PARENT[element.localName] === current.localName; + } + + // Create an element for this tag. + function createElement(type, annotation) { + var tagName = TAG_NAME[type]; + if (!tagName) { + return null; + } + var element = window.document.createElement(tagName); + element.localName = tagName; + var name = TAG_ANNOTATION[type]; + if (name && annotation) { + element[name] = annotation.trim(); + } + return element; + } + + var rootDiv = window.document.createElement("div"), + current = rootDiv, + t, + tagStack = []; + + while ((t = nextToken()) !== null) { + if (t[0] === '<') { + if (t[1] === "/") { + // If the closing tag matches, move back up to the parent node. + if (tagStack.length && tagStack[tagStack.length - 1] === t.substr(2).replace(">", "")) { + tagStack.pop(); + current = current.parentNode; + } + // Otherwise just ignore the end tag. + continue; + } + var ts = parseTimeStamp(t.substr(1, t.length - 2)); + var node; + if (ts) { + // Timestamps are lead nodes as well. + node = window.document.createProcessingInstruction("timestamp", ts); + current.appendChild(node); + continue; + } + var m = t.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/); + // If we can't parse the tag, skip to the next tag. + if (!m) { + continue; + } + // Try to construct an element, and ignore the tag if we couldn't. + node = createElement(m[1], m[3]); + if (!node) { + continue; + } + // Determine if the tag should be added based on the context of where it + // is placed in the cuetext. + if (!shouldAdd(current, node)) { + continue; + } + // Set the class list (as a list of classes, separated by space). + if (m[2]) { + node.className = m[2].substr(1).replace('.', ' '); + } + // Append the node to the current node, and enter the scope of the new + // node. + tagStack.push(m[1]); + current.appendChild(node); + current = node; + continue; + } + + // Text nodes are leaf nodes. + current.appendChild(window.document.createTextNode(unescape(t))); + } + + return rootDiv; + } + + // This is a list of all the Unicode characters that have a strong + // right-to-left category. What this means is that these characters are + // written right-to-left for sure. It was generated by pulling all the strong + // right-to-left characters out of the Unicode data table. That table can + // found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt + var strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6], [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d], [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6], [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5], [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815], [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858], [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f], [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c], [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1], [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc], [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808], [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855], [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f], [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13], [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58], [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72], [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f], [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32], [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42], [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f], [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59], [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62], [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77], [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b], [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]]; + + function isStrongRTLChar(charCode) { + for (var i = 0; i < strongRTLRanges.length; i++) { + var currentRange = strongRTLRanges[i]; + if (charCode >= currentRange[0] && charCode <= currentRange[1]) { + return true; + } + } + + return false; + } + + function determineBidi(cueDiv) { + var nodeStack = [], + text = "", + charCode; + + if (!cueDiv || !cueDiv.childNodes) { + return "ltr"; + } + + function pushNodes(nodeStack, node) { + for (var i = node.childNodes.length - 1; i >= 0; i--) { + nodeStack.push(node.childNodes[i]); + } + } + + function nextTextNode(nodeStack) { + if (!nodeStack || !nodeStack.length) { + return null; + } + + var node = nodeStack.pop(), + text = node.textContent || node.innerText; + if (text) { + // TODO: This should match all unicode type B characters (paragraph + // separator characters). See issue #115. + var m = text.match(/^.*(\n|\r)/); + if (m) { + nodeStack.length = 0; + return m[0]; + } + return text; + } + if (node.tagName === "ruby") { + return nextTextNode(nodeStack); + } + if (node.childNodes) { + pushNodes(nodeStack, node); + return nextTextNode(nodeStack); + } + } + + pushNodes(nodeStack, cueDiv); + while (text = nextTextNode(nodeStack)) { + for (var i = 0; i < text.length; i++) { + charCode = text.charCodeAt(i); + if (isStrongRTLChar(charCode)) { + return "rtl"; + } + } + } + return "ltr"; + } + + function computeLinePos(cue) { + if (typeof cue.line === "number" && (cue.snapToLines || cue.line >= 0 && cue.line <= 100)) { + return cue.line; + } + if (!cue.track || !cue.track.textTrackList || !cue.track.textTrackList.mediaElement) { + return -1; + } + var track = cue.track, + trackList = track.textTrackList, + count = 0; + for (var i = 0; i < trackList.length && trackList[i] !== track; i++) { + if (trackList[i].mode === "showing") { + count++; + } + } + return ++count * -1; + } + + function StyleBox() { + } + + // Apply styles to a div. If there is no div passed then it defaults to the + // div on 'this'. + StyleBox.prototype.applyStyles = function (styles, div) { + div = div || this.div; + for (var prop in styles) { + if (styles.hasOwnProperty(prop)) { + div.style[prop] = styles[prop]; + } + } + }; + + StyleBox.prototype.formatStyle = function (val, unit) { + return val === 0 ? 0 : val + unit; + }; + + // Constructs the computed display state of the cue (a div). Places the div + // into the overlay which should be a block level element (usually a div). + function CueStyleBox(window, cue, styleOptions) { + StyleBox.call(this); + this.cue = cue; + + // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will + // have inline positioning and will function as the cue background box. + this.cueDiv = parseContent(window, cue.text); + var styles = { + color: "rgba(255, 255, 255, 1)", + backgroundColor: "rgba(0, 0, 0, 0.8)", + position: "relative", + left: 0, + right: 0, + top: 0, + bottom: 0, + display: "inline", + writingMode: cue.vertical === "" ? "horizontal-tb" : cue.vertical === "lr" ? "vertical-lr" : "vertical-rl", + unicodeBidi: "plaintext" + }; + + this.applyStyles(styles, this.cueDiv); + + // Create an absolutely positioned div that will be used to position the cue + // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS + // mirrors of them except "middle" which is "center" in CSS. + this.div = window.document.createElement("div"); + styles = { + direction: determineBidi(this.cueDiv), + writingMode: cue.vertical === "" ? "horizontal-tb" : cue.vertical === "lr" ? "vertical-lr" : "vertical-rl", + unicodeBidi: "plaintext", + textAlign: cue.align === "middle" ? "center" : cue.align, + font: styleOptions.font, + whiteSpace: "pre-line", + position: "absolute" + }; + + this.applyStyles(styles); + this.div.appendChild(this.cueDiv); + + // Calculate the distance from the reference edge of the viewport to the text + // position of the cue box. The reference edge will be resolved later when + // the box orientation styles are applied. + var textPos = 0; + switch (cue.positionAlign) { + case "start": + textPos = cue.position; + break; + case "middle": + textPos = cue.position - cue.size / 2; + break; + case "end": + textPos = cue.position - cue.size; + break; + } + + // Horizontal box orientation; textPos is the distance from the left edge of the + // area to the left edge of the box and cue.size is the distance extending to + // the right from there. + if (cue.vertical === "") { + this.applyStyles({ + left: this.formatStyle(textPos, "%"), + width: this.formatStyle(cue.size, "%") + }); + // Vertical box orientation; textPos is the distance from the top edge of the + // area to the top edge of the box and cue.size is the height extending + // downwards from there. + } else { + this.applyStyles({ + top: this.formatStyle(textPos, "%"), + height: this.formatStyle(cue.size, "%") + }); + } + + this.move = function (box) { + this.applyStyles({ + top: this.formatStyle(box.top, "px"), + bottom: this.formatStyle(box.bottom, "px"), + left: this.formatStyle(box.left, "px"), + right: this.formatStyle(box.right, "px"), + height: this.formatStyle(box.height, "px"), + width: this.formatStyle(box.width, "px") + }); + }; + } + + CueStyleBox.prototype = _objCreate(StyleBox.prototype); + CueStyleBox.prototype.constructor = CueStyleBox; + + // Represents the co-ordinates of an Element in a way that we can easily + // compute things with such as if it overlaps or intersects with another Element. + // Can initialize it with either a StyleBox or another BoxPosition. + function BoxPosition(obj) { + // Either a BoxPosition was passed in and we need to copy it, or a StyleBox + // was passed in and we need to copy the results of 'getBoundingClientRect' + // as the object returned is readonly. All co-ordinate values are in reference + // to the viewport origin (top left). + var lh, height, width, top; + if (obj.div) { + height = obj.div.offsetHeight; + width = obj.div.offsetWidth; + top = obj.div.offsetTop; + + var rects = (rects = obj.div.childNodes) && (rects = rects[0]) && rects.getClientRects && rects.getClientRects(); + obj = obj.div.getBoundingClientRect(); + // In certain cases the outter div will be slightly larger then the sum of + // the inner div's lines. This could be due to bold text, etc, on some platforms. + // In this case we should get the average line height and use that. This will + // result in the desired behaviour. + lh = rects ? Math.max(rects[0] && rects[0].height || 0, obj.height / rects.length) : 0; + } + this.left = obj.left; + this.right = obj.right; + this.top = obj.top || top; + this.height = obj.height || height; + this.bottom = obj.bottom || top + (obj.height || height); + this.width = obj.width || width; + this.lineHeight = lh !== undefined ? lh : obj.lineHeight; + } + + // Move the box along a particular axis. Optionally pass in an amount to move + // the box. If no amount is passed then the default is the line height of the + // box. + BoxPosition.prototype.move = function (axis, toMove) { + toMove = toMove !== undefined ? toMove : this.lineHeight; + switch (axis) { + case "+x": + this.left += toMove; + this.right += toMove; + break; + case "-x": + this.left -= toMove; + this.right -= toMove; + break; + case "+y": + this.top += toMove; + this.bottom += toMove; + break; + case "-y": + this.top -= toMove; + this.bottom -= toMove; + break; + } + }; + + // Check if this box overlaps another box, b2. + BoxPosition.prototype.overlaps = function (b2) { + return this.left < b2.right && this.right > b2.left && this.top < b2.bottom && this.bottom > b2.top; + }; + + // Check if this box overlaps any other boxes in boxes. + BoxPosition.prototype.overlapsAny = function (boxes) { + for (var i = 0; i < boxes.length; i++) { + if (this.overlaps(boxes[i])) { + return true; + } + } + return false; + }; + + // Check if this box is within another box. + BoxPosition.prototype.within = function (container) { + return this.top >= container.top && this.bottom <= container.bottom && this.left >= container.left && this.right <= container.right; + }; + + // Check if this box is entirely within the container or it is overlapping + // on the edge opposite of the axis direction passed. For example, if "+x" is + // passed and the box is overlapping on the left edge of the container, then + // return true. + BoxPosition.prototype.overlapsOppositeAxis = function (container, axis) { + switch (axis) { + case "+x": + return this.left < container.left; + case "-x": + return this.right > container.right; + case "+y": + return this.top < container.top; + case "-y": + return this.bottom > container.bottom; + } + }; + + // Find the percentage of the area that this box is overlapping with another + // box. + BoxPosition.prototype.intersectPercentage = function (b2) { + var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)), + y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)), + intersectArea = x * y; + return intersectArea / (this.height * this.width); + }; + + // Convert the positions from this box to CSS compatible positions using + // the reference container's positions. This has to be done because this + // box's positions are in reference to the viewport origin, whereas, CSS + // values are in referecne to their respective edges. + BoxPosition.prototype.toCSSCompatValues = function (reference) { + return { + top: this.top - reference.top, + bottom: reference.bottom - this.bottom, + left: this.left - reference.left, + right: reference.right - this.right, + height: this.height, + width: this.width + }; + }; + + // Get an object that represents the box's position without anything extra. + // Can pass a StyleBox, HTMLElement, or another BoxPositon. + BoxPosition.getSimpleBoxPosition = function (obj) { + var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0; + var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0; + var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0; + + obj = obj.div ? obj.div.getBoundingClientRect() : obj.tagName ? obj.getBoundingClientRect() : obj; + var ret = { + left: obj.left, + right: obj.right, + top: obj.top || top, + height: obj.height || height, + bottom: obj.bottom || top + (obj.height || height), + width: obj.width || width + }; + return ret; + }; + + // Move a StyleBox to its specified, or next best, position. The containerBox + // is the box that contains the StyleBox, such as a div. boxPositions are + // a list of other boxes that the styleBox can't overlap with. + function moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) { + + // Find the best position for a cue box, b, on the video. The axis parameter + // is a list of axis, the order of which, it will move the box along. For example: + // Passing ["+x", "-x"] will move the box first along the x axis in the positive + // direction. If it doesn't find a good position for it there it will then move + // it along the x axis in the negative direction. + function findBestPosition(b, axis) { + var bestPosition, + specifiedPosition = new BoxPosition(b), + percentage = 1; // Highest possible so the first thing we get is better. + + for (var i = 0; i < axis.length; i++) { + while (b.overlapsOppositeAxis(containerBox, axis[i]) || b.within(containerBox) && b.overlapsAny(boxPositions)) { + b.move(axis[i]); + } + // We found a spot where we aren't overlapping anything. This is our + // best position. + if (b.within(containerBox)) { + return b; + } + var p = b.intersectPercentage(containerBox); + // If we're outside the container box less then we were on our last try + // then remember this position as the best position. + if (percentage > p) { + bestPosition = new BoxPosition(b); + percentage = p; + } + // Reset the box position to the specified position. + b = new BoxPosition(specifiedPosition); + } + return bestPosition || specifiedPosition; + } + + var boxPosition = new BoxPosition(styleBox), + cue = styleBox.cue, + linePos = computeLinePos(cue), + axis = []; + + // If we have a line number to align the cue to. + if (cue.snapToLines) { + var size; + switch (cue.vertical) { + case "": + axis = ["+y", "-y"]; + size = "height"; + break; + case "rl": + axis = ["+x", "-x"]; + size = "width"; + break; + case "lr": + axis = ["-x", "+x"]; + size = "width"; + break; + } + + var step = boxPosition.lineHeight, + position = step * Math.round(linePos), + maxPosition = containerBox[size] + step, + initialAxis = axis[0]; + + // If the specified intial position is greater then the max position then + // clamp the box to the amount of steps it would take for the box to + // reach the max position. + if (Math.abs(position) > maxPosition) { + position = position < 0 ? -1 : 1; + position *= Math.ceil(maxPosition / step) * step; + } + + // If computed line position returns negative then line numbers are + // relative to the bottom of the video instead of the top. Therefore, we + // need to increase our initial position by the length or width of the + // video, depending on the writing direction, and reverse our axis directions. + if (linePos < 0) { + position += cue.vertical === "" ? containerBox.height : containerBox.width; + axis = axis.reverse(); + } + + // Move the box to the specified position. This may not be its best + // position. + boxPosition.move(initialAxis, position); + } else { + // If we have a percentage line value for the cue. + var calculatedPercentage = boxPosition.lineHeight / containerBox.height * 100; + + switch (cue.lineAlign) { + case "middle": + linePos -= calculatedPercentage / 2; + break; + case "end": + linePos -= calculatedPercentage; + break; + } + + // Apply initial line position to the cue box. + switch (cue.vertical) { + case "": + styleBox.applyStyles({ + top: styleBox.formatStyle(linePos, "%") + }); + break; + case "rl": + styleBox.applyStyles({ + left: styleBox.formatStyle(linePos, "%") + }); + break; + case "lr": + styleBox.applyStyles({ + right: styleBox.formatStyle(linePos, "%") + }); + break; + } + + axis = ["+y", "-x", "+x", "-y"]; + + // Get the box position again after we've applied the specified positioning + // to it. + boxPosition = new BoxPosition(styleBox); + } + + var bestPosition = findBestPosition(boxPosition, axis); + styleBox.move(bestPosition.toCSSCompatValues(containerBox)); + } + + function WebVTT$1() { + } + + // Nothing + + + // Helper to allow strings to be decoded instead of the default binary utf8 data. + WebVTT$1.StringDecoder = function () { + return { + decode: function decode(data) { + if (!data) { + return ""; + } + if (typeof data !== "string") { + throw new Error("Error - expected string data."); + } + return decodeURIComponent(encodeURIComponent(data)); + } + }; + }; + + WebVTT$1.convertCueToDOMTree = function (window, cuetext) { + if (!window || !cuetext) { + return null; + } + return parseContent(window, cuetext); + }; + + var FONT_SIZE_PERCENT = 0.05; + var FONT_STYLE = "sans-serif"; + var CUE_BACKGROUND_PADDING = "1.5%"; + + // Runs the processing model over the cues and regions passed to it. + // @param overlay A block level element (usually a div) that the computed cues + // and regions will be placed into. + WebVTT$1.processCues = function (window, cues, overlay) { + if (!window || !cues || !overlay) { + return null; + } + + // Remove all previous children. + while (overlay.firstChild) { + overlay.removeChild(overlay.firstChild); + } + + var paddedOverlay = window.document.createElement("div"); + paddedOverlay.style.position = "absolute"; + paddedOverlay.style.left = "0"; + paddedOverlay.style.right = "0"; + paddedOverlay.style.top = "0"; + paddedOverlay.style.bottom = "0"; + paddedOverlay.style.margin = CUE_BACKGROUND_PADDING; + overlay.appendChild(paddedOverlay); + + // Determine if we need to compute the display states of the cues. This could + // be the case if a cue's state has been changed since the last computation or + // if it has not been computed yet. + function shouldCompute(cues) { + for (var i = 0; i < cues.length; i++) { + if (cues[i].hasBeenReset || !cues[i].displayState) { + return true; + } + } + return false; + } + + // We don't need to recompute the cues' display states. Just reuse them. + if (!shouldCompute(cues)) { + for (var i = 0; i < cues.length; i++) { + paddedOverlay.appendChild(cues[i].displayState); + } + return; + } + + var boxPositions = [], + containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay), + fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100; + var styleOptions = { + font: fontSize + "px " + FONT_STYLE + }; + + (function () { + var styleBox, cue; + + for (var i = 0; i < cues.length; i++) { + cue = cues[i]; + + // Compute the intial position and styles of the cue div. + styleBox = new CueStyleBox(window, cue, styleOptions); + paddedOverlay.appendChild(styleBox.div); + + // Move the cue div to it's correct line position. + moveBoxToLinePosition(window, styleBox, containerBox, boxPositions); + + // Remember the computed div so that we don't have to recompute it later + // if we don't have too. + cue.displayState = styleBox.div; + + boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox)); + } + })(); + }; + + WebVTT$1.Parser = function (window, vttjs, decoder) { + if (!decoder) { + decoder = vttjs; + vttjs = {}; + } + if (!vttjs) { + vttjs = {}; + } + + this.window = window; + this.vttjs = vttjs; + this.state = "INITIAL"; + this.buffer = ""; + this.decoder = decoder || new TextDecoder("utf8"); + this.regionList = []; + }; + + WebVTT$1.Parser.prototype = { + // If the error is a ParsingError then report it to the consumer if + // possible. If it's not a ParsingError then throw it like normal. + reportOrThrowError: function reportOrThrowError(e) { + if (e instanceof ParsingError) { + this.onparsingerror && this.onparsingerror(e); + } else { + throw e; + } + }, + parse: function parse(data) { + var self = this; + + // If there is no data then we won't decode it, but will just try to parse + // whatever is in buffer already. This may occur in circumstances, for + // example when flush() is called. + if (data) { + // Try to decode the data that we received. + self.buffer += self.decoder.decode(data, {stream: true}); + } + + function collectNextLine() { + var buffer = self.buffer; + var pos = 0; + while (pos < buffer.length && buffer[pos] !== '\r' && buffer[pos] !== '\n') { + ++pos; + } + var line = buffer.substr(0, pos); + // Advance the buffer early in case we fail below. + if (buffer[pos] === '\r') { + ++pos; + } + if (buffer[pos] === '\n') { + ++pos; + } + self.buffer = buffer.substr(pos); + return line; + } + + // 3.4 WebVTT region and WebVTT region settings syntax + function parseRegion(input) { + var settings = new Settings(); + + parseOptions(input, function (k, v) { + switch (k) { + case "id": + settings.set(k, v); + break; + case "width": + settings.percent(k, v); + break; + case "lines": + settings.integer(k, v); + break; + case "regionanchor": + case "viewportanchor": + var xy = v.split(','); + if (xy.length !== 2) { + break; + } + // We have to make sure both x and y parse, so use a temporary + // settings object here. + var anchor = new Settings(); + anchor.percent("x", xy[0]); + anchor.percent("y", xy[1]); + if (!anchor.has("x") || !anchor.has("y")) { + break; + } + settings.set(k + "X", anchor.get("x")); + settings.set(k + "Y", anchor.get("y")); + break; + case "scroll": + settings.alt(k, v, ["up"]); + break; + } + }, /=/, /\s/); + + // Create the region, using default values for any values that were not + // specified. + if (settings.has("id")) { + var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)(); + region.width = settings.get("width", 100); + region.lines = settings.get("lines", 3); + region.regionAnchorX = settings.get("regionanchorX", 0); + region.regionAnchorY = settings.get("regionanchorY", 100); + region.viewportAnchorX = settings.get("viewportanchorX", 0); + region.viewportAnchorY = settings.get("viewportanchorY", 100); + region.scroll = settings.get("scroll", ""); + // Register the region. + self.onregion && self.onregion(region); + // Remember the VTTRegion for later in case we parse any VTTCues that + // reference it. + self.regionList.push({ + id: settings.get("id"), + region: region + }); + } + } + + // draft-pantos-http-live-streaming-20 + // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5 + // 3.5 WebVTT + function parseTimestampMap(input) { + var settings = new Settings(); + + parseOptions(input, function (k, v) { + switch (k) { + case "MPEGT": + settings.integer(k + 'S', v); + break; + case "LOCA": + settings.set(k + 'L', parseTimeStamp(v)); + break; + } + }, /[^\d]:/, /,/); + + self.ontimestampmap && self.ontimestampmap({ + "MPEGTS": settings.get("MPEGTS"), + "LOCAL": settings.get("LOCAL") + }); + } + + // 3.2 WebVTT metadata header syntax + function parseHeader(input) { + if (input.match(/X-TIMESTAMP-MAP/)) { + // This line contains HLS X-TIMESTAMP-MAP metadata + parseOptions(input, function (k, v) { + switch (k) { + case "X-TIMESTAMP-MAP": + parseTimestampMap(v); + break; + } + }, /=/); + } else { + parseOptions(input, function (k, v) { + switch (k) { + case "Region": + // 3.3 WebVTT region metadata header syntax + parseRegion(v); + break; + } + }, /:/); + } + } + + // 5.1 WebVTT file parsing. + try { + var line; + if (self.state === "INITIAL") { + // We can't start parsing until we have the first line. + if (!/\r\n|\n/.test(self.buffer)) { + return this; + } + + line = collectNextLine(); + + var m = line.match(/^WEBVTT([ \t].*)?$/); + if (!m || !m[0]) { + throw new ParsingError(ParsingError.Errors.BadSignature); + } + + self.state = "HEADER"; + } + + var alreadyCollectedLine = false; + while (self.buffer) { + // We can't parse a line until we have the full line. + if (!/\r\n|\n/.test(self.buffer)) { + return this; + } + + if (!alreadyCollectedLine) { + line = collectNextLine(); + } else { + alreadyCollectedLine = false; + } + + switch (self.state) { + case "HEADER": + // 13-18 - Allow a header (metadata) under the WEBVTT line. + if (/:/.test(line)) { + parseHeader(line); + } else if (!line) { + // An empty line terminates the header and starts the body (cues). + self.state = "ID"; + } + continue; + case "NOTE": + // Ignore NOTE blocks. + if (!line) { + self.state = "ID"; + } + continue; + case "ID": + // Check for the start of NOTE blocks. + if (/^NOTE($|[ \t])/.test(line)) { + self.state = "NOTE"; + break; + } + // 19-29 - Allow any number of line terminators, then initialize new cue values. + if (!line) { + continue; + } + self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, ""); + self.state = "CUE"; + // 30-39 - Check if self line contains an optional identifier or timing data. + if (line.indexOf("-->") === -1) { + self.cue.id = line; + continue; + } + // Process line as start of a cue. + /*falls through*/ + case "CUE": + // 40 - Collect cue timings and settings. + try { + parseCue(line, self.cue, self.regionList); + } catch (e) { + self.reportOrThrowError(e); + // In case of an error ignore rest of the cue. + self.cue = null; + self.state = "BADCUE"; + continue; + } + self.state = "CUETEXT"; + continue; + case "CUETEXT": + var hasSubstring = line.indexOf("-->") !== -1; + // 34 - If we have an empty line then report the cue. + // 35 - If we have the special substring '-->' then report the cue, + // but do not collect the line as we need to process the current + // one as a new cue. + if (!line || hasSubstring && (alreadyCollectedLine = true)) { + // We are done parsing self cue. + self.oncue && self.oncue(self.cue); + self.cue = null; + self.state = "ID"; + continue; + } + if (self.cue.text) { + self.cue.text += "\n"; + } + self.cue.text += line; + continue; + case "BADCUE": + // BADCUE + // 54-62 - Collect and discard the remaining cue. + if (!line) { + self.state = "ID"; + } + continue; + } + } + } catch (e) { + self.reportOrThrowError(e); + + // If we are currently parsing a cue, report what we have. + if (self.state === "CUETEXT" && self.cue && self.oncue) { + self.oncue(self.cue); + } + self.cue = null; + // Enter BADWEBVTT state if header was not parsed correctly otherwise + // another exception occurred so enter BADCUE state. + self.state = self.state === "INITIAL" ? "BADWEBVTT" : "BADCUE"; + } + return this; + }, + flush: function flush() { + var self = this; + try { + // Finish decoding the stream. + self.buffer += self.decoder.decode(); + // Synthesize the end of the current cue or region. + if (self.cue || self.state === "HEADER") { + self.buffer += "\n\n"; + self.parse(); + } + // If we've flushed, parsed, and we're still on the INITIAL state then + // that means we don't have enough of the stream to parse the first + // line. + if (self.state === "INITIAL") { + throw new ParsingError(ParsingError.Errors.BadSignature); + } + } catch (e) { + self.reportOrThrowError(e); + } + self.onflush && self.onflush(); + return this; + } + }; + + var vtt = WebVTT$1; + + var vtt$1 = /*#__PURE__*/Object.freeze({ + default: vtt, + __moduleExports: vtt + }); + + /** + * Copyright 2013 vtt.js Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + var autoKeyword = "auto"; + var directionSetting = { + "": 1, + "lr": 1, + "rl": 1 + }; + var alignSetting = { + "start": 1, + "middle": 1, + "end": 1, + "left": 1, + "right": 1 + }; + + function findDirectionSetting(value) { + if (typeof value !== "string") { + return false; + } + var dir = directionSetting[value.toLowerCase()]; + return dir ? value.toLowerCase() : false; + } + + function findAlignSetting(value) { + if (typeof value !== "string") { + return false; + } + var align = alignSetting[value.toLowerCase()]; + return align ? value.toLowerCase() : false; + } + + function VTTCue(startTime, endTime, text) { + /** + * Shim implementation specific properties. These properties are not in + * the spec. + */ + + // Lets us know when the VTTCue's data has changed in such a way that we need + // to recompute its display state. This lets us compute its display state + // lazily. + this.hasBeenReset = false; + + /** + * VTTCue and TextTrackCue properties + * http://dev.w3.org/html5/webvtt/#vttcue-interface + */ + + var _id = ""; + var _pauseOnExit = false; + var _startTime = startTime; + var _endTime = endTime; + var _text = text; + var _region = null; + var _vertical = ""; + var _snapToLines = true; + var _line = "auto"; + var _lineAlign = "start"; + var _position = 50; + var _positionAlign = "middle"; + var _size = 50; + var _align = "middle"; + + Object.defineProperties(this, { + "id": { + enumerable: true, + get: function get() { + return _id; + }, + set: function set(value) { + _id = "" + value; + } + }, + + "pauseOnExit": { + enumerable: true, + get: function get() { + return _pauseOnExit; + }, + set: function set(value) { + _pauseOnExit = !!value; + } + }, + + "startTime": { + enumerable: true, + get: function get() { + return _startTime; + }, + set: function set(value) { + if (typeof value !== "number") { + throw new TypeError("Start time must be set to a number."); + } + _startTime = value; + this.hasBeenReset = true; + } + }, + + "endTime": { + enumerable: true, + get: function get() { + return _endTime; + }, + set: function set(value) { + if (typeof value !== "number") { + throw new TypeError("End time must be set to a number."); + } + _endTime = value; + this.hasBeenReset = true; + } + }, + + "text": { + enumerable: true, + get: function get() { + return _text; + }, + set: function set(value) { + _text = "" + value; + this.hasBeenReset = true; + } + }, + + "region": { + enumerable: true, + get: function get() { + return _region; + }, + set: function set(value) { + _region = value; + this.hasBeenReset = true; + } + }, + + "vertical": { + enumerable: true, + get: function get() { + return _vertical; + }, + set: function set(value) { + var setting = findDirectionSetting(value); + // Have to check for false because the setting an be an empty string. + if (setting === false) { + throw new SyntaxError("An invalid or illegal string was specified."); + } + _vertical = setting; + this.hasBeenReset = true; + } + }, + + "snapToLines": { + enumerable: true, + get: function get() { + return _snapToLines; + }, + set: function set(value) { + _snapToLines = !!value; + this.hasBeenReset = true; + } + }, + + "line": { + enumerable: true, + get: function get() { + return _line; + }, + set: function set(value) { + if (typeof value !== "number" && value !== autoKeyword) { + throw new SyntaxError("An invalid number or illegal string was specified."); + } + _line = value; + this.hasBeenReset = true; + } + }, + + "lineAlign": { + enumerable: true, + get: function get() { + return _lineAlign; + }, + set: function set(value) { + var setting = findAlignSetting(value); + if (!setting) { + throw new SyntaxError("An invalid or illegal string was specified."); + } + _lineAlign = setting; + this.hasBeenReset = true; + } + }, + + "position": { + enumerable: true, + get: function get() { + return _position; + }, + set: function set(value) { + if (value < 0 || value > 100) { + throw new Error("Position must be between 0 and 100."); + } + _position = value; + this.hasBeenReset = true; + } + }, + + "positionAlign": { + enumerable: true, + get: function get() { + return _positionAlign; + }, + set: function set(value) { + var setting = findAlignSetting(value); + if (!setting) { + throw new SyntaxError("An invalid or illegal string was specified."); + } + _positionAlign = setting; + this.hasBeenReset = true; + } + }, + + "size": { + enumerable: true, + get: function get() { + return _size; + }, + set: function set(value) { + if (value < 0 || value > 100) { + throw new Error("Size must be between 0 and 100."); + } + _size = value; + this.hasBeenReset = true; + } + }, + + "align": { + enumerable: true, + get: function get() { + return _align; + }, + set: function set(value) { + var setting = findAlignSetting(value); + if (!setting) { + throw new SyntaxError("An invalid or illegal string was specified."); + } + _align = setting; + this.hasBeenReset = true; + } + } + }); + + /** + * Other <track> spec defined properties + */ + + // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state + this.displayState = undefined; + } + + /** + * VTTCue methods + */ + + VTTCue.prototype.getCueAsHTML = function () { + // Assume WebVTT.convertCueToDOMTree is on the global. + return WebVTT.convertCueToDOMTree(window, this.text); + }; + + var vttcue = VTTCue; + + var vttcue$1 = /*#__PURE__*/Object.freeze({ + default: vttcue, + __moduleExports: vttcue + }); + + /** + * Copyright 2013 vtt.js Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + var scrollSetting = { + "": true, + "up": true + }; + + function findScrollSetting(value) { + if (typeof value !== "string") { + return false; + } + var scroll = scrollSetting[value.toLowerCase()]; + return scroll ? value.toLowerCase() : false; + } + + function isValidPercentValue(value) { + return typeof value === "number" && value >= 0 && value <= 100; + } + + // VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface + function VTTRegion() { + var _width = 100; + var _lines = 3; + var _regionAnchorX = 0; + var _regionAnchorY = 100; + var _viewportAnchorX = 0; + var _viewportAnchorY = 100; + var _scroll = ""; + + Object.defineProperties(this, { + "width": { + enumerable: true, + get: function get() { + return _width; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("Width must be between 0 and 100."); + } + _width = value; + } + }, + "lines": { + enumerable: true, + get: function get() { + return _lines; + }, + set: function set(value) { + if (typeof value !== "number") { + throw new TypeError("Lines must be set to a number."); + } + _lines = value; + } + }, + "regionAnchorY": { + enumerable: true, + get: function get() { + return _regionAnchorY; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("RegionAnchorX must be between 0 and 100."); + } + _regionAnchorY = value; + } + }, + "regionAnchorX": { + enumerable: true, + get: function get() { + return _regionAnchorX; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("RegionAnchorY must be between 0 and 100."); + } + _regionAnchorX = value; + } + }, + "viewportAnchorY": { + enumerable: true, + get: function get() { + return _viewportAnchorY; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("ViewportAnchorY must be between 0 and 100."); + } + _viewportAnchorY = value; + } + }, + "viewportAnchorX": { + enumerable: true, + get: function get() { + return _viewportAnchorX; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("ViewportAnchorX must be between 0 and 100."); + } + _viewportAnchorX = value; + } + }, + "scroll": { + enumerable: true, + get: function get() { + return _scroll; + }, + set: function set(value) { + var setting = findScrollSetting(value); + // Have to check for false as an empty string is a legal value. + if (setting === false) { + throw new SyntaxError("An invalid or illegal string was specified."); + } + _scroll = setting; + } + } + }); + } + + var vttregion = VTTRegion; + + var vttregion$1 = /*#__PURE__*/Object.freeze({ + default: vttregion, + __moduleExports: vttregion + }); + + var require$$0 = (vtt$1 && vtt) || vtt$1; + + var require$$1 = (vttcue$1 && vttcue) || vttcue$1; + + var require$$2 = (vttregion$1 && vttregion) || vttregion$1; + + var browserIndex = createCommonjsModule(function (module) { + /** + * Copyright 2013 vtt.js Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + // Default exports for Node. Export the extended versions of VTTCue and + // VTTRegion in Node since we likely want the capability to convert back and + // forth between JSON. If we don't then it's not that big of a deal since we're + // off browser. + + + var vttjs = module.exports = { + WebVTT: require$$0, + VTTCue: require$$1, + VTTRegion: require$$2 + }; + + window_1.vttjs = vttjs; + window_1.WebVTT = vttjs.WebVTT; + + var cueShim = vttjs.VTTCue; + var regionShim = vttjs.VTTRegion; + var nativeVTTCue = window_1.VTTCue; + var nativeVTTRegion = window_1.VTTRegion; + + vttjs.shim = function () { + window_1.VTTCue = cueShim; + window_1.VTTRegion = regionShim; + }; + + vttjs.restore = function () { + window_1.VTTCue = nativeVTTCue; + window_1.VTTRegion = nativeVTTRegion; + }; + + if (!window_1.VTTCue) { + vttjs.shim(); + } + }); + var browserIndex_1 = browserIndex.WebVTT; + var browserIndex_2 = browserIndex.VTTCue; + var browserIndex_3 = browserIndex.VTTRegion; + + /** + * @file tech.js + */ + + /** + * An Object containing a structure like: `{src: 'url', type: 'mimetype'}` or string + * that just contains the src url alone. + * * `var SourceObject = {src: 'http://ex.com/video.mp4', type: 'video/mp4'};` + * `var SourceString = 'http://example.com/some-video.mp4';` + * + * @typedef {Object|string} Tech~SourceObject + * + * @property {string} src + * The url to the source + * + * @property {string} type + * The mime type of the source + */ + + /** + * A function used by {@link Tech} to create a new {@link TextTrack}. + * + * @private + * + * @param {Tech} self + * An instance of the Tech class. + * + * @param {string} kind + * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata) + * + * @param {string} [label] + * Label to identify the text track + * + * @param {string} [language] + * Two letter language abbreviation + * + * @param {Object} [options={}] + * An object with additional text track options + * + * @return {TextTrack} + * The text track that was created. + */ + function createTrackHelper(self, kind, label, language) { + var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + + var tracks = self.textTracks(); + + options.kind = kind; + + if (label) { + options.label = label; + } + if (language) { + options.language = language; + } + options.tech = self; + + var track = new ALL.text.TrackClass(options); + + tracks.addTrack(track); + + return track; + } + + /** + * This is the base class for media playback technology controllers, such as + * {@link Flash} and {@link HTML5} + * + * @extends Component + */ + + var Tech = function (_Component) { + inherits(Tech, _Component); + + /** + * Create an instance of this Tech. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Component~ReadyCallback} ready + * Callback function to call when the `HTML5` Tech is ready. + */ + function Tech() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var ready = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () { + }; + classCallCheck(this, Tech); + + // we don't want the tech to report user activity automatically. + // This is done manually in addControlsListeners + options.reportTouchActivity = false; + + // keep track of whether the current source has played at all to + // implement a very limited played() + var _this = possibleConstructorReturn(this, _Component.call(this, null, options, ready)); + + _this.hasStarted_ = false; + _this.on('playing', function () { + this.hasStarted_ = true; + }); + _this.on('loadstart', function () { + this.hasStarted_ = false; + }); + + ALL.names.forEach(function (name) { + var props = ALL[name]; + + if (options && options[props.getterName]) { + _this[props.privateName] = options[props.getterName]; + } + }); + + // Manually track progress in cases where the browser/flash player doesn't report it. + if (!_this.featuresProgressEvents) { + _this.manualProgressOn(); + } + + // Manually track timeupdates in cases where the browser/flash player doesn't report it. + if (!_this.featuresTimeupdateEvents) { + _this.manualTimeUpdatesOn(); + } + + ['Text', 'Audio', 'Video'].forEach(function (track) { + if (options['native' + track + 'Tracks'] === false) { + _this['featuresNative' + track + 'Tracks'] = false; + } + }); + + if (options.nativeCaptions === false || options.nativeTextTracks === false) { + _this.featuresNativeTextTracks = false; + } else if (options.nativeCaptions === true || options.nativeTextTracks === true) { + _this.featuresNativeTextTracks = true; + } + + if (!_this.featuresNativeTextTracks) { + _this.emulateTextTracks(); + } + + _this.autoRemoteTextTracks_ = new ALL.text.ListClass(); + + _this.initTrackListeners(); + + // Turn on component tap events only if not using native controls + if (!options.nativeControlsForTouch) { + _this.emitTapEvents(); + } + + if (_this.constructor) { + _this.name_ = _this.constructor.name || 'Unknown Tech'; + } + return _this; + } + + /** + * A special function to trigger source set in a way that will allow player + * to re-trigger if the player or tech are not ready yet. + * + * @fires Tech#sourceset + * @param {string} src The source string at the time of the source changing. + */ + + + Tech.prototype.triggerSourceset = function triggerSourceset(src) { + var _this2 = this; + + if (!this.isReady_) { + // on initial ready we have to trigger source set + // 1ms after ready so that player can watch for it. + this.one('ready', function () { + return _this2.setTimeout(function () { + return _this2.triggerSourceset(src); + }, 1); + }); + } + + /** + * Fired when the source is set on the tech causing the media element + * to reload. + * + * @see {@link Player#event:sourceset} + * @event Tech#sourceset + * @type {EventTarget~Event} + */ + this.trigger({ + src: src, + type: 'sourceset' + }); + }; + + /* Fallbacks for unsupported event types + ================================================================================ */ + + /** + * Polyfill the `progress` event for browsers that don't support it natively. + * + * @see {@link Tech#trackProgress} + */ + + + Tech.prototype.manualProgressOn = function manualProgressOn() { + this.on('durationchange', this.onDurationChange); + + this.manualProgress = true; + + // Trigger progress watching when a source begins loading + this.one('ready', this.trackProgress); + }; + + /** + * Turn off the polyfill for `progress` events that was created in + * {@link Tech#manualProgressOn} + */ + + + Tech.prototype.manualProgressOff = function manualProgressOff() { + this.manualProgress = false; + this.stopTrackingProgress(); + + this.off('durationchange', this.onDurationChange); + }; + + /** + * This is used to trigger a `progress` event when the buffered percent changes. It + * sets an interval function that will be called every 500 milliseconds to check if the + * buffer end percent has changed. + * + * > This function is called by {@link Tech#manualProgressOn} + * + * @param {EventTarget~Event} event + * The `ready` event that caused this to run. + * + * @listens Tech#ready + * @fires Tech#progress + */ + + + Tech.prototype.trackProgress = function trackProgress(event) { + this.stopTrackingProgress(); + this.progressInterval = this.setInterval(bind(this, function () { + // Don't trigger unless buffered amount is greater than last time + + var numBufferedPercent = this.bufferedPercent(); + + if (this.bufferedPercent_ !== numBufferedPercent) { + /** + * See {@link Player#progress} + * + * @event Tech#progress + * @type {EventTarget~Event} + */ + this.trigger('progress'); + } + + this.bufferedPercent_ = numBufferedPercent; + + if (numBufferedPercent === 1) { + this.stopTrackingProgress(); + } + }), 500); + }; + + /** + * Update our internal duration on a `durationchange` event by calling + * {@link Tech#duration}. + * + * @param {EventTarget~Event} event + * The `durationchange` event that caused this to run. + * + * @listens Tech#durationchange + */ + + + Tech.prototype.onDurationChange = function onDurationChange(event) { + this.duration_ = this.duration(); + }; + + /** + * Get and create a `TimeRange` object for buffering. + * + * @return {TimeRange} + * The time range object that was created. + */ + + + Tech.prototype.buffered = function buffered() { + return createTimeRanges(0, 0); + }; + + /** + * Get the percentage of the current video that is currently buffered. + * + * @return {number} + * A number from 0 to 1 that represents the decimal percentage of the + * video that is buffered. + * + */ + + + Tech.prototype.bufferedPercent = function bufferedPercent$$1() { + return bufferedPercent(this.buffered(), this.duration_); + }; + + /** + * Turn off the polyfill for `progress` events that was created in + * {@link Tech#manualProgressOn} + * Stop manually tracking progress events by clearing the interval that was set in + * {@link Tech#trackProgress}. + */ + + + Tech.prototype.stopTrackingProgress = function stopTrackingProgress() { + this.clearInterval(this.progressInterval); + }; + + /** + * Polyfill the `timeupdate` event for browsers that don't support it. + * + * @see {@link Tech#trackCurrentTime} + */ + + + Tech.prototype.manualTimeUpdatesOn = function manualTimeUpdatesOn() { + this.manualTimeUpdates = true; + + this.on('play', this.trackCurrentTime); + this.on('pause', this.stopTrackingCurrentTime); + }; + + /** + * Turn off the polyfill for `timeupdate` events that was created in + * {@link Tech#manualTimeUpdatesOn} + */ + + + Tech.prototype.manualTimeUpdatesOff = function manualTimeUpdatesOff() { + this.manualTimeUpdates = false; + this.stopTrackingCurrentTime(); + this.off('play', this.trackCurrentTime); + this.off('pause', this.stopTrackingCurrentTime); + }; + + /** + * Sets up an interval function to track current time and trigger `timeupdate` every + * 250 milliseconds. + * + * @listens Tech#play + * @triggers Tech#timeupdate + */ + + + Tech.prototype.trackCurrentTime = function trackCurrentTime() { + if (this.currentTimeInterval) { + this.stopTrackingCurrentTime(); + } + this.currentTimeInterval = this.setInterval(function () { + /** + * Triggered at an interval of 250ms to indicated that time is passing in the video. + * + * @event Tech#timeupdate + * @type {EventTarget~Event} + */ + this.trigger({type: 'timeupdate', target: this, manuallyTriggered: true}); + + // 42 = 24 fps // 250 is what Webkit uses // FF uses 15 + }, 250); + }; + + /** + * Stop the interval function created in {@link Tech#trackCurrentTime} so that the + * `timeupdate` event is no longer triggered. + * + * @listens {Tech#pause} + */ + + + Tech.prototype.stopTrackingCurrentTime = function stopTrackingCurrentTime() { + this.clearInterval(this.currentTimeInterval); + + // #1002 - if the video ends right before the next timeupdate would happen, + // the progress bar won't make it all the way to the end + this.trigger({type: 'timeupdate', target: this, manuallyTriggered: true}); + }; + + /** + * Turn off all event polyfills, clear the `Tech`s {@link AudioTrackList}, + * {@link VideoTrackList}, and {@link TextTrackList}, and dispose of this Tech. + * + * @fires Component#dispose + */ + + + Tech.prototype.dispose = function dispose() { + + // clear out all tracks because we can't reuse them between techs + this.clearTracks(NORMAL.names); + + // Turn off any manual progress or timeupdate tracking + if (this.manualProgress) { + this.manualProgressOff(); + } + + if (this.manualTimeUpdates) { + this.manualTimeUpdatesOff(); + } + + _Component.prototype.dispose.call(this); + }; + + /** + * Clear out a single `TrackList` or an array of `TrackLists` given their names. + * + * > Note: Techs without source handlers should call this between sources for `video` + * & `audio` tracks. You don't want to use them between tracks! + * + * @param {string[]|string} types + * TrackList names to clear, valid names are `video`, `audio`, and + * `text`. + */ + + + Tech.prototype.clearTracks = function clearTracks(types) { + var _this3 = this; + + types = [].concat(types); + // clear out all tracks because we can't reuse them between techs + types.forEach(function (type) { + var list = _this3[type + 'Tracks']() || []; + var i = list.length; + + while (i--) { + var track = list[i]; + + if (type === 'text') { + _this3.removeRemoteTextTrack(track); + } + list.removeTrack(track); + } + }); + }; + + /** + * Remove any TextTracks added via addRemoteTextTrack that are + * flagged for automatic garbage collection + */ + + + Tech.prototype.cleanupAutoTextTracks = function cleanupAutoTextTracks() { + var list = this.autoRemoteTextTracks_ || []; + var i = list.length; + + while (i--) { + var track = list[i]; + + this.removeRemoteTextTrack(track); + } + }; + + /** + * Reset the tech, which will removes all sources and reset the internal readyState. + * + * @abstract + */ + + + Tech.prototype.reset = function reset() { + }; + + /** + * Get or set an error on the Tech. + * + * @param {MediaError} [err] + * Error to set on the Tech + * + * @return {MediaError|null} + * The current error object on the tech, or null if there isn't one. + */ + + + Tech.prototype.error = function error(err) { + if (err !== undefined) { + this.error_ = new MediaError(err); + this.trigger('error'); + } + return this.error_; + }; + + /** + * Returns the `TimeRange`s that have been played through for the current source. + * + * > NOTE: This implementation is incomplete. It does not track the played `TimeRange`. + * It only checks whether the source has played at all or not. + * + * @return {TimeRange} + * - A single time range if this video has played + * - An empty set of ranges if not. + */ + + + Tech.prototype.played = function played() { + if (this.hasStarted_) { + return createTimeRanges(0, 0); + } + return createTimeRanges(); + }; + + /** + * Causes a manual time update to occur if {@link Tech#manualTimeUpdatesOn} was + * previously called. + * + * @fires Tech#timeupdate + */ + + + Tech.prototype.setCurrentTime = function setCurrentTime() { + // improve the accuracy of manual timeupdates + if (this.manualTimeUpdates) { + /** + * A manual `timeupdate` event. + * + * @event Tech#timeupdate + * @type {EventTarget~Event} + */ + this.trigger({type: 'timeupdate', target: this, manuallyTriggered: true}); + } + }; + + /** + * Turn on listeners for {@link VideoTrackList}, {@link {AudioTrackList}, and + * {@link TextTrackList} events. + * + * This adds {@link EventTarget~EventListeners} for `addtrack`, and `removetrack`. + * + * @fires Tech#audiotrackchange + * @fires Tech#videotrackchange + * @fires Tech#texttrackchange + */ + + + Tech.prototype.initTrackListeners = function initTrackListeners() { + var _this4 = this; + + /** + * Triggered when tracks are added or removed on the Tech {@link AudioTrackList} + * + * @event Tech#audiotrackchange + * @type {EventTarget~Event} + */ + + /** + * Triggered when tracks are added or removed on the Tech {@link VideoTrackList} + * + * @event Tech#videotrackchange + * @type {EventTarget~Event} + */ + + /** + * Triggered when tracks are added or removed on the Tech {@link TextTrackList} + * + * @event Tech#texttrackchange + * @type {EventTarget~Event} + */ + NORMAL.names.forEach(function (name) { + var props = NORMAL[name]; + var trackListChanges = function trackListChanges() { + _this4.trigger(name + 'trackchange'); + }; + + var tracks = _this4[props.getterName](); + + tracks.addEventListener('removetrack', trackListChanges); + tracks.addEventListener('addtrack', trackListChanges); + + _this4.on('dispose', function () { + tracks.removeEventListener('removetrack', trackListChanges); + tracks.removeEventListener('addtrack', trackListChanges); + }); + }); + }; + + /** + * Emulate TextTracks using vtt.js if necessary + * + * @fires Tech#vttjsloaded + * @fires Tech#vttjserror + */ + + + Tech.prototype.addWebVttScript_ = function addWebVttScript_() { + var _this5 = this; + + if (window_1.WebVTT) { + return; + } + + // Initially, Tech.el_ is a child of a dummy-div wait until the Component system + // signals that the Tech is ready at which point Tech.el_ is part of the DOM + // before inserting the WebVTT script + if (document_1.body.contains(this.el())) { + + // load via require if available and vtt.js script location was not passed in + // as an option. novtt builds will turn the above require call into an empty object + // which will cause this if check to always fail. + if (!this.options_['vtt.js'] && isPlain(browserIndex) && Object.keys(browserIndex).length > 0) { + this.trigger('vttjsloaded'); + return; + } + + // load vtt.js via the script location option or the cdn of no location was + // passed in + var script = document_1.createElement('script'); + + script.src = this.options_['vtt.js'] || 'https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js'; + script.onload = function () { + /** + * Fired when vtt.js is loaded. + * + * @event Tech#vttjsloaded + * @type {EventTarget~Event} + */ + _this5.trigger('vttjsloaded'); + }; + script.onerror = function () { + /** + * Fired when vtt.js was not loaded due to an error + * + * @event Tech#vttjsloaded + * @type {EventTarget~Event} + */ + _this5.trigger('vttjserror'); + }; + this.on('dispose', function () { + script.onload = null; + script.onerror = null; + }); + // but have not loaded yet and we set it to true before the inject so that + // we don't overwrite the injected window.WebVTT if it loads right away + window_1.WebVTT = true; + this.el().parentNode.appendChild(script); + } else { + this.ready(this.addWebVttScript_); + } + }; + + /** + * Emulate texttracks + * + */ + + + Tech.prototype.emulateTextTracks = function emulateTextTracks() { + var _this6 = this; + + var tracks = this.textTracks(); + var remoteTracks = this.remoteTextTracks(); + var handleAddTrack = function handleAddTrack(e) { + return tracks.addTrack(e.track); + }; + var handleRemoveTrack = function handleRemoveTrack(e) { + return tracks.removeTrack(e.track); + }; + + remoteTracks.on('addtrack', handleAddTrack); + remoteTracks.on('removetrack', handleRemoveTrack); + + this.addWebVttScript_(); + + var updateDisplay = function updateDisplay() { + return _this6.trigger('texttrackchange'); + }; + + var textTracksChanges = function textTracksChanges() { + updateDisplay(); + + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + + track.removeEventListener('cuechange', updateDisplay); + if (track.mode === 'showing') { + track.addEventListener('cuechange', updateDisplay); + } + } + }; + + textTracksChanges(); + tracks.addEventListener('change', textTracksChanges); + tracks.addEventListener('addtrack', textTracksChanges); + tracks.addEventListener('removetrack', textTracksChanges); + + this.on('dispose', function () { + remoteTracks.off('addtrack', handleAddTrack); + remoteTracks.off('removetrack', handleRemoveTrack); + tracks.removeEventListener('change', textTracksChanges); + tracks.removeEventListener('addtrack', textTracksChanges); + tracks.removeEventListener('removetrack', textTracksChanges); + + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + + track.removeEventListener('cuechange', updateDisplay); + } + }); + }; + + /** + * Create and returns a remote {@link TextTrack} object. + * + * @param {string} kind + * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata) + * + * @param {string} [label] + * Label to identify the text track + * + * @param {string} [language] + * Two letter language abbreviation + * + * @return {TextTrack} + * The TextTrack that gets created. + */ + + + Tech.prototype.addTextTrack = function addTextTrack(kind, label, language) { + if (!kind) { + throw new Error('TextTrack kind is required but was not provided'); + } + + return createTrackHelper(this, kind, label, language); + }; + + /** + * Create an emulated TextTrack for use by addRemoteTextTrack + * + * This is intended to be overridden by classes that inherit from + * Tech in order to create native or custom TextTracks. + * + * @param {Object} options + * The object should contain the options to initialize the TextTrack with. + * + * @param {string} [options.kind] + * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata). + * + * @param {string} [options.label]. + * Label to identify the text track + * + * @param {string} [options.language] + * Two letter language abbreviation. + * + * @return {HTMLTrackElement} + * The track element that gets created. + */ + + + Tech.prototype.createRemoteTextTrack = function createRemoteTextTrack(options) { + var track = mergeOptions(options, { + tech: this + }); + + return new REMOTE.remoteTextEl.TrackClass(track); + }; + + /** + * Creates a remote text track object and returns an html track element. + * + * > Note: This can be an emulated {@link HTMLTrackElement} or a native one. + * + * @param {Object} options + * See {@link Tech#createRemoteTextTrack} for more detailed properties. + * + * @param {boolean} [manualCleanup=true] + * - When false: the TextTrack will be automatically removed from the video + * element whenever the source changes + * - When True: The TextTrack will have to be cleaned up manually + * + * @return {HTMLTrackElement} + * An Html Track Element. + * + * @deprecated The default functionality for this function will be equivalent + * to "manualCleanup=false" in the future. The manualCleanup parameter will + * also be removed. + */ + + + Tech.prototype.addRemoteTextTrack = function addRemoteTextTrack() { + var _this7 = this; + + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var manualCleanup = arguments[1]; + + var htmlTrackElement = this.createRemoteTextTrack(options); + + if (manualCleanup !== true && manualCleanup !== false) { + // deprecation warning + log$1.warn('Calling addRemoteTextTrack without explicitly setting the "manualCleanup" parameter to `true` is deprecated and default to `false` in future version of video.js'); + manualCleanup = true; + } + + // store HTMLTrackElement and TextTrack to remote list + this.remoteTextTrackEls().addTrackElement_(htmlTrackElement); + this.remoteTextTracks().addTrack(htmlTrackElement.track); + + if (manualCleanup !== true) { + // create the TextTrackList if it doesn't exist + this.ready(function () { + return _this7.autoRemoteTextTracks_.addTrack(htmlTrackElement.track); + }); + } + + return htmlTrackElement; + }; + + /** + * Remove a remote text track from the remote `TextTrackList`. + * + * @param {TextTrack} track + * `TextTrack` to remove from the `TextTrackList` + */ + + + Tech.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) { + var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track); + + // remove HTMLTrackElement and TextTrack from remote list + this.remoteTextTrackEls().removeTrackElement_(trackElement); + this.remoteTextTracks().removeTrack(track); + this.autoRemoteTextTracks_.removeTrack(track); + }; + + /** + * Gets available media playback quality metrics as specified by the W3C's Media + * Playback Quality API. + * + * @see [Spec]{@link https://wicg.github.io/media-playback-quality} + * + * @return {Object} + * An object with supported media playback quality metrics + * + * @abstract + */ + + + Tech.prototype.getVideoPlaybackQuality = function getVideoPlaybackQuality() { + return {}; + }; + + /** + * A method to set a poster from a `Tech`. + * + * @abstract + */ + + + Tech.prototype.setPoster = function setPoster() { + }; + + /** + * A method to check for the presence of the 'playsinline' <video> attribute. + * + * @abstract + */ + + + Tech.prototype.playsinline = function playsinline() { + }; + + /** + * A method to set or unset the 'playsinline' <video> attribute. + * + * @abstract + */ + + + Tech.prototype.setPlaysinline = function setPlaysinline() { + }; + + /** + * Attempt to force override of native audio tracks. + * + * @param {Boolean} override - If set to true native audio will be overridden, + * otherwise native audio will potentially be used. + * + * @abstract + */ + + + Tech.prototype.overrideNativeAudioTracks = function overrideNativeAudioTracks() { + }; + + /** + * Attempt to force override of native video tracks. + * + * @param {Boolean} override - If set to true native video will be overridden, + * otherwise native video will potentially be used. + * + * @abstract + */ + + + Tech.prototype.overrideNativeVideoTracks = function overrideNativeVideoTracks() { + }; + + /* + * Check if the tech can support the given mime-type. + * + * The base tech does not support any type, but source handlers might + * overwrite this. + * + * @param {string} type + * The mimetype to check for support + * + * @return {string} + * 'probably', 'maybe', or empty string + * + * @see [Spec]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/canPlayType} + * + * @abstract + */ + + + Tech.prototype.canPlayType = function canPlayType() { + return ''; + }; + + /** + * Check if the type is supported by this tech. + * + * The base tech does not support any type, but source handlers might + * overwrite this. + * + * @param {string} type + * The media type to check + * @return {string} Returns the native video element's response + */ + + + Tech.canPlayType = function canPlayType() { + return ''; + }; + + /** + * Check if the tech can support the given source + * @param {Object} srcObj + * The source object + * @param {Object} options + * The options passed to the tech + * @return {string} 'probably', 'maybe', or '' (empty string) + */ + + + Tech.canPlaySource = function canPlaySource(srcObj, options) { + return Tech.canPlayType(srcObj.type); + }; + + /* + * Return whether the argument is a Tech or not. + * Can be passed either a Class like `Html5` or a instance like `player.tech_` + * + * @param {Object} component + * The item to check + * + * @return {boolean} + * Whether it is a tech or not + * - True if it is a tech + * - False if it is not + */ + + + Tech.isTech = function isTech(component) { + return component.prototype instanceof Tech || component instanceof Tech || component === Tech; + }; + + /** + * Registers a `Tech` into a shared list for videojs. + * + * @param {string} name + * Name of the `Tech` to register. + * + * @param {Object} tech + * The `Tech` class to register. + */ + + + Tech.registerTech = function registerTech(name, tech) { + if (!Tech.techs_) { + Tech.techs_ = {}; + } + + if (!Tech.isTech(tech)) { + throw new Error('Tech ' + name + ' must be a Tech'); + } + + if (!Tech.canPlayType) { + throw new Error('Techs must have a static canPlayType method on them'); + } + if (!Tech.canPlaySource) { + throw new Error('Techs must have a static canPlaySource method on them'); + } + + name = toTitleCase(name); + + Tech.techs_[name] = tech; + if (name !== 'Tech') { + // camel case the techName for use in techOrder + Tech.defaultTechOrder_.push(name); + } + return tech; + }; + + /** + * Get a `Tech` from the shared list by name. + * + * @param {string} name + * `camelCase` or `TitleCase` name of the Tech to get + * + * @return {Tech|undefined} + * The `Tech` or undefined if there was no tech with the name requested. + */ + + + Tech.getTech = function getTech(name) { + if (!name) { + return; + } + + name = toTitleCase(name); + + if (Tech.techs_ && Tech.techs_[name]) { + return Tech.techs_[name]; + } + + if (window_1 && window_1.videojs && window_1.videojs[name]) { + log$1.warn('The ' + name + ' tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)'); + return window_1.videojs[name]; + } + }; + + return Tech; + }(Component); + + /** + * Get the {@link VideoTrackList} + * + * @returns {VideoTrackList} + * @method Tech.prototype.videoTracks + */ + + /** + * Get the {@link AudioTrackList} + * + * @returns {AudioTrackList} + * @method Tech.prototype.audioTracks + */ + + /** + * Get the {@link TextTrackList} + * + * @returns {TextTrackList} + * @method Tech.prototype.textTracks + */ + + /** + * Get the remote element {@link TextTrackList} + * + * @returns {TextTrackList} + * @method Tech.prototype.remoteTextTracks + */ + + /** + * Get the remote element {@link HtmlTrackElementList} + * + * @returns {HtmlTrackElementList} + * @method Tech.prototype.remoteTextTrackEls + */ + + ALL.names.forEach(function (name) { + var props = ALL[name]; + + Tech.prototype[props.getterName] = function () { + this[props.privateName] = this[props.privateName] || new props.ListClass(); + return this[props.privateName]; + }; + }); + + /** + * List of associated text tracks + * + * @type {TextTrackList} + * @private + * @property Tech#textTracks_ + */ + + /** + * List of associated audio tracks. + * + * @type {AudioTrackList} + * @private + * @property Tech#audioTracks_ + */ + + /** + * List of associated video tracks. + * + * @type {VideoTrackList} + * @private + * @property Tech#videoTracks_ + */ + + /** + * Boolean indicating whether the `Tech` supports volume control. + * + * @type {boolean} + * @default + */ + Tech.prototype.featuresVolumeControl = true; + + /** + * Boolean indicating whether the `Tech` supports fullscreen resize control. + * Resizing plugins using request fullscreen reloads the plugin + * + * @type {boolean} + * @default + */ + Tech.prototype.featuresFullscreenResize = false; + + /** + * Boolean indicating whether the `Tech` supports changing the speed at which the video + * plays. Examples: + * - Set player to play 2x (twice) as fast + * - Set player to play 0.5x (half) as fast + * + * @type {boolean} + * @default + */ + Tech.prototype.featuresPlaybackRate = false; + + /** + * Boolean indicating whether the `Tech` supports the `progress` event. This is currently + * not triggered by video-js-swf. This will be used to determine if + * {@link Tech#manualProgressOn} should be called. + * + * @type {boolean} + * @default + */ + Tech.prototype.featuresProgressEvents = false; + + /** + * Boolean indicating whether the `Tech` supports the `sourceset` event. + * + * A tech should set this to `true` and then use {@link Tech#triggerSourceset} + * to trigger a {@link Tech#event:sourceset} at the earliest time after getting + * a new source. + * + * @type {boolean} + * @default + */ + Tech.prototype.featuresSourceset = false; + + /** + * Boolean indicating whether the `Tech` supports the `timeupdate` event. This is currently + * not triggered by video-js-swf. This will be used to determine if + * {@link Tech#manualTimeUpdates} should be called. + * + * @type {boolean} + * @default + */ + Tech.prototype.featuresTimeupdateEvents = false; + + /** + * Boolean indicating whether the `Tech` supports the native `TextTrack`s. + * This will help us integrate with native `TextTrack`s if the browser supports them. + * + * @type {boolean} + * @default + */ + Tech.prototype.featuresNativeTextTracks = false; + + /** + * A functional mixin for techs that want to use the Source Handler pattern. + * Source handlers are scripts for handling specific formats. + * The source handler pattern is used for adaptive formats (HLS, DASH) that + * manually load video data and feed it into a Source Buffer (Media Source Extensions) + * Example: `Tech.withSourceHandlers.call(MyTech);` + * + * @param {Tech} _Tech + * The tech to add source handler functions to. + * + * @mixes Tech~SourceHandlerAdditions + */ + Tech.withSourceHandlers = function (_Tech) { + + /** + * Register a source handler + * + * @param {Function} handler + * The source handler class + * + * @param {number} [index] + * Register it at the following index + */ + _Tech.registerSourceHandler = function (handler, index) { + var handlers = _Tech.sourceHandlers; + + if (!handlers) { + handlers = _Tech.sourceHandlers = []; + } + + if (index === undefined) { + // add to the end of the list + index = handlers.length; + } + + handlers.splice(index, 0, handler); + }; + + /** + * Check if the tech can support the given type. Also checks the + * Techs sourceHandlers. + * + * @param {string} type + * The mimetype to check. + * + * @return {string} + * 'probably', 'maybe', or '' (empty string) + */ + _Tech.canPlayType = function (type) { + var handlers = _Tech.sourceHandlers || []; + var can = void 0; + + for (var i = 0; i < handlers.length; i++) { + can = handlers[i].canPlayType(type); + + if (can) { + return can; + } + } + + return ''; + }; + + /** + * Returns the first source handler that supports the source. + * + * TODO: Answer question: should 'probably' be prioritized over 'maybe' + * + * @param {Tech~SourceObject} source + * The source object + * + * @param {Object} options + * The options passed to the tech + * + * @return {SourceHandler|null} + * The first source handler that supports the source or null if + * no SourceHandler supports the source + */ + _Tech.selectSourceHandler = function (source, options) { + var handlers = _Tech.sourceHandlers || []; + var can = void 0; + + for (var i = 0; i < handlers.length; i++) { + can = handlers[i].canHandleSource(source, options); + + if (can) { + return handlers[i]; + } + } + + return null; + }; + + /** + * Check if the tech can support the given source. + * + * @param {Tech~SourceObject} srcObj + * The source object + * + * @param {Object} options + * The options passed to the tech + * + * @return {string} + * 'probably', 'maybe', or '' (empty string) + */ + _Tech.canPlaySource = function (srcObj, options) { + var sh = _Tech.selectSourceHandler(srcObj, options); + + if (sh) { + return sh.canHandleSource(srcObj, options); + } + + return ''; + }; + + /** + * When using a source handler, prefer its implementation of + * any function normally provided by the tech. + */ + var deferrable = ['seekable', 'seeking', 'duration']; + + /** + * A wrapper around {@link Tech#seekable} that will call a `SourceHandler`s seekable + * function if it exists, with a fallback to the Techs seekable function. + * + * @method _Tech.seekable + */ + + /** + * A wrapper around {@link Tech#duration} that will call a `SourceHandler`s duration + * function if it exists, otherwise it will fallback to the techs duration function. + * + * @method _Tech.duration + */ + + deferrable.forEach(function (fnName) { + var originalFn = this[fnName]; + + if (typeof originalFn !== 'function') { + return; + } + + this[fnName] = function () { + if (this.sourceHandler_ && this.sourceHandler_[fnName]) { + return this.sourceHandler_[fnName].apply(this.sourceHandler_, arguments); + } + return originalFn.apply(this, arguments); + }; + }, _Tech.prototype); + + /** + * Create a function for setting the source using a source object + * and source handlers. + * Should never be called unless a source handler was found. + * + * @param {Tech~SourceObject} source + * A source object with src and type keys + */ + _Tech.prototype.setSource = function (source) { + var sh = _Tech.selectSourceHandler(source, this.options_); + + if (!sh) { + // Fall back to a native source hander when unsupported sources are + // deliberately set + if (_Tech.nativeSourceHandler) { + sh = _Tech.nativeSourceHandler; + } else { + log$1.error('No source handler found for the current source.'); + } + } + + // Dispose any existing source handler + this.disposeSourceHandler(); + this.off('dispose', this.disposeSourceHandler); + + if (sh !== _Tech.nativeSourceHandler) { + this.currentSource_ = source; + } + + this.sourceHandler_ = sh.handleSource(source, this, this.options_); + this.on('dispose', this.disposeSourceHandler); + }; + + /** + * Clean up any existing SourceHandlers and listeners when the Tech is disposed. + * + * @listens Tech#dispose + */ + _Tech.prototype.disposeSourceHandler = function () { + // if we have a source and get another one + // then we are loading something new + // than clear all of our current tracks + if (this.currentSource_) { + this.clearTracks(['audio', 'video']); + this.currentSource_ = null; + } + + // always clean up auto-text tracks + this.cleanupAutoTextTracks(); + + if (this.sourceHandler_) { + + if (this.sourceHandler_.dispose) { + this.sourceHandler_.dispose(); + } + + this.sourceHandler_ = null; + } + }; + }; + + // The base Tech class needs to be registered as a Component. It is the only + // Tech that can be registered as a Component. + Component.registerComponent('Tech', Tech); + Tech.registerTech('Tech', Tech); + + /** + * A list of techs that should be added to techOrder on Players + * + * @private + */ + Tech.defaultTechOrder_ = []; + + var middlewares = {}; + var middlewareInstances = {}; + + var TERMINATOR = {}; + + function use(type, middleware) { + middlewares[type] = middlewares[type] || []; + middlewares[type].push(middleware); + } + + function setSource(player, src, next) { + player.setTimeout(function () { + return setSourceHelper(src, middlewares[src.type], next, player); + }, 1); + } + + function setTech(middleware, tech) { + middleware.forEach(function (mw) { + return mw.setTech && mw.setTech(tech); + }); + } + + /** + * Calls a getter on the tech first, through each middleware + * from right to left to the player. + */ + function get$1(middleware, tech, method) { + return middleware.reduceRight(middlewareIterator(method), tech[method]()); + } + + /** + * Takes the argument given to the player and calls the setter method on each + * middleware from left to right to the tech. + */ + function set$1(middleware, tech, method, arg) { + return tech[method](middleware.reduce(middlewareIterator(method), arg)); + } + + /** + * Takes the argument given to the player and calls the `call` version of the method + * on each middleware from left to right. + * Then, call the passed in method on the tech and return the result unchanged + * back to the player, through middleware, this time from right to left. + */ + function mediate(middleware, tech, method) { + var arg = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; + + var callMethod = 'call' + toTitleCase(method); + var middlewareValue = middleware.reduce(middlewareIterator(callMethod), arg); + var terminated = middlewareValue === TERMINATOR; + var returnValue = terminated ? null : tech[method](middlewareValue); + + executeRight(middleware, method, returnValue, terminated); + + return returnValue; + } + + var allowedGetters = { + buffered: 1, + currentTime: 1, + duration: 1, + seekable: 1, + played: 1, + paused: 1 + }; + + var allowedSetters = { + setCurrentTime: 1 + }; + + var allowedMediators = { + play: 1, + pause: 1 + }; + + function middlewareIterator(method) { + return function (value, mw) { + // if the previous middleware terminated, pass along the termination + if (value === TERMINATOR) { + return TERMINATOR; + } + + if (mw[method]) { + return mw[method](value); + } + + return value; + }; + } + + function executeRight(mws, method, value, terminated) { + for (var i = mws.length - 1; i >= 0; i--) { + var mw = mws[i]; + + if (mw[method]) { + mw[method](terminated, value); + } + } + } + + function clearCacheForPlayer(player) { + middlewareInstances[player.id()] = null; + } + + /** + * { + * [playerId]: [[mwFactory, mwInstance], ...] + * } + */ + function getOrCreateFactory(player, mwFactory) { + var mws = middlewareInstances[player.id()]; + var mw = null; + + if (mws === undefined || mws === null) { + mw = mwFactory(player); + middlewareInstances[player.id()] = [[mwFactory, mw]]; + return mw; + } + + for (var i = 0; i < mws.length; i++) { + var _mws$i = mws[i], + mwf = _mws$i[0], + mwi = _mws$i[1]; + + + if (mwf !== mwFactory) { + continue; + } + + mw = mwi; + } + + if (mw === null) { + mw = mwFactory(player); + mws.push([mwFactory, mw]); + } + + return mw; + } + + function setSourceHelper() { + var src = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var middleware = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var next = arguments[2]; + var player = arguments[3]; + var acc = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; + var lastRun = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; + var mwFactory = middleware[0], + mwrest = middleware.slice(1); + + // if mwFactory is a string, then we're at a fork in the road + + if (typeof mwFactory === 'string') { + setSourceHelper(src, middlewares[mwFactory], next, player, acc, lastRun); + + // if we have an mwFactory, call it with the player to get the mw, + // then call the mw's setSource method + } else if (mwFactory) { + var mw = getOrCreateFactory(player, mwFactory); + + mw.setSource(assign({}, src), function (err, _src) { + + // something happened, try the next middleware on the current level + // make sure to use the old src + if (err) { + return setSourceHelper(src, mwrest, next, player, acc, lastRun); + } + + // we've succeeded, now we need to go deeper + acc.push(mw); + + // if it's the same type, continue down the current chain + // otherwise, we want to go down the new chain + setSourceHelper(_src, src.type === _src.type ? mwrest : middlewares[_src.type], next, player, acc, lastRun); + }); + } else if (mwrest.length) { + setSourceHelper(src, mwrest, next, player, acc, lastRun); + } else if (lastRun) { + next(src, acc); + } else { + setSourceHelper(src, middlewares['*'], next, player, acc, true); + } + } + + /** + * Mimetypes + * + * @see http://hul.harvard.edu/ois/////systems/wax/wax-public-help/mimetypes.htm + * @typedef Mimetypes~Kind + * @enum + */ + var MimetypesKind = { + opus: 'video/ogg', + ogv: 'video/ogg', + mp4: 'video/mp4', + mov: 'video/mp4', + m4v: 'video/mp4', + mkv: 'video/x-matroska', + mp3: 'audio/mpeg', + aac: 'audio/aac', + oga: 'audio/ogg', + m3u8: 'application/x-mpegURL' + }; + + /** + * Get the mimetype of a given src url if possible + * + * @param {string} src + * The url to the src + * + * @return {string} + * return the mimetype if it was known or empty string otherwise + */ + var getMimetype = function getMimetype() { + var src = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + + var ext = getFileExtension(src); + var mimetype = MimetypesKind[ext.toLowerCase()]; + + return mimetype || ''; + }; + + /** + * Find the mime type of a given source string if possible. Uses the player + * source cache. + * + * @param {Player} player + * The player object + * + * @param {string} src + * The source string + * + * @return {string} + * The type that was found + */ + var findMimetype = function findMimetype(player, src) { + if (!src) { + return ''; + } + + // 1. check for the type in the `source` cache + if (player.cache_.source.src === src && player.cache_.source.type) { + return player.cache_.source.type; + } + + // 2. see if we have this source in our `currentSources` cache + var matchingSources = player.cache_.sources.filter(function (s) { + return s.src === src; + }); + + if (matchingSources.length) { + return matchingSources[0].type; + } + + // 3. look for the src url in source elements and use the type there + var sources = player.$$('source'); + + for (var i = 0; i < sources.length; i++) { + var s = sources[i]; + + if (s.type && s.src && s.src === src) { + return s.type; + } + } + + // 4. finally fallback to our list of mime types based on src url extension + return getMimetype(src); + }; + + /** + * @module filter-source + */ + + /** + * Filter out single bad source objects or multiple source objects in an + * array. Also flattens nested source object arrays into a 1 dimensional + * array of source objects. + * + * @param {Tech~SourceObject|Tech~SourceObject[]} src + * The src object to filter + * + * @return {Tech~SourceObject[]} + * An array of sourceobjects containing only valid sources + * + * @private + */ + var filterSource = function filterSource(src) { + // traverse array + if (Array.isArray(src)) { + var newsrc = []; + + src.forEach(function (srcobj) { + srcobj = filterSource(srcobj); + + if (Array.isArray(srcobj)) { + newsrc = newsrc.concat(srcobj); + } else if (isObject(srcobj)) { + newsrc.push(srcobj); + } + }); + + src = newsrc; + } else if (typeof src === 'string' && src.trim()) { + // convert string into object + src = [fixSource({src: src})]; + } else if (isObject(src) && typeof src.src === 'string' && src.src && src.src.trim()) { + // src is already valid + src = [fixSource(src)]; + } else { + // invalid source, turn it into an empty array + src = []; + } + + return src; + }; + + /** + * Checks src mimetype, adding it when possible + * + * @param {Tech~SourceObject} src + * The src object to check + * @return {Tech~SourceObject} + * src Object with known type + */ + function fixSource(src) { + var mimetype = getMimetype(src.src); + + if (!src.type && mimetype) { + src.type = mimetype; + } + + return src; + } + + /** + * @file loader.js + */ + + /** + * The `MediaLoader` is the `Component` that decides which playback technology to load + * when a player is initialized. + * + * @extends Component + */ + + var MediaLoader = function (_Component) { + inherits(MediaLoader, _Component); + + /** + * Create an instance of this class. + * + * @param {Player} player + * The `Player` that this class should attach to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Component~ReadyCallback} [ready] + * The function that is run when this component is ready. + */ + function MediaLoader(player, options, ready) { + classCallCheck(this, MediaLoader); + + // MediaLoader has no element + var options_ = mergeOptions({createEl: false}, options); + + // If there are no sources when the player is initialized, + // load the first supported playback technology. + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options_, ready)); + + if (!options.playerOptions.sources || options.playerOptions.sources.length === 0) { + for (var i = 0, j = options.playerOptions.techOrder; i < j.length; i++) { + var techName = toTitleCase(j[i]); + var tech = Tech.getTech(techName); + + // Support old behavior of techs being registered as components. + // Remove once that deprecated behavior is removed. + if (!techName) { + tech = Component.getComponent(techName); + } + + // Check if the browser supports this technology + if (tech && tech.isSupported()) { + player.loadTech_(techName); + break; + } + } + } else { + // Loop through playback technologies (HTML5, Flash) and check for support. + // Then load the best source. + // A few assumptions here: + // All playback technologies respect preload false. + player.src(options.playerOptions.sources); + } + return _this; + } + + return MediaLoader; + }(Component); + + Component.registerComponent('MediaLoader', MediaLoader); + + /** + * @file clickable-component.js + */ + + /** + * Clickable Component which is clickable or keyboard actionable, + * but is not a native HTML button. + * + * @extends Component + */ + + var ClickableComponent = function (_Component) { + inherits(ClickableComponent, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function ClickableComponent(player, options) { + classCallCheck(this, ClickableComponent); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + _this.emitTapEvents(); + + _this.enable(); + return _this; + } + + /** + * Create the `Component`s DOM element. + * + * @param {string} [tag=div] + * The element's node type. + * + * @param {Object} [props={}] + * An object of properties that should be set on the element. + * + * @param {Object} [attributes={}] + * An object of attributes that should be set on the element. + * + * @return {Element} + * The element that gets created. + */ + + + ClickableComponent.prototype.createEl = function createEl$$1() { + var tag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'div'; + var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + props = assign({ + innerHTML: '<span aria-hidden="true" class="vjs-icon-placeholder"></span>', + className: this.buildCSSClass(), + tabIndex: 0 + }, props); + + if (tag === 'button') { + log$1.error('Creating a ClickableComponent with an HTML element of ' + tag + ' is not supported; use a Button instead.'); + } + + // Add ARIA attributes for clickable element which is not a native HTML button + attributes = assign({ + role: 'button' + }, attributes); + + this.tabIndex_ = props.tabIndex; + + var el = _Component.prototype.createEl.call(this, tag, props, attributes); + + this.createControlTextEl(el); + + return el; + }; + + ClickableComponent.prototype.dispose = function dispose() { + // remove controlTextEl_ on dispose + this.controlTextEl_ = null; + + _Component.prototype.dispose.call(this); + }; + + /** + * Create a control text element on this `Component` + * + * @param {Element} [el] + * Parent element for the control text. + * + * @return {Element} + * The control text element that gets created. + */ + + + ClickableComponent.prototype.createControlTextEl = function createControlTextEl(el) { + this.controlTextEl_ = createEl('span', { + className: 'vjs-control-text' + }, { + // let the screen reader user know that the text of the element may change + 'aria-live': 'polite' + }); + + if (el) { + el.appendChild(this.controlTextEl_); + } + + this.controlText(this.controlText_, el); + + return this.controlTextEl_; + }; + + /** + * Get or set the localize text to use for the controls on the `Component`. + * + * @param {string} [text] + * Control text for element. + * + * @param {Element} [el=this.el()] + * Element to set the title on. + * + * @return {string} + * - The control text when getting + */ + + + ClickableComponent.prototype.controlText = function controlText(text) { + var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.el(); + + if (text === undefined) { + return this.controlText_ || 'Need Text'; + } + + var localizedText = this.localize(text); + + this.controlText_ = text; + textContent(this.controlTextEl_, localizedText); + if (!this.nonIconControl) { + // Set title attribute if only an icon is shown + el.setAttribute('title', localizedText); + } + }; + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + ClickableComponent.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-control vjs-button ' + _Component.prototype.buildCSSClass.call(this); + }; + + /** + * Enable this `Component`s element. + */ + + + ClickableComponent.prototype.enable = function enable() { + if (!this.enabled_) { + this.enabled_ = true; + this.removeClass('vjs-disabled'); + this.el_.setAttribute('aria-disabled', 'false'); + if (typeof this.tabIndex_ !== 'undefined') { + this.el_.setAttribute('tabIndex', this.tabIndex_); + } + this.on(['tap', 'click'], this.handleClick); + this.on('focus', this.handleFocus); + this.on('blur', this.handleBlur); + } + }; + + /** + * Disable this `Component`s element. + */ + + + ClickableComponent.prototype.disable = function disable() { + this.enabled_ = false; + this.addClass('vjs-disabled'); + this.el_.setAttribute('aria-disabled', 'true'); + if (typeof this.tabIndex_ !== 'undefined') { + this.el_.removeAttribute('tabIndex'); + } + this.off(['tap', 'click'], this.handleClick); + this.off('focus', this.handleFocus); + this.off('blur', this.handleBlur); + }; + + /** + * This gets called when a `ClickableComponent` gets: + * - Clicked (via the `click` event, listening starts in the constructor) + * - Tapped (via the `tap` event, listening starts in the constructor) + * - The following things happen in order: + * 1. {@link ClickableComponent#handleFocus} is called via a `focus` event on the + * `ClickableComponent`. + * 2. {@link ClickableComponent#handleFocus} adds a listener for `keydown` on using + * {@link ClickableComponent#handleKeyPress}. + * 3. `ClickableComponent` has not had a `blur` event (`blur` means that focus was lost). The user presses + * the space or enter key. + * 4. {@link ClickableComponent#handleKeyPress} calls this function with the `keydown` + * event as a parameter. + * + * @param {EventTarget~Event} event + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + * @abstract + */ + + + ClickableComponent.prototype.handleClick = function handleClick(event) { + }; + + /** + * This gets called when a `ClickableComponent` gains focus via a `focus` event. + * Turns on listening for `keydown` events. When they happen it + * calls `this.handleKeyPress`. + * + * @param {EventTarget~Event} event + * The `focus` event that caused this function to be called. + * + * @listens focus + */ + + + ClickableComponent.prototype.handleFocus = function handleFocus(event) { + on(document_1, 'keydown', bind(this, this.handleKeyPress)); + }; + + /** + * Called when this ClickableComponent has focus and a key gets pressed down. By + * default it will call `this.handleClick` when the key is space or enter. + * + * @param {EventTarget~Event} event + * The `keydown` event that caused this function to be called. + * + * @listens keydown + */ + + + ClickableComponent.prototype.handleKeyPress = function handleKeyPress(event) { + + // Support Space (32) or Enter (13) key operation to fire a click event + if (event.which === 32 || event.which === 13) { + event.preventDefault(); + this.trigger('click'); + } else if (_Component.prototype.handleKeyPress) { + + // Pass keypress handling up for unsupported keys + _Component.prototype.handleKeyPress.call(this, event); + } + }; + + /** + * Called when a `ClickableComponent` loses focus. Turns off the listener for + * `keydown` events. Which Stops `this.handleKeyPress` from getting called. + * + * @param {EventTarget~Event} event + * The `blur` event that caused this function to be called. + * + * @listens blur + */ + + + ClickableComponent.prototype.handleBlur = function handleBlur(event) { + off(document_1, 'keydown', bind(this, this.handleKeyPress)); + }; + + return ClickableComponent; + }(Component); + + Component.registerComponent('ClickableComponent', ClickableComponent); + + /** + * @file poster-image.js + */ + + /** + * A `ClickableComponent` that handles showing the poster image for the player. + * + * @extends ClickableComponent + */ + + var PosterImage = function (_ClickableComponent) { + inherits(PosterImage, _ClickableComponent); + + /** + * Create an instance of this class. + * + * @param {Player} player + * The `Player` that this class should attach to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function PosterImage(player, options) { + classCallCheck(this, PosterImage); + + var _this = possibleConstructorReturn(this, _ClickableComponent.call(this, player, options)); + + _this.update(); + player.on('posterchange', bind(_this, _this.update)); + return _this; + } + + /** + * Clean up and dispose of the `PosterImage`. + */ + + + PosterImage.prototype.dispose = function dispose() { + this.player().off('posterchange', this.update); + _ClickableComponent.prototype.dispose.call(this); + }; + + /** + * Create the `PosterImage`s DOM element. + * + * @return {Element} + * The element that gets created. + */ + + + PosterImage.prototype.createEl = function createEl$$1() { + var el = createEl('div', { + className: 'vjs-poster', + + // Don't want poster to be tabbable. + tabIndex: -1 + }); + + return el; + }; + + /** + * An {@link EventTarget~EventListener} for {@link Player#posterchange} events. + * + * @listens Player#posterchange + * + * @param {EventTarget~Event} [event] + * The `Player#posterchange` event that triggered this function. + */ + + + PosterImage.prototype.update = function update(event) { + var url = this.player().poster(); + + this.setSrc(url); + + // If there's no poster source we should display:none on this component + // so it's not still clickable or right-clickable + if (url) { + this.show(); + } else { + this.hide(); + } + }; + + /** + * Set the source of the `PosterImage` depending on the display method. + * + * @param {string} url + * The URL to the source for the `PosterImage`. + */ + + + PosterImage.prototype.setSrc = function setSrc(url) { + var backgroundImage = ''; + + // Any falsy value should stay as an empty string, otherwise + // this will throw an extra error + if (url) { + backgroundImage = 'url("' + url + '")'; + } + + this.el_.style.backgroundImage = backgroundImage; + }; + + /** + * An {@link EventTarget~EventListener} for clicks on the `PosterImage`. See + * {@link ClickableComponent#handleClick} for instances where this will be triggered. + * + * @listens tap + * @listens click + * @listens keydown + * + * @param {EventTarget~Event} event + + The `click`, `tap` or `keydown` event that caused this function to be called. + */ + + + PosterImage.prototype.handleClick = function handleClick(event) { + // We don't want a click to trigger playback when controls are disabled + if (!this.player_.controls()) { + return; + } + + if (this.player_.paused()) { + this.player_.play(); + } else { + this.player_.pause(); + } + }; + + return PosterImage; + }(ClickableComponent); + + Component.registerComponent('PosterImage', PosterImage); + + /** + * @file text-track-display.js + */ + + var darkGray = '#222'; + var lightGray = '#ccc'; + var fontMap = { + monospace: 'monospace', + sansSerif: 'sans-serif', + serif: 'serif', + monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace', + monospaceSerif: '"Courier New", monospace', + proportionalSansSerif: 'sans-serif', + proportionalSerif: 'serif', + casual: '"Comic Sans MS", Impact, fantasy', + script: '"Monotype Corsiva", cursive', + smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif' + }; + + /** + * Construct an rgba color from a given hex color code. + * + * @param {number} color + * Hex number for color, like #f0e. + * + * @param {number} opacity + * Value for opacity, 0.0 - 1.0. + * + * @return {string} + * The rgba color that was created, like 'rgba(255, 0, 0, 0.3)'. + * + * @private + */ + function constructColor(color, opacity) { + return 'rgba(' + + // color looks like "#f0e" + parseInt(color[1] + color[1], 16) + ',' + parseInt(color[2] + color[2], 16) + ',' + parseInt(color[3] + color[3], 16) + ',' + opacity + ')'; + } + + /** + * Try to update the style of a DOM element. Some style changes will throw an error, + * particularly in IE8. Those should be noops. + * + * @param {Element} el + * The DOM element to be styled. + * + * @param {string} style + * The CSS property on the element that should be styled. + * + * @param {string} rule + * The style rule that should be applied to the property. + * + * @private + */ + function tryUpdateStyle(el, style, rule) { + try { + el.style[style] = rule; + } catch (e) { + + // Satisfies linter. + return; + } + } + + /** + * The component for displaying text track cues. + * + * @extends Component + */ + + var TextTrackDisplay = function (_Component) { + inherits(TextTrackDisplay, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Component~ReadyCallback} [ready] + * The function to call when `TextTrackDisplay` is ready. + */ + function TextTrackDisplay(player, options, ready) { + classCallCheck(this, TextTrackDisplay); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options, ready)); + + player.on('loadstart', bind(_this, _this.toggleDisplay)); + player.on('texttrackchange', bind(_this, _this.updateDisplay)); + player.on('loadstart', bind(_this, _this.preselectTrack)); + + // This used to be called during player init, but was causing an error + // if a track should show by default and the display hadn't loaded yet. + // Should probably be moved to an external track loader when we support + // tracks that don't need a display. + player.ready(bind(_this, function () { + if (player.tech_ && player.tech_.featuresNativeTextTracks) { + this.hide(); + return; + } + + player.on('fullscreenchange', bind(this, this.updateDisplay)); + + var tracks = this.options_.playerOptions.tracks || []; + + for (var i = 0; i < tracks.length; i++) { + this.player_.addRemoteTextTrack(tracks[i], true); + } + + this.preselectTrack(); + })); + return _this; + } + + /** + * Preselect a track following this precedence: + * - matches the previously selected {@link TextTrack}'s language and kind + * - matches the previously selected {@link TextTrack}'s language only + * - is the first default captions track + * - is the first default descriptions track + * + * @listens Player#loadstart + */ + + + TextTrackDisplay.prototype.preselectTrack = function preselectTrack() { + var modes = {captions: 1, subtitles: 1}; + var trackList = this.player_.textTracks(); + var userPref = this.player_.cache_.selectedLanguage; + var firstDesc = void 0; + var firstCaptions = void 0; + var preferredTrack = void 0; + + for (var i = 0; i < trackList.length; i++) { + var track = trackList[i]; + + if (userPref && userPref.enabled && userPref.language === track.language) { + // Always choose the track that matches both language and kind + if (track.kind === userPref.kind) { + preferredTrack = track; + // or choose the first track that matches language + } else if (!preferredTrack) { + preferredTrack = track; + } + + // clear everything if offTextTrackMenuItem was clicked + } else if (userPref && !userPref.enabled) { + preferredTrack = null; + firstDesc = null; + firstCaptions = null; + } else if (track.default) { + if (track.kind === 'descriptions' && !firstDesc) { + firstDesc = track; + } else if (track.kind in modes && !firstCaptions) { + firstCaptions = track; + } + } + } + + // The preferredTrack matches the user preference and takes + // precedence over all the other tracks. + // So, display the preferredTrack before the first default track + // and the subtitles/captions track before the descriptions track + if (preferredTrack) { + preferredTrack.mode = 'showing'; + } else if (firstCaptions) { + firstCaptions.mode = 'showing'; + } else if (firstDesc) { + firstDesc.mode = 'showing'; + } + }; + + /** + * Turn display of {@link TextTrack}'s from the current state into the other state. + * There are only two states: + * - 'shown' + * - 'hidden' + * + * @listens Player#loadstart + */ + + + TextTrackDisplay.prototype.toggleDisplay = function toggleDisplay() { + if (this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks) { + this.hide(); + } else { + this.show(); + } + }; + + /** + * Create the {@link Component}'s DOM element. + * + * @return {Element} + * The element that was created. + */ + + + TextTrackDisplay.prototype.createEl = function createEl() { + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-text-track-display' + }, { + 'aria-live': 'off', + 'aria-atomic': 'true' + }); + }; + + /** + * Clear all displayed {@link TextTrack}s. + */ + + + TextTrackDisplay.prototype.clearDisplay = function clearDisplay() { + if (typeof window_1.WebVTT === 'function') { + window_1.WebVTT.processCues(window_1, [], this.el_); + } + }; + + /** + * Update the displayed TextTrack when a either a {@link Player#texttrackchange} or + * a {@link Player#fullscreenchange} is fired. + * + * @listens Player#texttrackchange + * @listens Player#fullscreenchange + */ + + + TextTrackDisplay.prototype.updateDisplay = function updateDisplay() { + var tracks = this.player_.textTracks(); + + this.clearDisplay(); + + // Track display prioritization model: if multiple tracks are 'showing', + // display the first 'subtitles' or 'captions' track which is 'showing', + // otherwise display the first 'descriptions' track which is 'showing' + + var descriptionsTrack = null; + var captionsSubtitlesTrack = null; + var i = tracks.length; + + while (i--) { + var track = tracks[i]; + + if (track.mode === 'showing') { + if (track.kind === 'descriptions') { + descriptionsTrack = track; + } else { + captionsSubtitlesTrack = track; + } + } + } + + if (captionsSubtitlesTrack) { + if (this.getAttribute('aria-live') !== 'off') { + this.setAttribute('aria-live', 'off'); + } + this.updateForTrack(captionsSubtitlesTrack); + } else if (descriptionsTrack) { + if (this.getAttribute('aria-live') !== 'assertive') { + this.setAttribute('aria-live', 'assertive'); + } + this.updateForTrack(descriptionsTrack); + } + }; + + /** + * Add an {@link TextTrack} to to the {@link Tech}s {@link TextTrackList}. + * + * @param {TextTrack} track + * Text track object to be added to the list. + */ + + + TextTrackDisplay.prototype.updateForTrack = function updateForTrack(track) { + if (typeof window_1.WebVTT !== 'function' || !track.activeCues) { + return; + } + + var cues = []; + + for (var _i = 0; _i < track.activeCues.length; _i++) { + cues.push(track.activeCues[_i]); + } + + window_1.WebVTT.processCues(window_1, cues, this.el_); + + if (!this.player_.textTrackSettings) { + return; + } + + var overrides = this.player_.textTrackSettings.getValues(); + + var i = cues.length; + + while (i--) { + var cue = cues[i]; + + if (!cue) { + continue; + } + + var cueDiv = cue.displayState; + + if (overrides.color) { + cueDiv.firstChild.style.color = overrides.color; + } + if (overrides.textOpacity) { + tryUpdateStyle(cueDiv.firstChild, 'color', constructColor(overrides.color || '#fff', overrides.textOpacity)); + } + if (overrides.backgroundColor) { + cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor; + } + if (overrides.backgroundOpacity) { + tryUpdateStyle(cueDiv.firstChild, 'backgroundColor', constructColor(overrides.backgroundColor || '#000', overrides.backgroundOpacity)); + } + if (overrides.windowColor) { + if (overrides.windowOpacity) { + tryUpdateStyle(cueDiv, 'backgroundColor', constructColor(overrides.windowColor, overrides.windowOpacity)); + } else { + cueDiv.style.backgroundColor = overrides.windowColor; + } + } + if (overrides.edgeStyle) { + if (overrides.edgeStyle === 'dropshadow') { + cueDiv.firstChild.style.textShadow = '2px 2px 3px ' + darkGray + ', 2px 2px 4px ' + darkGray + ', 2px 2px 5px ' + darkGray; + } else if (overrides.edgeStyle === 'raised') { + cueDiv.firstChild.style.textShadow = '1px 1px ' + darkGray + ', 2px 2px ' + darkGray + ', 3px 3px ' + darkGray; + } else if (overrides.edgeStyle === 'depressed') { + cueDiv.firstChild.style.textShadow = '1px 1px ' + lightGray + ', 0 1px ' + lightGray + ', -1px -1px ' + darkGray + ', 0 -1px ' + darkGray; + } else if (overrides.edgeStyle === 'uniform') { + cueDiv.firstChild.style.textShadow = '0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray; + } + } + if (overrides.fontPercent && overrides.fontPercent !== 1) { + var fontSize = window_1.parseFloat(cueDiv.style.fontSize); + + cueDiv.style.fontSize = fontSize * overrides.fontPercent + 'px'; + cueDiv.style.height = 'auto'; + cueDiv.style.top = 'auto'; + cueDiv.style.bottom = '2px'; + } + if (overrides.fontFamily && overrides.fontFamily !== 'default') { + if (overrides.fontFamily === 'small-caps') { + cueDiv.firstChild.style.fontVariant = 'small-caps'; + } else { + cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily]; + } + } + } + }; + + return TextTrackDisplay; + }(Component); + + Component.registerComponent('TextTrackDisplay', TextTrackDisplay); + + /** + * @file loading-spinner.js + */ + + /** + * A loading spinner for use during waiting/loading events. + * + * @extends Component + */ + + var LoadingSpinner = function (_Component) { + inherits(LoadingSpinner, _Component); + + function LoadingSpinner() { + classCallCheck(this, LoadingSpinner); + return possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + /** + * Create the `LoadingSpinner`s DOM element. + * + * @return {Element} + * The dom element that gets created. + */ + LoadingSpinner.prototype.createEl = function createEl$$1() { + var isAudio = this.player_.isAudio(); + var playerType = this.localize(isAudio ? 'Audio Player' : 'Video Player'); + var controlText = createEl('span', { + className: 'vjs-control-text', + innerHTML: this.localize('{1} is loading.', [playerType]) + }); + + var el = _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-loading-spinner', + dir: 'ltr' + }); + + el.appendChild(controlText); + + return el; + }; + + return LoadingSpinner; + }(Component); + + Component.registerComponent('LoadingSpinner', LoadingSpinner); + + /** + * @file button.js + */ + + /** + * Base class for all buttons. + * + * @extends ClickableComponent + */ + + var Button = function (_ClickableComponent) { + inherits(Button, _ClickableComponent); + + function Button() { + classCallCheck(this, Button); + return possibleConstructorReturn(this, _ClickableComponent.apply(this, arguments)); + } + + /** + * Create the `Button`s DOM element. + * + * @param {string} [tag="button"] + * The element's node type. This argument is IGNORED: no matter what + * is passed, it will always create a `button` element. + * + * @param {Object} [props={}] + * An object of properties that should be set on the element. + * + * @param {Object} [attributes={}] + * An object of attributes that should be set on the element. + * + * @return {Element} + * The element that gets created. + */ + Button.prototype.createEl = function createEl(tag) { + var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + tag = 'button'; + + props = assign({ + innerHTML: '<span aria-hidden="true" class="vjs-icon-placeholder"></span>', + className: this.buildCSSClass() + }, props); + + // Add attributes for button element + attributes = assign({ + + // Necessary since the default button type is "submit" + type: 'button' + }, attributes); + + var el = Component.prototype.createEl.call(this, tag, props, attributes); + + this.createControlTextEl(el); + + return el; + }; + + /** + * Add a child `Component` inside of this `Button`. + * + * @param {string|Component} child + * The name or instance of a child to add. + * + * @param {Object} [options={}] + * The key/value store of options that will get passed to children of + * the child. + * + * @return {Component} + * The `Component` that gets added as a child. When using a string the + * `Component` will get created by this process. + * + * @deprecated since version 5 + */ + + + Button.prototype.addChild = function addChild(child) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var className = this.constructor.name; + + log$1.warn('Adding an actionable (user controllable) child to a Button (' + className + ') is not supported; use a ClickableComponent instead.'); + + // Avoid the error message generated by ClickableComponent's addChild method + return Component.prototype.addChild.call(this, child, options); + }; + + /** + * Enable the `Button` element so that it can be activated or clicked. Use this with + * {@link Button#disable}. + */ + + + Button.prototype.enable = function enable() { + _ClickableComponent.prototype.enable.call(this); + this.el_.removeAttribute('disabled'); + }; + + /** + * Disable the `Button` element so that it cannot be activated or clicked. Use this with + * {@link Button#enable}. + */ + + + Button.prototype.disable = function disable() { + _ClickableComponent.prototype.disable.call(this); + this.el_.setAttribute('disabled', 'disabled'); + }; + + /** + * This gets called when a `Button` has focus and `keydown` is triggered via a key + * press. + * + * @param {EventTarget~Event} event + * The event that caused this function to get called. + * + * @listens keydown + */ + + + Button.prototype.handleKeyPress = function handleKeyPress(event) { + + // Ignore Space (32) or Enter (13) key operation, which is handled by the browser for a button. + if (event.which === 32 || event.which === 13) { + return; + } + + // Pass keypress handling up for unsupported keys + _ClickableComponent.prototype.handleKeyPress.call(this, event); + }; + + return Button; + }(ClickableComponent); + + Component.registerComponent('Button', Button); + + /** + * @file big-play-button.js + */ + + /** + * The initial play button that shows before the video has played. The hiding of the + * `BigPlayButton` get done via CSS and `Player` states. + * + * @extends Button + */ + + var BigPlayButton = function (_Button) { + inherits(BigPlayButton, _Button); + + function BigPlayButton(player, options) { + classCallCheck(this, BigPlayButton); + + var _this = possibleConstructorReturn(this, _Button.call(this, player, options)); + + _this.mouseused_ = false; + + _this.on('mousedown', _this.handleMouseDown); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. Always returns 'vjs-big-play-button'. + */ + + + BigPlayButton.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-big-play-button'; + }; + + /** + * This gets called when a `BigPlayButton` "clicked". See {@link ClickableComponent} + * for more detailed information on what a click can be. + * + * @param {EventTarget~Event} event + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + BigPlayButton.prototype.handleClick = function handleClick(event) { + var playPromise = this.player_.play(); + + // exit early if clicked via the mouse + if (this.mouseused_ && event.clientX && event.clientY) { + return; + } + + var cb = this.player_.getChild('controlBar'); + var playToggle = cb && cb.getChild('playToggle'); + + if (!playToggle) { + this.player_.focus(); + return; + } + + var playFocus = function playFocus() { + return playToggle.focus(); + }; + + if (isPromise(playPromise)) { + playPromise.then(playFocus, function () { + }); + } else { + this.setTimeout(playFocus, 1); + } + }; + + BigPlayButton.prototype.handleKeyPress = function handleKeyPress(event) { + this.mouseused_ = false; + + _Button.prototype.handleKeyPress.call(this, event); + }; + + BigPlayButton.prototype.handleMouseDown = function handleMouseDown(event) { + this.mouseused_ = true; + }; + + return BigPlayButton; + }(Button); + + /** + * The text that should display over the `BigPlayButton`s controls. Added to for localization. + * + * @type {string} + * @private + */ + + + BigPlayButton.prototype.controlText_ = 'Play Video'; + + Component.registerComponent('BigPlayButton', BigPlayButton); + + /** + * @file close-button.js + */ + + /** + * The `CloseButton` is a `{@link Button}` that fires a `close` event when + * it gets clicked. + * + * @extends Button + */ + + var CloseButton = function (_Button) { + inherits(CloseButton, _Button); + + /** + * Creates an instance of the this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function CloseButton(player, options) { + classCallCheck(this, CloseButton); + + var _this = possibleConstructorReturn(this, _Button.call(this, player, options)); + + _this.controlText(options && options.controlText || _this.localize('Close')); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + CloseButton.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-close-button ' + _Button.prototype.buildCSSClass.call(this); + }; + + /** + * This gets called when a `CloseButton` gets clicked. See + * {@link ClickableComponent#handleClick} for more information on when this will be + * triggered + * + * @param {EventTarget~Event} event + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + * @fires CloseButton#close + */ + + + CloseButton.prototype.handleClick = function handleClick(event) { + + /** + * Triggered when the a `CloseButton` is clicked. + * + * @event CloseButton#close + * @type {EventTarget~Event} + * + * @property {boolean} [bubbles=false] + * set to false so that the close event does not + * bubble up to parents if there is no listener + */ + this.trigger({type: 'close', bubbles: false}); + }; + + return CloseButton; + }(Button); + + Component.registerComponent('CloseButton', CloseButton); + + /** + * @file play-toggle.js + */ + + /** + * Button to toggle between play and pause. + * + * @extends Button + */ + + var PlayToggle = function (_Button) { + inherits(PlayToggle, _Button); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function PlayToggle(player, options) { + classCallCheck(this, PlayToggle); + + var _this = possibleConstructorReturn(this, _Button.call(this, player, options)); + + _this.on(player, 'play', _this.handlePlay); + _this.on(player, 'pause', _this.handlePause); + _this.on(player, 'ended', _this.handleEnded); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + PlayToggle.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-play-control ' + _Button.prototype.buildCSSClass.call(this); + }; + + /** + * This gets called when an `PlayToggle` is "clicked". See + * {@link ClickableComponent} for more detailed information on what a click can be. + * + * @param {EventTarget~Event} [event] + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + PlayToggle.prototype.handleClick = function handleClick(event) { + if (this.player_.paused()) { + this.player_.play(); + } else { + this.player_.pause(); + } + }; + + /** + * This gets called once after the video has ended and the user seeks so that + * we can change the replay button back to a play button. + * + * @param {EventTarget~Event} [event] + * The event that caused this function to run. + * + * @listens Player#seeked + */ + + + PlayToggle.prototype.handleSeeked = function handleSeeked(event) { + this.removeClass('vjs-ended'); + + if (this.player_.paused()) { + this.handlePause(event); + } else { + this.handlePlay(event); + } + }; + + /** + * Add the vjs-playing class to the element so it can change appearance. + * + * @param {EventTarget~Event} [event] + * The event that caused this function to run. + * + * @listens Player#play + */ + + + PlayToggle.prototype.handlePlay = function handlePlay(event) { + this.removeClass('vjs-ended'); + this.removeClass('vjs-paused'); + this.addClass('vjs-playing'); + // change the button text to "Pause" + this.controlText('Pause'); + }; + + /** + * Add the vjs-paused class to the element so it can change appearance. + * + * @param {EventTarget~Event} [event] + * The event that caused this function to run. + * + * @listens Player#pause + */ + + + PlayToggle.prototype.handlePause = function handlePause(event) { + this.removeClass('vjs-playing'); + this.addClass('vjs-paused'); + // change the button text to "Play" + this.controlText('Play'); + }; + + /** + * Add the vjs-ended class to the element so it can change appearance + * + * @param {EventTarget~Event} [event] + * The event that caused this function to run. + * + * @listens Player#ended + */ + + + PlayToggle.prototype.handleEnded = function handleEnded(event) { + this.removeClass('vjs-playing'); + this.addClass('vjs-ended'); + // change the button text to "Replay" + this.controlText('Replay'); + + // on the next seek remove the replay button + this.one(this.player_, 'seeked', this.handleSeeked); + }; + + return PlayToggle; + }(Button); + + /** + * The text that should display over the `PlayToggle`s controls. Added for localization. + * + * @type {string} + * @private + */ + + + PlayToggle.prototype.controlText_ = 'Play'; + + Component.registerComponent('PlayToggle', PlayToggle); + + /** + * @file format-time.js + * @module format-time + */ + + /** + * Format seconds as a time string, H:MM:SS or M:SS. Supplying a guide (in seconds) + * will force a number of leading zeros to cover the length of the guide. + * + * @param {number} seconds + * Number of seconds to be turned into a string + * + * @param {number} guide + * Number (in seconds) to model the string after + * + * @return {string} + * Time formatted as H:MM:SS or M:SS + */ + var defaultImplementation = function defaultImplementation(seconds, guide) { + seconds = seconds < 0 ? 0 : seconds; + var s = Math.floor(seconds % 60); + var m = Math.floor(seconds / 60 % 60); + var h = Math.floor(seconds / 3600); + var gm = Math.floor(guide / 60 % 60); + var gh = Math.floor(guide / 3600); + + // handle invalid times + if (isNaN(seconds) || seconds === Infinity) { + // '-' is false for all relational operators (e.g. <, >=) so this setting + // will add the minimum number of fields specified by the guide + h = m = s = '-'; + } + + // Check if we need to show hours + h = h > 0 || gh > 0 ? h + ':' : ''; + + // If hours are showing, we may need to add a leading zero. + // Always show at least one digit of minutes. + m = ((h || gm >= 10) && m < 10 ? '0' + m : m) + ':'; + + // Check if leading zero is need for seconds + s = s < 10 ? '0' + s : s; + + return h + m + s; + }; + + var implementation = defaultImplementation; + + /** + * Replaces the default formatTime implementation with a custom implementation. + * + * @param {Function} customImplementation + * A function which will be used in place of the default formatTime implementation. + * Will receive the current time in seconds and the guide (in seconds) as arguments. + */ + function setFormatTime(customImplementation) { + implementation = customImplementation; + } + + /** + * Resets formatTime to the default implementation. + */ + function resetFormatTime() { + implementation = defaultImplementation; + } + + function formatTime(seconds) { + var guide = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : seconds; + + return implementation(seconds, guide); + } + + /** + * @file time-display.js + */ + + /** + * Displays the time left in the video + * + * @extends Component + */ + + var TimeDisplay = function (_Component) { + inherits(TimeDisplay, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function TimeDisplay(player, options) { + classCallCheck(this, TimeDisplay); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + _this.throttledUpdateContent = throttle(bind(_this, _this.updateContent), 25); + _this.on(player, 'timeupdate', _this.throttledUpdateContent); + return _this; + } + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + TimeDisplay.prototype.createEl = function createEl$$1(plainName) { + var className = this.buildCSSClass(); + var el = _Component.prototype.createEl.call(this, 'div', { + className: className + ' vjs-time-control vjs-control', + innerHTML: '<span class="vjs-control-text">' + this.localize(this.labelText_) + '\xA0</span>' + }); + + this.contentEl_ = createEl('span', { + className: className + '-display' + }, { + // tell screen readers not to automatically read the time as it changes + 'aria-live': 'off' + }); + + this.updateTextNode_(); + el.appendChild(this.contentEl_); + return el; + }; + + TimeDisplay.prototype.dispose = function dispose() { + this.contentEl_ = null; + this.textNode_ = null; + + _Component.prototype.dispose.call(this); + }; + + /** + * Updates the "remaining time" text node with new content using the + * contents of the `formattedTime_` property. + * + * @private + */ + + + TimeDisplay.prototype.updateTextNode_ = function updateTextNode_() { + if (!this.contentEl_) { + return; + } + + while (this.contentEl_.firstChild) { + this.contentEl_.removeChild(this.contentEl_.firstChild); + } + + this.textNode_ = document_1.createTextNode(this.formattedTime_ || this.formatTime_(0)); + this.contentEl_.appendChild(this.textNode_); + }; + + /** + * Generates a formatted time for this component to use in display. + * + * @param {number} time + * A numeric time, in seconds. + * + * @return {string} + * A formatted time + * + * @private + */ + + + TimeDisplay.prototype.formatTime_ = function formatTime_(time) { + return formatTime(time); + }; + + /** + * Updates the time display text node if it has what was passed in changed + * the formatted time. + * + * @param {number} time + * The time to update to + * + * @private + */ + + + TimeDisplay.prototype.updateFormattedTime_ = function updateFormattedTime_(time) { + var formattedTime = this.formatTime_(time); + + if (formattedTime === this.formattedTime_) { + return; + } + + this.formattedTime_ = formattedTime; + this.requestAnimationFrame(this.updateTextNode_); + }; + + /** + * To be filled out in the child class, should update the displayed time + * in accordance with the fact that the current time has changed. + * + * @param {EventTarget~Event} [event] + * The `timeupdate` event that caused this to run. + * + * @listens Player#timeupdate + */ + + + TimeDisplay.prototype.updateContent = function updateContent(event) { + }; + + return TimeDisplay; + }(Component); + + /** + * The text that is added to the `TimeDisplay` for screen reader users. + * + * @type {string} + * @private + */ + + + TimeDisplay.prototype.labelText_ = 'Time'; + + /** + * The text that should display over the `TimeDisplay`s controls. Added to for localization. + * + * @type {string} + * @private + * + * @deprecated in v7; controlText_ is not used in non-active display Components + */ + TimeDisplay.prototype.controlText_ = 'Time'; + + Component.registerComponent('TimeDisplay', TimeDisplay); + + /** + * @file current-time-display.js + */ + + /** + * Displays the current time + * + * @extends Component + */ + + var CurrentTimeDisplay = function (_TimeDisplay) { + inherits(CurrentTimeDisplay, _TimeDisplay); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function CurrentTimeDisplay(player, options) { + classCallCheck(this, CurrentTimeDisplay); + + var _this = possibleConstructorReturn(this, _TimeDisplay.call(this, player, options)); + + _this.on(player, 'ended', _this.handleEnded); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + CurrentTimeDisplay.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-current-time'; + }; + + /** + * Update current time display + * + * @param {EventTarget~Event} [event] + * The `timeupdate` event that caused this function to run. + * + * @listens Player#timeupdate + */ + + + CurrentTimeDisplay.prototype.updateContent = function updateContent(event) { + // Allows for smooth scrubbing, when player can't keep up. + var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); + + this.updateFormattedTime_(time); + }; + + /** + * When the player fires ended there should be no time left. Sadly + * this is not always the case, lets make it seem like that is the case + * for users. + * + * @param {EventTarget~Event} [event] + * The `ended` event that caused this to run. + * + * @listens Player#ended + */ + + + CurrentTimeDisplay.prototype.handleEnded = function handleEnded(event) { + if (!this.player_.duration()) { + return; + } + this.updateFormattedTime_(this.player_.duration()); + }; + + return CurrentTimeDisplay; + }(TimeDisplay); + + /** + * The text that is added to the `CurrentTimeDisplay` for screen reader users. + * + * @type {string} + * @private + */ + + + CurrentTimeDisplay.prototype.labelText_ = 'Current Time'; + + /** + * The text that should display over the `CurrentTimeDisplay`s controls. Added to for localization. + * + * @type {string} + * @private + * + * @deprecated in v7; controlText_ is not used in non-active display Components + */ + CurrentTimeDisplay.prototype.controlText_ = 'Current Time'; + + Component.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay); + + /** + * @file duration-display.js + */ + + /** + * Displays the duration + * + * @extends Component + */ + + var DurationDisplay = function (_TimeDisplay) { + inherits(DurationDisplay, _TimeDisplay); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function DurationDisplay(player, options) { + classCallCheck(this, DurationDisplay); + + // we do not want to/need to throttle duration changes, + // as they should always display the changed duration as + // it has changed + var _this = possibleConstructorReturn(this, _TimeDisplay.call(this, player, options)); + + _this.on(player, 'durationchange', _this.updateContent); + + // Also listen for timeupdate (in the parent) and loadedmetadata because removing those + // listeners could have broken dependent applications/libraries. These + // can likely be removed for 7.0. + _this.on(player, 'loadedmetadata', _this.throttledUpdateContent); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + DurationDisplay.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-duration'; + }; + + /** + * Update duration time display. + * + * @param {EventTarget~Event} [event] + * The `durationchange`, `timeupdate`, or `loadedmetadata` event that caused + * this function to be called. + * + * @listens Player#durationchange + * @listens Player#timeupdate + * @listens Player#loadedmetadata + */ + + + DurationDisplay.prototype.updateContent = function updateContent(event) { + var duration = this.player_.duration(); + + if (duration && this.duration_ !== duration) { + this.duration_ = duration; + this.updateFormattedTime_(duration); + } + }; + + return DurationDisplay; + }(TimeDisplay); + + /** + * The text that is added to the `DurationDisplay` for screen reader users. + * + * @type {string} + * @private + */ + + + DurationDisplay.prototype.labelText_ = 'Duration'; + + /** + * The text that should display over the `DurationDisplay`s controls. Added to for localization. + * + * @type {string} + * @private + * + * @deprecated in v7; controlText_ is not used in non-active display Components + */ + DurationDisplay.prototype.controlText_ = 'Duration'; + + Component.registerComponent('DurationDisplay', DurationDisplay); + + /** + * @file time-divider.js + */ + + /** + * The separator between the current time and duration. + * Can be hidden if it's not needed in the design. + * + * @extends Component + */ + + var TimeDivider = function (_Component) { + inherits(TimeDivider, _Component); + + function TimeDivider() { + classCallCheck(this, TimeDivider); + return possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + /** + * Create the component's DOM element + * + * @return {Element} + * The element that was created. + */ + TimeDivider.prototype.createEl = function createEl() { + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-time-control vjs-time-divider', + innerHTML: '<div><span>/</span></div>' + }); + }; + + return TimeDivider; + }(Component); + + Component.registerComponent('TimeDivider', TimeDivider); + + /** + * @file remaining-time-display.js + */ + /** + * Displays the time left in the video + * + * @extends Component + */ + + var RemainingTimeDisplay = function (_TimeDisplay) { + inherits(RemainingTimeDisplay, _TimeDisplay); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function RemainingTimeDisplay(player, options) { + classCallCheck(this, RemainingTimeDisplay); + + var _this = possibleConstructorReturn(this, _TimeDisplay.call(this, player, options)); + + _this.on(player, 'durationchange', _this.throttledUpdateContent); + _this.on(player, 'ended', _this.handleEnded); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + RemainingTimeDisplay.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-remaining-time'; + }; + + /** + * The remaining time display prefixes numbers with a "minus" character. + * + * @param {number} time + * A numeric time, in seconds. + * + * @return {string} + * A formatted time + * + * @private + */ + + + RemainingTimeDisplay.prototype.formatTime_ = function formatTime_(time) { + // TODO: The "-" should be decorative, and not announced by a screen reader + return '-' + _TimeDisplay.prototype.formatTime_.call(this, time); + }; + + /** + * Update remaining time display. + * + * @param {EventTarget~Event} [event] + * The `timeupdate` or `durationchange` event that caused this to run. + * + * @listens Player#timeupdate + * @listens Player#durationchange + */ + + + RemainingTimeDisplay.prototype.updateContent = function updateContent(event) { + if (!this.player_.duration()) { + return; + } + + // @deprecated We should only use remainingTimeDisplay + // as of video.js 7 + if (this.player_.remainingTimeDisplay) { + this.updateFormattedTime_(this.player_.remainingTimeDisplay()); + } else { + this.updateFormattedTime_(this.player_.remainingTime()); + } + }; + + /** + * When the player fires ended there should be no time left. Sadly + * this is not always the case, lets make it seem like that is the case + * for users. + * + * @param {EventTarget~Event} [event] + * The `ended` event that caused this to run. + * + * @listens Player#ended + */ + + + RemainingTimeDisplay.prototype.handleEnded = function handleEnded(event) { + if (!this.player_.duration()) { + return; + } + this.updateFormattedTime_(0); + }; + + return RemainingTimeDisplay; + }(TimeDisplay); + + /** + * The text that is added to the `RemainingTimeDisplay` for screen reader users. + * + * @type {string} + * @private + */ + + + RemainingTimeDisplay.prototype.labelText_ = 'Remaining Time'; + + /** + * The text that should display over the `RemainingTimeDisplay`s controls. Added to for localization. + * + * @type {string} + * @private + * + * @deprecated in v7; controlText_ is not used in non-active display Components + */ + RemainingTimeDisplay.prototype.controlText_ = 'Remaining Time'; + + Component.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay); + + /** + * @file live-display.js + */ + + // TODO - Future make it click to snap to live + + /** + * Displays the live indicator when duration is Infinity. + * + * @extends Component + */ + + var LiveDisplay = function (_Component) { + inherits(LiveDisplay, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function LiveDisplay(player, options) { + classCallCheck(this, LiveDisplay); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + _this.updateShowing(); + _this.on(_this.player(), 'durationchange', _this.updateShowing); + return _this; + } + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + LiveDisplay.prototype.createEl = function createEl$$1() { + var el = _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-live-control vjs-control' + }); + + this.contentEl_ = createEl('div', { + className: 'vjs-live-display', + innerHTML: '<span class="vjs-control-text">' + this.localize('Stream Type') + '\xA0</span>' + this.localize('LIVE') + }, { + 'aria-live': 'off' + }); + + el.appendChild(this.contentEl_); + return el; + }; + + LiveDisplay.prototype.dispose = function dispose() { + this.contentEl_ = null; + + _Component.prototype.dispose.call(this); + }; + + /** + * Check the duration to see if the LiveDisplay should be showing or not. Then show/hide + * it accordingly + * + * @param {EventTarget~Event} [event] + * The {@link Player#durationchange} event that caused this function to run. + * + * @listens Player#durationchange + */ + + + LiveDisplay.prototype.updateShowing = function updateShowing(event) { + if (this.player().duration() === Infinity) { + this.show(); + } else { + this.hide(); + } + }; + + return LiveDisplay; + }(Component); + + Component.registerComponent('LiveDisplay', LiveDisplay); + + /** + * @file slider.js + */ + + /** + * The base functionality for a slider. Can be vertical or horizontal. + * For instance the volume bar or the seek bar on a video is a slider. + * + * @extends Component + */ + + var Slider = function (_Component) { + inherits(Slider, _Component); + + /** + * Create an instance of this class + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function Slider(player, options) { + classCallCheck(this, Slider); + + // Set property names to bar to match with the child Slider class is looking for + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + _this.bar = _this.getChild(_this.options_.barName); + + // Set a horizontal or vertical class on the slider depending on the slider type + _this.vertical(!!_this.options_.vertical); + + _this.enable(); + return _this; + } + + /** + * Are controls are currently enabled for this slider or not. + * + * @return {boolean} + * true if controls are enabled, false otherwise + */ + + + Slider.prototype.enabled = function enabled() { + return this.enabled_; + }; + + /** + * Enable controls for this slider if they are disabled + */ + + + Slider.prototype.enable = function enable() { + if (this.enabled()) { + return; + } + + this.on('mousedown', this.handleMouseDown); + this.on('touchstart', this.handleMouseDown); + this.on('focus', this.handleFocus); + this.on('blur', this.handleBlur); + this.on('click', this.handleClick); + + this.on(this.player_, 'controlsvisible', this.update); + + if (this.playerEvent) { + this.on(this.player_, this.playerEvent, this.update); + } + + this.removeClass('disabled'); + this.setAttribute('tabindex', 0); + + this.enabled_ = true; + }; + + /** + * Disable controls for this slider if they are enabled + */ + + + Slider.prototype.disable = function disable() { + if (!this.enabled()) { + return; + } + var doc = this.bar.el_.ownerDocument; + + this.off('mousedown', this.handleMouseDown); + this.off('touchstart', this.handleMouseDown); + this.off('focus', this.handleFocus); + this.off('blur', this.handleBlur); + this.off('click', this.handleClick); + this.off(this.player_, 'controlsvisible', this.update); + this.off(doc, 'mousemove', this.handleMouseMove); + this.off(doc, 'mouseup', this.handleMouseUp); + this.off(doc, 'touchmove', this.handleMouseMove); + this.off(doc, 'touchend', this.handleMouseUp); + this.removeAttribute('tabindex'); + + this.addClass('disabled'); + + if (this.playerEvent) { + this.off(this.player_, this.playerEvent, this.update); + } + this.enabled_ = false; + }; + + /** + * Create the `Slider`s DOM element. + * + * @param {string} type + * Type of element to create. + * + * @param {Object} [props={}] + * List of properties in Object form. + * + * @param {Object} [attributes={}] + * list of attributes in Object form. + * + * @return {Element} + * The element that gets created. + */ + + + Slider.prototype.createEl = function createEl$$1(type) { + var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + // Add the slider element class to all sub classes + props.className = props.className + ' vjs-slider'; + props = assign({ + tabIndex: 0 + }, props); + + attributes = assign({ + 'role': 'slider', + 'aria-valuenow': 0, + 'aria-valuemin': 0, + 'aria-valuemax': 100, + 'tabIndex': 0 + }, attributes); + + return _Component.prototype.createEl.call(this, type, props, attributes); + }; + + /** + * Handle `mousedown` or `touchstart` events on the `Slider`. + * + * @param {EventTarget~Event} event + * `mousedown` or `touchstart` event that triggered this function + * + * @listens mousedown + * @listens touchstart + * @fires Slider#slideractive + */ + + + Slider.prototype.handleMouseDown = function handleMouseDown(event) { + var doc = this.bar.el_.ownerDocument; + + event.preventDefault(); + blockTextSelection(); + + this.addClass('vjs-sliding'); + /** + * Triggered when the slider is in an active state + * + * @event Slider#slideractive + * @type {EventTarget~Event} + */ + this.trigger('slideractive'); + + this.on(doc, 'mousemove', this.handleMouseMove); + this.on(doc, 'mouseup', this.handleMouseUp); + this.on(doc, 'touchmove', this.handleMouseMove); + this.on(doc, 'touchend', this.handleMouseUp); + + this.handleMouseMove(event); + }; + + /** + * Handle the `mousemove`, `touchmove`, and `mousedown` events on this `Slider`. + * The `mousemove` and `touchmove` events will only only trigger this function during + * `mousedown` and `touchstart`. This is due to {@link Slider#handleMouseDown} and + * {@link Slider#handleMouseUp}. + * + * @param {EventTarget~Event} event + * `mousedown`, `mousemove`, `touchstart`, or `touchmove` event that triggered + * this function + * + * @listens mousemove + * @listens touchmove + */ + + + Slider.prototype.handleMouseMove = function handleMouseMove(event) { + }; + + /** + * Handle `mouseup` or `touchend` events on the `Slider`. + * + * @param {EventTarget~Event} event + * `mouseup` or `touchend` event that triggered this function. + * + * @listens touchend + * @listens mouseup + * @fires Slider#sliderinactive + */ + + + Slider.prototype.handleMouseUp = function handleMouseUp() { + var doc = this.bar.el_.ownerDocument; + + unblockTextSelection(); + + this.removeClass('vjs-sliding'); + /** + * Triggered when the slider is no longer in an active state. + * + * @event Slider#sliderinactive + * @type {EventTarget~Event} + */ + this.trigger('sliderinactive'); + + this.off(doc, 'mousemove', this.handleMouseMove); + this.off(doc, 'mouseup', this.handleMouseUp); + this.off(doc, 'touchmove', this.handleMouseMove); + this.off(doc, 'touchend', this.handleMouseUp); + + this.update(); + }; + + /** + * Update the progress bar of the `Slider`. + * + * @returns {number} + * The percentage of progress the progress bar represents as a + * number from 0 to 1. + */ + + + Slider.prototype.update = function update() { + + // In VolumeBar init we have a setTimeout for update that pops and update + // to the end of the execution stack. The player is destroyed before then + // update will cause an error + if (!this.el_) { + return; + } + + // If scrubbing, we could use a cached value to make the handle keep up + // with the user's mouse. On HTML5 browsers scrubbing is really smooth, but + // some flash players are slow, so we might want to utilize this later. + // var progress = (this.player_.scrubbing()) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration(); + var progress = this.getPercent(); + var bar = this.bar; + + // If there's no bar... + if (!bar) { + return; + } + + // Protect against no duration and other division issues + if (typeof progress !== 'number' || progress !== progress || progress < 0 || progress === Infinity) { + progress = 0; + } + + // Convert to a percentage for setting + var percentage = (progress * 100).toFixed(2) + '%'; + var style = bar.el().style; + + // Set the new bar width or height + if (this.vertical()) { + style.height = percentage; + } else { + style.width = percentage; + } + + return progress; + }; + + /** + * Calculate distance for slider + * + * @param {EventTarget~Event} event + * The event that caused this function to run. + * + * @return {number} + * The current position of the Slider. + * - position.x for vertical `Slider`s + * - position.y for horizontal `Slider`s + */ + + + Slider.prototype.calculateDistance = function calculateDistance(event) { + var position = getPointerPosition(this.el_, event); + + if (this.vertical()) { + return position.y; + } + return position.x; + }; + + /** + * Handle a `focus` event on this `Slider`. + * + * @param {EventTarget~Event} event + * The `focus` event that caused this function to run. + * + * @listens focus + */ + + + Slider.prototype.handleFocus = function handleFocus() { + this.on(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress); + }; + + /** + * Handle a `keydown` event on the `Slider`. Watches for left, rigth, up, and down + * arrow keys. This function will only be called when the slider has focus. See + * {@link Slider#handleFocus} and {@link Slider#handleBlur}. + * + * @param {EventTarget~Event} event + * the `keydown` event that caused this function to run. + * + * @listens keydown + */ + + + Slider.prototype.handleKeyPress = function handleKeyPress(event) { + // Left and Down Arrows + if (event.which === 37 || event.which === 40) { + event.preventDefault(); + this.stepBack(); + + // Up and Right Arrows + } else if (event.which === 38 || event.which === 39) { + event.preventDefault(); + this.stepForward(); + } + }; + + /** + * Handle a `blur` event on this `Slider`. + * + * @param {EventTarget~Event} event + * The `blur` event that caused this function to run. + * + * @listens blur + */ + + Slider.prototype.handleBlur = function handleBlur() { + this.off(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress); + }; + + /** + * Listener for click events on slider, used to prevent clicks + * from bubbling up to parent elements like button menus. + * + * @param {Object} event + * Event that caused this object to run + */ + + + Slider.prototype.handleClick = function handleClick(event) { + event.stopImmediatePropagation(); + event.preventDefault(); + }; + + /** + * Get/set if slider is horizontal for vertical + * + * @param {boolean} [bool] + * - true if slider is vertical, + * - false is horizontal + * + * @return {boolean} + * - true if slider is vertical, and getting + * - false if the slider is horizontal, and getting + */ + + + Slider.prototype.vertical = function vertical(bool) { + if (bool === undefined) { + return this.vertical_ || false; + } + + this.vertical_ = !!bool; + + if (this.vertical_) { + this.addClass('vjs-slider-vertical'); + } else { + this.addClass('vjs-slider-horizontal'); + } + }; + + return Slider; + }(Component); + + Component.registerComponent('Slider', Slider); + + /** + * @file load-progress-bar.js + */ + + /** + * Shows loading progress + * + * @extends Component + */ + + var LoadProgressBar = function (_Component) { + inherits(LoadProgressBar, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function LoadProgressBar(player, options) { + classCallCheck(this, LoadProgressBar); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + _this.partEls_ = []; + _this.on(player, 'progress', _this.update); + return _this; + } + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + LoadProgressBar.prototype.createEl = function createEl$$1() { + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-load-progress', + innerHTML: '<span class="vjs-control-text"><span>' + this.localize('Loaded') + '</span>: 0%</span>' + }); + }; + + LoadProgressBar.prototype.dispose = function dispose() { + this.partEls_ = null; + + _Component.prototype.dispose.call(this); + }; + + /** + * Update progress bar + * + * @param {EventTarget~Event} [event] + * The `progress` event that caused this function to run. + * + * @listens Player#progress + */ + + + LoadProgressBar.prototype.update = function update(event) { + var buffered = this.player_.buffered(); + var duration = this.player_.duration(); + var bufferedEnd = this.player_.bufferedEnd(); + var children = this.partEls_; + + // get the percent width of a time compared to the total end + var percentify = function percentify(time, end) { + // no NaN + var percent = time / end || 0; + + return (percent >= 1 ? 1 : percent) * 100 + '%'; + }; + + // update the width of the progress bar + this.el_.style.width = percentify(bufferedEnd, duration); + + // add child elements to represent the individual buffered time ranges + for (var i = 0; i < buffered.length; i++) { + var start = buffered.start(i); + var end = buffered.end(i); + var part = children[i]; + + if (!part) { + part = this.el_.appendChild(createEl()); + children[i] = part; + } + + // set the percent based on the width of the progress bar (bufferedEnd) + part.style.left = percentify(start, bufferedEnd); + part.style.width = percentify(end - start, bufferedEnd); + } + + // remove unused buffered range elements + for (var _i = children.length; _i > buffered.length; _i--) { + this.el_.removeChild(children[_i - 1]); + } + children.length = buffered.length; + }; + + return LoadProgressBar; + }(Component); + + Component.registerComponent('LoadProgressBar', LoadProgressBar); + + /** + * @file time-tooltip.js + */ + + /** + * Time tooltips display a time above the progress bar. + * + * @extends Component + */ + + var TimeTooltip = function (_Component) { + inherits(TimeTooltip, _Component); + + function TimeTooltip() { + classCallCheck(this, TimeTooltip); + return possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + /** + * Create the time tooltip DOM element + * + * @return {Element} + * The element that was created. + */ + TimeTooltip.prototype.createEl = function createEl$$1() { + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-time-tooltip' + }); + }; + + /** + * Updates the position of the time tooltip relative to the `SeekBar`. + * + * @param {Object} seekBarRect + * The `ClientRect` for the {@link SeekBar} element. + * + * @param {number} seekBarPoint + * A number from 0 to 1, representing a horizontal reference point + * from the left edge of the {@link SeekBar} + */ + + + TimeTooltip.prototype.update = function update(seekBarRect, seekBarPoint, content) { + var tooltipRect = getBoundingClientRect(this.el_); + var playerRect = getBoundingClientRect(this.player_.el()); + var seekBarPointPx = seekBarRect.width * seekBarPoint; + + // do nothing if either rect isn't available + // for example, if the player isn't in the DOM for testing + if (!playerRect || !tooltipRect) { + return; + } + + // This is the space left of the `seekBarPoint` available within the bounds + // of the player. We calculate any gap between the left edge of the player + // and the left edge of the `SeekBar` and add the number of pixels in the + // `SeekBar` before hitting the `seekBarPoint` + var spaceLeftOfPoint = seekBarRect.left - playerRect.left + seekBarPointPx; + + // This is the space right of the `seekBarPoint` available within the bounds + // of the player. We calculate the number of pixels from the `seekBarPoint` + // to the right edge of the `SeekBar` and add to that any gap between the + // right edge of the `SeekBar` and the player. + var spaceRightOfPoint = seekBarRect.width - seekBarPointPx + (playerRect.right - seekBarRect.right); + + // This is the number of pixels by which the tooltip will need to be pulled + // further to the right to center it over the `seekBarPoint`. + var pullTooltipBy = tooltipRect.width / 2; + + // Adjust the `pullTooltipBy` distance to the left or right depending on + // the results of the space calculations above. + if (spaceLeftOfPoint < pullTooltipBy) { + pullTooltipBy += pullTooltipBy - spaceLeftOfPoint; + } else if (spaceRightOfPoint < pullTooltipBy) { + pullTooltipBy = spaceRightOfPoint; + } + + // Due to the imprecision of decimal/ratio based calculations and varying + // rounding behaviors, there are cases where the spacing adjustment is off + // by a pixel or two. This adds insurance to these calculations. + if (pullTooltipBy < 0) { + pullTooltipBy = 0; + } else if (pullTooltipBy > tooltipRect.width) { + pullTooltipBy = tooltipRect.width; + } + + this.el_.style.right = '-' + pullTooltipBy + 'px'; + textContent(this.el_, content); + }; + + return TimeTooltip; + }(Component); + + Component.registerComponent('TimeTooltip', TimeTooltip); + + /** + * @file play-progress-bar.js + */ + + /** + * Used by {@link SeekBar} to display media playback progress as part of the + * {@link ProgressControl}. + * + * @extends Component + */ + + var PlayProgressBar = function (_Component) { + inherits(PlayProgressBar, _Component); + + function PlayProgressBar() { + classCallCheck(this, PlayProgressBar); + return possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + /** + * Create the the DOM element for this class. + * + * @return {Element} + * The element that was created. + */ + PlayProgressBar.prototype.createEl = function createEl() { + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-play-progress vjs-slider-bar', + innerHTML: '<span class="vjs-control-text"><span>' + this.localize('Progress') + '</span>: 0%</span>' + }); + }; + + /** + * Enqueues updates to its own DOM as well as the DOM of its + * {@link TimeTooltip} child. + * + * @param {Object} seekBarRect + * The `ClientRect` for the {@link SeekBar} element. + * + * @param {number} seekBarPoint + * A number from 0 to 1, representing a horizontal reference point + * from the left edge of the {@link SeekBar} + */ + + + PlayProgressBar.prototype.update = function update(seekBarRect, seekBarPoint) { + var _this2 = this; + + // If there is an existing rAF ID, cancel it so we don't over-queue. + if (this.rafId_) { + this.cancelAnimationFrame(this.rafId_); + } + + this.rafId_ = this.requestAnimationFrame(function () { + var time = _this2.player_.scrubbing() ? _this2.player_.getCache().currentTime : _this2.player_.currentTime(); + + var content = formatTime(time, _this2.player_.duration()); + var timeTooltip = _this2.getChild('timeTooltip'); + + if (timeTooltip) { + timeTooltip.update(seekBarRect, seekBarPoint, content); + } + }); + }; + + return PlayProgressBar; + }(Component); + + /** + * Default options for {@link PlayProgressBar}. + * + * @type {Object} + * @private + */ + + + PlayProgressBar.prototype.options_ = { + children: [] + }; + + // Time tooltips should not be added to a player on mobile devices + if (!IS_IOS && !IS_ANDROID) { + PlayProgressBar.prototype.options_.children.push('timeTooltip'); + } + + Component.registerComponent('PlayProgressBar', PlayProgressBar); + + /** + * @file mouse-time-display.js + */ + + /** + * The {@link MouseTimeDisplay} component tracks mouse movement over the + * {@link ProgressControl}. It displays an indicator and a {@link TimeTooltip} + * indicating the time which is represented by a given point in the + * {@link ProgressControl}. + * + * @extends Component + */ + + var MouseTimeDisplay = function (_Component) { + inherits(MouseTimeDisplay, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The {@link Player} that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function MouseTimeDisplay(player, options) { + classCallCheck(this, MouseTimeDisplay); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + _this.update = throttle(bind(_this, _this.update), 25); + return _this; + } + + /** + * Create the DOM element for this class. + * + * @return {Element} + * The element that was created. + */ + + + MouseTimeDisplay.prototype.createEl = function createEl() { + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-mouse-display' + }); + }; + + /** + * Enqueues updates to its own DOM as well as the DOM of its + * {@link TimeTooltip} child. + * + * @param {Object} seekBarRect + * The `ClientRect` for the {@link SeekBar} element. + * + * @param {number} seekBarPoint + * A number from 0 to 1, representing a horizontal reference point + * from the left edge of the {@link SeekBar} + */ + + + MouseTimeDisplay.prototype.update = function update(seekBarRect, seekBarPoint) { + var _this2 = this; + + // If there is an existing rAF ID, cancel it so we don't over-queue. + if (this.rafId_) { + this.cancelAnimationFrame(this.rafId_); + } + + this.rafId_ = this.requestAnimationFrame(function () { + var duration = _this2.player_.duration(); + var content = formatTime(seekBarPoint * duration, duration); + + _this2.el_.style.left = seekBarRect.width * seekBarPoint + 'px'; + _this2.getChild('timeTooltip').update(seekBarRect, seekBarPoint, content); + }); + }; + + return MouseTimeDisplay; + }(Component); + + /** + * Default options for `MouseTimeDisplay` + * + * @type {Object} + * @private + */ + + + MouseTimeDisplay.prototype.options_ = { + children: ['timeTooltip'] + }; + + Component.registerComponent('MouseTimeDisplay', MouseTimeDisplay); + + /** + * @file seek-bar.js + */ + + // The number of seconds the `step*` functions move the timeline. + var STEP_SECONDS = 5; + + // The interval at which the bar should update as it progresses. + var UPDATE_REFRESH_INTERVAL = 30; + + /** + * Seek bar and container for the progress bars. Uses {@link PlayProgressBar} + * as its `bar`. + * + * @extends Slider + */ + + var SeekBar = function (_Slider) { + inherits(SeekBar, _Slider); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function SeekBar(player, options) { + classCallCheck(this, SeekBar); + + var _this = possibleConstructorReturn(this, _Slider.call(this, player, options)); + + _this.setEventHandlers_(); + return _this; + } + + /** + * Sets the event handlers + * + * @private + */ + + + SeekBar.prototype.setEventHandlers_ = function setEventHandlers_() { + var _this2 = this; + + this.update = throttle(bind(this, this.update), UPDATE_REFRESH_INTERVAL); + + this.on(this.player_, 'timeupdate', this.update); + this.on(this.player_, 'ended', this.handleEnded); + + // when playing, let's ensure we smoothly update the play progress bar + // via an interval + this.updateInterval = null; + + this.on(this.player_, ['playing'], function () { + _this2.clearInterval(_this2.updateInterval); + + _this2.updateInterval = _this2.setInterval(function () { + _this2.requestAnimationFrame(function () { + _this2.update(); + }); + }, UPDATE_REFRESH_INTERVAL); + }); + + this.on(this.player_, ['ended', 'pause', 'waiting'], function () { + _this2.clearInterval(_this2.updateInterval); + }); + + this.on(this.player_, ['timeupdate', 'ended'], this.update); + }; + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + SeekBar.prototype.createEl = function createEl$$1() { + return _Slider.prototype.createEl.call(this, 'div', { + className: 'vjs-progress-holder' + }, { + 'aria-label': this.localize('Progress Bar') + }); + }; + + /** + * This function updates the play progress bar and accessibility + * attributes to whatever is passed in. + * + * @param {number} currentTime + * The currentTime value that should be used for accessibility + * + * @param {number} percent + * The percentage as a decimal that the bar should be filled from 0-1. + * + * @private + */ + + + SeekBar.prototype.update_ = function update_(currentTime, percent) { + var duration = this.player_.duration(); + + // machine readable value of progress bar (percentage complete) + this.el_.setAttribute('aria-valuenow', (percent * 100).toFixed(2)); + + // human readable value of progress bar (time complete) + this.el_.setAttribute('aria-valuetext', this.localize('progress bar timing: currentTime={1} duration={2}', [formatTime(currentTime, duration), formatTime(duration, duration)], '{1} of {2}')); + + // Update the `PlayProgressBar`. + this.bar.update(getBoundingClientRect(this.el_), percent); + }; + + /** + * Update the seek bar's UI. + * + * @param {EventTarget~Event} [event] + * The `timeupdate` or `ended` event that caused this to run. + * + * @listens Player#timeupdate + * + * @returns {number} + * The current percent at a number from 0-1 + */ + + + SeekBar.prototype.update = function update(event) { + var percent = _Slider.prototype.update.call(this); + + this.update_(this.getCurrentTime_(), percent); + return percent; + }; + + /** + * Get the value of current time but allows for smooth scrubbing, + * when player can't keep up. + * + * @return {number} + * The current time value to display + * + * @private + */ + + + SeekBar.prototype.getCurrentTime_ = function getCurrentTime_() { + return this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); + }; + + /** + * We want the seek bar to be full on ended + * no matter what the actual internal values are. so we force it. + * + * @param {EventTarget~Event} [event] + * The `timeupdate` or `ended` event that caused this to run. + * + * @listens Player#ended + */ + + + SeekBar.prototype.handleEnded = function handleEnded(event) { + this.update_(this.player_.duration(), 1); + }; + + /** + * Get the percentage of media played so far. + * + * @return {number} + * The percentage of media played so far (0 to 1). + */ + + + SeekBar.prototype.getPercent = function getPercent() { + var percent = this.getCurrentTime_() / this.player_.duration(); + + return percent >= 1 ? 1 : percent || 0; + }; + + /** + * Handle mouse down on seek bar + * + * @param {EventTarget~Event} event + * The `mousedown` event that caused this to run. + * + * @listens mousedown + */ + + + SeekBar.prototype.handleMouseDown = function handleMouseDown(event) { + if (!isSingleLeftClick(event)) { + return; + } + + // Stop event propagation to prevent double fire in progress-control.js + event.stopPropagation(); + this.player_.scrubbing(true); + + this.videoWasPlaying = !this.player_.paused(); + this.player_.pause(); + + _Slider.prototype.handleMouseDown.call(this, event); + }; + + /** + * Handle mouse move on seek bar + * + * @param {EventTarget~Event} event + * The `mousemove` event that caused this to run. + * + * @listens mousemove + */ + + + SeekBar.prototype.handleMouseMove = function handleMouseMove(event) { + if (!isSingleLeftClick(event)) { + return; + } + + var newTime = this.calculateDistance(event) * this.player_.duration(); + + // Don't let video end while scrubbing. + if (newTime === this.player_.duration()) { + newTime = newTime - 0.1; + } + + // Set new time (tell player to seek to new time) + this.player_.currentTime(newTime); + }; + + SeekBar.prototype.enable = function enable() { + _Slider.prototype.enable.call(this); + var mouseTimeDisplay = this.getChild('mouseTimeDisplay'); + + if (!mouseTimeDisplay) { + return; + } + + mouseTimeDisplay.show(); + }; + + SeekBar.prototype.disable = function disable() { + _Slider.prototype.disable.call(this); + var mouseTimeDisplay = this.getChild('mouseTimeDisplay'); + + if (!mouseTimeDisplay) { + return; + } + + mouseTimeDisplay.hide(); + }; + + /** + * Handle mouse up on seek bar + * + * @param {EventTarget~Event} event + * The `mouseup` event that caused this to run. + * + * @listens mouseup + */ + + + SeekBar.prototype.handleMouseUp = function handleMouseUp(event) { + _Slider.prototype.handleMouseUp.call(this, event); + + // Stop event propagation to prevent double fire in progress-control.js + if (event) { + event.stopPropagation(); + } + this.player_.scrubbing(false); + + /** + * Trigger timeupdate because we're done seeking and the time has changed. + * This is particularly useful for if the player is paused to time the time displays. + * + * @event Tech#timeupdate + * @type {EventTarget~Event} + */ + this.player_.trigger({type: 'timeupdate', target: this, manuallyTriggered: true}); + if (this.videoWasPlaying) { + silencePromise(this.player_.play()); + } + }; + + /** + * Move more quickly fast forward for keyboard-only users + */ + + + SeekBar.prototype.stepForward = function stepForward() { + this.player_.currentTime(this.player_.currentTime() + STEP_SECONDS); + }; + + /** + * Move more quickly rewind for keyboard-only users + */ + + + SeekBar.prototype.stepBack = function stepBack() { + this.player_.currentTime(this.player_.currentTime() - STEP_SECONDS); + }; + + /** + * Toggles the playback state of the player + * This gets called when enter or space is used on the seekbar + * + * @param {EventTarget~Event} event + * The `keydown` event that caused this function to be called + * + */ + + + SeekBar.prototype.handleAction = function handleAction(event) { + if (this.player_.paused()) { + this.player_.play(); + } else { + this.player_.pause(); + } + }; + + /** + * Called when this SeekBar has focus and a key gets pressed down. By + * default it will call `this.handleAction` when the key is space or enter. + * + * @param {EventTarget~Event} event + * The `keydown` event that caused this function to be called. + * + * @listens keydown + */ + + + SeekBar.prototype.handleKeyPress = function handleKeyPress(event) { + + // Support Space (32) or Enter (13) key operation to fire a click event + if (event.which === 32 || event.which === 13) { + event.preventDefault(); + this.handleAction(event); + } else if (_Slider.prototype.handleKeyPress) { + + // Pass keypress handling up for unsupported keys + _Slider.prototype.handleKeyPress.call(this, event); + } + }; + + return SeekBar; + }(Slider); + + /** + * Default options for the `SeekBar` + * + * @type {Object} + * @private + */ + + + SeekBar.prototype.options_ = { + children: ['loadProgressBar', 'playProgressBar'], + barName: 'playProgressBar' + }; + + // MouseTimeDisplay tooltips should not be added to a player on mobile devices + if (!IS_IOS && !IS_ANDROID) { + SeekBar.prototype.options_.children.splice(1, 0, 'mouseTimeDisplay'); + } + + /** + * Call the update event for this Slider when this event happens on the player. + * + * @type {string} + */ + SeekBar.prototype.playerEvent = 'timeupdate'; + + Component.registerComponent('SeekBar', SeekBar); + + /** + * @file progress-control.js + */ + + /** + * The Progress Control component contains the seek bar, load progress, + * and play progress. + * + * @extends Component + */ + + var ProgressControl = function (_Component) { + inherits(ProgressControl, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function ProgressControl(player, options) { + classCallCheck(this, ProgressControl); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + _this.handleMouseMove = throttle(bind(_this, _this.handleMouseMove), 25); + _this.throttledHandleMouseSeek = throttle(bind(_this, _this.handleMouseSeek), 25); + + _this.enable(); + return _this; + } + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + ProgressControl.prototype.createEl = function createEl$$1() { + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-progress-control vjs-control' + }); + }; + + /** + * When the mouse moves over the `ProgressControl`, the pointer position + * gets passed down to the `MouseTimeDisplay` component. + * + * @param {EventTarget~Event} event + * The `mousemove` event that caused this function to run. + * + * @listen mousemove + */ + + + ProgressControl.prototype.handleMouseMove = function handleMouseMove(event) { + var seekBar = this.getChild('seekBar'); + + if (seekBar) { + var mouseTimeDisplay = seekBar.getChild('mouseTimeDisplay'); + var seekBarEl = seekBar.el(); + var seekBarRect = getBoundingClientRect(seekBarEl); + var seekBarPoint = getPointerPosition(seekBarEl, event).x; + + // The default skin has a gap on either side of the `SeekBar`. This means + // that it's possible to trigger this behavior outside the boundaries of + // the `SeekBar`. This ensures we stay within it at all times. + if (seekBarPoint > 1) { + seekBarPoint = 1; + } else if (seekBarPoint < 0) { + seekBarPoint = 0; + } + + if (mouseTimeDisplay) { + mouseTimeDisplay.update(seekBarRect, seekBarPoint); + } + } + }; + + /** + * A throttled version of the {@link ProgressControl#handleMouseSeek} listener. + * + * @method ProgressControl#throttledHandleMouseSeek + * @param {EventTarget~Event} event + * The `mousemove` event that caused this function to run. + * + * @listen mousemove + * @listen touchmove + */ + + /** + * Handle `mousemove` or `touchmove` events on the `ProgressControl`. + * + * @param {EventTarget~Event} event + * `mousedown` or `touchstart` event that triggered this function + * + * @listens mousemove + * @listens touchmove + */ + + + ProgressControl.prototype.handleMouseSeek = function handleMouseSeek(event) { + var seekBar = this.getChild('seekBar'); + + if (seekBar) { + seekBar.handleMouseMove(event); + } + }; + + /** + * Are controls are currently enabled for this progress control. + * + * @return {boolean} + * true if controls are enabled, false otherwise + */ + + + ProgressControl.prototype.enabled = function enabled() { + return this.enabled_; + }; + + /** + * Disable all controls on the progress control and its children + */ + + + ProgressControl.prototype.disable = function disable() { + this.children().forEach(function (child) { + return child.disable && child.disable(); + }); + + if (!this.enabled()) { + return; + } + + this.off(['mousedown', 'touchstart'], this.handleMouseDown); + this.off(this.el_, 'mousemove', this.handleMouseMove); + this.handleMouseUp(); + + this.addClass('disabled'); + + this.enabled_ = false; + }; + + /** + * Enable all controls on the progress control and its children + */ + + + ProgressControl.prototype.enable = function enable() { + this.children().forEach(function (child) { + return child.enable && child.enable(); + }); + + if (this.enabled()) { + return; + } + + this.on(['mousedown', 'touchstart'], this.handleMouseDown); + this.on(this.el_, 'mousemove', this.handleMouseMove); + this.removeClass('disabled'); + + this.enabled_ = true; + }; + + /** + * Handle `mousedown` or `touchstart` events on the `ProgressControl`. + * + * @param {EventTarget~Event} event + * `mousedown` or `touchstart` event that triggered this function + * + * @listens mousedown + * @listens touchstart + */ + + + ProgressControl.prototype.handleMouseDown = function handleMouseDown(event) { + var doc = this.el_.ownerDocument; + var seekBar = this.getChild('seekBar'); + + if (seekBar) { + seekBar.handleMouseDown(event); + } + + this.on(doc, 'mousemove', this.throttledHandleMouseSeek); + this.on(doc, 'touchmove', this.throttledHandleMouseSeek); + this.on(doc, 'mouseup', this.handleMouseUp); + this.on(doc, 'touchend', this.handleMouseUp); + }; + + /** + * Handle `mouseup` or `touchend` events on the `ProgressControl`. + * + * @param {EventTarget~Event} event + * `mouseup` or `touchend` event that triggered this function. + * + * @listens touchend + * @listens mouseup + */ + + + ProgressControl.prototype.handleMouseUp = function handleMouseUp(event) { + var doc = this.el_.ownerDocument; + var seekBar = this.getChild('seekBar'); + + if (seekBar) { + seekBar.handleMouseUp(event); + } + + this.off(doc, 'mousemove', this.throttledHandleMouseSeek); + this.off(doc, 'touchmove', this.throttledHandleMouseSeek); + this.off(doc, 'mouseup', this.handleMouseUp); + this.off(doc, 'touchend', this.handleMouseUp); + }; + + return ProgressControl; + }(Component); + + /** + * Default options for `ProgressControl` + * + * @type {Object} + * @private + */ + + + ProgressControl.prototype.options_ = { + children: ['seekBar'] + }; + + Component.registerComponent('ProgressControl', ProgressControl); + + /** + * @file fullscreen-toggle.js + */ + + /** + * Toggle fullscreen video + * + * @extends Button + */ + + var FullscreenToggle = function (_Button) { + inherits(FullscreenToggle, _Button); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function FullscreenToggle(player, options) { + classCallCheck(this, FullscreenToggle); + + var _this = possibleConstructorReturn(this, _Button.call(this, player, options)); + + _this.on(player, 'fullscreenchange', _this.handleFullscreenChange); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + FullscreenToggle.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-fullscreen-control ' + _Button.prototype.buildCSSClass.call(this); + }; + + /** + * Handles fullscreenchange on the player and change control text accordingly. + * + * @param {EventTarget~Event} [event] + * The {@link Player#fullscreenchange} event that caused this function to be + * called. + * + * @listens Player#fullscreenchange + */ + + + FullscreenToggle.prototype.handleFullscreenChange = function handleFullscreenChange(event) { + if (this.player_.isFullscreen()) { + this.controlText('Non-Fullscreen'); + } else { + this.controlText('Fullscreen'); + } + }; + + /** + * This gets called when an `FullscreenToggle` is "clicked". See + * {@link ClickableComponent} for more detailed information on what a click can be. + * + * @param {EventTarget~Event} [event] + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + FullscreenToggle.prototype.handleClick = function handleClick(event) { + if (!this.player_.isFullscreen()) { + this.player_.requestFullscreen(); + } else { + this.player_.exitFullscreen(); + } + }; + + return FullscreenToggle; + }(Button); + + /** + * The text that should display over the `FullscreenToggle`s controls. Added for localization. + * + * @type {string} + * @private + */ + + + FullscreenToggle.prototype.controlText_ = 'Fullscreen'; + + Component.registerComponent('FullscreenToggle', FullscreenToggle); + + /** + * Check if volume control is supported and if it isn't hide the + * `Component` that was passed using the `vjs-hidden` class. + * + * @param {Component} self + * The component that should be hidden if volume is unsupported + * + * @param {Player} player + * A reference to the player + * + * @private + */ + var checkVolumeSupport = function checkVolumeSupport(self, player) { + // hide volume controls when they're not supported by the current tech + if (player.tech_ && !player.tech_.featuresVolumeControl) { + self.addClass('vjs-hidden'); + } + + self.on(player, 'loadstart', function () { + if (!player.tech_.featuresVolumeControl) { + self.addClass('vjs-hidden'); + } else { + self.removeClass('vjs-hidden'); + } + }); + }; + + /** + * @file volume-level.js + */ + + /** + * Shows volume level + * + * @extends Component + */ + + var VolumeLevel = function (_Component) { + inherits(VolumeLevel, _Component); + + function VolumeLevel() { + classCallCheck(this, VolumeLevel); + return possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + VolumeLevel.prototype.createEl = function createEl() { + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-volume-level', + innerHTML: '<span class="vjs-control-text"></span>' + }); + }; + + return VolumeLevel; + }(Component); + + Component.registerComponent('VolumeLevel', VolumeLevel); + + /** + * @file volume-bar.js + */ + + /** + * The bar that contains the volume level and can be clicked on to adjust the level + * + * @extends Slider + */ + + var VolumeBar = function (_Slider) { + inherits(VolumeBar, _Slider); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function VolumeBar(player, options) { + classCallCheck(this, VolumeBar); + + var _this = possibleConstructorReturn(this, _Slider.call(this, player, options)); + + _this.on('slideractive', _this.updateLastVolume_); + _this.on(player, 'volumechange', _this.updateARIAAttributes); + player.ready(function () { + return _this.updateARIAAttributes(); + }); + return _this; + } + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + VolumeBar.prototype.createEl = function createEl$$1() { + return _Slider.prototype.createEl.call(this, 'div', { + className: 'vjs-volume-bar vjs-slider-bar' + }, { + 'aria-label': this.localize('Volume Level'), + 'aria-live': 'polite' + }); + }; + + /** + * Handle mouse down on volume bar + * + * @param {EventTarget~Event} event + * The `mousedown` event that caused this to run. + * + * @listens mousedown + */ + + + VolumeBar.prototype.handleMouseDown = function handleMouseDown(event) { + if (!isSingleLeftClick(event)) { + return; + } + + _Slider.prototype.handleMouseDown.call(this, event); + }; + + /** + * Handle movement events on the {@link VolumeMenuButton}. + * + * @param {EventTarget~Event} event + * The event that caused this function to run. + * + * @listens mousemove + */ + + + VolumeBar.prototype.handleMouseMove = function handleMouseMove(event) { + if (!isSingleLeftClick(event)) { + return; + } + + this.checkMuted(); + this.player_.volume(this.calculateDistance(event)); + }; + + /** + * If the player is muted unmute it. + */ + + + VolumeBar.prototype.checkMuted = function checkMuted() { + if (this.player_.muted()) { + this.player_.muted(false); + } + }; + + /** + * Get percent of volume level + * + * @return {number} + * Volume level percent as a decimal number. + */ + + + VolumeBar.prototype.getPercent = function getPercent() { + if (this.player_.muted()) { + return 0; + } + return this.player_.volume(); + }; + + /** + * Increase volume level for keyboard users + */ + + + VolumeBar.prototype.stepForward = function stepForward() { + this.checkMuted(); + this.player_.volume(this.player_.volume() + 0.1); + }; + + /** + * Decrease volume level for keyboard users + */ + + + VolumeBar.prototype.stepBack = function stepBack() { + this.checkMuted(); + this.player_.volume(this.player_.volume() - 0.1); + }; + + /** + * Update ARIA accessibility attributes + * + * @param {EventTarget~Event} [event] + * The `volumechange` event that caused this function to run. + * + * @listens Player#volumechange + */ + + + VolumeBar.prototype.updateARIAAttributes = function updateARIAAttributes(event) { + var ariaValue = this.player_.muted() ? 0 : this.volumeAsPercentage_(); + + this.el_.setAttribute('aria-valuenow', ariaValue); + this.el_.setAttribute('aria-valuetext', ariaValue + '%'); + }; + + /** + * Returns the current value of the player volume as a percentage + * + * @private + */ + + + VolumeBar.prototype.volumeAsPercentage_ = function volumeAsPercentage_() { + return Math.round(this.player_.volume() * 100); + }; + + /** + * When user starts dragging the VolumeBar, store the volume and listen for + * the end of the drag. When the drag ends, if the volume was set to zero, + * set lastVolume to the stored volume. + * + * @listens slideractive + * @private + */ + + + VolumeBar.prototype.updateLastVolume_ = function updateLastVolume_() { + var _this2 = this; + + var volumeBeforeDrag = this.player_.volume(); + + this.one('sliderinactive', function () { + if (_this2.player_.volume() === 0) { + _this2.player_.lastVolume_(volumeBeforeDrag); + } + }); + }; + + return VolumeBar; + }(Slider); + + /** + * Default options for the `VolumeBar` + * + * @type {Object} + * @private + */ + + + VolumeBar.prototype.options_ = { + children: ['volumeLevel'], + barName: 'volumeLevel' + }; + + /** + * Call the update event for this Slider when this event happens on the player. + * + * @type {string} + */ + VolumeBar.prototype.playerEvent = 'volumechange'; + + Component.registerComponent('VolumeBar', VolumeBar); + + /** + * @file volume-control.js + */ + + /** + * The component for controlling the volume level + * + * @extends Component + */ + + var VolumeControl = function (_Component) { + inherits(VolumeControl, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options={}] + * The key/value store of player options. + */ + function VolumeControl(player) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, VolumeControl); + + options.vertical = options.vertical || false; + + // Pass the vertical option down to the VolumeBar if + // the VolumeBar is turned on. + if (typeof options.volumeBar === 'undefined' || isPlain(options.volumeBar)) { + options.volumeBar = options.volumeBar || {}; + options.volumeBar.vertical = options.vertical; + } + + // hide this control if volume support is missing + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + checkVolumeSupport(_this, player); + + _this.throttledHandleMouseMove = throttle(bind(_this, _this.handleMouseMove), 25); + + _this.on('mousedown', _this.handleMouseDown); + _this.on('touchstart', _this.handleMouseDown); + + // while the slider is active (the mouse has been pressed down and + // is dragging) or in focus we do not want to hide the VolumeBar + _this.on(_this.volumeBar, ['focus', 'slideractive'], function () { + _this.volumeBar.addClass('vjs-slider-active'); + _this.addClass('vjs-slider-active'); + _this.trigger('slideractive'); + }); + + _this.on(_this.volumeBar, ['blur', 'sliderinactive'], function () { + _this.volumeBar.removeClass('vjs-slider-active'); + _this.removeClass('vjs-slider-active'); + _this.trigger('sliderinactive'); + }); + return _this; + } + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + VolumeControl.prototype.createEl = function createEl() { + var orientationClass = 'vjs-volume-horizontal'; + + if (this.options_.vertical) { + orientationClass = 'vjs-volume-vertical'; + } + + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-volume-control vjs-control ' + orientationClass + }); + }; + + /** + * Handle `mousedown` or `touchstart` events on the `VolumeControl`. + * + * @param {EventTarget~Event} event + * `mousedown` or `touchstart` event that triggered this function + * + * @listens mousedown + * @listens touchstart + */ + + + VolumeControl.prototype.handleMouseDown = function handleMouseDown(event) { + var doc = this.el_.ownerDocument; + + this.on(doc, 'mousemove', this.throttledHandleMouseMove); + this.on(doc, 'touchmove', this.throttledHandleMouseMove); + this.on(doc, 'mouseup', this.handleMouseUp); + this.on(doc, 'touchend', this.handleMouseUp); + }; + + /** + * Handle `mouseup` or `touchend` events on the `VolumeControl`. + * + * @param {EventTarget~Event} event + * `mouseup` or `touchend` event that triggered this function. + * + * @listens touchend + * @listens mouseup + */ + + + VolumeControl.prototype.handleMouseUp = function handleMouseUp(event) { + var doc = this.el_.ownerDocument; + + this.off(doc, 'mousemove', this.throttledHandleMouseMove); + this.off(doc, 'touchmove', this.throttledHandleMouseMove); + this.off(doc, 'mouseup', this.handleMouseUp); + this.off(doc, 'touchend', this.handleMouseUp); + }; + + /** + * Handle `mousedown` or `touchstart` events on the `VolumeControl`. + * + * @param {EventTarget~Event} event + * `mousedown` or `touchstart` event that triggered this function + * + * @listens mousedown + * @listens touchstart + */ + + + VolumeControl.prototype.handleMouseMove = function handleMouseMove(event) { + this.volumeBar.handleMouseMove(event); + }; + + return VolumeControl; + }(Component); + + /** + * Default options for the `VolumeControl` + * + * @type {Object} + * @private + */ + + + VolumeControl.prototype.options_ = { + children: ['volumeBar'] + }; + + Component.registerComponent('VolumeControl', VolumeControl); + + /** + * @file mute-toggle.js + */ + + /** + * A button component for muting the audio. + * + * @extends Button + */ + + var MuteToggle = function (_Button) { + inherits(MuteToggle, _Button); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function MuteToggle(player, options) { + classCallCheck(this, MuteToggle); + + // hide this control if volume support is missing + var _this = possibleConstructorReturn(this, _Button.call(this, player, options)); + + checkVolumeSupport(_this, player); + + _this.on(player, ['loadstart', 'volumechange'], _this.update); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + MuteToggle.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-mute-control ' + _Button.prototype.buildCSSClass.call(this); + }; + + /** + * This gets called when an `MuteToggle` is "clicked". See + * {@link ClickableComponent} for more detailed information on what a click can be. + * + * @param {EventTarget~Event} [event] + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + MuteToggle.prototype.handleClick = function handleClick(event) { + var vol = this.player_.volume(); + var lastVolume = this.player_.lastVolume_(); + + if (vol === 0) { + var volumeToSet = lastVolume < 0.1 ? 0.1 : lastVolume; + + this.player_.volume(volumeToSet); + this.player_.muted(false); + } else { + this.player_.muted(this.player_.muted() ? false : true); + } + }; + + /** + * Update the `MuteToggle` button based on the state of `volume` and `muted` + * on the player. + * + * @param {EventTarget~Event} [event] + * The {@link Player#loadstart} event if this function was called + * through an event. + * + * @listens Player#loadstart + * @listens Player#volumechange + */ + + + MuteToggle.prototype.update = function update(event) { + this.updateIcon_(); + this.updateControlText_(); + }; + + /** + * Update the appearance of the `MuteToggle` icon. + * + * Possible states (given `level` variable below): + * - 0: crossed out + * - 1: zero bars of volume + * - 2: one bar of volume + * - 3: two bars of volume + * + * @private + */ + + + MuteToggle.prototype.updateIcon_ = function updateIcon_() { + var vol = this.player_.volume(); + var level = 3; + + if (vol === 0 || this.player_.muted()) { + level = 0; + } else if (vol < 0.33) { + level = 1; + } else if (vol < 0.67) { + level = 2; + } + + // TODO improve muted icon classes + for (var i = 0; i < 4; i++) { + removeClass(this.el_, 'vjs-vol-' + i); + } + addClass(this.el_, 'vjs-vol-' + level); + }; + + /** + * If `muted` has changed on the player, update the control text + * (`title` attribute on `vjs-mute-control` element and content of + * `vjs-control-text` element). + * + * @private + */ + + + MuteToggle.prototype.updateControlText_ = function updateControlText_() { + var soundOff = this.player_.muted() || this.player_.volume() === 0; + var text = soundOff ? 'Unmute' : 'Mute'; + + if (this.controlText() !== text) { + this.controlText(text); + } + }; + + return MuteToggle; + }(Button); + + /** + * The text that should display over the `MuteToggle`s controls. Added for localization. + * + * @type {string} + * @private + */ + + + MuteToggle.prototype.controlText_ = 'Mute'; + + Component.registerComponent('MuteToggle', MuteToggle); + + /** + * @file volume-control.js + */ + + /** + * A Component to contain the MuteToggle and VolumeControl so that + * they can work together. + * + * @extends Component + */ + + var VolumePanel = function (_Component) { + inherits(VolumePanel, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options={}] + * The key/value store of player options. + */ + function VolumePanel(player) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, VolumePanel); + + if (typeof options.inline !== 'undefined') { + options.inline = options.inline; + } else { + options.inline = true; + } + + // pass the inline option down to the VolumeControl as vertical if + // the VolumeControl is on. + if (typeof options.volumeControl === 'undefined' || isPlain(options.volumeControl)) { + options.volumeControl = options.volumeControl || {}; + options.volumeControl.vertical = !options.inline; + } + + // hide this control if volume support is missing + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + checkVolumeSupport(_this, player); + + // while the slider is active (the mouse has been pressed down and + // is dragging) we do not want to hide the VolumeBar + _this.on(_this.volumeControl, ['slideractive'], _this.sliderActive_); + + _this.on(_this.volumeControl, ['sliderinactive'], _this.sliderInactive_); + return _this; + } + + /** + * Add vjs-slider-active class to the VolumePanel + * + * @listens VolumeControl#slideractive + * @private + */ + + + VolumePanel.prototype.sliderActive_ = function sliderActive_() { + this.addClass('vjs-slider-active'); + }; + + /** + * Removes vjs-slider-active class to the VolumePanel + * + * @listens VolumeControl#sliderinactive + * @private + */ + + + VolumePanel.prototype.sliderInactive_ = function sliderInactive_() { + this.removeClass('vjs-slider-active'); + }; + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + VolumePanel.prototype.createEl = function createEl() { + var orientationClass = 'vjs-volume-panel-horizontal'; + + if (!this.options_.inline) { + orientationClass = 'vjs-volume-panel-vertical'; + } + + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-volume-panel vjs-control ' + orientationClass + }); + }; + + return VolumePanel; + }(Component); + + /** + * Default options for the `VolumeControl` + * + * @type {Object} + * @private + */ + + + VolumePanel.prototype.options_ = { + children: ['muteToggle', 'volumeControl'] + }; + + Component.registerComponent('VolumePanel', VolumePanel); + + /** + * @file menu.js + */ + + /** + * The Menu component is used to build popup menus, including subtitle and + * captions selection menus. + * + * @extends Component + */ + + var Menu = function (_Component) { + inherits(Menu, _Component); + + /** + * Create an instance of this class. + * + * @param {Player} player + * the player that this component should attach to + * + * @param {Object} [options] + * Object of option names and values + * + */ + function Menu(player, options) { + classCallCheck(this, Menu); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + if (options) { + _this.menuButton_ = options.menuButton; + } + + _this.focusedChild_ = -1; + + _this.on('keydown', _this.handleKeyPress); + return _this; + } + + /** + * Add a {@link MenuItem} to the menu. + * + * @param {Object|string} component + * The name or instance of the `MenuItem` to add. + * + */ + + + Menu.prototype.addItem = function addItem(component) { + this.addChild(component); + component.on('click', bind(this, function (event) { + // Unpress the associated MenuButton, and move focus back to it + if (this.menuButton_) { + this.menuButton_.unpressButton(); + + // don't focus menu button if item is a caption settings item + // because focus will move elsewhere + if (component.name() !== 'CaptionSettingsMenuItem') { + this.menuButton_.focus(); + } + } + })); + }; + + /** + * Create the `Menu`s DOM element. + * + * @return {Element} + * the element that was created + */ + + + Menu.prototype.createEl = function createEl$$1() { + var contentElType = this.options_.contentElType || 'ul'; + + this.contentEl_ = createEl(contentElType, { + className: 'vjs-menu-content' + }); + + this.contentEl_.setAttribute('role', 'menu'); + + var el = _Component.prototype.createEl.call(this, 'div', { + append: this.contentEl_, + className: 'vjs-menu' + }); + + el.appendChild(this.contentEl_); + + // Prevent clicks from bubbling up. Needed for Menu Buttons, + // where a click on the parent is significant + on(el, 'click', function (event) { + event.preventDefault(); + event.stopImmediatePropagation(); + }); + + return el; + }; + + Menu.prototype.dispose = function dispose() { + this.contentEl_ = null; + + _Component.prototype.dispose.call(this); + }; + + /** + * Handle a `keydown` event on this menu. This listener is added in the constructor. + * + * @param {EventTarget~Event} event + * A `keydown` event that happened on the menu. + * + * @listens keydown + */ + + + Menu.prototype.handleKeyPress = function handleKeyPress(event) { + // Left and Down Arrows + if (event.which === 37 || event.which === 40) { + event.preventDefault(); + this.stepForward(); + + // Up and Right Arrows + } else if (event.which === 38 || event.which === 39) { + event.preventDefault(); + this.stepBack(); + } + }; + + /** + * Move to next (lower) menu item for keyboard users. + */ + + + Menu.prototype.stepForward = function stepForward() { + var stepChild = 0; + + if (this.focusedChild_ !== undefined) { + stepChild = this.focusedChild_ + 1; + } + this.focus(stepChild); + }; + + /** + * Move to previous (higher) menu item for keyboard users. + */ + + + Menu.prototype.stepBack = function stepBack() { + var stepChild = 0; + + if (this.focusedChild_ !== undefined) { + stepChild = this.focusedChild_ - 1; + } + this.focus(stepChild); + }; + + /** + * Set focus on a {@link MenuItem} in the `Menu`. + * + * @param {Object|string} [item=0] + * Index of child item set focus on. + */ + + + Menu.prototype.focus = function focus() { + var item = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var children = this.children().slice(); + var haveTitle = children.length && children[0].className && /vjs-menu-title/.test(children[0].className); + + if (haveTitle) { + children.shift(); + } + + if (children.length > 0) { + if (item < 0) { + item = 0; + } else if (item >= children.length) { + item = children.length - 1; + } + + this.focusedChild_ = item; + + children[item].el_.focus(); + } + }; + + return Menu; + }(Component); + + Component.registerComponent('Menu', Menu); + + /** + * @file menu-button.js + */ + + /** + * A `MenuButton` class for any popup {@link Menu}. + * + * @extends Component + */ + + var MenuButton = function (_Component) { + inherits(MenuButton, _Component); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options={}] + * The key/value store of player options. + */ + function MenuButton(player) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, MenuButton); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options)); + + _this.menuButton_ = new Button(player, options); + + _this.menuButton_.controlText(_this.controlText_); + _this.menuButton_.el_.setAttribute('aria-haspopup', 'true'); + + // Add buildCSSClass values to the button, not the wrapper + var buttonClass = Button.prototype.buildCSSClass(); + + _this.menuButton_.el_.className = _this.buildCSSClass() + ' ' + buttonClass; + _this.menuButton_.removeClass('vjs-control'); + + _this.addChild(_this.menuButton_); + + _this.update(); + + _this.enabled_ = true; + + _this.on(_this.menuButton_, 'tap', _this.handleClick); + _this.on(_this.menuButton_, 'click', _this.handleClick); + _this.on(_this.menuButton_, 'focus', _this.handleFocus); + _this.on(_this.menuButton_, 'blur', _this.handleBlur); + + _this.on('keydown', _this.handleSubmenuKeyPress); + return _this; + } + + /** + * Update the menu based on the current state of its items. + */ + + + MenuButton.prototype.update = function update() { + var menu = this.createMenu(); + + if (this.menu) { + this.menu.dispose(); + this.removeChild(this.menu); + } + + this.menu = menu; + this.addChild(menu); + + /** + * Track the state of the menu button + * + * @type {Boolean} + * @private + */ + this.buttonPressed_ = false; + this.menuButton_.el_.setAttribute('aria-expanded', 'false'); + + if (this.items && this.items.length <= this.hideThreshold_) { + this.hide(); + } else { + this.show(); + } + }; + + /** + * Create the menu and add all items to it. + * + * @return {Menu} + * The constructed menu + */ + + + MenuButton.prototype.createMenu = function createMenu() { + var menu = new Menu(this.player_, {menuButton: this}); + + /** + * Hide the menu if the number of items is less than or equal to this threshold. This defaults + * to 0 and whenever we add items which can be hidden to the menu we'll increment it. We list + * it here because every time we run `createMenu` we need to reset the value. + * + * @protected + * @type {Number} + */ + this.hideThreshold_ = 0; + + // Add a title list item to the top + if (this.options_.title) { + var title = createEl('li', { + className: 'vjs-menu-title', + innerHTML: toTitleCase(this.options_.title), + tabIndex: -1 + }); + + this.hideThreshold_ += 1; + + menu.children_.unshift(title); + prependTo(title, menu.contentEl()); + } + + this.items = this.createItems(); + + if (this.items) { + // Add menu items to the menu + for (var i = 0; i < this.items.length; i++) { + menu.addItem(this.items[i]); + } + } + + return menu; + }; + + /** + * Create the list of menu items. Specific to each subclass. + * + * @abstract + */ + + + MenuButton.prototype.createItems = function createItems() { + }; + + /** + * Create the `MenuButtons`s DOM element. + * + * @return {Element} + * The element that gets created. + */ + + + MenuButton.prototype.createEl = function createEl$$1() { + return _Component.prototype.createEl.call(this, 'div', { + className: this.buildWrapperCSSClass() + }, {}); + }; + + /** + * Allow sub components to stack CSS class names for the wrapper element + * + * @return {string} + * The constructed wrapper DOM `className` + */ + + + MenuButton.prototype.buildWrapperCSSClass = function buildWrapperCSSClass() { + var menuButtonClass = 'vjs-menu-button'; + + // If the inline option is passed, we want to use different styles altogether. + if (this.options_.inline === true) { + menuButtonClass += '-inline'; + } else { + menuButtonClass += '-popup'; + } + + // TODO: Fix the CSS so that this isn't necessary + var buttonClass = Button.prototype.buildCSSClass(); + + return 'vjs-menu-button ' + menuButtonClass + ' ' + buttonClass + ' ' + _Component.prototype.buildCSSClass.call(this); + }; + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + MenuButton.prototype.buildCSSClass = function buildCSSClass() { + var menuButtonClass = 'vjs-menu-button'; + + // If the inline option is passed, we want to use different styles altogether. + if (this.options_.inline === true) { + menuButtonClass += '-inline'; + } else { + menuButtonClass += '-popup'; + } + + return 'vjs-menu-button ' + menuButtonClass + ' ' + _Component.prototype.buildCSSClass.call(this); + }; + + /** + * Get or set the localized control text that will be used for accessibility. + * + * > NOTE: This will come from the internal `menuButton_` element. + * + * @param {string} [text] + * Control text for element. + * + * @param {Element} [el=this.menuButton_.el()] + * Element to set the title on. + * + * @return {string} + * - The control text when getting + */ + + + MenuButton.prototype.controlText = function controlText(text) { + var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.menuButton_.el(); + + return this.menuButton_.controlText(text, el); + }; + + /** + * Handle a click on a `MenuButton`. + * See {@link ClickableComponent#handleClick} for instances where this is called. + * + * @param {EventTarget~Event} event + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + MenuButton.prototype.handleClick = function handleClick(event) { + // When you click the button it adds focus, which will show the menu. + // So we'll remove focus when the mouse leaves the button. Focus is needed + // for tab navigation. + + this.one(this.menu.contentEl(), 'mouseleave', bind(this, function (e) { + this.unpressButton(); + this.el_.blur(); + })); + if (this.buttonPressed_) { + this.unpressButton(); + } else { + this.pressButton(); + } + }; + + /** + * Set the focus to the actual button, not to this element + */ + + + MenuButton.prototype.focus = function focus() { + this.menuButton_.focus(); + }; + + /** + * Remove the focus from the actual button, not this element + */ + + + MenuButton.prototype.blur = function blur() { + this.menuButton_.blur(); + }; + + /** + * This gets called when a `MenuButton` gains focus via a `focus` event. + * Turns on listening for `keydown` events. When they happen it + * calls `this.handleKeyPress`. + * + * @param {EventTarget~Event} event + * The `focus` event that caused this function to be called. + * + * @listens focus + */ + + + MenuButton.prototype.handleFocus = function handleFocus() { + on(document_1, 'keydown', bind(this, this.handleKeyPress)); + }; + + /** + * Called when a `MenuButton` loses focus. Turns off the listener for + * `keydown` events. Which Stops `this.handleKeyPress` from getting called. + * + * @param {EventTarget~Event} event + * The `blur` event that caused this function to be called. + * + * @listens blur + */ + + + MenuButton.prototype.handleBlur = function handleBlur() { + off(document_1, 'keydown', bind(this, this.handleKeyPress)); + }; + + /** + * Handle tab, escape, down arrow, and up arrow keys for `MenuButton`. See + * {@link ClickableComponent#handleKeyPress} for instances where this is called. + * + * @param {EventTarget~Event} event + * The `keydown` event that caused this function to be called. + * + * @listens keydown + */ + + + MenuButton.prototype.handleKeyPress = function handleKeyPress(event) { + + // Escape (27) key or Tab (9) key unpress the 'button' + if (event.which === 27 || event.which === 9) { + if (this.buttonPressed_) { + this.unpressButton(); + } + // Don't preventDefault for Tab key - we still want to lose focus + if (event.which !== 9) { + event.preventDefault(); + // Set focus back to the menu button's button + this.menuButton_.el_.focus(); + } + // Up (38) key or Down (40) key press the 'button' + } else if (event.which === 38 || event.which === 40) { + if (!this.buttonPressed_) { + this.pressButton(); + event.preventDefault(); + } + } + }; + + /** + * Handle a `keydown` event on a sub-menu. The listener for this is added in + * the constructor. + * + * @param {EventTarget~Event} event + * Key press event + * + * @listens keydown + */ + + + MenuButton.prototype.handleSubmenuKeyPress = function handleSubmenuKeyPress(event) { + + // Escape (27) key or Tab (9) key unpress the 'button' + if (event.which === 27 || event.which === 9) { + if (this.buttonPressed_) { + this.unpressButton(); + } + // Don't preventDefault for Tab key - we still want to lose focus + if (event.which !== 9) { + event.preventDefault(); + // Set focus back to the menu button's button + this.menuButton_.el_.focus(); + } + } + }; + + /** + * Put the current `MenuButton` into a pressed state. + */ + + + MenuButton.prototype.pressButton = function pressButton() { + if (this.enabled_) { + this.buttonPressed_ = true; + this.menu.lockShowing(); + this.menuButton_.el_.setAttribute('aria-expanded', 'true'); + + // set the focus into the submenu, except on iOS where it is resulting in + // undesired scrolling behavior when the player is in an iframe + if (IS_IOS && isInFrame()) { + // Return early so that the menu isn't focused + return; + } + + this.menu.focus(); + } + }; + + /** + * Take the current `MenuButton` out of a pressed state. + */ + + + MenuButton.prototype.unpressButton = function unpressButton() { + if (this.enabled_) { + this.buttonPressed_ = false; + this.menu.unlockShowing(); + this.menuButton_.el_.setAttribute('aria-expanded', 'false'); + } + }; + + /** + * Disable the `MenuButton`. Don't allow it to be clicked. + */ + + + MenuButton.prototype.disable = function disable() { + this.unpressButton(); + + this.enabled_ = false; + this.addClass('vjs-disabled'); + + this.menuButton_.disable(); + }; + + /** + * Enable the `MenuButton`. Allow it to be clicked. + */ + + + MenuButton.prototype.enable = function enable() { + this.enabled_ = true; + this.removeClass('vjs-disabled'); + + this.menuButton_.enable(); + }; + + return MenuButton; + }(Component); + + Component.registerComponent('MenuButton', MenuButton); + + /** + * @file track-button.js + */ + + /** + * The base class for buttons that toggle specific track types (e.g. subtitles). + * + * @extends MenuButton + */ + + var TrackButton = function (_MenuButton) { + inherits(TrackButton, _MenuButton); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function TrackButton(player, options) { + classCallCheck(this, TrackButton); + + var tracks = options.tracks; + + var _this = possibleConstructorReturn(this, _MenuButton.call(this, player, options)); + + if (_this.items.length <= 1) { + _this.hide(); + } + + if (!tracks) { + return possibleConstructorReturn(_this); + } + + var updateHandler = bind(_this, _this.update); + + tracks.addEventListener('removetrack', updateHandler); + tracks.addEventListener('addtrack', updateHandler); + _this.player_.on('ready', updateHandler); + + _this.player_.on('dispose', function () { + tracks.removeEventListener('removetrack', updateHandler); + tracks.removeEventListener('addtrack', updateHandler); + }); + return _this; + } + + return TrackButton; + }(MenuButton); + + Component.registerComponent('TrackButton', TrackButton); + + /** + * @file menu-item.js + */ + + /** + * The component for a menu item. `<li>` + * + * @extends ClickableComponent + */ + + var MenuItem = function (_ClickableComponent) { + inherits(MenuItem, _ClickableComponent); + + /** + * Creates an instance of the this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options={}] + * The key/value store of player options. + * + */ + function MenuItem(player, options) { + classCallCheck(this, MenuItem); + + var _this = possibleConstructorReturn(this, _ClickableComponent.call(this, player, options)); + + _this.selectable = options.selectable; + _this.isSelected_ = options.selected || false; + + _this.selected(_this.isSelected_); + + if (_this.selectable) { + // TODO: May need to be either menuitemcheckbox or menuitemradio, + // and may need logical grouping of menu items. + _this.el_.setAttribute('role', 'menuitemcheckbox'); + } else { + _this.el_.setAttribute('role', 'menuitem'); + } + return _this; + } + + /** + * Create the `MenuItem's DOM element + * + * @param {string} [type=li] + * Element's node type, not actually used, always set to `li`. + * + * @param {Object} [props={}] + * An object of properties that should be set on the element + * + * @param {Object} [attrs={}] + * An object of attributes that should be set on the element + * + * @return {Element} + * The element that gets created. + */ + + + MenuItem.prototype.createEl = function createEl(type, props, attrs) { + // The control is textual, not just an icon + this.nonIconControl = true; + + return _ClickableComponent.prototype.createEl.call(this, 'li', assign({ + className: 'vjs-menu-item', + innerHTML: '<span class="vjs-menu-item-text">' + this.localize(this.options_.label) + '</span>', + tabIndex: -1 + }, props), attrs); + }; + + /** + * Any click on a `MenuItem` puts int into the selected state. + * See {@link ClickableComponent#handleClick} for instances where this is called. + * + * @param {EventTarget~Event} event + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + MenuItem.prototype.handleClick = function handleClick(event) { + this.selected(true); + }; + + /** + * Set the state for this menu item as selected or not. + * + * @param {boolean} selected + * if the menu item is selected or not + */ + + + MenuItem.prototype.selected = function selected(_selected) { + if (this.selectable) { + if (_selected) { + this.addClass('vjs-selected'); + this.el_.setAttribute('aria-checked', 'true'); + // aria-checked isn't fully supported by browsers/screen readers, + // so indicate selected state to screen reader in the control text. + this.controlText(', selected'); + this.isSelected_ = true; + } else { + this.removeClass('vjs-selected'); + this.el_.setAttribute('aria-checked', 'false'); + // Indicate un-selected state to screen reader + this.controlText(''); + this.isSelected_ = false; + } + } + }; + + return MenuItem; + }(ClickableComponent); + + Component.registerComponent('MenuItem', MenuItem); + + /** + * @file text-track-menu-item.js + */ + + /** + * The specific menu item type for selecting a language within a text track kind + * + * @extends MenuItem + */ + + var TextTrackMenuItem = function (_MenuItem) { + inherits(TextTrackMenuItem, _MenuItem); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function TextTrackMenuItem(player, options) { + classCallCheck(this, TextTrackMenuItem); + + var track = options.track; + var tracks = player.textTracks(); + + // Modify options for parent MenuItem class's init. + options.label = track.label || track.language || 'Unknown'; + options.selected = track.mode === 'showing'; + + var _this = possibleConstructorReturn(this, _MenuItem.call(this, player, options)); + + _this.track = track; + var changeHandler = function changeHandler() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + _this.handleTracksChange.apply(_this, args); + }; + var selectedLanguageChangeHandler = function selectedLanguageChangeHandler() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + _this.handleSelectedLanguageChange.apply(_this, args); + }; + + player.on(['loadstart', 'texttrackchange'], changeHandler); + tracks.addEventListener('change', changeHandler); + tracks.addEventListener('selectedlanguagechange', selectedLanguageChangeHandler); + _this.on('dispose', function () { + player.off(['loadstart', 'texttrackchange'], changeHandler); + tracks.removeEventListener('change', changeHandler); + tracks.removeEventListener('selectedlanguagechange', selectedLanguageChangeHandler); + }); + + // iOS7 doesn't dispatch change events to TextTrackLists when an + // associated track's mode changes. Without something like + // Object.observe() (also not present on iOS7), it's not + // possible to detect changes to the mode attribute and polyfill + // the change event. As a poor substitute, we manually dispatch + // change events whenever the controls modify the mode. + if (tracks.onchange === undefined) { + var event = void 0; + + _this.on(['tap', 'click'], function () { + if (_typeof(window_1.Event) !== 'object') { + // Android 2.3 throws an Illegal Constructor error for window.Event + try { + event = new window_1.Event('change'); + } catch (err) { + // continue regardless of error + } + } + + if (!event) { + event = document_1.createEvent('Event'); + event.initEvent('change', true, true); + } + + tracks.dispatchEvent(event); + }); + } + + // set the default state based on current tracks + _this.handleTracksChange(); + return _this; + } + + /** + * This gets called when an `TextTrackMenuItem` is "clicked". See + * {@link ClickableComponent} for more detailed information on what a click can be. + * + * @param {EventTarget~Event} event + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + TextTrackMenuItem.prototype.handleClick = function handleClick(event) { + var kind = this.track.kind; + var kinds = this.track.kinds; + var tracks = this.player_.textTracks(); + + if (!kinds) { + kinds = [kind]; + } + + _MenuItem.prototype.handleClick.call(this, event); + + if (!tracks) { + return; + } + + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + + if (track === this.track && kinds.indexOf(track.kind) > -1) { + if (track.mode !== 'showing') { + track.mode = 'showing'; + } + } else if (track.mode !== 'disabled') { + track.mode = 'disabled'; + } + } + }; + + /** + * Handle text track list change + * + * @param {EventTarget~Event} event + * The `change` event that caused this function to be called. + * + * @listens TextTrackList#change + */ + + + TextTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) { + var shouldBeSelected = this.track.mode === 'showing'; + + // Prevent redundant selected() calls because they may cause + // screen readers to read the appended control text unnecessarily + if (shouldBeSelected !== this.isSelected_) { + this.selected(shouldBeSelected); + } + }; + + TextTrackMenuItem.prototype.handleSelectedLanguageChange = function handleSelectedLanguageChange(event) { + if (this.track.mode === 'showing') { + var selectedLanguage = this.player_.cache_.selectedLanguage; + + // Don't replace the kind of track across the same language + if (selectedLanguage && selectedLanguage.enabled && selectedLanguage.language === this.track.language && selectedLanguage.kind !== this.track.kind) { + return; + } + + this.player_.cache_.selectedLanguage = { + enabled: true, + language: this.track.language, + kind: this.track.kind + }; + } + }; + + TextTrackMenuItem.prototype.dispose = function dispose() { + // remove reference to track object on dispose + this.track = null; + + _MenuItem.prototype.dispose.call(this); + }; + + return TextTrackMenuItem; + }(MenuItem); + + Component.registerComponent('TextTrackMenuItem', TextTrackMenuItem); + + /** + * @file off-text-track-menu-item.js + */ + + /** + * A special menu item for turning of a specific type of text track + * + * @extends TextTrackMenuItem + */ + + var OffTextTrackMenuItem = function (_TextTrackMenuItem) { + inherits(OffTextTrackMenuItem, _TextTrackMenuItem); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function OffTextTrackMenuItem(player, options) { + classCallCheck(this, OffTextTrackMenuItem); + + // Create pseudo track info + // Requires options['kind'] + options.track = { + player: player, + kind: options.kind, + kinds: options.kinds, + default: false, + mode: 'disabled' + }; + + if (!options.kinds) { + options.kinds = [options.kind]; + } + + if (options.label) { + options.track.label = options.label; + } else { + options.track.label = options.kinds.join(' and ') + ' off'; + } + + // MenuItem is selectable + options.selectable = true; + + return possibleConstructorReturn(this, _TextTrackMenuItem.call(this, player, options)); + } + + /** + * Handle text track change + * + * @param {EventTarget~Event} event + * The event that caused this function to run + */ + + + OffTextTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) { + var tracks = this.player().textTracks(); + var shouldBeSelected = true; + + for (var i = 0, l = tracks.length; i < l; i++) { + var track = tracks[i]; + + if (this.options_.kinds.indexOf(track.kind) > -1 && track.mode === 'showing') { + shouldBeSelected = false; + break; + } + } + + // Prevent redundant selected() calls because they may cause + // screen readers to read the appended control text unnecessarily + if (shouldBeSelected !== this.isSelected_) { + this.selected(shouldBeSelected); + } + }; + + OffTextTrackMenuItem.prototype.handleSelectedLanguageChange = function handleSelectedLanguageChange(event) { + var tracks = this.player().textTracks(); + var allHidden = true; + + for (var i = 0, l = tracks.length; i < l; i++) { + var track = tracks[i]; + + if (['captions', 'descriptions', 'subtitles'].indexOf(track.kind) > -1 && track.mode === 'showing') { + allHidden = false; + break; + } + } + + if (allHidden) { + this.player_.cache_.selectedLanguage = { + enabled: false + }; + } + }; + + return OffTextTrackMenuItem; + }(TextTrackMenuItem); + + Component.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem); + + /** + * @file text-track-button.js + */ + + /** + * The base class for buttons that toggle specific text track types (e.g. subtitles) + * + * @extends MenuButton + */ + + var TextTrackButton = function (_TrackButton) { + inherits(TextTrackButton, _TrackButton); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options={}] + * The key/value store of player options. + */ + function TextTrackButton(player) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, TextTrackButton); + + options.tracks = player.textTracks(); + + return possibleConstructorReturn(this, _TrackButton.call(this, player, options)); + } + + /** + * Create a menu item for each text track + * + * @param {TextTrackMenuItem[]} [items=[]] + * Existing array of items to use during creation + * + * @return {TextTrackMenuItem[]} + * Array of menu items that were created + */ + + + TextTrackButton.prototype.createItems = function createItems() { + var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var TrackMenuItem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TextTrackMenuItem; + + + // Label is an override for the [track] off label + // USed to localise captions/subtitles + var label = void 0; + + if (this.label_) { + label = this.label_ + ' off'; + } + // Add an OFF menu item to turn all tracks off + items.push(new OffTextTrackMenuItem(this.player_, { + kinds: this.kinds_, + kind: this.kind_, + label: label + })); + + this.hideThreshold_ += 1; + + var tracks = this.player_.textTracks(); + + if (!Array.isArray(this.kinds_)) { + this.kinds_ = [this.kind_]; + } + + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + + // only add tracks that are of an appropriate kind and have a label + if (this.kinds_.indexOf(track.kind) > -1) { + + var item = new TrackMenuItem(this.player_, { + track: track, + // MenuItem is selectable + selectable: true + }); + + item.addClass('vjs-' + track.kind + '-menu-item'); + items.push(item); + } + } + + return items; + }; + + return TextTrackButton; + }(TrackButton); + + Component.registerComponent('TextTrackButton', TextTrackButton); + + /** + * @file chapters-track-menu-item.js + */ + + /** + * The chapter track menu item + * + * @extends MenuItem + */ + + var ChaptersTrackMenuItem = function (_MenuItem) { + inherits(ChaptersTrackMenuItem, _MenuItem); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function ChaptersTrackMenuItem(player, options) { + classCallCheck(this, ChaptersTrackMenuItem); + + var track = options.track; + var cue = options.cue; + var currentTime = player.currentTime(); + + // Modify options for parent MenuItem class's init. + options.selectable = true; + options.label = cue.text; + options.selected = cue.startTime <= currentTime && currentTime < cue.endTime; + + var _this = possibleConstructorReturn(this, _MenuItem.call(this, player, options)); + + _this.track = track; + _this.cue = cue; + track.addEventListener('cuechange', bind(_this, _this.update)); + return _this; + } + + /** + * This gets called when an `ChaptersTrackMenuItem` is "clicked". See + * {@link ClickableComponent} for more detailed information on what a click can be. + * + * @param {EventTarget~Event} [event] + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + ChaptersTrackMenuItem.prototype.handleClick = function handleClick(event) { + _MenuItem.prototype.handleClick.call(this); + this.player_.currentTime(this.cue.startTime); + this.update(this.cue.startTime); + }; + + /** + * Update chapter menu item + * + * @param {EventTarget~Event} [event] + * The `cuechange` event that caused this function to run. + * + * @listens TextTrack#cuechange + */ + + + ChaptersTrackMenuItem.prototype.update = function update(event) { + var cue = this.cue; + var currentTime = this.player_.currentTime(); + + // vjs.log(currentTime, cue.startTime); + this.selected(cue.startTime <= currentTime && currentTime < cue.endTime); + }; + + return ChaptersTrackMenuItem; + }(MenuItem); + + Component.registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem); + + /** + * @file chapters-button.js + */ + + /** + * The button component for toggling and selecting chapters + * Chapters act much differently than other text tracks + * Cues are navigation vs. other tracks of alternative languages + * + * @extends TextTrackButton + */ + + var ChaptersButton = function (_TextTrackButton) { + inherits(ChaptersButton, _TextTrackButton); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Component~ReadyCallback} [ready] + * The function to call when this function is ready. + */ + function ChaptersButton(player, options, ready) { + classCallCheck(this, ChaptersButton); + return possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready)); + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + ChaptersButton.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-chapters-button ' + _TextTrackButton.prototype.buildCSSClass.call(this); + }; + + ChaptersButton.prototype.buildWrapperCSSClass = function buildWrapperCSSClass() { + return 'vjs-chapters-button ' + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); + }; + + /** + * Update the menu based on the current state of its items. + * + * @param {EventTarget~Event} [event] + * An event that triggered this function to run. + * + * @listens TextTrackList#addtrack + * @listens TextTrackList#removetrack + * @listens TextTrackList#change + */ + + + ChaptersButton.prototype.update = function update(event) { + if (!this.track_ || event && (event.type === 'addtrack' || event.type === 'removetrack')) { + this.setTrack(this.findChaptersTrack()); + } + _TextTrackButton.prototype.update.call(this); + }; + + /** + * Set the currently selected track for the chapters button. + * + * @param {TextTrack} track + * The new track to select. Nothing will change if this is the currently selected + * track. + */ + + + ChaptersButton.prototype.setTrack = function setTrack(track) { + if (this.track_ === track) { + return; + } + + if (!this.updateHandler_) { + this.updateHandler_ = this.update.bind(this); + } + + // here this.track_ refers to the old track instance + if (this.track_) { + var remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_); + + if (remoteTextTrackEl) { + remoteTextTrackEl.removeEventListener('load', this.updateHandler_); + } + + this.track_ = null; + } + + this.track_ = track; + + // here this.track_ refers to the new track instance + if (this.track_) { + this.track_.mode = 'hidden'; + + var _remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_); + + if (_remoteTextTrackEl) { + _remoteTextTrackEl.addEventListener('load', this.updateHandler_); + } + } + }; + + /** + * Find the track object that is currently in use by this ChaptersButton + * + * @return {TextTrack|undefined} + * The current track or undefined if none was found. + */ + + + ChaptersButton.prototype.findChaptersTrack = function findChaptersTrack() { + var tracks = this.player_.textTracks() || []; + + for (var i = tracks.length - 1; i >= 0; i--) { + // We will always choose the last track as our chaptersTrack + var track = tracks[i]; + + if (track.kind === this.kind_) { + return track; + } + } + }; + + /** + * Get the caption for the ChaptersButton based on the track label. This will also + * use the current tracks localized kind as a fallback if a label does not exist. + * + * @return {string} + * The tracks current label or the localized track kind. + */ + + + ChaptersButton.prototype.getMenuCaption = function getMenuCaption() { + if (this.track_ && this.track_.label) { + return this.track_.label; + } + return this.localize(toTitleCase(this.kind_)); + }; + + /** + * Create menu from chapter track + * + * @return {Menu} + * New menu for the chapter buttons + */ + + + ChaptersButton.prototype.createMenu = function createMenu() { + this.options_.title = this.getMenuCaption(); + return _TextTrackButton.prototype.createMenu.call(this); + }; + + /** + * Create a menu item for each text track + * + * @return {TextTrackMenuItem[]} + * Array of menu items + */ + + + ChaptersButton.prototype.createItems = function createItems() { + var items = []; + + if (!this.track_) { + return items; + } + + var cues = this.track_.cues; + + if (!cues) { + return items; + } + + for (var i = 0, l = cues.length; i < l; i++) { + var cue = cues[i]; + var mi = new ChaptersTrackMenuItem(this.player_, {track: this.track_, cue: cue}); + + items.push(mi); + } + + return items; + }; + + return ChaptersButton; + }(TextTrackButton); + + /** + * `kind` of TextTrack to look for to associate it with this menu. + * + * @type {string} + * @private + */ + + + ChaptersButton.prototype.kind_ = 'chapters'; + + /** + * The text that should display over the `ChaptersButton`s controls. Added for localization. + * + * @type {string} + * @private + */ + ChaptersButton.prototype.controlText_ = 'Chapters'; + + Component.registerComponent('ChaptersButton', ChaptersButton); + + /** + * @file descriptions-button.js + */ + + /** + * The button component for toggling and selecting descriptions + * + * @extends TextTrackButton + */ + + var DescriptionsButton = function (_TextTrackButton) { + inherits(DescriptionsButton, _TextTrackButton); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Component~ReadyCallback} [ready] + * The function to call when this component is ready. + */ + function DescriptionsButton(player, options, ready) { + classCallCheck(this, DescriptionsButton); + + var _this = possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready)); + + var tracks = player.textTracks(); + var changeHandler = bind(_this, _this.handleTracksChange); + + tracks.addEventListener('change', changeHandler); + _this.on('dispose', function () { + tracks.removeEventListener('change', changeHandler); + }); + return _this; + } + + /** + * Handle text track change + * + * @param {EventTarget~Event} event + * The event that caused this function to run + * + * @listens TextTrackList#change + */ + + + DescriptionsButton.prototype.handleTracksChange = function handleTracksChange(event) { + var tracks = this.player().textTracks(); + var disabled = false; + + // Check whether a track of a different kind is showing + for (var i = 0, l = tracks.length; i < l; i++) { + var track = tracks[i]; + + if (track.kind !== this.kind_ && track.mode === 'showing') { + disabled = true; + break; + } + } + + // If another track is showing, disable this menu button + if (disabled) { + this.disable(); + } else { + this.enable(); + } + }; + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + DescriptionsButton.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-descriptions-button ' + _TextTrackButton.prototype.buildCSSClass.call(this); + }; + + DescriptionsButton.prototype.buildWrapperCSSClass = function buildWrapperCSSClass() { + return 'vjs-descriptions-button ' + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); + }; + + return DescriptionsButton; + }(TextTrackButton); + + /** + * `kind` of TextTrack to look for to associate it with this menu. + * + * @type {string} + * @private + */ + + + DescriptionsButton.prototype.kind_ = 'descriptions'; + + /** + * The text that should display over the `DescriptionsButton`s controls. Added for localization. + * + * @type {string} + * @private + */ + DescriptionsButton.prototype.controlText_ = 'Descriptions'; + + Component.registerComponent('DescriptionsButton', DescriptionsButton); + + /** + * @file subtitles-button.js + */ + + /** + * The button component for toggling and selecting subtitles + * + * @extends TextTrackButton + */ + + var SubtitlesButton = function (_TextTrackButton) { + inherits(SubtitlesButton, _TextTrackButton); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Component~ReadyCallback} [ready] + * The function to call when this component is ready. + */ + function SubtitlesButton(player, options, ready) { + classCallCheck(this, SubtitlesButton); + return possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready)); + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + SubtitlesButton.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-subtitles-button ' + _TextTrackButton.prototype.buildCSSClass.call(this); + }; + + SubtitlesButton.prototype.buildWrapperCSSClass = function buildWrapperCSSClass() { + return 'vjs-subtitles-button ' + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); + }; + + return SubtitlesButton; + }(TextTrackButton); + + /** + * `kind` of TextTrack to look for to associate it with this menu. + * + * @type {string} + * @private + */ + + + SubtitlesButton.prototype.kind_ = 'subtitles'; + + /** + * The text that should display over the `SubtitlesButton`s controls. Added for localization. + * + * @type {string} + * @private + */ + SubtitlesButton.prototype.controlText_ = 'Subtitles'; + + Component.registerComponent('SubtitlesButton', SubtitlesButton); + + /** + * @file caption-settings-menu-item.js + */ + + /** + * The menu item for caption track settings menu + * + * @extends TextTrackMenuItem + */ + + var CaptionSettingsMenuItem = function (_TextTrackMenuItem) { + inherits(CaptionSettingsMenuItem, _TextTrackMenuItem); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function CaptionSettingsMenuItem(player, options) { + classCallCheck(this, CaptionSettingsMenuItem); + + options.track = { + player: player, + kind: options.kind, + label: options.kind + ' settings', + selectable: false, + default: false, + mode: 'disabled' + }; + + // CaptionSettingsMenuItem has no concept of 'selected' + options.selectable = false; + + options.name = 'CaptionSettingsMenuItem'; + + var _this = possibleConstructorReturn(this, _TextTrackMenuItem.call(this, player, options)); + + _this.addClass('vjs-texttrack-settings'); + _this.controlText(', opens ' + options.kind + ' settings dialog'); + return _this; + } + + /** + * This gets called when an `CaptionSettingsMenuItem` is "clicked". See + * {@link ClickableComponent} for more detailed information on what a click can be. + * + * @param {EventTarget~Event} [event] + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + CaptionSettingsMenuItem.prototype.handleClick = function handleClick(event) { + this.player().getChild('textTrackSettings').open(); + }; + + return CaptionSettingsMenuItem; + }(TextTrackMenuItem); + + Component.registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem); + + /** + * @file captions-button.js + */ + + /** + * The button component for toggling and selecting captions + * + * @extends TextTrackButton + */ + + var CaptionsButton = function (_TextTrackButton) { + inherits(CaptionsButton, _TextTrackButton); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Component~ReadyCallback} [ready] + * The function to call when this component is ready. + */ + function CaptionsButton(player, options, ready) { + classCallCheck(this, CaptionsButton); + return possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready)); + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + CaptionsButton.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-captions-button ' + _TextTrackButton.prototype.buildCSSClass.call(this); + }; + + CaptionsButton.prototype.buildWrapperCSSClass = function buildWrapperCSSClass() { + return 'vjs-captions-button ' + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); + }; + + /** + * Create caption menu items + * + * @return {CaptionSettingsMenuItem[]} + * The array of current menu items. + */ + + + CaptionsButton.prototype.createItems = function createItems() { + var items = []; + + if (!(this.player().tech_ && this.player().tech_.featuresNativeTextTracks) && this.player().getChild('textTrackSettings')) { + items.push(new CaptionSettingsMenuItem(this.player_, {kind: this.kind_})); + + this.hideThreshold_ += 1; + } + + return _TextTrackButton.prototype.createItems.call(this, items); + }; + + return CaptionsButton; + }(TextTrackButton); + + /** + * `kind` of TextTrack to look for to associate it with this menu. + * + * @type {string} + * @private + */ + + + CaptionsButton.prototype.kind_ = 'captions'; + + /** + * The text that should display over the `CaptionsButton`s controls. Added for localization. + * + * @type {string} + * @private + */ + CaptionsButton.prototype.controlText_ = 'Captions'; + + Component.registerComponent('CaptionsButton', CaptionsButton); + + /** + * @file subs-caps-menu-item.js + */ + + /** + * SubsCapsMenuItem has an [cc] icon to distinguish captions from subtitles + * in the SubsCapsMenu. + * + * @extends TextTrackMenuItem + */ + + var SubsCapsMenuItem = function (_TextTrackMenuItem) { + inherits(SubsCapsMenuItem, _TextTrackMenuItem); + + function SubsCapsMenuItem() { + classCallCheck(this, SubsCapsMenuItem); + return possibleConstructorReturn(this, _TextTrackMenuItem.apply(this, arguments)); + } + + SubsCapsMenuItem.prototype.createEl = function createEl(type, props, attrs) { + var innerHTML = '<span class="vjs-menu-item-text">' + this.localize(this.options_.label); + + if (this.options_.track.kind === 'captions') { + innerHTML += '\n <span aria-hidden="true" class="vjs-icon-placeholder"></span>\n <span class="vjs-control-text"> ' + this.localize('Captions') + '</span>\n '; + } + + innerHTML += '</span>'; + + var el = _TextTrackMenuItem.prototype.createEl.call(this, type, assign({ + innerHTML: innerHTML + }, props), attrs); + + return el; + }; + + return SubsCapsMenuItem; + }(TextTrackMenuItem); + + Component.registerComponent('SubsCapsMenuItem', SubsCapsMenuItem); + + /** + * @file sub-caps-button.js + */ + /** + * The button component for toggling and selecting captions and/or subtitles + * + * @extends TextTrackButton + */ + + var SubsCapsButton = function (_TextTrackButton) { + inherits(SubsCapsButton, _TextTrackButton); + + function SubsCapsButton(player) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, SubsCapsButton); + + // Although North America uses "captions" in most cases for + // "captions and subtitles" other locales use "subtitles" + var _this = possibleConstructorReturn(this, _TextTrackButton.call(this, player, options)); + + _this.label_ = 'subtitles'; + if (['en', 'en-us', 'en-ca', 'fr-ca'].indexOf(_this.player_.language_) > -1) { + _this.label_ = 'captions'; + } + _this.menuButton_.controlText(toTitleCase(_this.label_)); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + SubsCapsButton.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-subs-caps-button ' + _TextTrackButton.prototype.buildCSSClass.call(this); + }; + + SubsCapsButton.prototype.buildWrapperCSSClass = function buildWrapperCSSClass() { + return 'vjs-subs-caps-button ' + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); + }; + + /** + * Create caption/subtitles menu items + * + * @return {CaptionSettingsMenuItem[]} + * The array of current menu items. + */ + + + SubsCapsButton.prototype.createItems = function createItems() { + var items = []; + + if (!(this.player().tech_ && this.player().tech_.featuresNativeTextTracks) && this.player().getChild('textTrackSettings')) { + items.push(new CaptionSettingsMenuItem(this.player_, {kind: this.label_})); + + this.hideThreshold_ += 1; + } + + items = _TextTrackButton.prototype.createItems.call(this, items, SubsCapsMenuItem); + return items; + }; + + return SubsCapsButton; + }(TextTrackButton); + + /** + * `kind`s of TextTrack to look for to associate it with this menu. + * + * @type {array} + * @private + */ + + + SubsCapsButton.prototype.kinds_ = ['captions', 'subtitles']; + + /** + * The text that should display over the `SubsCapsButton`s controls. + * + * + * @type {string} + * @private + */ + SubsCapsButton.prototype.controlText_ = 'Subtitles'; + + Component.registerComponent('SubsCapsButton', SubsCapsButton); + + /** + * @file audio-track-menu-item.js + */ + + /** + * An {@link AudioTrack} {@link MenuItem} + * + * @extends MenuItem + */ + + var AudioTrackMenuItem = function (_MenuItem) { + inherits(AudioTrackMenuItem, _MenuItem); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function AudioTrackMenuItem(player, options) { + classCallCheck(this, AudioTrackMenuItem); + + var track = options.track; + var tracks = player.audioTracks(); + + // Modify options for parent MenuItem class's init. + options.label = track.label || track.language || 'Unknown'; + options.selected = track.enabled; + + var _this = possibleConstructorReturn(this, _MenuItem.call(this, player, options)); + + _this.track = track; + + var changeHandler = function changeHandler() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + _this.handleTracksChange.apply(_this, args); + }; + + tracks.addEventListener('change', changeHandler); + _this.on('dispose', function () { + tracks.removeEventListener('change', changeHandler); + }); + return _this; + } + + /** + * This gets called when an `AudioTrackMenuItem is "clicked". See {@link ClickableComponent} + * for more detailed information on what a click can be. + * + * @param {EventTarget~Event} [event] + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + AudioTrackMenuItem.prototype.handleClick = function handleClick(event) { + var tracks = this.player_.audioTracks(); + + _MenuItem.prototype.handleClick.call(this, event); + + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + + track.enabled = track === this.track; + } + }; + + /** + * Handle any {@link AudioTrack} change. + * + * @param {EventTarget~Event} [event] + * The {@link AudioTrackList#change} event that caused this to run. + * + * @listens AudioTrackList#change + */ + + + AudioTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) { + this.selected(this.track.enabled); + }; + + return AudioTrackMenuItem; + }(MenuItem); + + Component.registerComponent('AudioTrackMenuItem', AudioTrackMenuItem); + + /** + * @file audio-track-button.js + */ + + /** + * The base class for buttons that toggle specific {@link AudioTrack} types. + * + * @extends TrackButton + */ + + var AudioTrackButton = function (_TrackButton) { + inherits(AudioTrackButton, _TrackButton); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options={}] + * The key/value store of player options. + */ + function AudioTrackButton(player) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, AudioTrackButton); + + options.tracks = player.audioTracks(); + + return possibleConstructorReturn(this, _TrackButton.call(this, player, options)); + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + AudioTrackButton.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-audio-button ' + _TrackButton.prototype.buildCSSClass.call(this); + }; + + AudioTrackButton.prototype.buildWrapperCSSClass = function buildWrapperCSSClass() { + return 'vjs-audio-button ' + _TrackButton.prototype.buildWrapperCSSClass.call(this); + }; + + /** + * Create a menu item for each audio track + * + * @param {AudioTrackMenuItem[]} [items=[]] + * An array of existing menu items to use. + * + * @return {AudioTrackMenuItem[]} + * An array of menu items + */ + + + AudioTrackButton.prototype.createItems = function createItems() { + var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + // if there's only one audio track, there no point in showing it + this.hideThreshold_ = 1; + + var tracks = this.player_.audioTracks(); + + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + + items.push(new AudioTrackMenuItem(this.player_, { + track: track, + // MenuItem is selectable + selectable: true + })); + } + + return items; + }; + + return AudioTrackButton; + }(TrackButton); + + /** + * The text that should display over the `AudioTrackButton`s controls. Added for localization. + * + * @type {string} + * @private + */ + + + AudioTrackButton.prototype.controlText_ = 'Audio Track'; + Component.registerComponent('AudioTrackButton', AudioTrackButton); + + /** + * @file playback-rate-menu-item.js + */ + + /** + * The specific menu item type for selecting a playback rate. + * + * @extends MenuItem + */ + + var PlaybackRateMenuItem = function (_MenuItem) { + inherits(PlaybackRateMenuItem, _MenuItem); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function PlaybackRateMenuItem(player, options) { + classCallCheck(this, PlaybackRateMenuItem); + + var label = options.rate; + var rate = parseFloat(label, 10); + + // Modify options for parent MenuItem class's init. + options.label = label; + options.selected = rate === 1; + options.selectable = true; + + var _this = possibleConstructorReturn(this, _MenuItem.call(this, player, options)); + + _this.label = label; + _this.rate = rate; + + _this.on(player, 'ratechange', _this.update); + return _this; + } + + /** + * This gets called when an `PlaybackRateMenuItem` is "clicked". See + * {@link ClickableComponent} for more detailed information on what a click can be. + * + * @param {EventTarget~Event} [event] + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + PlaybackRateMenuItem.prototype.handleClick = function handleClick(event) { + _MenuItem.prototype.handleClick.call(this); + this.player().playbackRate(this.rate); + }; + + /** + * Update the PlaybackRateMenuItem when the playbackrate changes. + * + * @param {EventTarget~Event} [event] + * The `ratechange` event that caused this function to run. + * + * @listens Player#ratechange + */ + + + PlaybackRateMenuItem.prototype.update = function update(event) { + this.selected(this.player().playbackRate() === this.rate); + }; + + return PlaybackRateMenuItem; + }(MenuItem); + + /** + * The text that should display over the `PlaybackRateMenuItem`s controls. Added for localization. + * + * @type {string} + * @private + */ + + + PlaybackRateMenuItem.prototype.contentElType = 'button'; + + Component.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem); + + /** + * @file playback-rate-menu-button.js + */ + + /** + * The component for controlling the playback rate. + * + * @extends MenuButton + */ + + var PlaybackRateMenuButton = function (_MenuButton) { + inherits(PlaybackRateMenuButton, _MenuButton); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function PlaybackRateMenuButton(player, options) { + classCallCheck(this, PlaybackRateMenuButton); + + var _this = possibleConstructorReturn(this, _MenuButton.call(this, player, options)); + + _this.updateVisibility(); + _this.updateLabel(); + + _this.on(player, 'loadstart', _this.updateVisibility); + _this.on(player, 'ratechange', _this.updateLabel); + return _this; + } + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + PlaybackRateMenuButton.prototype.createEl = function createEl$$1() { + var el = _MenuButton.prototype.createEl.call(this); + + this.labelEl_ = createEl('div', { + className: 'vjs-playback-rate-value', + innerHTML: '1x' + }); + + el.appendChild(this.labelEl_); + + return el; + }; + + PlaybackRateMenuButton.prototype.dispose = function dispose() { + this.labelEl_ = null; + + _MenuButton.prototype.dispose.call(this); + }; + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + + + PlaybackRateMenuButton.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-playback-rate ' + _MenuButton.prototype.buildCSSClass.call(this); + }; + + PlaybackRateMenuButton.prototype.buildWrapperCSSClass = function buildWrapperCSSClass() { + return 'vjs-playback-rate ' + _MenuButton.prototype.buildWrapperCSSClass.call(this); + }; + + /** + * Create the playback rate menu + * + * @return {Menu} + * Menu object populated with {@link PlaybackRateMenuItem}s + */ + + + PlaybackRateMenuButton.prototype.createMenu = function createMenu() { + var menu = new Menu(this.player()); + var rates = this.playbackRates(); + + if (rates) { + for (var i = rates.length - 1; i >= 0; i--) { + menu.addChild(new PlaybackRateMenuItem(this.player(), {rate: rates[i] + 'x'})); + } + } + + return menu; + }; + + /** + * Updates ARIA accessibility attributes + */ + + + PlaybackRateMenuButton.prototype.updateARIAAttributes = function updateARIAAttributes() { + // Current playback rate + this.el().setAttribute('aria-valuenow', this.player().playbackRate()); + }; + + /** + * This gets called when an `PlaybackRateMenuButton` is "clicked". See + * {@link ClickableComponent} for more detailed information on what a click can be. + * + * @param {EventTarget~Event} [event] + * The `keydown`, `tap`, or `click` event that caused this function to be + * called. + * + * @listens tap + * @listens click + */ + + + PlaybackRateMenuButton.prototype.handleClick = function handleClick(event) { + // select next rate option + var currentRate = this.player().playbackRate(); + var rates = this.playbackRates(); + + // this will select first one if the last one currently selected + var newRate = rates[0]; + + for (var i = 0; i < rates.length; i++) { + if (rates[i] > currentRate) { + newRate = rates[i]; + break; + } + } + this.player().playbackRate(newRate); + }; + + /** + * Get possible playback rates + * + * @return {Array} + * All possible playback rates + */ + + + PlaybackRateMenuButton.prototype.playbackRates = function playbackRates() { + return this.options_.playbackRates || this.options_.playerOptions && this.options_.playerOptions.playbackRates; + }; + + /** + * Get whether playback rates is supported by the tech + * and an array of playback rates exists + * + * @return {boolean} + * Whether changing playback rate is supported + */ + + + PlaybackRateMenuButton.prototype.playbackRateSupported = function playbackRateSupported() { + return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this.playbackRates() && this.playbackRates().length > 0; + }; + + /** + * Hide playback rate controls when they're no playback rate options to select + * + * @param {EventTarget~Event} [event] + * The event that caused this function to run. + * + * @listens Player#loadstart + */ + + + PlaybackRateMenuButton.prototype.updateVisibility = function updateVisibility(event) { + if (this.playbackRateSupported()) { + this.removeClass('vjs-hidden'); + } else { + this.addClass('vjs-hidden'); + } + }; + + /** + * Update button label when rate changed + * + * @param {EventTarget~Event} [event] + * The event that caused this function to run. + * + * @listens Player#ratechange + */ + + + PlaybackRateMenuButton.prototype.updateLabel = function updateLabel(event) { + if (this.playbackRateSupported()) { + this.labelEl_.innerHTML = this.player().playbackRate() + 'x'; + } + }; + + return PlaybackRateMenuButton; + }(MenuButton); + + /** + * The text that should display over the `FullscreenToggle`s controls. Added for localization. + * + * @type {string} + * @private + */ + + + PlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate'; + + Component.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton); + + /** + * @file spacer.js + */ + + /** + * Just an empty spacer element that can be used as an append point for plugins, etc. + * Also can be used to create space between elements when necessary. + * + * @extends Component + */ + + var Spacer = function (_Component) { + inherits(Spacer, _Component); + + function Spacer() { + classCallCheck(this, Spacer); + return possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + Spacer.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-spacer ' + _Component.prototype.buildCSSClass.call(this); + }; + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + Spacer.prototype.createEl = function createEl() { + return _Component.prototype.createEl.call(this, 'div', { + className: this.buildCSSClass() + }); + }; + + return Spacer; + }(Component); + + Component.registerComponent('Spacer', Spacer); + + /** + * @file custom-control-spacer.js + */ + + /** + * Spacer specifically meant to be used as an insertion point for new plugins, etc. + * + * @extends Spacer + */ + + var CustomControlSpacer = function (_Spacer) { + inherits(CustomControlSpacer, _Spacer); + + function CustomControlSpacer() { + classCallCheck(this, CustomControlSpacer); + return possibleConstructorReturn(this, _Spacer.apply(this, arguments)); + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + CustomControlSpacer.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-custom-control-spacer ' + _Spacer.prototype.buildCSSClass.call(this); + }; + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + + + CustomControlSpacer.prototype.createEl = function createEl() { + var el = _Spacer.prototype.createEl.call(this, { + className: this.buildCSSClass() + }); + + // No-flex/table-cell mode requires there be some content + // in the cell to fill the remaining space of the table. + el.innerHTML = '\xA0'; + return el; + }; + + return CustomControlSpacer; + }(Spacer); + + Component.registerComponent('CustomControlSpacer', CustomControlSpacer); + + /** + * @file control-bar.js + */ + + /** + * Container of main controls. + * + * @extends Component + */ + + var ControlBar = function (_Component) { + inherits(ControlBar, _Component); + + function ControlBar() { + classCallCheck(this, ControlBar); + return possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + /** + * Create the `Component`'s DOM element + * + * @return {Element} + * The element that was created. + */ + ControlBar.prototype.createEl = function createEl() { + return _Component.prototype.createEl.call(this, 'div', { + className: 'vjs-control-bar', + dir: 'ltr' + }); + }; + + return ControlBar; + }(Component); + + /** + * Default options for `ControlBar` + * + * @type {Object} + * @private + */ + + + ControlBar.prototype.options_ = { + children: ['playToggle', 'volumePanel', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'chaptersButton', 'descriptionsButton', 'subsCapsButton', 'audioTrackButton', 'fullscreenToggle'] + }; + + Component.registerComponent('ControlBar', ControlBar); + + /** + * @file error-display.js + */ + + /** + * A display that indicates an error has occurred. This means that the video + * is unplayable. + * + * @extends ModalDialog + */ + + var ErrorDisplay = function (_ModalDialog) { + inherits(ErrorDisplay, _ModalDialog); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function ErrorDisplay(player, options) { + classCallCheck(this, ErrorDisplay); + + var _this = possibleConstructorReturn(this, _ModalDialog.call(this, player, options)); + + _this.on(player, 'error', _this.open); + return _this; + } + + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + * + * @deprecated Since version 5. + */ + + + ErrorDisplay.prototype.buildCSSClass = function buildCSSClass() { + return 'vjs-error-display ' + _ModalDialog.prototype.buildCSSClass.call(this); + }; + + /** + * Gets the localized error message based on the `Player`s error. + * + * @return {string} + * The `Player`s error message localized or an empty string. + */ + + + ErrorDisplay.prototype.content = function content() { + var error = this.player().error(); + + return error ? this.localize(error.message) : ''; + }; + + return ErrorDisplay; + }(ModalDialog); + + /** + * The default options for an `ErrorDisplay`. + * + * @private + */ + + + ErrorDisplay.prototype.options_ = mergeOptions(ModalDialog.prototype.options_, { + pauseOnOpen: false, + fillAlways: true, + temporary: false, + uncloseable: true + }); + + Component.registerComponent('ErrorDisplay', ErrorDisplay); + + /** + * @file text-track-settings.js + */ + + var LOCAL_STORAGE_KEY = 'vjs-text-track-settings'; + + var COLOR_BLACK = ['#000', 'Black']; + var COLOR_BLUE = ['#00F', 'Blue']; + var COLOR_CYAN = ['#0FF', 'Cyan']; + var COLOR_GREEN = ['#0F0', 'Green']; + var COLOR_MAGENTA = ['#F0F', 'Magenta']; + var COLOR_RED = ['#F00', 'Red']; + var COLOR_WHITE = ['#FFF', 'White']; + var COLOR_YELLOW = ['#FF0', 'Yellow']; + + var OPACITY_OPAQUE = ['1', 'Opaque']; + var OPACITY_SEMI = ['0.5', 'Semi-Transparent']; + var OPACITY_TRANS = ['0', 'Transparent']; + + // Configuration for the various <select> elements in the DOM of this component. + // + // Possible keys include: + // + // `default`: + // The default option index. Only needs to be provided if not zero. + // `parser`: + // A function which is used to parse the value from the selected option in + // a customized way. + // `selector`: + // The selector used to find the associated <select> element. + var selectConfigs = { + backgroundColor: { + selector: '.vjs-bg-color > select', + id: 'captions-background-color-%s', + label: 'Color', + options: [COLOR_BLACK, COLOR_WHITE, COLOR_RED, COLOR_GREEN, COLOR_BLUE, COLOR_YELLOW, COLOR_MAGENTA, COLOR_CYAN] + }, + + backgroundOpacity: { + selector: '.vjs-bg-opacity > select', + id: 'captions-background-opacity-%s', + label: 'Transparency', + options: [OPACITY_OPAQUE, OPACITY_SEMI, OPACITY_TRANS] + }, + + color: { + selector: '.vjs-fg-color > select', + id: 'captions-foreground-color-%s', + label: 'Color', + options: [COLOR_WHITE, COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_BLUE, COLOR_YELLOW, COLOR_MAGENTA, COLOR_CYAN] + }, + + edgeStyle: { + selector: '.vjs-edge-style > select', + id: '%s', + label: 'Text Edge Style', + options: [['none', 'None'], ['raised', 'Raised'], ['depressed', 'Depressed'], ['uniform', 'Uniform'], ['dropshadow', 'Dropshadow']] + }, + + fontFamily: { + selector: '.vjs-font-family > select', + id: 'captions-font-family-%s', + label: 'Font Family', + options: [['proportionalSansSerif', 'Proportional Sans-Serif'], ['monospaceSansSerif', 'Monospace Sans-Serif'], ['proportionalSerif', 'Proportional Serif'], ['monospaceSerif', 'Monospace Serif'], ['casual', 'Casual'], ['script', 'Script'], ['small-caps', 'Small Caps']] + }, + + fontPercent: { + selector: '.vjs-font-percent > select', + id: 'captions-font-size-%s', + label: 'Font Size', + options: [['0.50', '50%'], ['0.75', '75%'], ['1.00', '100%'], ['1.25', '125%'], ['1.50', '150%'], ['1.75', '175%'], ['2.00', '200%'], ['3.00', '300%'], ['4.00', '400%']], + default: 2, + parser: function parser(v) { + return v === '1.00' ? null : Number(v); + } + }, + + textOpacity: { + selector: '.vjs-text-opacity > select', + id: 'captions-foreground-opacity-%s', + label: 'Transparency', + options: [OPACITY_OPAQUE, OPACITY_SEMI] + }, + + // Options for this object are defined below. + windowColor: { + selector: '.vjs-window-color > select', + id: 'captions-window-color-%s', + label: 'Color' + }, + + // Options for this object are defined below. + windowOpacity: { + selector: '.vjs-window-opacity > select', + id: 'captions-window-opacity-%s', + label: 'Transparency', + options: [OPACITY_TRANS, OPACITY_SEMI, OPACITY_OPAQUE] + } + }; + + selectConfigs.windowColor.options = selectConfigs.backgroundColor.options; + + /** + * Get the actual value of an option. + * + * @param {string} value + * The value to get + * + * @param {Function} [parser] + * Optional function to adjust the value. + * + * @return {Mixed} + * - Will be `undefined` if no value exists + * - Will be `undefined` if the given value is "none". + * - Will be the actual value otherwise. + * + * @private + */ + function parseOptionValue(value, parser) { + if (parser) { + value = parser(value); + } + + if (value && value !== 'none') { + return value; + } + } + + /** + * Gets the value of the selected <option> element within a <select> element. + * + * @param {Element} el + * the element to look in + * + * @param {Function} [parser] + * Optional function to adjust the value. + * + * @return {Mixed} + * - Will be `undefined` if no value exists + * - Will be `undefined` if the given value is "none". + * - Will be the actual value otherwise. + * + * @private + */ + function getSelectedOptionValue(el, parser) { + var value = el.options[el.options.selectedIndex].value; + + return parseOptionValue(value, parser); + } + + /** + * Sets the selected <option> element within a <select> element based on a + * given value. + * + * @param {Element} el + * The element to look in. + * + * @param {string} value + * the property to look on. + * + * @param {Function} [parser] + * Optional function to adjust the value before comparing. + * + * @private + */ + function setSelectedOption(el, value, parser) { + if (!value) { + return; + } + + for (var i = 0; i < el.options.length; i++) { + if (parseOptionValue(el.options[i].value, parser) === value) { + el.selectedIndex = i; + break; + } + } + } + + /** + * Manipulate Text Tracks settings. + * + * @extends ModalDialog + */ + + var TextTrackSettings = function (_ModalDialog) { + inherits(TextTrackSettings, _ModalDialog); + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + function TextTrackSettings(player, options) { + classCallCheck(this, TextTrackSettings); + + options.temporary = false; + + var _this = possibleConstructorReturn(this, _ModalDialog.call(this, player, options)); + + _this.updateDisplay = bind(_this, _this.updateDisplay); + + // fill the modal and pretend we have opened it + _this.fill(); + _this.hasBeenOpened_ = _this.hasBeenFilled_ = true; + + _this.endDialog = createEl('p', { + className: 'vjs-control-text', + textContent: _this.localize('End of dialog window.') + }); + _this.el().appendChild(_this.endDialog); + + _this.setDefaults(); + + // Grab `persistTextTrackSettings` from the player options if not passed in child options + if (options.persistTextTrackSettings === undefined) { + _this.options_.persistTextTrackSettings = _this.options_.playerOptions.persistTextTrackSettings; + } + + _this.on(_this.$('.vjs-done-button'), 'click', function () { + _this.saveSettings(); + _this.close(); + }); + + _this.on(_this.$('.vjs-default-button'), 'click', function () { + _this.setDefaults(); + _this.updateDisplay(); + }); + + each(selectConfigs, function (config) { + _this.on(_this.$(config.selector), 'change', _this.updateDisplay); + }); + + if (_this.options_.persistTextTrackSettings) { + _this.restoreSettings(); + } + return _this; + } + + TextTrackSettings.prototype.dispose = function dispose() { + this.endDialog = null; + + _ModalDialog.prototype.dispose.call(this); + }; + + /** + * Create a <select> element with configured options. + * + * @param {string} key + * Configuration key to use during creation. + * + * @return {string} + * An HTML string. + * + * @private + */ + + + TextTrackSettings.prototype.createElSelect_ = function createElSelect_(key) { + var _this2 = this; + + var legendId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'label'; + + var config = selectConfigs[key]; + var id = config.id.replace('%s', this.id_); + var selectLabelledbyIds = [legendId, id].join(' ').trim(); + + return ['<' + type + ' id="' + id + '" class="' + (type === 'label' ? 'vjs-label' : '') + '">', this.localize(config.label), '</' + type + '>', '<select aria-labelledby="' + selectLabelledbyIds + '">'].concat(config.options.map(function (o) { + var optionId = id + '-' + o[1].replace(/\W+/g, ''); + + return ['<option id="' + optionId + '" value="' + o[0] + '" ', 'aria-labelledby="' + selectLabelledbyIds + ' ' + optionId + '">', _this2.localize(o[1]), '</option>'].join(''); + })).concat('</select>').join(''); + }; + + /** + * Create foreground color element for the component + * + * @return {string} + * An HTML string. + * + * @private + */ + + + TextTrackSettings.prototype.createElFgColor_ = function createElFgColor_() { + var legendId = 'captions-text-legend-' + this.id_; + + return ['<fieldset class="vjs-fg-color vjs-track-setting">', '<legend id="' + legendId + '">', this.localize('Text'), '</legend>', this.createElSelect_('color', legendId), '<span class="vjs-text-opacity vjs-opacity">', this.createElSelect_('textOpacity', legendId), '</span>', '</fieldset>'].join(''); + }; + + /** + * Create background color element for the component + * + * @return {string} + * An HTML string. + * + * @private + */ + + + TextTrackSettings.prototype.createElBgColor_ = function createElBgColor_() { + var legendId = 'captions-background-' + this.id_; + + return ['<fieldset class="vjs-bg-color vjs-track-setting">', '<legend id="' + legendId + '">', this.localize('Background'), '</legend>', this.createElSelect_('backgroundColor', legendId), '<span class="vjs-bg-opacity vjs-opacity">', this.createElSelect_('backgroundOpacity', legendId), '</span>', '</fieldset>'].join(''); + }; + + /** + * Create window color element for the component + * + * @return {string} + * An HTML string. + * + * @private + */ + + + TextTrackSettings.prototype.createElWinColor_ = function createElWinColor_() { + var legendId = 'captions-window-' + this.id_; + + return ['<fieldset class="vjs-window-color vjs-track-setting">', '<legend id="' + legendId + '">', this.localize('Window'), '</legend>', this.createElSelect_('windowColor', legendId), '<span class="vjs-window-opacity vjs-opacity">', this.createElSelect_('windowOpacity', legendId), '</span>', '</fieldset>'].join(''); + }; + + /** + * Create color elements for the component + * + * @return {Element} + * The element that was created + * + * @private + */ + + + TextTrackSettings.prototype.createElColors_ = function createElColors_() { + return createEl('div', { + className: 'vjs-track-settings-colors', + innerHTML: [this.createElFgColor_(), this.createElBgColor_(), this.createElWinColor_()].join('') + }); + }; + + /** + * Create font elements for the component + * + * @return {Element} + * The element that was created. + * + * @private + */ + + + TextTrackSettings.prototype.createElFont_ = function createElFont_() { + return createEl('div', { + className: 'vjs-track-settings-font', + innerHTML: ['<fieldset class="vjs-font-percent vjs-track-setting">', this.createElSelect_('fontPercent', '', 'legend'), '</fieldset>', '<fieldset class="vjs-edge-style vjs-track-setting">', this.createElSelect_('edgeStyle', '', 'legend'), '</fieldset>', '<fieldset class="vjs-font-family vjs-track-setting">', this.createElSelect_('fontFamily', '', 'legend'), '</fieldset>'].join('') + }); + }; + + /** + * Create controls for the component + * + * @return {Element} + * The element that was created. + * + * @private + */ + + + TextTrackSettings.prototype.createElControls_ = function createElControls_() { + var defaultsDescription = this.localize('restore all settings to the default values'); + + return createEl('div', { + className: 'vjs-track-settings-controls', + innerHTML: ['<button class="vjs-default-button" title="' + defaultsDescription + '">', this.localize('Reset'), '<span class="vjs-control-text"> ' + defaultsDescription + '</span>', '</button>', '<button class="vjs-done-button">' + this.localize('Done') + '</button>'].join('') + }); + }; + + TextTrackSettings.prototype.content = function content() { + return [this.createElColors_(), this.createElFont_(), this.createElControls_()]; + }; + + TextTrackSettings.prototype.label = function label() { + return this.localize('Caption Settings Dialog'); + }; + + TextTrackSettings.prototype.description = function description() { + return this.localize('Beginning of dialog window. Escape will cancel and close the window.'); + }; + + TextTrackSettings.prototype.buildCSSClass = function buildCSSClass() { + return _ModalDialog.prototype.buildCSSClass.call(this) + ' vjs-text-track-settings'; + }; + + /** + * Gets an object of text track settings (or null). + * + * @return {Object} + * An object with config values parsed from the DOM or localStorage. + */ + + + TextTrackSettings.prototype.getValues = function getValues() { + var _this3 = this; + + return reduce(selectConfigs, function (accum, config, key) { + var value = getSelectedOptionValue(_this3.$(config.selector), config.parser); + + if (value !== undefined) { + accum[key] = value; + } + + return accum; + }, {}); + }; + + /** + * Sets text track settings from an object of values. + * + * @param {Object} values + * An object with config values parsed from the DOM or localStorage. + */ + + + TextTrackSettings.prototype.setValues = function setValues(values) { + var _this4 = this; + + each(selectConfigs, function (config, key) { + setSelectedOption(_this4.$(config.selector), values[key], config.parser); + }); + }; + + /** + * Sets all `<select>` elements to their default values. + */ + + + TextTrackSettings.prototype.setDefaults = function setDefaults() { + var _this5 = this; + + each(selectConfigs, function (config) { + var index = config.hasOwnProperty('default') ? config.default : 0; + + _this5.$(config.selector).selectedIndex = index; + }); + }; + + /** + * Restore texttrack settings from localStorage + */ + + + TextTrackSettings.prototype.restoreSettings = function restoreSettings() { + var values = void 0; + + try { + values = JSON.parse(window_1.localStorage.getItem(LOCAL_STORAGE_KEY)); + } catch (err) { + log$1.warn(err); + } + + if (values) { + this.setValues(values); + } + }; + + /** + * Save text track settings to localStorage + */ + + + TextTrackSettings.prototype.saveSettings = function saveSettings() { + if (!this.options_.persistTextTrackSettings) { + return; + } + + var values = this.getValues(); + + try { + if (Object.keys(values).length) { + window_1.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(values)); + } else { + window_1.localStorage.removeItem(LOCAL_STORAGE_KEY); + } + } catch (err) { + log$1.warn(err); + } + }; + + /** + * Update display of text track settings + */ + + + TextTrackSettings.prototype.updateDisplay = function updateDisplay() { + var ttDisplay = this.player_.getChild('textTrackDisplay'); + + if (ttDisplay) { + ttDisplay.updateDisplay(); + } + }; + + /** + * conditionally blur the element and refocus the captions button + * + * @private + */ + + + TextTrackSettings.prototype.conditionalBlur_ = function conditionalBlur_() { + this.previouslyActiveEl_ = null; + this.off(document_1, 'keydown', this.handleKeyDown); + + var cb = this.player_.controlBar; + var subsCapsBtn = cb && cb.subsCapsButton; + var ccBtn = cb && cb.captionsButton; + + if (subsCapsBtn) { + subsCapsBtn.focus(); + } else if (ccBtn) { + ccBtn.focus(); + } + }; + + return TextTrackSettings; + }(ModalDialog); + + Component.registerComponent('TextTrackSettings', TextTrackSettings); + + /** + * @file resize-manager.js + */ + + /** + * A Resize Manager. It is in charge of triggering `playerresize` on the player in the right conditions. + * + * It'll either create an iframe and use a debounced resize handler on it or use the new {@link https://wicg.github.io/ResizeObserver/|ResizeObserver}. + * + * If the ResizeObserver is available natively, it will be used. A polyfill can be passed in as an option. + * If a `playerresize` event is not needed, the ResizeManager component can be removed from the player, see the example below. + * @example <caption>How to disable the resize manager</caption> + * const player = videojs('#vid', { + * resizeManager: false + * }); + * + * @see {@link https://wicg.github.io/ResizeObserver/|ResizeObserver specification} + * + * @extends Component + */ + + var ResizeManager = function (_Component) { + inherits(ResizeManager, _Component); + + /** + * Create the ResizeManager. + * + * @param {Object} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of ResizeManager options. + * + * @param {Object} [options.ResizeObserver] + * A polyfill for ResizeObserver can be passed in here. + * If this is set to null it will ignore the native ResizeObserver and fall back to the iframe fallback. + */ + function ResizeManager(player, options) { + classCallCheck(this, ResizeManager); + + var RESIZE_OBSERVER_AVAILABLE = options.ResizeObserver || window_1.ResizeObserver; + + // if `null` was passed, we want to disable the ResizeObserver + if (options.ResizeObserver === null) { + RESIZE_OBSERVER_AVAILABLE = false; + } + + // Only create an element when ResizeObserver isn't available + var options_ = mergeOptions({createEl: !RESIZE_OBSERVER_AVAILABLE}, options); + + var _this = possibleConstructorReturn(this, _Component.call(this, player, options_)); + + _this.ResizeObserver = options.ResizeObserver || window_1.ResizeObserver; + _this.loadListener_ = null; + _this.resizeObserver_ = null; + _this.debouncedHandler_ = debounce(function () { + _this.resizeHandler(); + }, 100, false, player); + + if (RESIZE_OBSERVER_AVAILABLE) { + _this.resizeObserver_ = new _this.ResizeObserver(_this.debouncedHandler_); + _this.resizeObserver_.observe(player.el()); + } else { + _this.loadListener_ = function () { + if (_this.el_.contentWindow) { + on(_this.el_.contentWindow, 'resize', _this.debouncedHandler_); + } + _this.off('load', _this.loadListener_); + }; + + _this.on('load', _this.loadListener_); + } + return _this; + } + + ResizeManager.prototype.createEl = function createEl() { + return _Component.prototype.createEl.call(this, 'iframe', { + className: 'vjs-resize-manager' + }); + }; + + /** + * Called when a resize is triggered on the iframe or a resize is observed via the ResizeObserver + * + * @fires Player#playerresize + */ + + + ResizeManager.prototype.resizeHandler = function resizeHandler() { + /** + * Called when the player size has changed + * + * @event Player#playerresize + * @type {EventTarget~Event} + */ + this.player_.trigger('playerresize'); + }; + + ResizeManager.prototype.dispose = function dispose() { + if (this.resizeObserver_) { + this.resizeObserver_.unobserve(this.player_.el()); + this.resizeObserver_.disconnect(); + } + + if (this.el_ && this.el_.contentWindow) { + off(this.el_.contentWindow, 'resize', this.debouncedHandler_); + } + + if (this.loadListener_) { + this.off('load', this.loadListener_); + } + + this.ResizeObserver = null; + this.resizeObserver = null; + this.debouncedHandler_ = null; + this.loadListener_ = null; + }; + + return ResizeManager; + }(Component); + + Component.registerComponent('ResizeManager', ResizeManager); + + /** + * This function is used to fire a sourceset when there is something + * similar to `mediaEl.load()` being called. It will try to find the source via + * the `src` attribute and then the `<source>` elements. It will then fire `sourceset` + * with the source that was found or empty string if we cannot know. If it cannot + * find a source then `sourceset` will not be fired. + * + * @param {Html5} tech + * The tech object that sourceset was setup on + * + * @return {boolean} + * returns false if the sourceset was not fired and true otherwise. + */ + var sourcesetLoad = function sourcesetLoad(tech) { + var el = tech.el(); + + // if `el.src` is set, that source will be loaded. + if (el.hasAttribute('src')) { + tech.triggerSourceset(el.src); + return true; + } + + /** + * Since there isn't a src property on the media element, source elements will be used for + * implementing the source selection algorithm. This happens asynchronously and + * for most cases were there is more than one source we cannot tell what source will + * be loaded, without re-implementing the source selection algorithm. At this time we are not + * going to do that. There are three special cases that we do handle here though: + * + * 1. If there are no sources, do not fire `sourceset`. + * 2. If there is only one `<source>` with a `src` property/attribute that is our `src` + * 3. If there is more than one `<source>` but all of them have the same `src` url. + * That will be our src. + */ + var sources = tech.$$('source'); + var srcUrls = []; + var src = ''; + + // if there are no sources, do not fire sourceset + if (!sources.length) { + return false; + } + + // only count valid/non-duplicate source elements + for (var i = 0; i < sources.length; i++) { + var url = sources[i].src; + + if (url && srcUrls.indexOf(url) === -1) { + srcUrls.push(url); + } + } + + // there were no valid sources + if (!srcUrls.length) { + return false; + } + + // there is only one valid source element url + // use that + if (srcUrls.length === 1) { + src = srcUrls[0]; + } + + tech.triggerSourceset(src); + return true; + }; + + /** + * our implementation of an `innerHTML` descriptor for browsers + * that do not have one. + */ + var innerHTMLDescriptorPolyfill = Object.defineProperty({}, 'innerHTML', { + get: function get() { + return this.cloneNode(true).innerHTML; + }, + set: function set(v) { + // make a dummy node to use innerHTML on + var dummy = document_1.createElement(this.nodeName.toLowerCase()); + + // set innerHTML to the value provided + dummy.innerHTML = v; + + // make a document fragment to hold the nodes from dummy + var docFrag = document_1.createDocumentFragment(); + + // copy all of the nodes created by the innerHTML on dummy + // to the document fragment + while (dummy.childNodes.length) { + docFrag.appendChild(dummy.childNodes[0]); + } + + // remove content + this.innerText = ''; + + // now we add all of that html in one by appending the + // document fragment. This is how innerHTML does it. + window_1.Element.prototype.appendChild.call(this, docFrag); + + // then return the result that innerHTML's setter would + return this.innerHTML; + } + }); + + /** + * Get a property descriptor given a list of priorities and the + * property to get. + */ + var getDescriptor = function getDescriptor(priority, prop) { + var descriptor = {}; + + for (var i = 0; i < priority.length; i++) { + descriptor = Object.getOwnPropertyDescriptor(priority[i], prop); + + if (descriptor && descriptor.set && descriptor.get) { + break; + } + } + + descriptor.enumerable = true; + descriptor.configurable = true; + + return descriptor; + }; + + var getInnerHTMLDescriptor = function getInnerHTMLDescriptor(tech) { + return getDescriptor([tech.el(), window_1.HTMLMediaElement.prototype, window_1.Element.prototype, innerHTMLDescriptorPolyfill], 'innerHTML'); + }; + + /** + * Patches browser internal functions so that we can tell synchronously + * if a `<source>` was appended to the media element. For some reason this + * causes a `sourceset` if the the media element is ready and has no source. + * This happens when: + * - The page has just loaded and the media element does not have a source. + * - The media element was emptied of all sources, then `load()` was called. + * + * It does this by patching the following functions/properties when they are supported: + * + * - `append()` - can be used to add a `<source>` element to the media element + * - `appendChild()` - can be used to add a `<source>` element to the media element + * - `insertAdjacentHTML()` - can be used to add a `<source>` element to the media element + * - `innerHTML` - can be used to add a `<source>` element to the media element + * + * @param {Html5} tech + * The tech object that sourceset is being setup on. + */ + var firstSourceWatch = function firstSourceWatch(tech) { + var el = tech.el(); + + // make sure firstSourceWatch isn't setup twice. + if (el.resetSourceWatch_) { + return; + } + + var old = {}; + var innerDescriptor = getInnerHTMLDescriptor(tech); + var appendWrapper = function appendWrapper(appendFn) { + return function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var retval = appendFn.apply(el, args); + + sourcesetLoad(tech); + + return retval; + }; + }; + + ['append', 'appendChild', 'insertAdjacentHTML'].forEach(function (k) { + if (!el[k]) { + return; + } + + // store the old function + old[k] = el[k]; + + // call the old function with a sourceset if a source + // was loaded + el[k] = appendWrapper(old[k]); + }); + + Object.defineProperty(el, 'innerHTML', mergeOptions(innerDescriptor, { + set: appendWrapper(innerDescriptor.set) + })); + + el.resetSourceWatch_ = function () { + el.resetSourceWatch_ = null; + Object.keys(old).forEach(function (k) { + el[k] = old[k]; + }); + + Object.defineProperty(el, 'innerHTML', innerDescriptor); + }; + + // on the first sourceset, we need to revert our changes + tech.one('sourceset', el.resetSourceWatch_); + }; + + /** + * our implementation of a `src` descriptor for browsers + * that do not have one. + */ + var srcDescriptorPolyfill = Object.defineProperty({}, 'src', { + get: function get() { + if (this.hasAttribute('src')) { + return getAbsoluteURL(window_1.Element.prototype.getAttribute.call(this, 'src')); + } + + return ''; + }, + set: function set(v) { + window_1.Element.prototype.setAttribute.call(this, 'src', v); + + return v; + } + }); + + var getSrcDescriptor = function getSrcDescriptor(tech) { + return getDescriptor([tech.el(), window_1.HTMLMediaElement.prototype, srcDescriptorPolyfill], 'src'); + }; + + /** + * setup `sourceset` handling on the `Html5` tech. This function + * patches the following element properties/functions: + * + * - `src` - to determine when `src` is set + * - `setAttribute()` - to determine when `src` is set + * - `load()` - this re-triggers the source selection algorithm, and can + * cause a sourceset. + * + * If there is no source when we are adding `sourceset` support or during a `load()` + * we also patch the functions listed in `firstSourceWatch`. + * + * @param {Html5} tech + * The tech to patch + */ + var setupSourceset = function setupSourceset(tech) { + if (!tech.featuresSourceset) { + return; + } + + var el = tech.el(); + + // make sure sourceset isn't setup twice. + if (el.resetSourceset_) { + return; + } + + var srcDescriptor = getSrcDescriptor(tech); + var oldSetAttribute = el.setAttribute; + var oldLoad = el.load; + + Object.defineProperty(el, 'src', mergeOptions(srcDescriptor, { + set: function set(v) { + var retval = srcDescriptor.set.call(el, v); + + // we use the getter here to get the actual value set on src + tech.triggerSourceset(el.src); + + return retval; + } + })); + + el.setAttribute = function (n, v) { + var retval = oldSetAttribute.call(el, n, v); + + if (/src/i.test(n)) { + tech.triggerSourceset(el.src); + } + + return retval; + }; + + el.load = function () { + var retval = oldLoad.call(el); + + // if load was called, but there was no source to fire + // sourceset on. We have to watch for a source append + // as that can trigger a `sourceset` when the media element + // has no source + if (!sourcesetLoad(tech)) { + tech.triggerSourceset(''); + firstSourceWatch(tech); + } + + return retval; + }; + + if (el.currentSrc) { + tech.triggerSourceset(el.currentSrc); + } else if (!sourcesetLoad(tech)) { + firstSourceWatch(tech); + } + + el.resetSourceset_ = function () { + el.resetSourceset_ = null; + el.load = oldLoad; + el.setAttribute = oldSetAttribute; + Object.defineProperty(el, 'src', srcDescriptor); + if (el.resetSourceWatch_) { + el.resetSourceWatch_(); + } + }; + }; + + var _templateObject$1 = taggedTemplateLiteralLoose(['Text Tracks are being loaded from another origin but the crossorigin attribute isn\'t used.\n This may prevent text tracks from loading.'], ['Text Tracks are being loaded from another origin but the crossorigin attribute isn\'t used.\n This may prevent text tracks from loading.']); + + /** + * HTML5 Media Controller - Wrapper for HTML5 Media API + * + * @mixes Tech~SourceHandlerAdditions + * @extends Tech + */ + + var Html5 = function (_Tech) { + inherits(Html5, _Tech); + + /** + * Create an instance of this Tech. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Component~ReadyCallback} ready + * Callback function to call when the `HTML5` Tech is ready. + */ + function Html5(options, ready) { + classCallCheck(this, Html5); + + var _this = possibleConstructorReturn(this, _Tech.call(this, options, ready)); + + var source = options.source; + var crossoriginTracks = false; + + // Set the source if one is provided + // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted) + // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source + // anyway so the error gets fired. + if (source && (_this.el_.currentSrc !== source.src || options.tag && options.tag.initNetworkState_ === 3)) { + _this.setSource(source); + } else { + _this.handleLateInit_(_this.el_); + } + + // setup sourceset after late sourceset/init + if (options.enableSourceset) { + _this.setupSourcesetHandling_(); + } + + if (_this.el_.hasChildNodes()) { + + var nodes = _this.el_.childNodes; + var nodesLength = nodes.length; + var removeNodes = []; + + while (nodesLength--) { + var node = nodes[nodesLength]; + var nodeName = node.nodeName.toLowerCase(); + + if (nodeName === 'track') { + if (!_this.featuresNativeTextTracks) { + // Empty video tag tracks so the built-in player doesn't use them also. + // This may not be fast enough to stop HTML5 browsers from reading the tags + // so we'll need to turn off any default tracks if we're manually doing + // captions and subtitles. videoElement.textTracks + removeNodes.push(node); + } else { + // store HTMLTrackElement and TextTrack to remote list + _this.remoteTextTrackEls().addTrackElement_(node); + _this.remoteTextTracks().addTrack(node.track); + _this.textTracks().addTrack(node.track); + if (!crossoriginTracks && !_this.el_.hasAttribute('crossorigin') && isCrossOrigin(node.src)) { + crossoriginTracks = true; + } + } + } + } + + for (var i = 0; i < removeNodes.length; i++) { + _this.el_.removeChild(removeNodes[i]); + } + } + + _this.proxyNativeTracks_(); + if (_this.featuresNativeTextTracks && crossoriginTracks) { + log$1.warn(tsml(_templateObject$1)); + } + + // prevent iOS Safari from disabling metadata text tracks during native playback + _this.restoreMetadataTracksInIOSNativePlayer_(); + + // Determine if native controls should be used + // Our goal should be to get the custom controls on mobile solid everywhere + // so we can remove this all together. Right now this will block custom + // controls on touch enabled laptops like the Chrome Pixel + if ((TOUCH_ENABLED || IS_IPHONE || IS_NATIVE_ANDROID) && options.nativeControlsForTouch === true) { + _this.setControls(true); + } + + // on iOS, we want to proxy `webkitbeginfullscreen` and `webkitendfullscreen` + // into a `fullscreenchange` event + _this.proxyWebkitFullscreen_(); + + _this.triggerReady(); + return _this; + } + + /** + * Dispose of `HTML5` media element and remove all tracks. + */ + + + Html5.prototype.dispose = function dispose() { + if (this.el_.resetSourceset_) { + this.el_.resetSourceset_(); + } + Html5.disposeMediaElement(this.el_); + this.options_ = null; + + // tech will handle clearing of the emulated track list + _Tech.prototype.dispose.call(this); + }; + + /** + * Modify the media element so that we can detect when + * the source is changed. Fires `sourceset` just after the source has changed + */ + + + Html5.prototype.setupSourcesetHandling_ = function setupSourcesetHandling_() { + setupSourceset(this); + }; + + /** + * When a captions track is enabled in the iOS Safari native player, all other + * tracks are disabled (including metadata tracks), which nulls all of their + * associated cue points. This will restore metadata tracks to their pre-fullscreen + * state in those cases so that cue points are not needlessly lost. + * + * @private + */ + + + Html5.prototype.restoreMetadataTracksInIOSNativePlayer_ = function restoreMetadataTracksInIOSNativePlayer_() { + var textTracks = this.textTracks(); + var metadataTracksPreFullscreenState = void 0; + + // captures a snapshot of every metadata track's current state + var takeMetadataTrackSnapshot = function takeMetadataTrackSnapshot() { + metadataTracksPreFullscreenState = []; + + for (var i = 0; i < textTracks.length; i++) { + var track = textTracks[i]; + + if (track.kind === 'metadata') { + metadataTracksPreFullscreenState.push({ + track: track, + storedMode: track.mode + }); + } + } + }; + + // snapshot each metadata track's initial state, and update the snapshot + // each time there is a track 'change' event + takeMetadataTrackSnapshot(); + textTracks.addEventListener('change', takeMetadataTrackSnapshot); + + this.on('dispose', function () { + return textTracks.removeEventListener('change', takeMetadataTrackSnapshot); + }); + + var restoreTrackMode = function restoreTrackMode() { + for (var i = 0; i < metadataTracksPreFullscreenState.length; i++) { + var storedTrack = metadataTracksPreFullscreenState[i]; + + if (storedTrack.track.mode === 'disabled' && storedTrack.track.mode !== storedTrack.storedMode) { + storedTrack.track.mode = storedTrack.storedMode; + } + } + // we only want this handler to be executed on the first 'change' event + textTracks.removeEventListener('change', restoreTrackMode); + }; + + // when we enter fullscreen playback, stop updating the snapshot and + // restore all track modes to their pre-fullscreen state + this.on('webkitbeginfullscreen', function () { + textTracks.removeEventListener('change', takeMetadataTrackSnapshot); + + // remove the listener before adding it just in case it wasn't previously removed + textTracks.removeEventListener('change', restoreTrackMode); + textTracks.addEventListener('change', restoreTrackMode); + }); + + // start updating the snapshot again after leaving fullscreen + this.on('webkitendfullscreen', function () { + // remove the listener before adding it just in case it wasn't previously removed + textTracks.removeEventListener('change', takeMetadataTrackSnapshot); + textTracks.addEventListener('change', takeMetadataTrackSnapshot); + + // remove the restoreTrackMode handler in case it wasn't triggered during fullscreen playback + textTracks.removeEventListener('change', restoreTrackMode); + }); + }; + + /** + * Attempt to force override of tracks for the given type + * + * @param {String} type - Track type to override, possible values include 'Audio', + * 'Video', and 'Text'. + * @param {Boolean} override - If set to true native audio/video will be overridden, + * otherwise native audio/video will potentially be used. + * @private + */ + + + Html5.prototype.overrideNative_ = function overrideNative_(type, override) { + var _this2 = this; + + // If there is no behavioral change don't add/remove listeners + if (override !== this['featuresNative' + type + 'Tracks']) { + return; + } + + var lowerCaseType = type.toLowerCase(); + + if (this[lowerCaseType + 'TracksListeners_']) { + Object.keys(this[lowerCaseType + 'TracksListeners_']).forEach(function (eventName) { + var elTracks = _this2.el()[lowerCaseType + 'Tracks']; + + elTracks.removeEventListener(eventName, _this2[lowerCaseType + 'TracksListeners_'][eventName]); + }); + } + + this['featuresNative' + type + 'Tracks'] = !override; + this[lowerCaseType + 'TracksListeners_'] = null; + + this.proxyNativeTracksForType_(lowerCaseType); + }; + + /** + * Attempt to force override of native audio tracks. + * + * @param {Boolean} override - If set to true native audio will be overridden, + * otherwise native audio will potentially be used. + */ + + + Html5.prototype.overrideNativeAudioTracks = function overrideNativeAudioTracks(override) { + this.overrideNative_('Audio', override); + }; + + /** + * Attempt to force override of native video tracks. + * + * @param {Boolean} override - If set to true native video will be overridden, + * otherwise native video will potentially be used. + */ + + + Html5.prototype.overrideNativeVideoTracks = function overrideNativeVideoTracks(override) { + this.overrideNative_('Video', override); + }; + + /** + * Proxy native track list events for the given type to our track + * lists if the browser we are playing in supports that type of track list. + * + * @param {string} name - Track type; values include 'audio', 'video', and 'text' + * @private + */ + + + Html5.prototype.proxyNativeTracksForType_ = function proxyNativeTracksForType_(name) { + var _this3 = this; + + var props = NORMAL[name]; + var elTracks = this.el()[props.getterName]; + var techTracks = this[props.getterName](); + + if (!this['featuresNative' + props.capitalName + 'Tracks'] || !elTracks || !elTracks.addEventListener) { + return; + } + var listeners = { + change: function change(e) { + techTracks.trigger({ + type: 'change', + target: techTracks, + currentTarget: techTracks, + srcElement: techTracks + }); + }, + addtrack: function addtrack(e) { + techTracks.addTrack(e.track); + }, + removetrack: function removetrack(e) { + techTracks.removeTrack(e.track); + } + }; + var removeOldTracks = function removeOldTracks() { + var removeTracks = []; + + for (var i = 0; i < techTracks.length; i++) { + var found = false; + + for (var j = 0; j < elTracks.length; j++) { + if (elTracks[j] === techTracks[i]) { + found = true; + break; + } + } + + if (!found) { + removeTracks.push(techTracks[i]); + } + } + + while (removeTracks.length) { + techTracks.removeTrack(removeTracks.shift()); + } + }; + + this[props.getterName + 'Listeners_'] = listeners; + + Object.keys(listeners).forEach(function (eventName) { + var listener = listeners[eventName]; + + elTracks.addEventListener(eventName, listener); + _this3.on('dispose', function (e) { + return elTracks.removeEventListener(eventName, listener); + }); + }); + + // Remove (native) tracks that are not used anymore + this.on('loadstart', removeOldTracks); + this.on('dispose', function (e) { + return _this3.off('loadstart', removeOldTracks); + }); + }; + + /** + * Proxy all native track list events to our track lists if the browser we are playing + * in supports that type of track list. + * + * @private + */ + + + Html5.prototype.proxyNativeTracks_ = function proxyNativeTracks_() { + var _this4 = this; + + NORMAL.names.forEach(function (name) { + _this4.proxyNativeTracksForType_(name); + }); + }; + + /** + * Create the `Html5` Tech's DOM element. + * + * @return {Element} + * The element that gets created. + */ + + + Html5.prototype.createEl = function createEl$$1() { + var el = this.options_.tag; + + // Check if this browser supports moving the element into the box. + // On the iPhone video will break if you move the element, + // So we have to create a brand new element. + // If we ingested the player div, we do not need to move the media element. + if (!el || !(this.options_.playerElIngest || this.movingMediaElementInDOM)) { + + // If the original tag is still there, clone and remove it. + if (el) { + var clone = el.cloneNode(true); + + if (el.parentNode) { + el.parentNode.insertBefore(clone, el); + } + Html5.disposeMediaElement(el); + el = clone; + } else { + el = document_1.createElement('video'); + + // determine if native controls should be used + var tagAttributes = this.options_.tag && getAttributes(this.options_.tag); + var attributes = mergeOptions({}, tagAttributes); + + if (!TOUCH_ENABLED || this.options_.nativeControlsForTouch !== true) { + delete attributes.controls; + } + + setAttributes(el, assign(attributes, { + id: this.options_.techId, + class: 'vjs-tech' + })); + } + + el.playerId = this.options_.playerId; + } + + if (typeof this.options_.preload !== 'undefined') { + setAttribute(el, 'preload', this.options_.preload); + } + + // Update specific tag settings, in case they were overridden + // `autoplay` has to be *last* so that `muted` and `playsinline` are present + // when iOS/Safari or other browsers attempt to autoplay. + var settingsAttrs = ['loop', 'muted', 'playsinline', 'autoplay']; + + for (var i = 0; i < settingsAttrs.length; i++) { + var attr = settingsAttrs[i]; + var value = this.options_[attr]; + + if (typeof value !== 'undefined') { + if (value) { + setAttribute(el, attr, attr); + } else { + removeAttribute(el, attr); + } + el[attr] = value; + } + } + + return el; + }; + + /** + * This will be triggered if the loadstart event has already fired, before videojs was + * ready. Two known examples of when this can happen are: + * 1. If we're loading the playback object after it has started loading + * 2. The media is already playing the (often with autoplay on) then + * + * This function will fire another loadstart so that videojs can catchup. + * + * @fires Tech#loadstart + * + * @return {undefined} + * returns nothing. + */ + + + Html5.prototype.handleLateInit_ = function handleLateInit_(el) { + if (el.networkState === 0 || el.networkState === 3) { + // The video element hasn't started loading the source yet + // or didn't find a source + return; + } + + if (el.readyState === 0) { + // NetworkState is set synchronously BUT loadstart is fired at the + // end of the current stack, usually before setInterval(fn, 0). + // So at this point we know loadstart may have already fired or is + // about to fire, and either way the player hasn't seen it yet. + // We don't want to fire loadstart prematurely here and cause a + // double loadstart so we'll wait and see if it happens between now + // and the next loop, and fire it if not. + // HOWEVER, we also want to make sure it fires before loadedmetadata + // which could also happen between now and the next loop, so we'll + // watch for that also. + var loadstartFired = false; + var setLoadstartFired = function setLoadstartFired() { + loadstartFired = true; + }; + + this.on('loadstart', setLoadstartFired); + + var triggerLoadstart = function triggerLoadstart() { + // We did miss the original loadstart. Make sure the player + // sees loadstart before loadedmetadata + if (!loadstartFired) { + this.trigger('loadstart'); + } + }; + + this.on('loadedmetadata', triggerLoadstart); + + this.ready(function () { + this.off('loadstart', setLoadstartFired); + this.off('loadedmetadata', triggerLoadstart); + + if (!loadstartFired) { + // We did miss the original native loadstart. Fire it now. + this.trigger('loadstart'); + } + }); + + return; + } + + // From here on we know that loadstart already fired and we missed it. + // The other readyState events aren't as much of a problem if we double + // them, so not going to go to as much trouble as loadstart to prevent + // that unless we find reason to. + var eventsToTrigger = ['loadstart']; + + // loadedmetadata: newly equal to HAVE_METADATA (1) or greater + eventsToTrigger.push('loadedmetadata'); + + // loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater + if (el.readyState >= 2) { + eventsToTrigger.push('loadeddata'); + } + + // canplay: newly increased to HAVE_FUTURE_DATA (3) or greater + if (el.readyState >= 3) { + eventsToTrigger.push('canplay'); + } + + // canplaythrough: newly equal to HAVE_ENOUGH_DATA (4) + if (el.readyState >= 4) { + eventsToTrigger.push('canplaythrough'); + } + + // We still need to give the player time to add event listeners + this.ready(function () { + eventsToTrigger.forEach(function (type) { + this.trigger(type); + }, this); + }); + }; + + /** + * Set current time for the `HTML5` tech. + * + * @param {number} seconds + * Set the current time of the media to this. + */ + + + Html5.prototype.setCurrentTime = function setCurrentTime(seconds) { + try { + this.el_.currentTime = seconds; + } catch (e) { + log$1(e, 'Video is not ready. (Video.js)'); + // this.warning(VideoJS.warnings.videoNotReady); + } + }; + + /** + * Get the current duration of the HTML5 media element. + * + * @return {number} + * The duration of the media or 0 if there is no duration. + */ + + + Html5.prototype.duration = function duration() { + var _this5 = this; + + // Android Chrome will report duration as Infinity for VOD HLS until after + // playback has started, which triggers the live display erroneously. + // Return NaN if playback has not started and trigger a durationupdate once + // the duration can be reliably known. + if (this.el_.duration === Infinity && IS_ANDROID && IS_CHROME && this.el_.currentTime === 0) { + // Wait for the first `timeupdate` with currentTime > 0 - there may be + // several with 0 + var checkProgress = function checkProgress() { + if (_this5.el_.currentTime > 0) { + // Trigger durationchange for genuinely live video + if (_this5.el_.duration === Infinity) { + _this5.trigger('durationchange'); + } + _this5.off('timeupdate', checkProgress); + } + }; + + this.on('timeupdate', checkProgress); + return NaN; + } + return this.el_.duration || NaN; + }; + + /** + * Get the current width of the HTML5 media element. + * + * @return {number} + * The width of the HTML5 media element. + */ + + + Html5.prototype.width = function width() { + return this.el_.offsetWidth; + }; + + /** + * Get the current height of the HTML5 media element. + * + * @return {number} + * The height of the HTML5 media element. + */ + + + Html5.prototype.height = function height() { + return this.el_.offsetHeight; + }; + + /** + * Proxy iOS `webkitbeginfullscreen` and `webkitendfullscreen` into + * `fullscreenchange` event. + * + * @private + * @fires fullscreenchange + * @listens webkitendfullscreen + * @listens webkitbeginfullscreen + * @listens webkitbeginfullscreen + */ + + + Html5.prototype.proxyWebkitFullscreen_ = function proxyWebkitFullscreen_() { + var _this6 = this; + + if (!('webkitDisplayingFullscreen' in this.el_)) { + return; + } + + var endFn = function endFn() { + this.trigger('fullscreenchange', {isFullscreen: false}); + }; + + var beginFn = function beginFn() { + if ('webkitPresentationMode' in this.el_ && this.el_.webkitPresentationMode !== 'picture-in-picture') { + this.one('webkitendfullscreen', endFn); + + this.trigger('fullscreenchange', {isFullscreen: true}); + } + }; + + this.on('webkitbeginfullscreen', beginFn); + this.on('dispose', function () { + _this6.off('webkitbeginfullscreen', beginFn); + _this6.off('webkitendfullscreen', endFn); + }); + }; + + /** + * Check if fullscreen is supported on the current playback device. + * + * @return {boolean} + * - True if fullscreen is supported. + * - False if fullscreen is not supported. + */ + + + Html5.prototype.supportsFullScreen = function supportsFullScreen() { + if (typeof this.el_.webkitEnterFullScreen === 'function') { + var userAgent = window_1.navigator && window_1.navigator.userAgent || ''; + + // Seems to be broken in Chromium/Chrome && Safari in Leopard + if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) { + return true; + } + } + return false; + }; + + /** + * Request that the `HTML5` Tech enter fullscreen. + */ + + + Html5.prototype.enterFullScreen = function enterFullScreen() { + var video = this.el_; + + if (video.paused && video.networkState <= video.HAVE_METADATA) { + // attempt to prime the video element for programmatic access + // this isn't necessary on the desktop but shouldn't hurt + this.el_.play(); + + // playing and pausing synchronously during the transition to fullscreen + // can get iOS ~6.1 devices into a play/pause loop + this.setTimeout(function () { + video.pause(); + video.webkitEnterFullScreen(); + }, 0); + } else { + video.webkitEnterFullScreen(); + } + }; + + /** + * Request that the `HTML5` Tech exit fullscreen. + */ + + + Html5.prototype.exitFullScreen = function exitFullScreen() { + this.el_.webkitExitFullScreen(); + }; + + /** + * A getter/setter for the `Html5` Tech's source object. + * > Note: Please use {@link Html5#setSource} + * + * @param {Tech~SourceObject} [src] + * The source object you want to set on the `HTML5` techs element. + * + * @return {Tech~SourceObject|undefined} + * - The current source object when a source is not passed in. + * - undefined when setting + * + * @deprecated Since version 5. + */ + + + Html5.prototype.src = function src(_src) { + if (_src === undefined) { + return this.el_.src; + } + + // Setting src through `src` instead of `setSrc` will be deprecated + this.setSrc(_src); + }; + + /** + * Reset the tech by removing all sources and then calling + * {@link Html5.resetMediaElement}. + */ + + + Html5.prototype.reset = function reset() { + Html5.resetMediaElement(this.el_); + }; + + /** + * Get the current source on the `HTML5` Tech. Falls back to returning the source from + * the HTML5 media element. + * + * @return {Tech~SourceObject} + * The current source object from the HTML5 tech. With a fallback to the + * elements source. + */ + + + Html5.prototype.currentSrc = function currentSrc() { + if (this.currentSource_) { + return this.currentSource_.src; + } + return this.el_.currentSrc; + }; + + /** + * Set controls attribute for the HTML5 media Element. + * + * @param {string} val + * Value to set the controls attribute to + */ + + + Html5.prototype.setControls = function setControls(val) { + this.el_.controls = !!val; + }; + + /** + * Create and returns a remote {@link TextTrack} object. + * + * @param {string} kind + * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata) + * + * @param {string} [label] + * Label to identify the text track + * + * @param {string} [language] + * Two letter language abbreviation + * + * @return {TextTrack} + * The TextTrack that gets created. + */ + + + Html5.prototype.addTextTrack = function addTextTrack(kind, label, language) { + if (!this.featuresNativeTextTracks) { + return _Tech.prototype.addTextTrack.call(this, kind, label, language); + } + + return this.el_.addTextTrack(kind, label, language); + }; + + /** + * Creates either native TextTrack or an emulated TextTrack depending + * on the value of `featuresNativeTextTracks` + * + * @param {Object} options + * The object should contain the options to initialize the TextTrack with. + * + * @param {string} [options.kind] + * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata). + * + * @param {string} [options.label] + * Label to identify the text track + * + * @param {string} [options.language] + * Two letter language abbreviation. + * + * @param {boolean} [options.default] + * Default this track to on. + * + * @param {string} [options.id] + * The internal id to assign this track. + * + * @param {string} [options.src] + * A source url for the track. + * + * @return {HTMLTrackElement} + * The track element that gets created. + */ + + + Html5.prototype.createRemoteTextTrack = function createRemoteTextTrack(options) { + if (!this.featuresNativeTextTracks) { + return _Tech.prototype.createRemoteTextTrack.call(this, options); + } + var htmlTrackElement = document_1.createElement('track'); + + if (options.kind) { + htmlTrackElement.kind = options.kind; + } + if (options.label) { + htmlTrackElement.label = options.label; + } + if (options.language || options.srclang) { + htmlTrackElement.srclang = options.language || options.srclang; + } + if (options.default) { + htmlTrackElement.default = options.default; + } + if (options.id) { + htmlTrackElement.id = options.id; + } + if (options.src) { + htmlTrackElement.src = options.src; + } + + return htmlTrackElement; + }; + + /** + * Creates a remote text track object and returns an html track element. + * + * @param {Object} options The object should contain values for + * kind, language, label, and src (location of the WebVTT file) + * @param {Boolean} [manualCleanup=true] if set to false, the TextTrack will be + * automatically removed from the video element whenever the source changes + * @return {HTMLTrackElement} An Html Track Element. + * This can be an emulated {@link HTMLTrackElement} or a native one. + * @deprecated The default value of the "manualCleanup" parameter will default + * to "false" in upcoming versions of Video.js + */ + + + Html5.prototype.addRemoteTextTrack = function addRemoteTextTrack(options, manualCleanup) { + var htmlTrackElement = _Tech.prototype.addRemoteTextTrack.call(this, options, manualCleanup); + + if (this.featuresNativeTextTracks) { + this.el().appendChild(htmlTrackElement); + } + + return htmlTrackElement; + }; + + /** + * Remove remote `TextTrack` from `TextTrackList` object + * + * @param {TextTrack} track + * `TextTrack` object to remove + */ + + + Html5.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) { + _Tech.prototype.removeRemoteTextTrack.call(this, track); + + if (this.featuresNativeTextTracks) { + var tracks = this.$$('track'); + + var i = tracks.length; + + while (i--) { + if (track === tracks[i] || track === tracks[i].track) { + this.el().removeChild(tracks[i]); + } + } + } + }; + + /** + * Gets available media playback quality metrics as specified by the W3C's Media + * Playback Quality API. + * + * @see [Spec]{@link https://wicg.github.io/media-playback-quality} + * + * @return {Object} + * An object with supported media playback quality metrics + */ + + + Html5.prototype.getVideoPlaybackQuality = function getVideoPlaybackQuality() { + if (typeof this.el().getVideoPlaybackQuality === 'function') { + return this.el().getVideoPlaybackQuality(); + } + + var videoPlaybackQuality = {}; + + if (typeof this.el().webkitDroppedFrameCount !== 'undefined' && typeof this.el().webkitDecodedFrameCount !== 'undefined') { + videoPlaybackQuality.droppedVideoFrames = this.el().webkitDroppedFrameCount; + videoPlaybackQuality.totalVideoFrames = this.el().webkitDecodedFrameCount; + } + + if (window_1.performance && typeof window_1.performance.now === 'function') { + videoPlaybackQuality.creationTime = window_1.performance.now(); + } else if (window_1.performance && window_1.performance.timing && typeof window_1.performance.timing.navigationStart === 'number') { + videoPlaybackQuality.creationTime = window_1.Date.now() - window_1.performance.timing.navigationStart; + } + + return videoPlaybackQuality; + }; + + return Html5; + }(Tech); + + /* HTML5 Support Testing ---------------------------------------------------- */ + + if (isReal()) { + + /** + * Element for testing browser HTML5 media capabilities + * + * @type {Element} + * @constant + * @private + */ + Html5.TEST_VID = document_1.createElement('video'); + var track = document_1.createElement('track'); + + track.kind = 'captions'; + track.srclang = 'en'; + track.label = 'English'; + Html5.TEST_VID.appendChild(track); + } + + /** + * Check if HTML5 media is supported by this browser/device. + * + * @return {boolean} + * - True if HTML5 media is supported. + * - False if HTML5 media is not supported. + */ + Html5.isSupported = function () { + // IE with no Media Player is a LIAR! (#984) + try { + Html5.TEST_VID.volume = 0.5; + } catch (e) { + return false; + } + + return !!(Html5.TEST_VID && Html5.TEST_VID.canPlayType); + }; + + /** + * Check if the tech can support the given type + * + * @param {string} type + * The mimetype to check + * @return {string} 'probably', 'maybe', or '' (empty string) + */ + Html5.canPlayType = function (type) { + return Html5.TEST_VID.canPlayType(type); + }; + + /** + * Check if the tech can support the given source + * @param {Object} srcObj + * The source object + * @param {Object} options + * The options passed to the tech + * @return {string} 'probably', 'maybe', or '' (empty string) + */ + Html5.canPlaySource = function (srcObj, options) { + return Html5.canPlayType(srcObj.type); + }; + + /** + * Check if the volume can be changed in this browser/device. + * Volume cannot be changed in a lot of mobile devices. + * Specifically, it can't be changed from 1 on iOS. + * + * @return {boolean} + * - True if volume can be controlled + * - False otherwise + */ + Html5.canControlVolume = function () { + // IE will error if Windows Media Player not installed #3315 + try { + var volume = Html5.TEST_VID.volume; + + Html5.TEST_VID.volume = volume / 2 + 0.1; + return volume !== Html5.TEST_VID.volume; + } catch (e) { + return false; + } + }; + + /** + * Check if the playback rate can be changed in this browser/device. + * + * @return {boolean} + * - True if playback rate can be controlled + * - False otherwise + */ + Html5.canControlPlaybackRate = function () { + // Playback rate API is implemented in Android Chrome, but doesn't do anything + // https://github.com/videojs/video.js/issues/3180 + if (IS_ANDROID && IS_CHROME && CHROME_VERSION < 58) { + return false; + } + // IE will error if Windows Media Player not installed #3315 + try { + var playbackRate = Html5.TEST_VID.playbackRate; + + Html5.TEST_VID.playbackRate = playbackRate / 2 + 0.1; + return playbackRate !== Html5.TEST_VID.playbackRate; + } catch (e) { + return false; + } + }; + + /** + * Check if we can override a video/audio elements attributes, with + * Object.defineProperty. + * + * @return {boolean} + * - True if builtin attributes can be overridden + * - False otherwise + */ + Html5.canOverrideAttributes = function () { + // if we cannot overwrite the src/innerHTML property, there is no support + // iOS 7 safari for instance cannot do this. + try { + var noop = function noop() { + }; + + Object.defineProperty(document_1.createElement('video'), 'src', {get: noop, set: noop}); + Object.defineProperty(document_1.createElement('audio'), 'src', {get: noop, set: noop}); + Object.defineProperty(document_1.createElement('video'), 'innerHTML', {get: noop, set: noop}); + Object.defineProperty(document_1.createElement('audio'), 'innerHTML', {get: noop, set: noop}); + } catch (e) { + return false; + } + + return true; + }; + + /** + * Check to see if native `TextTrack`s are supported by this browser/device. + * + * @return {boolean} + * - True if native `TextTrack`s are supported. + * - False otherwise + */ + Html5.supportsNativeTextTracks = function () { + return IS_ANY_SAFARI; + }; + + /** + * Check to see if native `VideoTrack`s are supported by this browser/device + * + * @return {boolean} + * - True if native `VideoTrack`s are supported. + * - False otherwise + */ + Html5.supportsNativeVideoTracks = function () { + return !!(Html5.TEST_VID && Html5.TEST_VID.videoTracks); + }; + + /** + * Check to see if native `AudioTrack`s are supported by this browser/device + * + * @return {boolean} + * - True if native `AudioTrack`s are supported. + * - False otherwise + */ + Html5.supportsNativeAudioTracks = function () { + return !!(Html5.TEST_VID && Html5.TEST_VID.audioTracks); + }; + + /** + * An array of events available on the Html5 tech. + * + * @private + * @type {Array} + */ + Html5.Events = ['loadstart', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough', 'playing', 'waiting', 'seeking', 'seeked', 'ended', 'durationchange', 'timeupdate', 'progress', 'play', 'pause', 'ratechange', 'resize', 'volumechange']; + + /** + * Boolean indicating whether the `Tech` supports volume control. + * + * @type {boolean} + * @default {@link Html5.canControlVolume} + */ + Html5.prototype.featuresVolumeControl = Html5.canControlVolume(); + + /** + * Boolean indicating whether the `Tech` supports changing the speed at which the media + * plays. Examples: + * - Set player to play 2x (twice) as fast + * - Set player to play 0.5x (half) as fast + * + * @type {boolean} + * @default {@link Html5.canControlPlaybackRate} + */ + Html5.prototype.featuresPlaybackRate = Html5.canControlPlaybackRate(); + + /** + * Boolean indicating whether the `Tech` supports the `sourceset` event. + * + * @type {boolean} + * @default + */ + Html5.prototype.featuresSourceset = Html5.canOverrideAttributes(); + + /** + * Boolean indicating whether the `HTML5` tech currently supports the media element + * moving in the DOM. iOS breaks if you move the media element, so this is set this to + * false there. Everywhere else this should be true. + * + * @type {boolean} + * @default + */ + Html5.prototype.movingMediaElementInDOM = !IS_IOS; + + // TODO: Previous comment: No longer appears to be used. Can probably be removed. + // Is this true? + /** + * Boolean indicating whether the `HTML5` tech currently supports automatic media resize + * when going into fullscreen. + * + * @type {boolean} + * @default + */ + Html5.prototype.featuresFullscreenResize = true; + + /** + * Boolean indicating whether the `HTML5` tech currently supports the progress event. + * If this is false, manual `progress` events will be triggered instead. + * + * @type {boolean} + * @default + */ + Html5.prototype.featuresProgressEvents = true; + + /** + * Boolean indicating whether the `HTML5` tech currently supports the timeupdate event. + * If this is false, manual `timeupdate` events will be triggered instead. + * + * @default + */ + Html5.prototype.featuresTimeupdateEvents = true; + + /** + * Boolean indicating whether the `HTML5` tech currently supports native `TextTrack`s. + * + * @type {boolean} + * @default {@link Html5.supportsNativeTextTracks} + */ + Html5.prototype.featuresNativeTextTracks = Html5.supportsNativeTextTracks(); + + /** + * Boolean indicating whether the `HTML5` tech currently supports native `VideoTrack`s. + * + * @type {boolean} + * @default {@link Html5.supportsNativeVideoTracks} + */ + Html5.prototype.featuresNativeVideoTracks = Html5.supportsNativeVideoTracks(); + + /** + * Boolean indicating whether the `HTML5` tech currently supports native `AudioTrack`s. + * + * @type {boolean} + * @default {@link Html5.supportsNativeAudioTracks} + */ + Html5.prototype.featuresNativeAudioTracks = Html5.supportsNativeAudioTracks(); + + // HTML5 Feature detection and Device Fixes --------------------------------- // + var canPlayType = Html5.TEST_VID && Html5.TEST_VID.constructor.prototype.canPlayType; + var mpegurlRE = /^application\/(?:x-|vnd\.apple\.)mpegurl/i; + + Html5.patchCanPlayType = function () { + + // Android 4.0 and above can play HLS to some extent but it reports being unable to do so + // Firefox and Chrome report correctly + if (ANDROID_VERSION >= 4.0 && !IS_FIREFOX && !IS_CHROME) { + Html5.TEST_VID.constructor.prototype.canPlayType = function (type) { + if (type && mpegurlRE.test(type)) { + return 'maybe'; + } + return canPlayType.call(this, type); + }; + } + }; + + Html5.unpatchCanPlayType = function () { + var r = Html5.TEST_VID.constructor.prototype.canPlayType; + + Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType; + return r; + }; + + // by default, patch the media element + Html5.patchCanPlayType(); + + Html5.disposeMediaElement = function (el) { + if (!el) { + return; + } + + if (el.parentNode) { + el.parentNode.removeChild(el); + } + + // remove any child track or source nodes to prevent their loading + while (el.hasChildNodes()) { + el.removeChild(el.firstChild); + } + + // remove any src reference. not setting `src=''` because that causes a warning + // in firefox + el.removeAttribute('src'); + + // force the media element to update its loading state by calling load() + // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793) + if (typeof el.load === 'function') { + // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473) + (function () { + try { + el.load(); + } catch (e) { + // not supported + } + })(); + } + }; + + Html5.resetMediaElement = function (el) { + if (!el) { + return; + } + + var sources = el.querySelectorAll('source'); + var i = sources.length; + + while (i--) { + el.removeChild(sources[i]); + } + + // remove any src reference. + // not setting `src=''` because that throws an error + el.removeAttribute('src'); + + if (typeof el.load === 'function') { + // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473) + (function () { + try { + el.load(); + } catch (e) { + // satisfy linter + } + })(); + } + }; + + /* Native HTML5 element property wrapping ----------------------------------- */ + // Wrap native boolean attributes with getters that check both property and attribute + // The list is as followed: + // muted, defaultMuted, autoplay, controls, loop, playsinline + [ + /** + * Get the value of `muted` from the media element. `muted` indicates + * that the volume for the media should be set to silent. This does not actually change + * the `volume` attribute. + * + * @method Html5#muted + * @return {boolean} + * - True if the value of `volume` should be ignored and the audio set to silent. + * - False if the value of `volume` should be used. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-muted} + */ + 'muted', + + /** + * Get the value of `defaultMuted` from the media element. `defaultMuted` indicates + * whether the media should start muted or not. Only changes the default state of the + * media. `muted` and `defaultMuted` can have different values. {@link Html5#muted} indicates the + * current state. + * + * @method Html5#defaultMuted + * @return {boolean} + * - The value of `defaultMuted` from the media element. + * - True indicates that the media should start muted. + * - False indicates that the media should not start muted + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-defaultmuted} + */ + 'defaultMuted', + + /** + * Get the value of `autoplay` from the media element. `autoplay` indicates + * that the media should start to play as soon as the page is ready. + * + * @method Html5#autoplay + * @return {boolean} + * - The value of `autoplay` from the media element. + * - True indicates that the media should start as soon as the page loads. + * - False indicates that the media should not start as soon as the page loads. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-autoplay} + */ + 'autoplay', + + /** + * Get the value of `controls` from the media element. `controls` indicates + * whether the native media controls should be shown or hidden. + * + * @method Html5#controls + * @return {boolean} + * - The value of `controls` from the media element. + * - True indicates that native controls should be showing. + * - False indicates that native controls should be hidden. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-controls} + */ + 'controls', + + /** + * Get the value of `loop` from the media element. `loop` indicates + * that the media should return to the start of the media and continue playing once + * it reaches the end. + * + * @method Html5#loop + * @return {boolean} + * - The value of `loop` from the media element. + * - True indicates that playback should seek back to start once + * the end of a media is reached. + * - False indicates that playback should not loop back to the start when the + * end of the media is reached. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-loop} + */ + 'loop', + + /** + * Get the value of `playsinline` from the media element. `playsinline` indicates + * to the browser that non-fullscreen playback is preferred when fullscreen + * playback is the native default, such as in iOS Safari. + * + * @method Html5#playsinline + * @return {boolean} + * - The value of `playsinline` from the media element. + * - True indicates that the media should play inline. + * - False indicates that the media should not play inline. + * + * @see [Spec]{@link https://html.spec.whatwg.org/#attr-video-playsinline} + */ + 'playsinline'].forEach(function (prop) { + Html5.prototype[prop] = function () { + return this.el_[prop] || this.el_.hasAttribute(prop); + }; + }); + + // Wrap native boolean attributes with setters that set both property and attribute + // The list is as followed: + // setMuted, setDefaultMuted, setAutoplay, setLoop, setPlaysinline + // setControls is special-cased above + [ + /** + * Set the value of `muted` on the media element. `muted` indicates that the current + * audio level should be silent. + * + * @method Html5#setMuted + * @param {boolean} muted + * - True if the audio should be set to silent + * - False otherwise + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-muted} + */ + 'muted', + + /** + * Set the value of `defaultMuted` on the media element. `defaultMuted` indicates that the current + * audio level should be silent, but will only effect the muted level on intial playback.. + * + * @method Html5.prototype.setDefaultMuted + * @param {boolean} defaultMuted + * - True if the audio should be set to silent + * - False otherwise + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-defaultmuted} + */ + 'defaultMuted', + + /** + * Set the value of `autoplay` on the media element. `autoplay` indicates + * that the media should start to play as soon as the page is ready. + * + * @method Html5#setAutoplay + * @param {boolean} autoplay + * - True indicates that the media should start as soon as the page loads. + * - False indicates that the media should not start as soon as the page loads. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-autoplay} + */ + 'autoplay', + + /** + * Set the value of `loop` on the media element. `loop` indicates + * that the media should return to the start of the media and continue playing once + * it reaches the end. + * + * @method Html5#setLoop + * @param {boolean} loop + * - True indicates that playback should seek back to start once + * the end of a media is reached. + * - False indicates that playback should not loop back to the start when the + * end of the media is reached. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-loop} + */ + 'loop', + + /** + * Set the value of `playsinline` from the media element. `playsinline` indicates + * to the browser that non-fullscreen playback is preferred when fullscreen + * playback is the native default, such as in iOS Safari. + * + * @method Html5#setPlaysinline + * @param {boolean} playsinline + * - True indicates that the media should play inline. + * - False indicates that the media should not play inline. + * + * @see [Spec]{@link https://html.spec.whatwg.org/#attr-video-playsinline} + */ + 'playsinline'].forEach(function (prop) { + Html5.prototype['set' + toTitleCase(prop)] = function (v) { + this.el_[prop] = v; + + if (v) { + this.el_.setAttribute(prop, prop); + } else { + this.el_.removeAttribute(prop); + } + }; + }); + + // Wrap native properties with a getter + // The list is as followed + // paused, currentTime, buffered, volume, poster, preload, error, seeking + // seekable, ended, playbackRate, defaultPlaybackRate, played, networkState + // readyState, videoWidth, videoHeight + [ + /** + * Get the value of `paused` from the media element. `paused` indicates whether the media element + * is currently paused or not. + * + * @method Html5#paused + * @return {boolean} + * The value of `paused` from the media element. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-paused} + */ + 'paused', + + /** + * Get the value of `currentTime` from the media element. `currentTime` indicates + * the current second that the media is at in playback. + * + * @method Html5#currentTime + * @return {number} + * The value of `currentTime` from the media element. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-currenttime} + */ + 'currentTime', + + /** + * Get the value of `buffered` from the media element. `buffered` is a `TimeRange` + * object that represents the parts of the media that are already downloaded and + * available for playback. + * + * @method Html5#buffered + * @return {TimeRange} + * The value of `buffered` from the media element. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-buffered} + */ + 'buffered', + + /** + * Get the value of `volume` from the media element. `volume` indicates + * the current playback volume of audio for a media. `volume` will be a value from 0 + * (silent) to 1 (loudest and default). + * + * @method Html5#volume + * @return {number} + * The value of `volume` from the media element. Value will be between 0-1. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-a-volume} + */ + 'volume', + + /** + * Get the value of `poster` from the media element. `poster` indicates + * that the url of an image file that can/will be shown when no media data is available. + * + * @method Html5#poster + * @return {string} + * The value of `poster` from the media element. Value will be a url to an + * image. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-video-poster} + */ + 'poster', + + /** + * Get the value of `preload` from the media element. `preload` indicates + * what should download before the media is interacted with. It can have the following + * values: + * - none: nothing should be downloaded + * - metadata: poster and the first few frames of the media may be downloaded to get + * media dimensions and other metadata + * - auto: allow the media and metadata for the media to be downloaded before + * interaction + * + * @method Html5#preload + * @return {string} + * The value of `preload` from the media element. Will be 'none', 'metadata', + * or 'auto'. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-preload} + */ + 'preload', + + /** + * Get the value of the `error` from the media element. `error` indicates any + * MediaError that may have occurred during playback. If error returns null there is no + * current error. + * + * @method Html5#error + * @return {MediaError|null} + * The value of `error` from the media element. Will be `MediaError` if there + * is a current error and null otherwise. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-error} + */ + 'error', + + /** + * Get the value of `seeking` from the media element. `seeking` indicates whether the + * media is currently seeking to a new position or not. + * + * @method Html5#seeking + * @return {boolean} + * - The value of `seeking` from the media element. + * - True indicates that the media is currently seeking to a new position. + * - False indicates that the media is not seeking to a new position at this time. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-seeking} + */ + 'seeking', + + /** + * Get the value of `seekable` from the media element. `seekable` returns a + * `TimeRange` object indicating ranges of time that can currently be `seeked` to. + * + * @method Html5#seekable + * @return {TimeRange} + * The value of `seekable` from the media element. A `TimeRange` object + * indicating the current ranges of time that can be seeked to. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-seekable} + */ + 'seekable', + + /** + * Get the value of `ended` from the media element. `ended` indicates whether + * the media has reached the end or not. + * + * @method Html5#ended + * @return {boolean} + * - The value of `ended` from the media element. + * - True indicates that the media has ended. + * - False indicates that the media has not ended. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-ended} + */ + 'ended', + + /** + * Get the value of `playbackRate` from the media element. `playbackRate` indicates + * the rate at which the media is currently playing back. Examples: + * - if playbackRate is set to 2, media will play twice as fast. + * - if playbackRate is set to 0.5, media will play half as fast. + * + * @method Html5#playbackRate + * @return {number} + * The value of `playbackRate` from the media element. A number indicating + * the current playback speed of the media, where 1 is normal speed. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-playbackrate} + */ + 'playbackRate', + + /** + * Get the value of `defaultPlaybackRate` from the media element. `defaultPlaybackRate` indicates + * the rate at which the media is currently playing back. This value will not indicate the current + * `playbackRate` after playback has started, use {@link Html5#playbackRate} for that. + * + * Examples: + * - if defaultPlaybackRate is set to 2, media will play twice as fast. + * - if defaultPlaybackRate is set to 0.5, media will play half as fast. + * + * @method Html5.prototype.defaultPlaybackRate + * @return {number} + * The value of `defaultPlaybackRate` from the media element. A number indicating + * the current playback speed of the media, where 1 is normal speed. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-playbackrate} + */ + 'defaultPlaybackRate', + + /** + * Get the value of `played` from the media element. `played` returns a `TimeRange` + * object representing points in the media timeline that have been played. + * + * @method Html5#played + * @return {TimeRange} + * The value of `played` from the media element. A `TimeRange` object indicating + * the ranges of time that have been played. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-played} + */ + 'played', + + /** + * Get the value of `networkState` from the media element. `networkState` indicates + * the current network state. It returns an enumeration from the following list: + * - 0: NETWORK_EMPTY + * - 1: NETWORK_IDLE + * - 2: NETWORK_LOADING + * - 3: NETWORK_NO_SOURCE + * + * @method Html5#networkState + * @return {number} + * The value of `networkState` from the media element. This will be a number + * from the list in the description. + * + * @see [Spec] {@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-networkstate} + */ + 'networkState', + + /** + * Get the value of `readyState` from the media element. `readyState` indicates + * the current state of the media element. It returns an enumeration from the + * following list: + * - 0: HAVE_NOTHING + * - 1: HAVE_METADATA + * - 2: HAVE_CURRENT_DATA + * - 3: HAVE_FUTURE_DATA + * - 4: HAVE_ENOUGH_DATA + * + * @method Html5#readyState + * @return {number} + * The value of `readyState` from the media element. This will be a number + * from the list in the description. + * + * @see [Spec] {@link https://www.w3.org/TR/html5/embedded-content-0.html#ready-states} + */ + 'readyState', + + /** + * Get the value of `videoWidth` from the video element. `videoWidth` indicates + * the current width of the video in css pixels. + * + * @method Html5#videoWidth + * @return {number} + * The value of `videoWidth` from the video element. This will be a number + * in css pixels. + * + * @see [Spec] {@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-video-videowidth} + */ + 'videoWidth', + + /** + * Get the value of `videoHeight` from the video element. `videoHeight` indicates + * the current height of the video in css pixels. + * + * @method Html5#videoHeight + * @return {number} + * The value of `videoHeight` from the video element. This will be a number + * in css pixels. + * + * @see [Spec] {@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-video-videowidth} + */ + 'videoHeight'].forEach(function (prop) { + Html5.prototype[prop] = function () { + return this.el_[prop]; + }; + }); + + // Wrap native properties with a setter in this format: + // set + toTitleCase(name) + // The list is as follows: + // setVolume, setSrc, setPoster, setPreload, setPlaybackRate, setDefaultPlaybackRate + [ + /** + * Set the value of `volume` on the media element. `volume` indicates the current + * audio level as a percentage in decimal form. This means that 1 is 100%, 0.5 is 50%, and + * so on. + * + * @method Html5#setVolume + * @param {number} percentAsDecimal + * The volume percent as a decimal. Valid range is from 0-1. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-a-volume} + */ + 'volume', + + /** + * Set the value of `src` on the media element. `src` indicates the current + * {@link Tech~SourceObject} for the media. + * + * @method Html5#setSrc + * @param {Tech~SourceObject} src + * The source object to set as the current source. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-src} + */ + 'src', + + /** + * Set the value of `poster` on the media element. `poster` is the url to + * an image file that can/will be shown when no media data is available. + * + * @method Html5#setPoster + * @param {string} poster + * The url to an image that should be used as the `poster` for the media + * element. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-poster} + */ + 'poster', + + /** + * Set the value of `preload` on the media element. `preload` indicates + * what should download before the media is interacted with. It can have the following + * values: + * - none: nothing should be downloaded + * - metadata: poster and the first few frames of the media may be downloaded to get + * media dimensions and other metadata + * - auto: allow the media and metadata for the media to be downloaded before + * interaction + * + * @method Html5#setPreload + * @param {string} preload + * The value of `preload` to set on the media element. Must be 'none', 'metadata', + * or 'auto'. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#attr-media-preload} + */ + 'preload', + + /** + * Set the value of `playbackRate` on the media element. `playbackRate` indicates + * the rate at which the media should play back. Examples: + * - if playbackRate is set to 2, media will play twice as fast. + * - if playbackRate is set to 0.5, media will play half as fast. + * + * @method Html5#setPlaybackRate + * @return {number} + * The value of `playbackRate` from the media element. A number indicating + * the current playback speed of the media, where 1 is normal speed. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-playbackrate} + */ + 'playbackRate', + + /** + * Set the value of `defaultPlaybackRate` on the media element. `defaultPlaybackRate` indicates + * the rate at which the media should play back upon initial startup. Changing this value + * after a video has started will do nothing. Instead you should used {@link Html5#setPlaybackRate}. + * + * Example Values: + * - if playbackRate is set to 2, media will play twice as fast. + * - if playbackRate is set to 0.5, media will play half as fast. + * + * @method Html5.prototype.setDefaultPlaybackRate + * @return {number} + * The value of `defaultPlaybackRate` from the media element. A number indicating + * the current playback speed of the media, where 1 is normal speed. + * + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-defaultplaybackrate} + */ + 'defaultPlaybackRate'].forEach(function (prop) { + Html5.prototype['set' + toTitleCase(prop)] = function (v) { + this.el_[prop] = v; + }; + }); + + // wrap native functions with a function + // The list is as follows: + // pause, load, play + [ + /** + * A wrapper around the media elements `pause` function. This will call the `HTML5` + * media elements `pause` function. + * + * @method Html5#pause + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-pause} + */ + 'pause', + + /** + * A wrapper around the media elements `load` function. This will call the `HTML5`s + * media element `load` function. + * + * @method Html5#load + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-load} + */ + 'load', + + /** + * A wrapper around the media elements `play` function. This will call the `HTML5`s + * media element `play` function. + * + * @method Html5#play + * @see [Spec]{@link https://www.w3.org/TR/html5/embedded-content-0.html#dom-media-play} + */ + 'play'].forEach(function (prop) { + Html5.prototype[prop] = function () { + return this.el_[prop](); + }; + }); + + Tech.withSourceHandlers(Html5); + + /** + * Native source handler for Html5, simply passes the source to the media element. + * + * @property {Tech~SourceObject} source + * The source object + * + * @property {Html5} tech + * The instance of the HTML5 tech. + */ + Html5.nativeSourceHandler = {}; + + /** + * Check if the media element can play the given mime type. + * + * @param {string} type + * The mimetype to check + * + * @return {string} + * 'probably', 'maybe', or '' (empty string) + */ + Html5.nativeSourceHandler.canPlayType = function (type) { + // IE without MediaPlayer throws an error (#519) + try { + return Html5.TEST_VID.canPlayType(type); + } catch (e) { + return ''; + } + }; + + /** + * Check if the media element can handle a source natively. + * + * @param {Tech~SourceObject} source + * The source object + * + * @param {Object} [options] + * Options to be passed to the tech. + * + * @return {string} + * 'probably', 'maybe', or '' (empty string). + */ + Html5.nativeSourceHandler.canHandleSource = function (source, options) { + + // If a type was provided we should rely on that + if (source.type) { + return Html5.nativeSourceHandler.canPlayType(source.type); + + // If no type, fall back to checking 'video/[EXTENSION]' + } else if (source.src) { + var ext = getFileExtension(source.src); + + return Html5.nativeSourceHandler.canPlayType('video/' + ext); + } + + return ''; + }; + + /** + * Pass the source to the native media element. + * + * @param {Tech~SourceObject} source + * The source object + * + * @param {Html5} tech + * The instance of the Html5 tech + * + * @param {Object} [options] + * The options to pass to the source + */ + Html5.nativeSourceHandler.handleSource = function (source, tech, options) { + tech.setSrc(source.src); + }; + + /** + * A noop for the native dispose function, as cleanup is not needed. + */ + Html5.nativeSourceHandler.dispose = function () { + }; + + // Register the native source handler + Html5.registerSourceHandler(Html5.nativeSourceHandler); + + Tech.registerTech('Html5', Html5); + + var _templateObject$2 = taggedTemplateLiteralLoose(['\n Using the tech directly can be dangerous. I hope you know what you\'re doing.\n See https://github.com/videojs/video.js/issues/2617 for more info.\n '], ['\n Using the tech directly can be dangerous. I hope you know what you\'re doing.\n See https://github.com/videojs/video.js/issues/2617 for more info.\n ']); + + // The following tech events are simply re-triggered + // on the player when they happen + var TECH_EVENTS_RETRIGGER = [ + /** + * Fired while the user agent is downloading media data. + * + * @event Player#progress + * @type {EventTarget~Event} + */ + /** + * Retrigger the `progress` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechProgress_ + * @fires Player#progress + * @listens Tech#progress + */ + 'progress', + + /** + * Fires when the loading of an audio/video is aborted. + * + * @event Player#abort + * @type {EventTarget~Event} + */ + /** + * Retrigger the `abort` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechAbort_ + * @fires Player#abort + * @listens Tech#abort + */ + 'abort', + + /** + * Fires when the browser is intentionally not getting media data. + * + * @event Player#suspend + * @type {EventTarget~Event} + */ + /** + * Retrigger the `suspend` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechSuspend_ + * @fires Player#suspend + * @listens Tech#suspend + */ + 'suspend', + + /** + * Fires when the current playlist is empty. + * + * @event Player#emptied + * @type {EventTarget~Event} + */ + /** + * Retrigger the `emptied` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechEmptied_ + * @fires Player#emptied + * @listens Tech#emptied + */ + 'emptied', + /** + * Fires when the browser is trying to get media data, but data is not available. + * + * @event Player#stalled + * @type {EventTarget~Event} + */ + /** + * Retrigger the `stalled` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechStalled_ + * @fires Player#stalled + * @listens Tech#stalled + */ + 'stalled', + + /** + * Fires when the browser has loaded meta data for the audio/video. + * + * @event Player#loadedmetadata + * @type {EventTarget~Event} + */ + /** + * Retrigger the `stalled` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechLoadedmetadata_ + * @fires Player#loadedmetadata + * @listens Tech#loadedmetadata + */ + 'loadedmetadata', + + /** + * Fires when the browser has loaded the current frame of the audio/video. + * + * @event Player#loadeddata + * @type {event} + */ + /** + * Retrigger the `loadeddata` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechLoaddeddata_ + * @fires Player#loadeddata + * @listens Tech#loadeddata + */ + 'loadeddata', + + /** + * Fires when the current playback position has changed. + * + * @event Player#timeupdate + * @type {event} + */ + /** + * Retrigger the `timeupdate` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechTimeUpdate_ + * @fires Player#timeupdate + * @listens Tech#timeupdate + */ + 'timeupdate', + + /** + * Fires when the video's intrinsic dimensions change + * + * @event Player#resize + * @type {event} + */ + /** + * Retrigger the `resize` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechResize_ + * @fires Player#resize + * @listens Tech#resize + */ + 'resize', + + /** + * Fires when the volume has been changed + * + * @event Player#volumechange + * @type {event} + */ + /** + * Retrigger the `volumechange` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechVolumechange_ + * @fires Player#volumechange + * @listens Tech#volumechange + */ + 'volumechange', + + /** + * Fires when the text track has been changed + * + * @event Player#texttrackchange + * @type {event} + */ + /** + * Retrigger the `texttrackchange` event that was triggered by the {@link Tech}. + * + * @private + * @method Player#handleTechTexttrackchange_ + * @fires Player#texttrackchange + * @listens Tech#texttrackchange + */ + 'texttrackchange']; + + // events to queue when playback rate is zero + // this is a hash for the sole purpose of mapping non-camel-cased event names + // to camel-cased function names + var TECH_EVENTS_QUEUE = { + canplay: 'CanPlay', + canplaythrough: 'CanPlayThrough', + playing: 'Playing', + seeked: 'Seeked' + }; + + /** + * An instance of the `Player` class is created when any of the Video.js setup methods + * are used to initialize a video. + * + * After an instance has been created it can be accessed globally in two ways: + * 1. By calling `videojs('example_video_1');` + * 2. By using it directly via `videojs.players.example_video_1;` + * + * @extends Component + */ + + var Player = function (_Component) { + inherits(Player, _Component); + + /** + * Create an instance of this class. + * + * @param {Element} tag + * The original video DOM element used for configuring options. + * + * @param {Object} [options] + * Object of option names and values. + * + * @param {Component~ReadyCallback} [ready] + * Ready callback function. + */ + function Player(tag, options, ready) { + classCallCheck(this, Player); + + // Make sure tag ID exists + tag.id = tag.id || options.id || 'vjs_video_' + newGUID(); + + // Set Options + // The options argument overrides options set in the video tag + // which overrides globally set options. + // This latter part coincides with the load order + // (tag must exist before Player) + options = assign(Player.getTagSettings(tag), options); + + // Delay the initialization of children because we need to set up + // player properties first, and can't use `this` before `super()` + options.initChildren = false; + + // Same with creating the element + options.createEl = false; + + // don't auto mixin the evented mixin + options.evented = false; + + // we don't want the player to report touch activity on itself + // see enableTouchActivity in Component + options.reportTouchActivity = false; + + // If language is not set, get the closest lang attribute + if (!options.language) { + if (typeof tag.closest === 'function') { + var closest = tag.closest('[lang]'); + + if (closest && closest.getAttribute) { + options.language = closest.getAttribute('lang'); + } + } else { + var element = tag; + + while (element && element.nodeType === 1) { + if (getAttributes(element).hasOwnProperty('lang')) { + options.language = element.getAttribute('lang'); + break; + } + element = element.parentNode; + } + } + } + + // Run base component initializing with new options + + // Tracks when a tech changes the poster + var _this = possibleConstructorReturn(this, _Component.call(this, null, options, ready)); + + _this.isPosterFromTech_ = false; + + // Holds callback info that gets queued when playback rate is zero + // and a seek is happening + _this.queuedCallbacks_ = []; + + // Turn off API access because we're loading a new tech that might load asynchronously + _this.isReady_ = false; + + // Init state hasStarted_ + _this.hasStarted_ = false; + + // Init state userActive_ + _this.userActive_ = false; + + // if the global option object was accidentally blown away by + // someone, bail early with an informative error + if (!_this.options_ || !_this.options_.techOrder || !_this.options_.techOrder.length) { + throw new Error('No techOrder specified. Did you overwrite ' + 'videojs.options instead of just changing the ' + 'properties you want to override?'); + } + + // Store the original tag used to set options + _this.tag = tag; + + // Store the tag attributes used to restore html5 element + _this.tagAttributes = tag && getAttributes(tag); + + // Update current language + _this.language(_this.options_.language); + + // Update Supported Languages + if (options.languages) { + // Normalise player option languages to lowercase + var languagesToLower = {}; + + Object.getOwnPropertyNames(options.languages).forEach(function (name$$1) { + languagesToLower[name$$1.toLowerCase()] = options.languages[name$$1]; + }); + _this.languages_ = languagesToLower; + } else { + _this.languages_ = Player.prototype.options_.languages; + } + + // Cache for video property values. + _this.cache_ = {}; + + // Set poster + _this.poster_ = options.poster || ''; + + // Set controls + _this.controls_ = !!options.controls; + + // Set default values for lastVolume + _this.cache_.lastVolume = 1; + + // Original tag settings stored in options + // now remove immediately so native controls don't flash. + // May be turned back on by HTML5 tech if nativeControlsForTouch is true + tag.controls = false; + tag.removeAttribute('controls'); + + /* + * Store the internal state of scrubbing + * + * @private + * @return {Boolean} True if the user is scrubbing + */ + _this.scrubbing_ = false; + + _this.el_ = _this.createEl(); + + // Set default value for lastPlaybackRate + _this.cache_.lastPlaybackRate = _this.defaultPlaybackRate(); + + // Make this an evented object and use `el_` as its event bus. + evented(_this, {eventBusKey: 'el_'}); + + // We also want to pass the original player options to each component and plugin + // as well so they don't need to reach back into the player for options later. + // We also need to do another copy of this.options_ so we don't end up with + // an infinite loop. + var playerOptionsCopy = mergeOptions(_this.options_); + + // Load plugins + if (options.plugins) { + var plugins = options.plugins; + + Object.keys(plugins).forEach(function (name$$1) { + if (typeof this[name$$1] === 'function') { + this[name$$1](plugins[name$$1]); + } else { + throw new Error('plugin "' + name$$1 + '" does not exist'); + } + }, _this); + } + + _this.options_.playerOptions = playerOptionsCopy; + + _this.middleware_ = []; + + _this.initChildren(); + + // Set isAudio based on whether or not an audio tag was used + _this.isAudio(tag.nodeName.toLowerCase() === 'audio'); + + // Update controls className. Can't do this when the controls are initially + // set because the element doesn't exist yet. + if (_this.controls()) { + _this.addClass('vjs-controls-enabled'); + } else { + _this.addClass('vjs-controls-disabled'); + } + + // Set ARIA label and region role depending on player type + _this.el_.setAttribute('role', 'region'); + if (_this.isAudio()) { + _this.el_.setAttribute('aria-label', _this.localize('Audio Player')); + } else { + _this.el_.setAttribute('aria-label', _this.localize('Video Player')); + } + + if (_this.isAudio()) { + _this.addClass('vjs-audio'); + } + + if (_this.flexNotSupported_()) { + _this.addClass('vjs-no-flex'); + } + + // TODO: Make this smarter. Toggle user state between touching/mousing + // using events, since devices can have both touch and mouse events. + // if (browser.TOUCH_ENABLED) { + // this.addClass('vjs-touch-enabled'); + // } + + // iOS Safari has broken hover handling + if (!IS_IOS) { + _this.addClass('vjs-workinghover'); + } + + // Make player easily findable by ID + Player.players[_this.id_] = _this; + + // Add a major version class to aid css in plugins + var majorVersion = version.split('.')[0]; + + _this.addClass('vjs-v' + majorVersion); + + // When the player is first initialized, trigger activity so components + // like the control bar show themselves if needed + _this.userActive(true); + _this.reportUserActivity(); + + _this.one('play', _this.listenForUserActivity_); + _this.on('fullscreenchange', _this.handleFullscreenChange_); + _this.on('stageclick', _this.handleStageClick_); + + _this.changingSrc_ = false; + _this.playWaitingForReady_ = false; + _this.playOnLoadstart_ = null; + return _this; + } + + /** + * Destroys the video player and does any necessary cleanup. + * + * This is especially helpful if you are dynamically adding and removing videos + * to/from the DOM. + * + * @fires Player#dispose + */ + + + Player.prototype.dispose = function dispose() { + /** + * Called when the player is being disposed of. + * + * @event Player#dispose + * @type {EventTarget~Event} + */ + this.trigger('dispose'); + // prevent dispose from being called twice + this.off('dispose'); + + if (this.styleEl_ && this.styleEl_.parentNode) { + this.styleEl_.parentNode.removeChild(this.styleEl_); + this.styleEl_ = null; + } + + // Kill reference to this player + Player.players[this.id_] = null; + + if (this.tag && this.tag.player) { + this.tag.player = null; + } + + if (this.el_ && this.el_.player) { + this.el_.player = null; + } + + if (this.tech_) { + this.tech_.dispose(); + this.isPosterFromTech_ = false; + this.poster_ = ''; + } + + if (this.playerElIngest_) { + this.playerElIngest_ = null; + } + + if (this.tag) { + this.tag = null; + } + + clearCacheForPlayer(this); + + // the actual .el_ is removed here + _Component.prototype.dispose.call(this); + }; + + /** + * Create the `Player`'s DOM element. + * + * @return {Element} + * The DOM element that gets created. + */ + + + Player.prototype.createEl = function createEl$$1() { + var tag = this.tag; + var el = void 0; + var playerElIngest = this.playerElIngest_ = tag.parentNode && tag.parentNode.hasAttribute && tag.parentNode.hasAttribute('data-vjs-player'); + var divEmbed = this.tag.tagName.toLowerCase() === 'video-js'; + + if (playerElIngest) { + el = this.el_ = tag.parentNode; + } else if (!divEmbed) { + el = this.el_ = _Component.prototype.createEl.call(this, 'div'); + } + + // Copy over all the attributes from the tag, including ID and class + // ID will now reference player box, not the video tag + var attrs = getAttributes(tag); + + if (divEmbed) { + el = this.el_ = tag; + tag = this.tag = document_1.createElement('video'); + while (el.children.length) { + tag.appendChild(el.firstChild); + } + + if (!hasClass(el, 'video-js')) { + addClass(el, 'video-js'); + } + + el.appendChild(tag); + + playerElIngest = this.playerElIngest_ = el; + // move properties over from our custom `video-js` element + // to our new `video` element. This will move things like + // `src` or `controls` that were set via js before the player + // was initialized. + Object.keys(el).forEach(function (k) { + tag[k] = el[k]; + }); + } + + // set tabindex to -1 so we could focus on the player element + tag.setAttribute('tabindex', '-1'); + + // Remove width/height attrs from tag so CSS can make it 100% width/height + tag.removeAttribute('width'); + tag.removeAttribute('height'); + + Object.getOwnPropertyNames(attrs).forEach(function (attr) { + el.setAttribute(attr, attrs[attr]); + + if (divEmbed) { + tag.setAttribute(attr, attrs[attr]); + } + }); + + // Update tag id/class for use as HTML5 playback tech + // Might think we should do this after embedding in container so .vjs-tech class + // doesn't flash 100% width/height, but class only applies with .video-js parent + tag.playerId = tag.id; + tag.id += '_html5_api'; + tag.className = 'vjs-tech'; + + // Make player findable on elements + tag.player = el.player = this; + // Default state of video is paused + this.addClass('vjs-paused'); + + // Add a style element in the player that we'll use to set the width/height + // of the player in a way that's still overrideable by CSS, just like the + // video element + if (window_1.VIDEOJS_NO_DYNAMIC_STYLE !== true) { + this.styleEl_ = createStyleElement('vjs-styles-dimensions'); + var defaultsStyleEl = $('.vjs-styles-defaults'); + var head = $('head'); + + head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild); + } + + // Pass in the width/height/aspectRatio options which will update the style el + this.width(this.options_.width); + this.height(this.options_.height); + this.fluid(this.options_.fluid); + this.aspectRatio(this.options_.aspectRatio); + + // Hide any links within the video/audio tag, + // because IE doesn't hide them completely from screen readers. + var links = tag.getElementsByTagName('a'); + + for (var i = 0; i < links.length; i++) { + var linkEl = links.item(i); + + addClass(linkEl, 'vjs-hidden'); + linkEl.setAttribute('hidden', 'hidden'); + } + + // insertElFirst seems to cause the networkState to flicker from 3 to 2, so + // keep track of the original for later so we can know if the source originally failed + tag.initNetworkState_ = tag.networkState; + + // Wrap video tag in div (el/box) container + if (tag.parentNode && !playerElIngest) { + tag.parentNode.insertBefore(el, tag); + } + + // insert the tag as the first child of the player element + // then manually add it to the children array so that this.addChild + // will work properly for other components + // + // Breaks iPhone, fixed in HTML5 setup. + prependTo(tag, el); + this.children_.unshift(tag); + + // Set lang attr on player to ensure CSS :lang() in consistent with player + // if it's been set to something different to the doc + this.el_.setAttribute('lang', this.language_); + + this.el_ = el; + + return el; + }; + + /** + * A getter/setter for the `Player`'s width. Returns the player's configured value. + * To get the current width use `currentWidth()`. + * + * @param {number} [value] + * The value to set the `Player`'s width to. + * + * @return {number} + * The current width of the `Player` when getting. + */ + + + Player.prototype.width = function width(value) { + return this.dimension('width', value); + }; + + /** + * A getter/setter for the `Player`'s height. Returns the player's configured value. + * To get the current height use `currentheight()`. + * + * @param {number} [value] + * The value to set the `Player`'s heigth to. + * + * @return {number} + * The current height of the `Player` when getting. + */ + + + Player.prototype.height = function height(value) { + return this.dimension('height', value); + }; + + /** + * A getter/setter for the `Player`'s width & height. + * + * @param {string} dimension + * This string can be: + * - 'width' + * - 'height' + * + * @param {number} [value] + * Value for dimension specified in the first argument. + * + * @return {number} + * The dimension arguments value when getting (width/height). + */ + + + Player.prototype.dimension = function dimension(_dimension, value) { + var privDimension = _dimension + '_'; + + if (value === undefined) { + return this[privDimension] || 0; + } + + if (value === '') { + // If an empty string is given, reset the dimension to be automatic + this[privDimension] = undefined; + this.updateStyleEl_(); + return; + } + + var parsedVal = parseFloat(value); + + if (isNaN(parsedVal)) { + log$1.error('Improper value "' + value + '" supplied for for ' + _dimension); + return; + } + + this[privDimension] = parsedVal; + this.updateStyleEl_(); + }; + + /** + * A getter/setter/toggler for the vjs-fluid `className` on the `Player`. + * + * @param {boolean} [bool] + * - A value of true adds the class. + * - A value of false removes the class. + * - No value will toggle the fluid class. + * + * @return {boolean|undefined} + * - The value of fluid when getting. + * - `undefined` when setting. + */ + + + Player.prototype.fluid = function fluid(bool) { + if (bool === undefined) { + return !!this.fluid_; + } + + this.fluid_ = !!bool; + + if (bool) { + this.addClass('vjs-fluid'); + } else { + this.removeClass('vjs-fluid'); + } + + this.updateStyleEl_(); + }; + + /** + * Get/Set the aspect ratio + * + * @param {string} [ratio] + * Aspect ratio for player + * + * @return {string|undefined} + * returns the current aspect ratio when getting + */ + + /** + * A getter/setter for the `Player`'s aspect ratio. + * + * @param {string} [ratio] + * The value to set the `Player's aspect ratio to. + * + * @return {string|undefined} + * - The current aspect ratio of the `Player` when getting. + * - undefined when setting + */ + + + Player.prototype.aspectRatio = function aspectRatio(ratio) { + if (ratio === undefined) { + return this.aspectRatio_; + } + + // Check for width:height format + if (!/^\d+\:\d+$/.test(ratio)) { + throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.'); + } + this.aspectRatio_ = ratio; + + // We're assuming if you set an aspect ratio you want fluid mode, + // because in fixed mode you could calculate width and height yourself. + this.fluid(true); + + this.updateStyleEl_(); + }; + + /** + * Update styles of the `Player` element (height, width and aspect ratio). + * + * @private + * @listens Tech#loadedmetadata + */ + + + Player.prototype.updateStyleEl_ = function updateStyleEl_() { + if (window_1.VIDEOJS_NO_DYNAMIC_STYLE === true) { + var _width = typeof this.width_ === 'number' ? this.width_ : this.options_.width; + var _height = typeof this.height_ === 'number' ? this.height_ : this.options_.height; + var techEl = this.tech_ && this.tech_.el(); + + if (techEl) { + if (_width >= 0) { + techEl.width = _width; + } + if (_height >= 0) { + techEl.height = _height; + } + } + + return; + } + + var width = void 0; + var height = void 0; + var aspectRatio = void 0; + var idClass = void 0; + + // The aspect ratio is either used directly or to calculate width and height. + if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') { + // Use any aspectRatio that's been specifically set + aspectRatio = this.aspectRatio_; + } else if (this.videoWidth() > 0) { + // Otherwise try to get the aspect ratio from the video metadata + aspectRatio = this.videoWidth() + ':' + this.videoHeight(); + } else { + // Or use a default. The video element's is 2:1, but 16:9 is more common. + aspectRatio = '16:9'; + } + + // Get the ratio as a decimal we can use to calculate dimensions + var ratioParts = aspectRatio.split(':'); + var ratioMultiplier = ratioParts[1] / ratioParts[0]; + + if (this.width_ !== undefined) { + // Use any width that's been specifically set + width = this.width_; + } else if (this.height_ !== undefined) { + // Or calulate the width from the aspect ratio if a height has been set + width = this.height_ / ratioMultiplier; + } else { + // Or use the video's metadata, or use the video el's default of 300 + width = this.videoWidth() || 300; + } + + if (this.height_ !== undefined) { + // Use any height that's been specifically set + height = this.height_; + } else { + // Otherwise calculate the height from the ratio and the width + height = width * ratioMultiplier; + } + + // Ensure the CSS class is valid by starting with an alpha character + if (/^[^a-zA-Z]/.test(this.id())) { + idClass = 'dimensions-' + this.id(); + } else { + idClass = this.id() + '-dimensions'; + } + + // Ensure the right class is still on the player for the style element + this.addClass(idClass); + + setTextContent(this.styleEl_, '\n .' + idClass + ' {\n width: ' + width + 'px;\n height: ' + height + 'px;\n }\n\n .' + idClass + '.vjs-fluid {\n padding-top: ' + ratioMultiplier * 100 + '%;\n }\n '); + }; + + /** + * Load/Create an instance of playback {@link Tech} including element + * and API methods. Then append the `Tech` element in `Player` as a child. + * + * @param {string} techName + * name of the playback technology + * + * @param {string} source + * video source + * + * @private + */ + + + Player.prototype.loadTech_ = function loadTech_(techName, source) { + var _this2 = this; + + // Pause and remove current playback technology + if (this.tech_) { + this.unloadTech_(); + } + + var titleTechName = toTitleCase(techName); + var camelTechName = techName.charAt(0).toLowerCase() + techName.slice(1); + + // get rid of the HTML5 video tag as soon as we are using another tech + if (titleTechName !== 'Html5' && this.tag) { + Tech.getTech('Html5').disposeMediaElement(this.tag); + this.tag.player = null; + this.tag = null; + } + + this.techName_ = titleTechName; + + // Turn off API access because we're loading a new tech that might load asynchronously + this.isReady_ = false; + + // Grab tech-specific options from player options and add source and parent element to use. + var techOptions = { + source: source, + 'nativeControlsForTouch': this.options_.nativeControlsForTouch, + 'playerId': this.id(), + 'techId': this.id() + '_' + titleTechName + '_api', + 'autoplay': this.options_.autoplay, + 'playsinline': this.options_.playsinline, + 'preload': this.options_.preload, + 'loop': this.options_.loop, + 'muted': this.options_.muted, + 'poster': this.poster(), + 'language': this.language(), + 'playerElIngest': this.playerElIngest_ || false, + 'vtt.js': this.options_['vtt.js'], + 'canOverridePoster': !!this.options_.techCanOverridePoster, + 'enableSourceset': this.options_.enableSourceset + }; + + ALL.names.forEach(function (name$$1) { + var props = ALL[name$$1]; + + techOptions[props.getterName] = _this2[props.privateName]; + }); + + assign(techOptions, this.options_[titleTechName]); + assign(techOptions, this.options_[camelTechName]); + assign(techOptions, this.options_[techName.toLowerCase()]); + + if (this.tag) { + techOptions.tag = this.tag; + } + + if (source && source.src === this.cache_.src && this.cache_.currentTime > 0) { + techOptions.startTime = this.cache_.currentTime; + } + + // Initialize tech instance + var TechClass = Tech.getTech(techName); + + if (!TechClass) { + throw new Error('No Tech named \'' + titleTechName + '\' exists! \'' + titleTechName + '\' should be registered using videojs.registerTech()\''); + } + + this.tech_ = new TechClass(techOptions); + + // player.triggerReady is always async, so don't need this to be async + this.tech_.ready(bind(this, this.handleTechReady_), true); + + textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech_); + + // Listen to all HTML5-defined events and trigger them on the player + TECH_EVENTS_RETRIGGER.forEach(function (event) { + _this2.on(_this2.tech_, event, _this2['handleTech' + toTitleCase(event) + '_']); + }); + + Object.keys(TECH_EVENTS_QUEUE).forEach(function (event) { + _this2.on(_this2.tech_, event, function (eventObj) { + if (_this2.tech_.playbackRate() === 0 && _this2.tech_.seeking()) { + _this2.queuedCallbacks_.push({ + callback: _this2['handleTech' + TECH_EVENTS_QUEUE[event] + '_'].bind(_this2), + event: eventObj + }); + return; + } + _this2['handleTech' + TECH_EVENTS_QUEUE[event] + '_'](eventObj); + }); + }); + + this.on(this.tech_, 'loadstart', this.handleTechLoadStart_); + this.on(this.tech_, 'sourceset', this.handleTechSourceset_); + this.on(this.tech_, 'waiting', this.handleTechWaiting_); + this.on(this.tech_, 'ended', this.handleTechEnded_); + this.on(this.tech_, 'seeking', this.handleTechSeeking_); + this.on(this.tech_, 'play', this.handleTechPlay_); + this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_); + this.on(this.tech_, 'pause', this.handleTechPause_); + this.on(this.tech_, 'durationchange', this.handleTechDurationChange_); + this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_); + this.on(this.tech_, 'error', this.handleTechError_); + this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_); + this.on(this.tech_, 'posterchange', this.handleTechPosterChange_); + this.on(this.tech_, 'textdata', this.handleTechTextData_); + this.on(this.tech_, 'ratechange', this.handleTechRateChange_); + + this.usingNativeControls(this.techGet_('controls')); + + if (this.controls() && !this.usingNativeControls()) { + this.addTechControlsListeners_(); + } + + // Add the tech element in the DOM if it was not already there + // Make sure to not insert the original video element if using Html5 + if (this.tech_.el().parentNode !== this.el() && (titleTechName !== 'Html5' || !this.tag)) { + prependTo(this.tech_.el(), this.el()); + } + + // Get rid of the original video tag reference after the first tech is loaded + if (this.tag) { + this.tag.player = null; + this.tag = null; + } + }; + + /** + * Unload and dispose of the current playback {@link Tech}. + * + * @private + */ + + + Player.prototype.unloadTech_ = function unloadTech_() { + var _this3 = this; + + // Save the current text tracks so that we can reuse the same text tracks with the next tech + ALL.names.forEach(function (name$$1) { + var props = ALL[name$$1]; + + _this3[props.privateName] = _this3[props.getterName](); + }); + this.textTracksJson_ = textTrackConverter.textTracksToJson(this.tech_); + + this.isReady_ = false; + + this.tech_.dispose(); + + this.tech_ = false; + + if (this.isPosterFromTech_) { + this.poster_ = ''; + this.trigger('posterchange'); + } + + this.isPosterFromTech_ = false; + }; + + /** + * Return a reference to the current {@link Tech}. + * It will print a warning by default about the danger of using the tech directly + * but any argument that is passed in will silence the warning. + * + * @param {*} [safety] + * Anything passed in to silence the warning + * + * @return {Tech} + * The Tech + */ + + + Player.prototype.tech = function tech(safety) { + if (safety === undefined) { + log$1.warn(tsml(_templateObject$2)); + } + + return this.tech_; + }; + + /** + * Set up click and touch listeners for the playback element + * + * - On desktops: a click on the video itself will toggle playback + * - On mobile devices: a click on the video toggles controls + * which is done by toggling the user state between active and + * inactive + * - A tap can signal that a user has become active or has become inactive + * e.g. a quick tap on an iPhone movie should reveal the controls. Another + * quick tap should hide them again (signaling the user is in an inactive + * viewing state) + * - In addition to this, we still want the user to be considered inactive after + * a few seconds of inactivity. + * + * > Note: the only part of iOS interaction we can't mimic with this setup + * is a touch and hold on the video element counting as activity in order to + * keep the controls showing, but that shouldn't be an issue. A touch and hold + * on any controls will still keep the user active + * + * @private + */ + + + Player.prototype.addTechControlsListeners_ = function addTechControlsListeners_() { + // Make sure to remove all the previous listeners in case we are called multiple times. + this.removeTechControlsListeners_(); + + // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do + // trigger mousedown/up. + // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object + // Any touch events are set to block the mousedown event from happening + this.on(this.tech_, 'mousedown', this.handleTechClick_); + + // If the controls were hidden we don't want that to change without a tap event + // so we'll check if the controls were already showing before reporting user + // activity + this.on(this.tech_, 'touchstart', this.handleTechTouchStart_); + this.on(this.tech_, 'touchmove', this.handleTechTouchMove_); + this.on(this.tech_, 'touchend', this.handleTechTouchEnd_); + + // The tap listener needs to come after the touchend listener because the tap + // listener cancels out any reportedUserActivity when setting userActive(false) + this.on(this.tech_, 'tap', this.handleTechTap_); + }; + + /** + * Remove the listeners used for click and tap controls. This is needed for + * toggling to controls disabled, where a tap/touch should do nothing. + * + * @private + */ + + + Player.prototype.removeTechControlsListeners_ = function removeTechControlsListeners_() { + // We don't want to just use `this.off()` because there might be other needed + // listeners added by techs that extend this. + this.off(this.tech_, 'tap', this.handleTechTap_); + this.off(this.tech_, 'touchstart', this.handleTechTouchStart_); + this.off(this.tech_, 'touchmove', this.handleTechTouchMove_); + this.off(this.tech_, 'touchend', this.handleTechTouchEnd_); + this.off(this.tech_, 'mousedown', this.handleTechClick_); + }; + + /** + * Player waits for the tech to be ready + * + * @private + */ + + + Player.prototype.handleTechReady_ = function handleTechReady_() { + this.triggerReady(); + + // Keep the same volume as before + if (this.cache_.volume) { + this.techCall_('setVolume', this.cache_.volume); + } + + // Look if the tech found a higher resolution poster while loading + this.handleTechPosterChange_(); + + // Update the duration if available + this.handleTechDurationChange_(); + + // Chrome and Safari both have issues with autoplay. + // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work. + // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays) + // This fixes both issues. Need to wait for API, so it updates displays correctly + if ((this.src() || this.currentSrc()) && this.tag && this.options_.autoplay && this.paused()) { + try { + // Chrome Fix. Fixed in Chrome v16. + delete this.tag.poster; + } catch (e) { + log$1('deleting tag.poster throws in some browsers', e); + } + } + }; + + /** + * Retrigger the `loadstart` event that was triggered by the {@link Tech}. This + * function will also trigger {@link Player#firstplay} if it is the first loadstart + * for a video. + * + * @fires Player#loadstart + * @fires Player#firstplay + * @listens Tech#loadstart + * @private + */ + + + Player.prototype.handleTechLoadStart_ = function handleTechLoadStart_() { + // TODO: Update to use `emptied` event instead. See #1277. + + this.removeClass('vjs-ended'); + this.removeClass('vjs-seeking'); + + // reset the error state + this.error(null); + + // If it's already playing we want to trigger a firstplay event now. + // The firstplay event relies on both the play and loadstart events + // which can happen in any order for a new source + if (!this.paused()) { + /** + * Fired when the user agent begins looking for media data + * + * @event Player#loadstart + * @type {EventTarget~Event} + */ + this.trigger('loadstart'); + this.trigger('firstplay'); + } else { + // reset the hasStarted state + this.hasStarted(false); + this.trigger('loadstart'); + } + }; + + /** + * Update the internal source caches so that we return the correct source from + * `src()`, `currentSource()`, and `currentSources()`. + * + * > Note: `currentSources` will not be updated if the source that is passed in exists + * in the current `currentSources` cache. + * + * + * @param {Tech~SourceObject} srcObj + * A string or object source to update our caches to. + */ + + + Player.prototype.updateSourceCaches_ = function updateSourceCaches_() { + var srcObj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + + + var src = srcObj; + var type = ''; + + if (typeof src !== 'string') { + src = srcObj.src; + type = srcObj.type; + } + // make sure all the caches are set to default values + // to prevent null checking + this.cache_.source = this.cache_.source || {}; + this.cache_.sources = this.cache_.sources || []; + + // try to get the type of the src that was passed in + if (src && !type) { + type = findMimetype(this, src); + } + + // update `currentSource` cache always + this.cache_.source = {src: src, type: type}; + + var matchingSources = this.cache_.sources.filter(function (s) { + return s.src && s.src === src; + }); + var sourceElSources = []; + var sourceEls = this.$$('source'); + var matchingSourceEls = []; + + for (var i = 0; i < sourceEls.length; i++) { + var sourceObj = getAttributes(sourceEls[i]); + + sourceElSources.push(sourceObj); + + if (sourceObj.src && sourceObj.src === src) { + matchingSourceEls.push(sourceObj.src); + } + } + + // if we have matching source els but not matching sources + // the current source cache is not up to date + if (matchingSourceEls.length && !matchingSources.length) { + this.cache_.sources = sourceElSources; + // if we don't have matching source or source els set the + // sources cache to the `currentSource` cache + } else if (!matchingSources.length) { + this.cache_.sources = [this.cache_.source]; + } + + // update the tech `src` cache + this.cache_.src = src; + }; + + /** + * *EXPERIMENTAL* Fired when the source is set or changed on the {@link Tech} + * causing the media element to reload. + * + * It will fire for the initial source and each subsequent source. + * This event is a custom event from Video.js and is triggered by the {@link Tech}. + * + * The event object for this event contains a `src` property that will contain the source + * that was available when the event was triggered. This is generally only necessary if Video.js + * is switching techs while the source was being changed. + * + * It is also fired when `load` is called on the player (or media element) + * because the {@link https://html.spec.whatwg.org/multipage/media.html#dom-media-load|specification for `load`} + * says that the resource selection algorithm needs to be aborted and restarted. + * In this case, it is very likely that the `src` property will be set to the + * empty string `""` to indicate we do not know what the source will be but + * that it is changing. + * + * *This event is currently still experimental and may change in minor releases.* + * __To use this, pass `enableSourceset` option to the player.__ + * + * @event Player#sourceset + * @type {EventTarget~Event} + * @prop {string} src + * The source url available when the `sourceset` was triggered. + * It will be an empty string if we cannot know what the source is + * but know that the source will change. + */ + /** + * Retrigger the `sourceset` event that was triggered by the {@link Tech}. + * + * @fires Player#sourceset + * @listens Tech#sourceset + * @private + */ + + + Player.prototype.handleTechSourceset_ = function handleTechSourceset_(event) { + var _this4 = this; + + // only update the source cache when the source + // was not updated using the player api + if (!this.changingSrc_) { + // update the source to the intial source right away + // in some cases this will be empty string + this.updateSourceCaches_(event.src); + + // if the `sourceset` `src` was an empty string + // wait for a `loadstart` to update the cache to `currentSrc`. + // If a sourceset happens before a `loadstart`, we reset the state + // as this function will be called again. + if (!event.src) { + var updateCache = function updateCache(e) { + if (e.type !== 'sourceset') { + _this4.updateSourceCaches_(_this4.techGet_('currentSrc')); + } + + _this4.tech_.off(['sourceset', 'loadstart'], updateCache); + }; + + this.tech_.one(['sourceset', 'loadstart'], updateCache); + } + } + + this.trigger({ + src: event.src, + type: 'sourceset' + }); + }; + + /** + * Add/remove the vjs-has-started class + * + * @fires Player#firstplay + * + * @param {boolean} request + * - true: adds the class + * - false: remove the class + * + * @return {boolean} + * the boolean value of hasStarted_ + */ + + + Player.prototype.hasStarted = function hasStarted(request) { + if (request === undefined) { + // act as getter, if we have no request to change + return this.hasStarted_; + } + + if (request === this.hasStarted_) { + return; + } + + this.hasStarted_ = request; + + if (this.hasStarted_) { + this.addClass('vjs-has-started'); + this.trigger('firstplay'); + } else { + this.removeClass('vjs-has-started'); + } + }; + + /** + * Fired whenever the media begins or resumes playback + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play} + * @fires Player#play + * @listens Tech#play + * @private + */ + + + Player.prototype.handleTechPlay_ = function handleTechPlay_() { + this.removeClass('vjs-ended'); + this.removeClass('vjs-paused'); + this.addClass('vjs-playing'); + + // hide the poster when the user hits play + this.hasStarted(true); + /** + * Triggered whenever an {@link Tech#play} event happens. Indicates that + * playback has started or resumed. + * + * @event Player#play + * @type {EventTarget~Event} + */ + this.trigger('play'); + }; + + /** + * Retrigger the `ratechange` event that was triggered by the {@link Tech}. + * + * If there were any events queued while the playback rate was zero, fire + * those events now. + * + * @private + * @method Player#handleTechRateChange_ + * @fires Player#ratechange + * @listens Tech#ratechange + */ + + + Player.prototype.handleTechRateChange_ = function handleTechRateChange_() { + if (this.tech_.playbackRate() > 0 && this.cache_.lastPlaybackRate === 0) { + this.queuedCallbacks_.forEach(function (queued) { + return queued.callback(queued.event); + }); + this.queuedCallbacks_ = []; + } + this.cache_.lastPlaybackRate = this.tech_.playbackRate(); + /** + * Fires when the playing speed of the audio/video is changed + * + * @event Player#ratechange + * @type {event} + */ + this.trigger('ratechange'); + }; + + /** + * Retrigger the `waiting` event that was triggered by the {@link Tech}. + * + * @fires Player#waiting + * @listens Tech#waiting + * @private + */ + + + Player.prototype.handleTechWaiting_ = function handleTechWaiting_() { + var _this5 = this; + + this.addClass('vjs-waiting'); + /** + * A readyState change on the DOM element has caused playback to stop. + * + * @event Player#waiting + * @type {EventTarget~Event} + */ + this.trigger('waiting'); + this.one('timeupdate', function () { + return _this5.removeClass('vjs-waiting'); + }); + }; + + /** + * Retrigger the `canplay` event that was triggered by the {@link Tech}. + * > Note: This is not consistent between browsers. See #1351 + * + * @fires Player#canplay + * @listens Tech#canplay + * @private + */ + + + Player.prototype.handleTechCanPlay_ = function handleTechCanPlay_() { + this.removeClass('vjs-waiting'); + /** + * The media has a readyState of HAVE_FUTURE_DATA or greater. + * + * @event Player#canplay + * @type {EventTarget~Event} + */ + this.trigger('canplay'); + }; + + /** + * Retrigger the `canplaythrough` event that was triggered by the {@link Tech}. + * + * @fires Player#canplaythrough + * @listens Tech#canplaythrough + * @private + */ + + + Player.prototype.handleTechCanPlayThrough_ = function handleTechCanPlayThrough_() { + this.removeClass('vjs-waiting'); + /** + * The media has a readyState of HAVE_ENOUGH_DATA or greater. This means that the + * entire media file can be played without buffering. + * + * @event Player#canplaythrough + * @type {EventTarget~Event} + */ + this.trigger('canplaythrough'); + }; + + /** + * Retrigger the `playing` event that was triggered by the {@link Tech}. + * + * @fires Player#playing + * @listens Tech#playing + * @private + */ + + + Player.prototype.handleTechPlaying_ = function handleTechPlaying_() { + this.removeClass('vjs-waiting'); + /** + * The media is no longer blocked from playback, and has started playing. + * + * @event Player#playing + * @type {EventTarget~Event} + */ + this.trigger('playing'); + }; + + /** + * Retrigger the `seeking` event that was triggered by the {@link Tech}. + * + * @fires Player#seeking + * @listens Tech#seeking + * @private + */ + + + Player.prototype.handleTechSeeking_ = function handleTechSeeking_() { + this.addClass('vjs-seeking'); + /** + * Fired whenever the player is jumping to a new time + * + * @event Player#seeking + * @type {EventTarget~Event} + */ + this.trigger('seeking'); + }; + + /** + * Retrigger the `seeked` event that was triggered by the {@link Tech}. + * + * @fires Player#seeked + * @listens Tech#seeked + * @private + */ + + + Player.prototype.handleTechSeeked_ = function handleTechSeeked_() { + this.removeClass('vjs-seeking'); + /** + * Fired when the player has finished jumping to a new time + * + * @event Player#seeked + * @type {EventTarget~Event} + */ + this.trigger('seeked'); + }; + + /** + * Retrigger the `firstplay` event that was triggered by the {@link Tech}. + * + * @fires Player#firstplay + * @listens Tech#firstplay + * @deprecated As of 6.0 firstplay event is deprecated. + * @deprecated As of 6.0 passing the `starttime` option to the player and the firstplay event are deprecated. + * @private + */ + + + Player.prototype.handleTechFirstPlay_ = function handleTechFirstPlay_() { + // If the first starttime attribute is specified + // then we will start at the given offset in seconds + if (this.options_.starttime) { + log$1.warn('Passing the `starttime` option to the player will be deprecated in 6.0'); + this.currentTime(this.options_.starttime); + } + + this.addClass('vjs-has-started'); + /** + * Fired the first time a video is played. Not part of the HLS spec, and this is + * probably not the best implementation yet, so use sparingly. If you don't have a + * reason to prevent playback, use `myPlayer.one('play');` instead. + * + * @event Player#firstplay + * @deprecated As of 6.0 firstplay event is deprecated. + * @type {EventTarget~Event} + */ + this.trigger('firstplay'); + }; + + /** + * Retrigger the `pause` event that was triggered by the {@link Tech}. + * + * @fires Player#pause + * @listens Tech#pause + * @private + */ + + + Player.prototype.handleTechPause_ = function handleTechPause_() { + this.removeClass('vjs-playing'); + this.addClass('vjs-paused'); + /** + * Fired whenever the media has been paused + * + * @event Player#pause + * @type {EventTarget~Event} + */ + this.trigger('pause'); + }; + + /** + * Retrigger the `ended` event that was triggered by the {@link Tech}. + * + * @fires Player#ended + * @listens Tech#ended + * @private + */ + + + Player.prototype.handleTechEnded_ = function handleTechEnded_() { + this.addClass('vjs-ended'); + if (this.options_.loop) { + this.currentTime(0); + this.play(); + } else if (!this.paused()) { + this.pause(); + } + + /** + * Fired when the end of the media resource is reached (currentTime == duration) + * + * @event Player#ended + * @type {EventTarget~Event} + */ + this.trigger('ended'); + }; + + /** + * Fired when the duration of the media resource is first known or changed + * + * @listens Tech#durationchange + * @private + */ + + + Player.prototype.handleTechDurationChange_ = function handleTechDurationChange_() { + this.duration(this.techGet_('duration')); + }; + + /** + * Handle a click on the media element to play/pause + * + * @param {EventTarget~Event} event + * the event that caused this function to trigger + * + * @listens Tech#mousedown + * @private + */ + + + Player.prototype.handleTechClick_ = function handleTechClick_(event) { + if (!isSingleLeftClick(event)) { + return; + } + + // When controls are disabled a click should not toggle playback because + // the click is considered a control + if (!this.controls_) { + return; + } + + if (this.paused()) { + this.play(); + } else { + this.pause(); + } + }; + + /** + * Handle a tap on the media element. It will toggle the user + * activity state, which hides and shows the controls. + * + * @listens Tech#tap + * @private + */ + + + Player.prototype.handleTechTap_ = function handleTechTap_() { + this.userActive(!this.userActive()); + }; + + /** + * Handle touch to start + * + * @listens Tech#touchstart + * @private + */ + + + Player.prototype.handleTechTouchStart_ = function handleTechTouchStart_() { + this.userWasActive = this.userActive(); + }; + + /** + * Handle touch to move + * + * @listens Tech#touchmove + * @private + */ + + + Player.prototype.handleTechTouchMove_ = function handleTechTouchMove_() { + if (this.userWasActive) { + this.reportUserActivity(); + } + }; + + /** + * Handle touch to end + * + * @param {EventTarget~Event} event + * the touchend event that triggered + * this function + * + * @listens Tech#touchend + * @private + */ + + + Player.prototype.handleTechTouchEnd_ = function handleTechTouchEnd_(event) { + // Stop the mouse events from also happening + event.preventDefault(); + }; + + /** + * Fired when the player switches in or out of fullscreen mode + * + * @private + * @listens Player#fullscreenchange + */ + + + Player.prototype.handleFullscreenChange_ = function handleFullscreenChange_() { + if (this.isFullscreen()) { + this.addClass('vjs-fullscreen'); + } else { + this.removeClass('vjs-fullscreen'); + } + }; + + /** + * native click events on the SWF aren't triggered on IE11, Win8.1RT + * use stageclick events triggered from inside the SWF instead + * + * @private + * @listens stageclick + */ + + + Player.prototype.handleStageClick_ = function handleStageClick_() { + this.reportUserActivity(); + }; + + /** + * Handle Tech Fullscreen Change + * + * @param {EventTarget~Event} event + * the fullscreenchange event that triggered this function + * + * @param {Object} data + * the data that was sent with the event + * + * @private + * @listens Tech#fullscreenchange + * @fires Player#fullscreenchange + */ + + + Player.prototype.handleTechFullscreenChange_ = function handleTechFullscreenChange_(event, data) { + if (data) { + this.isFullscreen(data.isFullscreen); + } + /** + * Fired when going in and out of fullscreen. + * + * @event Player#fullscreenchange + * @type {EventTarget~Event} + */ + this.trigger('fullscreenchange'); + }; + + /** + * Fires when an error occurred during the loading of an audio/video. + * + * @private + * @listens Tech#error + */ + + + Player.prototype.handleTechError_ = function handleTechError_() { + var error = this.tech_.error(); + + this.error(error); + }; + + /** + * Retrigger the `textdata` event that was triggered by the {@link Tech}. + * + * @fires Player#textdata + * @listens Tech#textdata + * @private + */ + + + Player.prototype.handleTechTextData_ = function handleTechTextData_() { + var data = null; + + if (arguments.length > 1) { + data = arguments[1]; + } + + /** + * Fires when we get a textdata event from tech + * + * @event Player#textdata + * @type {EventTarget~Event} + */ + this.trigger('textdata', data); + }; + + /** + * Get object for cached values. + * + * @return {Object} + * get the current object cache + */ + + + Player.prototype.getCache = function getCache() { + return this.cache_; + }; + + /** + * Pass values to the playback tech + * + * @param {string} [method] + * the method to call + * + * @param {Object} arg + * the argument to pass + * + * @private + */ + + + Player.prototype.techCall_ = function techCall_(method, arg) { + // If it's not ready yet, call method when it is + + this.ready(function () { + if (method in allowedSetters) { + return set$1(this.middleware_, this.tech_, method, arg); + } else if (method in allowedMediators) { + return mediate(this.middleware_, this.tech_, method, arg); + } + + try { + if (this.tech_) { + this.tech_[method](arg); + } + } catch (e) { + log$1(e); + throw e; + } + }, true); + }; + + /** + * Get calls can't wait for the tech, and sometimes don't need to. + * + * @param {string} method + * Tech method + * + * @return {Function|undefined} + * the method or undefined + * + * @private + */ + + + Player.prototype.techGet_ = function techGet_(method) { + if (!this.tech_ || !this.tech_.isReady_) { + return; + } + + if (method in allowedGetters) { + return get$1(this.middleware_, this.tech_, method); + } else if (method in allowedMediators) { + return mediate(this.middleware_, this.tech_, method); + } + + // Flash likes to die and reload when you hide or reposition it. + // In these cases the object methods go away and we get errors. + // When that happens we'll catch the errors and inform tech that it's not ready any more. + try { + return this.tech_[method](); + } catch (e) { + + // When building additional tech libs, an expected method may not be defined yet + if (this.tech_[method] === undefined) { + log$1('Video.js: ' + method + ' method not defined for ' + this.techName_ + ' playback technology.', e); + throw e; + } + + // When a method isn't available on the object it throws a TypeError + if (e.name === 'TypeError') { + log$1('Video.js: ' + method + ' unavailable on ' + this.techName_ + ' playback technology element.', e); + this.tech_.isReady_ = false; + throw e; + } + + // If error unknown, just log and throw + log$1(e); + throw e; + } + }; + + /** + * Attempt to begin playback at the first opportunity. + * + * @return {Promise|undefined} + * Returns a `Promise` only if the browser returns one and the player + * is ready to begin playback. For some browsers and all non-ready + * situations, this will return `undefined`. + */ + + + Player.prototype.play = function play() { + var _this6 = this; + + // If this is called while we have a play queued up on a loadstart, remove + // that listener to avoid getting in a potentially bad state. + if (this.playOnLoadstart_) { + this.off('loadstart', this.playOnLoadstart_); + } + + // If the player/tech is not ready, queue up another call to `play()` for + // when it is. This will loop back into this method for another attempt at + // playback when the tech is ready. + if (!this.isReady_) { + + // Bail out if we're already waiting for `ready`! + if (this.playWaitingForReady_) { + return; + } + + this.playWaitingForReady_ = true; + this.ready(function () { + _this6.playWaitingForReady_ = false; + silencePromise(_this6.play()); + }); + + // If the player/tech is ready and we have a source, we can attempt playback. + } else if (!this.changingSrc_ && (this.src() || this.currentSrc())) { + return this.techGet_('play'); + + // If the tech is ready, but we do not have a source, we'll need to wait + // for both the `ready` and a `loadstart` when the source is finally + // resolved by middleware and set on the player. + // + // This can happen if `play()` is called while changing sources or before + // one has been set on the player. + } else { + + this.playOnLoadstart_ = function () { + _this6.playOnLoadstart_ = null; + silencePromise(_this6.play()); + }; + + this.one('loadstart', this.playOnLoadstart_); + } + }; + + /** + * Pause the video playback + * + * @return {Player} + * A reference to the player object this function was called on + */ + + + Player.prototype.pause = function pause() { + this.techCall_('pause'); + }; + + /** + * Check if the player is paused or has yet to play + * + * @return {boolean} + * - false: if the media is currently playing + * - true: if media is not currently playing + */ + + + Player.prototype.paused = function paused() { + // The initial state of paused should be true (in Safari it's actually false) + return this.techGet_('paused') === false ? false : true; + }; + + /** + * Get a TimeRange object representing the current ranges of time that the user + * has played. + * + * @return {TimeRange} + * A time range object that represents all the increments of time that have + * been played. + */ + + + Player.prototype.played = function played() { + return this.techGet_('played') || createTimeRanges(0, 0); + }; + + /** + * Returns whether or not the user is "scrubbing". Scrubbing is + * when the user has clicked the progress bar handle and is + * dragging it along the progress bar. + * + * @param {boolean} [isScrubbing] + * whether the user is or is not scrubbing + * + * @return {boolean} + * The value of scrubbing when getting + */ + + + Player.prototype.scrubbing = function scrubbing(isScrubbing) { + if (typeof isScrubbing === 'undefined') { + return this.scrubbing_; + } + this.scrubbing_ = !!isScrubbing; + + if (isScrubbing) { + this.addClass('vjs-scrubbing'); + } else { + this.removeClass('vjs-scrubbing'); + } + }; + + /** + * Get or set the current time (in seconds) + * + * @param {number|string} [seconds] + * The time to seek to in seconds + * + * @return {number} + * - the current time in seconds when getting + */ + + + Player.prototype.currentTime = function currentTime(seconds) { + if (typeof seconds !== 'undefined') { + if (seconds < 0) { + seconds = 0; + } + this.techCall_('setCurrentTime', seconds); + return; + } + + // cache last currentTime and return. default to 0 seconds + // + // Caching the currentTime is meant to prevent a massive amount of reads on the tech's + // currentTime when scrubbing, but may not provide much performance benefit afterall. + // Should be tested. Also something has to read the actual current time or the cache will + // never get updated. + this.cache_.currentTime = this.techGet_('currentTime') || 0; + return this.cache_.currentTime; + }; + + /** + * Normally gets the length in time of the video in seconds; + * in all but the rarest use cases an argument will NOT be passed to the method + * + * > **NOTE**: The video must have started loading before the duration can be + * known, and in the case of Flash, may not be known until the video starts + * playing. + * + * @fires Player#durationchange + * + * @param {number} [seconds] + * The duration of the video to set in seconds + * + * @return {number} + * - The duration of the video in seconds when getting + */ + + + Player.prototype.duration = function duration(seconds) { + if (seconds === undefined) { + // return NaN if the duration is not known + return this.cache_.duration !== undefined ? this.cache_.duration : NaN; + } + + seconds = parseFloat(seconds); + + // Standardize on Infinity for signaling video is live + if (seconds < 0) { + seconds = Infinity; + } + + if (seconds !== this.cache_.duration) { + // Cache the last set value for optimized scrubbing (esp. Flash) + this.cache_.duration = seconds; + + if (seconds === Infinity) { + this.addClass('vjs-live'); + } else { + this.removeClass('vjs-live'); + } + /** + * @event Player#durationchange + * @type {EventTarget~Event} + */ + this.trigger('durationchange'); + } + }; + + /** + * Calculates how much time is left in the video. Not part + * of the native video API. + * + * @return {number} + * The time remaining in seconds + */ + + + Player.prototype.remainingTime = function remainingTime() { + return this.duration() - this.currentTime(); + }; + + /** + * A remaining time function that is intented to be used when + * the time is to be displayed directly to the user. + * + * @return {number} + * The rounded time remaining in seconds + */ + + + Player.prototype.remainingTimeDisplay = function remainingTimeDisplay() { + return Math.floor(this.duration()) - Math.floor(this.currentTime()); + }; + + // + // Kind of like an array of portions of the video that have been downloaded. + + /** + * Get a TimeRange object with an array of the times of the video + * that have been downloaded. If you just want the percent of the + * video that's been downloaded, use bufferedPercent. + * + * @see [Buffered Spec]{@link http://dev.w3.org/html5/spec/video.html#dom-media-buffered} + * + * @return {TimeRange} + * A mock TimeRange object (following HTML spec) + */ + + + Player.prototype.buffered = function buffered() { + var buffered = this.techGet_('buffered'); + + if (!buffered || !buffered.length) { + buffered = createTimeRanges(0, 0); + } + + return buffered; + }; + + /** + * Get the percent (as a decimal) of the video that's been downloaded. + * This method is not a part of the native HTML video API. + * + * @return {number} + * A decimal between 0 and 1 representing the percent + * that is buffered 0 being 0% and 1 being 100% + */ + + + Player.prototype.bufferedPercent = function bufferedPercent$$1() { + return bufferedPercent(this.buffered(), this.duration()); + }; + + /** + * Get the ending time of the last buffered time range + * This is used in the progress bar to encapsulate all time ranges. + * + * @return {number} + * The end of the last buffered time range + */ + + + Player.prototype.bufferedEnd = function bufferedEnd() { + var buffered = this.buffered(); + var duration = this.duration(); + var end = buffered.end(buffered.length - 1); + + if (end > duration) { + end = duration; + } + + return end; + }; + + /** + * Get or set the current volume of the media + * + * @param {number} [percentAsDecimal] + * The new volume as a decimal percent: + * - 0 is muted/0%/off + * - 1.0 is 100%/full + * - 0.5 is half volume or 50% + * + * @return {number} + * The current volume as a percent when getting + */ + + + Player.prototype.volume = function volume(percentAsDecimal) { + var vol = void 0; + + if (percentAsDecimal !== undefined) { + // Force value to between 0 and 1 + vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); + this.cache_.volume = vol; + this.techCall_('setVolume', vol); + + if (vol > 0) { + this.lastVolume_(vol); + } + + return; + } + + // Default to 1 when returning current volume. + vol = parseFloat(this.techGet_('volume')); + return isNaN(vol) ? 1 : vol; + }; + + /** + * Get the current muted state, or turn mute on or off + * + * @param {boolean} [muted] + * - true to mute + * - false to unmute + * + * @return {boolean} + * - true if mute is on and getting + * - false if mute is off and getting + */ + + + Player.prototype.muted = function muted(_muted) { + if (_muted !== undefined) { + this.techCall_('setMuted', _muted); + return; + } + return this.techGet_('muted') || false; + }; + + /** + * Get the current defaultMuted state, or turn defaultMuted on or off. defaultMuted + * indicates the state of muted on initial playback. + * + * ```js + * var myPlayer = videojs('some-player-id'); + * + * myPlayer.src("http://www.example.com/path/to/video.mp4"); + * + * // get, should be false + * console.log(myPlayer.defaultMuted()); + * // set to true + * myPlayer.defaultMuted(true); + * // get should be true + * console.log(myPlayer.defaultMuted()); + * ``` + * + * @param {boolean} [defaultMuted] + * - true to mute + * - false to unmute + * + * @return {boolean|Player} + * - true if defaultMuted is on and getting + * - false if defaultMuted is off and getting + * - A reference to the current player when setting + */ + + + Player.prototype.defaultMuted = function defaultMuted(_defaultMuted) { + if (_defaultMuted !== undefined) { + return this.techCall_('setDefaultMuted', _defaultMuted); + } + return this.techGet_('defaultMuted') || false; + }; + + /** + * Get the last volume, or set it + * + * @param {number} [percentAsDecimal] + * The new last volume as a decimal percent: + * - 0 is muted/0%/off + * - 1.0 is 100%/full + * - 0.5 is half volume or 50% + * + * @return {number} + * the current value of lastVolume as a percent when getting + * + * @private + */ + + + Player.prototype.lastVolume_ = function lastVolume_(percentAsDecimal) { + if (percentAsDecimal !== undefined && percentAsDecimal !== 0) { + this.cache_.lastVolume = percentAsDecimal; + return; + } + return this.cache_.lastVolume; + }; + + /** + * Check if current tech can support native fullscreen + * (e.g. with built in controls like iOS, so not our flash swf) + * + * @return {boolean} + * if native fullscreen is supported + */ + + + Player.prototype.supportsFullScreen = function supportsFullScreen() { + return this.techGet_('supportsFullScreen') || false; + }; + + /** + * Check if the player is in fullscreen mode or tell the player that it + * is or is not in fullscreen mode. + * + * > NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official + * property and instead document.fullscreenElement is used. But isFullscreen is + * still a valuable property for internal player workings. + * + * @param {boolean} [isFS] + * Set the players current fullscreen state + * + * @return {boolean} + * - true if fullscreen is on and getting + * - false if fullscreen is off and getting + */ + + + Player.prototype.isFullscreen = function isFullscreen(isFS) { + if (isFS !== undefined) { + this.isFullscreen_ = !!isFS; + return; + } + return !!this.isFullscreen_; + }; + + /** + * Increase the size of the video to full screen + * In some browsers, full screen is not supported natively, so it enters + * "full window mode", where the video fills the browser window. + * In browsers and devices that support native full screen, sometimes the + * browser's default controls will be shown, and not the Video.js custom skin. + * This includes most mobile devices (iOS, Android) and older versions of + * Safari. + * + * @fires Player#fullscreenchange + */ + + + Player.prototype.requestFullscreen = function requestFullscreen() { + var fsApi = FullscreenApi; + + this.isFullscreen(true); + + if (fsApi.requestFullscreen) { + // the browser supports going fullscreen at the element level so we can + // take the controls fullscreen as well as the video + + // Trigger fullscreenchange event after change + // We have to specifically add this each time, and remove + // when canceling fullscreen. Otherwise if there's multiple + // players on a page, they would all be reacting to the same fullscreen + // events + on(document_1, fsApi.fullscreenchange, bind(this, function documentFullscreenChange(e) { + this.isFullscreen(document_1[fsApi.fullscreenElement]); + + // If cancelling fullscreen, remove event listener. + if (this.isFullscreen() === false) { + off(document_1, fsApi.fullscreenchange, documentFullscreenChange); + } + /** + * @event Player#fullscreenchange + * @type {EventTarget~Event} + */ + this.trigger('fullscreenchange'); + })); + + this.el_[fsApi.requestFullscreen](); + } else if (this.tech_.supportsFullScreen()) { + // we can't take the video.js controls fullscreen but we can go fullscreen + // with native controls + this.techCall_('enterFullScreen'); + } else { + // fullscreen isn't supported so we'll just stretch the video element to + // fill the viewport + this.enterFullWindow(); + /** + * @event Player#fullscreenchange + * @type {EventTarget~Event} + */ + this.trigger('fullscreenchange'); + } + }; + + /** + * Return the video to its normal size after having been in full screen mode + * + * @fires Player#fullscreenchange + */ + + + Player.prototype.exitFullscreen = function exitFullscreen() { + var fsApi = FullscreenApi; + + this.isFullscreen(false); + + // Check for browser element fullscreen support + if (fsApi.requestFullscreen) { + document_1[fsApi.exitFullscreen](); + } else if (this.tech_.supportsFullScreen()) { + this.techCall_('exitFullScreen'); + } else { + this.exitFullWindow(); + /** + * @event Player#fullscreenchange + * @type {EventTarget~Event} + */ + this.trigger('fullscreenchange'); + } + }; + + /** + * When fullscreen isn't supported we can stretch the + * video container to as wide as the browser will let us. + * + * @fires Player#enterFullWindow + */ + + + Player.prototype.enterFullWindow = function enterFullWindow() { + this.isFullWindow = true; + + // Storing original doc overflow value to return to when fullscreen is off + this.docOrigOverflow = document_1.documentElement.style.overflow; + + // Add listener for esc key to exit fullscreen + on(document_1, 'keydown', bind(this, this.fullWindowOnEscKey)); + + // Hide any scroll bars + document_1.documentElement.style.overflow = 'hidden'; + + // Apply fullscreen styles + addClass(document_1.body, 'vjs-full-window'); + + /** + * @event Player#enterFullWindow + * @type {EventTarget~Event} + */ + this.trigger('enterFullWindow'); + }; + + /** + * Check for call to either exit full window or + * full screen on ESC key + * + * @param {string} event + * Event to check for key press + */ + + + Player.prototype.fullWindowOnEscKey = function fullWindowOnEscKey(event) { + if (event.keyCode === 27) { + if (this.isFullscreen() === true) { + this.exitFullscreen(); + } else { + this.exitFullWindow(); + } + } + }; + + /** + * Exit full window + * + * @fires Player#exitFullWindow + */ + + + Player.prototype.exitFullWindow = function exitFullWindow() { + this.isFullWindow = false; + off(document_1, 'keydown', this.fullWindowOnEscKey); + + // Unhide scroll bars. + document_1.documentElement.style.overflow = this.docOrigOverflow; + + // Remove fullscreen styles + removeClass(document_1.body, 'vjs-full-window'); + + // Resize the box, controller, and poster to original sizes + // this.positionAll(); + /** + * @event Player#exitFullWindow + * @type {EventTarget~Event} + */ + this.trigger('exitFullWindow'); + }; + + /** + * Check whether the player can play a given mimetype + * + * @see https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype + * + * @param {string} type + * The mimetype to check + * + * @return {string} + * 'probably', 'maybe', or '' (empty string) + */ + + + Player.prototype.canPlayType = function canPlayType(type) { + var can = void 0; + + // Loop through each playback technology in the options order + for (var i = 0, j = this.options_.techOrder; i < j.length; i++) { + var techName = j[i]; + var tech = Tech.getTech(techName); + + // Support old behavior of techs being registered as components. + // Remove once that deprecated behavior is removed. + if (!tech) { + tech = Component.getComponent(techName); + } + + // Check if the current tech is defined before continuing + if (!tech) { + log$1.error('The "' + techName + '" tech is undefined. Skipped browser support check for that tech.'); + continue; + } + + // Check if the browser supports this technology + if (tech.isSupported()) { + can = tech.canPlayType(type); + + if (can) { + return can; + } + } + } + + return ''; + }; + + /** + * Select source based on tech-order or source-order + * Uses source-order selection if `options.sourceOrder` is truthy. Otherwise, + * defaults to tech-order selection + * + * @param {Array} sources + * The sources for a media asset + * + * @return {Object|boolean} + * Object of source and tech order or false + */ + + + Player.prototype.selectSource = function selectSource(sources) { + var _this7 = this; + + // Get only the techs specified in `techOrder` that exist and are supported by the + // current platform + var techs = this.options_.techOrder.map(function (techName) { + return [techName, Tech.getTech(techName)]; + }).filter(function (_ref) { + var techName = _ref[0], + tech = _ref[1]; + + // Check if the current tech is defined before continuing + if (tech) { + // Check if the browser supports this technology + return tech.isSupported(); + } + + log$1.error('The "' + techName + '" tech is undefined. Skipped browser support check for that tech.'); + return false; + }); + + // Iterate over each `innerArray` element once per `outerArray` element and execute + // `tester` with both. If `tester` returns a non-falsy value, exit early and return + // that value. + var findFirstPassingTechSourcePair = function findFirstPassingTechSourcePair(outerArray, innerArray, tester) { + var found = void 0; + + outerArray.some(function (outerChoice) { + return innerArray.some(function (innerChoice) { + found = tester(outerChoice, innerChoice); + + if (found) { + return true; + } + }); + }); + + return found; + }; + + var foundSourceAndTech = void 0; + var flip = function flip(fn) { + return function (a, b) { + return fn(b, a); + }; + }; + var finder = function finder(_ref2, source) { + var techName = _ref2[0], + tech = _ref2[1]; + + if (tech.canPlaySource(source, _this7.options_[techName.toLowerCase()])) { + return {source: source, tech: techName}; + } + }; + + // Depending on the truthiness of `options.sourceOrder`, we swap the order of techs and sources + // to select from them based on their priority. + if (this.options_.sourceOrder) { + // Source-first ordering + foundSourceAndTech = findFirstPassingTechSourcePair(sources, techs, flip(finder)); + } else { + // Tech-first ordering + foundSourceAndTech = findFirstPassingTechSourcePair(techs, sources, finder); + } + + return foundSourceAndTech || false; + }; + + /** + * Get or set the video source. + * + * @param {Tech~SourceObject|Tech~SourceObject[]|string} [source] + * A SourceObject, an array of SourceObjects, or a string referencing + * a URL to a media source. It is _highly recommended_ that an object + * or array of objects is used here, so that source selection + * algorithms can take the `type` into account. + * + * If not provided, this method acts as a getter. + * + * @return {string|undefined} + * If the `source` argument is missing, returns the current source + * URL. Otherwise, returns nothing/undefined. + */ + + + Player.prototype.src = function src(source) { + var _this8 = this; + + // getter usage + if (typeof source === 'undefined') { + return this.cache_.src || ''; + } + // filter out invalid sources and turn our source into + // an array of source objects + var sources = filterSource(source); + + // if a source was passed in then it is invalid because + // it was filtered to a zero length Array. So we have to + // show an error + if (!sources.length) { + this.setTimeout(function () { + this.error({code: 4, message: this.localize(this.options_.notSupportedMessage)}); + }, 0); + return; + } + + // intial sources + this.changingSrc_ = true; + + this.cache_.sources = sources; + this.updateSourceCaches_(sources[0]); + + // middlewareSource is the source after it has been changed by middleware + setSource(this, sources[0], function (middlewareSource, mws) { + _this8.middleware_ = mws; + + // since sourceSet is async we have to update the cache again after we select a source since + // the source that is selected could be out of order from the cache update above this callback. + _this8.cache_.sources = sources; + _this8.updateSourceCaches_(middlewareSource); + + var err = _this8.src_(middlewareSource); + + if (err) { + if (sources.length > 1) { + return _this8.src(sources.slice(1)); + } + + _this8.changingSrc_ = false; + + // We need to wrap this in a timeout to give folks a chance to add error event handlers + _this8.setTimeout(function () { + this.error({code: 4, message: this.localize(this.options_.notSupportedMessage)}); + }, 0); + + // we could not find an appropriate tech, but let's still notify the delegate that this is it + // this needs a better comment about why this is needed + _this8.triggerReady(); + + return; + } + + setTech(mws, _this8.tech_); + }); + }; + + /** + * Set the source object on the tech, returns a boolean that indicates whether + * there is a tech that can play the source or not + * + * @param {Tech~SourceObject} source + * The source object to set on the Tech + * + * @return {Boolean} + * - True if there is no Tech to playback this source + * - False otherwise + * + * @private + */ + + + Player.prototype.src_ = function src_(source) { + var _this9 = this; + + var sourceTech = this.selectSource([source]); + + if (!sourceTech) { + return true; + } + + if (!titleCaseEquals(sourceTech.tech, this.techName_)) { + this.changingSrc_ = true; + // load this technology with the chosen source + this.loadTech_(sourceTech.tech, sourceTech.source); + this.tech_.ready(function () { + _this9.changingSrc_ = false; + }); + return false; + } + + // wait until the tech is ready to set the source + // and set it synchronously if possible (#2326) + this.ready(function () { + + // The setSource tech method was added with source handlers + // so older techs won't support it + // We need to check the direct prototype for the case where subclasses + // of the tech do not support source handlers + if (this.tech_.constructor.prototype.hasOwnProperty('setSource')) { + this.techCall_('setSource', source); + } else { + this.techCall_('src', source.src); + } + + this.changingSrc_ = false; + }, true); + + return false; + }; + + /** + * Begin loading the src data. + */ + + + Player.prototype.load = function load() { + this.techCall_('load'); + }; + + /** + * Reset the player. Loads the first tech in the techOrder, + * and calls `reset` on the tech`. + */ + + + Player.prototype.reset = function reset() { + this.loadTech_(this.options_.techOrder[0], null); + this.techCall_('reset'); + }; + + /** + * Returns all of the current source objects. + * + * @return {Tech~SourceObject[]} + * The current source objects + */ + + + Player.prototype.currentSources = function currentSources() { + var source = this.currentSource(); + var sources = []; + + // assume `{}` or `{ src }` + if (Object.keys(source).length !== 0) { + sources.push(source); + } + + return this.cache_.sources || sources; + }; + + /** + * Returns the current source object. + * + * @return {Tech~SourceObject} + * The current source object + */ + + + Player.prototype.currentSource = function currentSource() { + return this.cache_.source || {}; + }; + + /** + * Returns the fully qualified URL of the current source value e.g. http://mysite.com/video.mp4 + * Can be used in conjunction with `currentType` to assist in rebuilding the current source object. + * + * @return {string} + * The current source + */ + + + Player.prototype.currentSrc = function currentSrc() { + return this.currentSource() && this.currentSource().src || ''; + }; + + /** + * Get the current source type e.g. video/mp4 + * This can allow you rebuild the current source object so that you could load the same + * source and tech later + * + * @return {string} + * The source MIME type + */ + + + Player.prototype.currentType = function currentType() { + return this.currentSource() && this.currentSource().type || ''; + }; + + /** + * Get or set the preload attribute + * + * @param {boolean} [value] + * - true means that we should preload + * - false means that we should not preload + * + * @return {string} + * The preload attribute value when getting + */ + + + Player.prototype.preload = function preload(value) { + if (value !== undefined) { + this.techCall_('setPreload', value); + this.options_.preload = value; + return; + } + return this.techGet_('preload'); + }; + + /** + * Get or set the autoplay attribute. + * + * @param {boolean} [value] + * - true means that we should autoplay + * - false means that we should not autoplay + * + * @return {string} + * The current value of autoplay when getting + */ + + + Player.prototype.autoplay = function autoplay(value) { + if (value !== undefined) { + this.techCall_('setAutoplay', value); + this.options_.autoplay = value; + return; + } + return this.techGet_('autoplay', value); + }; + + /** + * Set or unset the playsinline attribute. + * Playsinline tells the browser that non-fullscreen playback is preferred. + * + * @param {boolean} [value] + * - true means that we should try to play inline by default + * - false means that we should use the browser's default playback mode, + * which in most cases is inline. iOS Safari is a notable exception + * and plays fullscreen by default. + * + * @return {string|Player} + * - the current value of playsinline + * - the player when setting + * + * @see [Spec]{@link https://html.spec.whatwg.org/#attr-video-playsinline} + */ + + + Player.prototype.playsinline = function playsinline(value) { + if (value !== undefined) { + this.techCall_('setPlaysinline', value); + this.options_.playsinline = value; + return this; + } + return this.techGet_('playsinline'); + }; + + /** + * Get or set the loop attribute on the video element. + * + * @param {boolean} [value] + * - true means that we should loop the video + * - false means that we should not loop the video + * + * @return {string} + * The current value of loop when getting + */ + + + Player.prototype.loop = function loop(value) { + if (value !== undefined) { + this.techCall_('setLoop', value); + this.options_.loop = value; + return; + } + return this.techGet_('loop'); + }; + + /** + * Get or set the poster image source url + * + * @fires Player#posterchange + * + * @param {string} [src] + * Poster image source URL + * + * @return {string} + * The current value of poster when getting + */ + + + Player.prototype.poster = function poster(src) { + if (src === undefined) { + return this.poster_; + } + + // The correct way to remove a poster is to set as an empty string + // other falsey values will throw errors + if (!src) { + src = ''; + } + + if (src === this.poster_) { + return; + } + + // update the internal poster variable + this.poster_ = src; + + // update the tech's poster + this.techCall_('setPoster', src); + + this.isPosterFromTech_ = false; + + // alert components that the poster has been set + /** + * This event fires when the poster image is changed on the player. + * + * @event Player#posterchange + * @type {EventTarget~Event} + */ + this.trigger('posterchange'); + }; + + /** + * Some techs (e.g. YouTube) can provide a poster source in an + * asynchronous way. We want the poster component to use this + * poster source so that it covers up the tech's controls. + * (YouTube's play button). However we only want to use this + * source if the player user hasn't set a poster through + * the normal APIs. + * + * @fires Player#posterchange + * @listens Tech#posterchange + * @private + */ + + + Player.prototype.handleTechPosterChange_ = function handleTechPosterChange_() { + if ((!this.poster_ || this.options_.techCanOverridePoster) && this.tech_ && this.tech_.poster) { + var newPoster = this.tech_.poster() || ''; + + if (newPoster !== this.poster_) { + this.poster_ = newPoster; + this.isPosterFromTech_ = true; + + // Let components know the poster has changed + this.trigger('posterchange'); + } + } + }; + + /** + * Get or set whether or not the controls are showing. + * + * @fires Player#controlsenabled + * + * @param {boolean} [bool] + * - true to turn controls on + * - false to turn controls off + * + * @return {boolean} + * The current value of controls when getting + */ + + + Player.prototype.controls = function controls(bool) { + if (bool === undefined) { + return !!this.controls_; + } + + bool = !!bool; + + // Don't trigger a change event unless it actually changed + if (this.controls_ === bool) { + return; + } + + this.controls_ = bool; + + if (this.usingNativeControls()) { + this.techCall_('setControls', bool); + } + + if (this.controls_) { + this.removeClass('vjs-controls-disabled'); + this.addClass('vjs-controls-enabled'); + /** + * @event Player#controlsenabled + * @type {EventTarget~Event} + */ + this.trigger('controlsenabled'); + if (!this.usingNativeControls()) { + this.addTechControlsListeners_(); + } + } else { + this.removeClass('vjs-controls-enabled'); + this.addClass('vjs-controls-disabled'); + /** + * @event Player#controlsdisabled + * @type {EventTarget~Event} + */ + this.trigger('controlsdisabled'); + if (!this.usingNativeControls()) { + this.removeTechControlsListeners_(); + } + } + }; + + /** + * Toggle native controls on/off. Native controls are the controls built into + * devices (e.g. default iPhone controls), Flash, or other techs + * (e.g. Vimeo Controls) + * **This should only be set by the current tech, because only the tech knows + * if it can support native controls** + * + * @fires Player#usingnativecontrols + * @fires Player#usingcustomcontrols + * + * @param {boolean} [bool] + * - true to turn native controls on + * - false to turn native controls off + * + * @return {boolean} + * The current value of native controls when getting + */ + + + Player.prototype.usingNativeControls = function usingNativeControls(bool) { + if (bool === undefined) { + return !!this.usingNativeControls_; + } + + bool = !!bool; + + // Don't trigger a change event unless it actually changed + if (this.usingNativeControls_ === bool) { + return; + } + + this.usingNativeControls_ = bool; + + if (this.usingNativeControls_) { + this.addClass('vjs-using-native-controls'); + + /** + * player is using the native device controls + * + * @event Player#usingnativecontrols + * @type {EventTarget~Event} + */ + this.trigger('usingnativecontrols'); + } else { + this.removeClass('vjs-using-native-controls'); + + /** + * player is using the custom HTML controls + * + * @event Player#usingcustomcontrols + * @type {EventTarget~Event} + */ + this.trigger('usingcustomcontrols'); + } + }; + + /** + * Set or get the current MediaError + * + * @fires Player#error + * + * @param {MediaError|string|number} [err] + * A MediaError or a string/number to be turned + * into a MediaError + * + * @return {MediaError|null} + * The current MediaError when getting (or null) + */ + + + Player.prototype.error = function error(err) { + if (err === undefined) { + return this.error_ || null; + } + + // restoring to default + if (err === null) { + this.error_ = err; + this.removeClass('vjs-error'); + if (this.errorDisplay) { + this.errorDisplay.close(); + } + return; + } + + this.error_ = new MediaError(err); + + // add the vjs-error classname to the player + this.addClass('vjs-error'); + + // log the name of the error type and any message + // IE11 logs "[object object]" and required you to expand message to see error object + log$1.error('(CODE:' + this.error_.code + ' ' + MediaError.errorTypes[this.error_.code] + ')', this.error_.message, this.error_); + + /** + * @event Player#error + * @type {EventTarget~Event} + */ + this.trigger('error'); + + return; + }; + + /** + * Report user activity + * + * @param {Object} event + * Event object + */ + + + Player.prototype.reportUserActivity = function reportUserActivity(event) { + this.userActivity_ = true; + }; + + /** + * Get/set if user is active + * + * @fires Player#useractive + * @fires Player#userinactive + * + * @param {boolean} [bool] + * - true if the user is active + * - false if the user is inactive + * + * @return {boolean} + * The current value of userActive when getting + */ + + + Player.prototype.userActive = function userActive(bool) { + if (bool === undefined) { + return this.userActive_; + } + + bool = !!bool; + + if (bool === this.userActive_) { + return; + } + + this.userActive_ = bool; + + if (this.userActive_) { + this.userActivity_ = true; + this.removeClass('vjs-user-inactive'); + this.addClass('vjs-user-active'); + /** + * @event Player#useractive + * @type {EventTarget~Event} + */ + this.trigger('useractive'); + return; + } + + // Chrome/Safari/IE have bugs where when you change the cursor it can + // trigger a mousemove event. This causes an issue when you're hiding + // the cursor when the user is inactive, and a mousemove signals user + // activity. Making it impossible to go into inactive mode. Specifically + // this happens in fullscreen when we really need to hide the cursor. + // + // When this gets resolved in ALL browsers it can be removed + // https://code.google.com/p/chromium/issues/detail?id=103041 + if (this.tech_) { + this.tech_.one('mousemove', function (e) { + e.stopPropagation(); + e.preventDefault(); + }); + } + + this.userActivity_ = false; + this.removeClass('vjs-user-active'); + this.addClass('vjs-user-inactive'); + /** + * @event Player#userinactive + * @type {EventTarget~Event} + */ + this.trigger('userinactive'); + }; + + /** + * Listen for user activity based on timeout value + * + * @private + */ + + + Player.prototype.listenForUserActivity_ = function listenForUserActivity_() { + var mouseInProgress = void 0; + var lastMoveX = void 0; + var lastMoveY = void 0; + var handleActivity = bind(this, this.reportUserActivity); + + var handleMouseMove = function handleMouseMove(e) { + // #1068 - Prevent mousemove spamming + // Chrome Bug: https://code.google.com/p/chromium/issues/detail?id=366970 + if (e.screenX !== lastMoveX || e.screenY !== lastMoveY) { + lastMoveX = e.screenX; + lastMoveY = e.screenY; + handleActivity(); + } + }; + + var handleMouseDown = function handleMouseDown() { + handleActivity(); + // For as long as the they are touching the device or have their mouse down, + // we consider them active even if they're not moving their finger or mouse. + // So we want to continue to update that they are active + this.clearInterval(mouseInProgress); + // Setting userActivity=true now and setting the interval to the same time + // as the activityCheck interval (250) should ensure we never miss the + // next activityCheck + mouseInProgress = this.setInterval(handleActivity, 250); + }; + + var handleMouseUp = function handleMouseUp(event) { + handleActivity(); + // Stop the interval that maintains activity if the mouse/touch is down + this.clearInterval(mouseInProgress); + }; + + // Any mouse movement will be considered user activity + this.on('mousedown', handleMouseDown); + this.on('mousemove', handleMouseMove); + this.on('mouseup', handleMouseUp); + + // Listen for keyboard navigation + // Shouldn't need to use inProgress interval because of key repeat + this.on('keydown', handleActivity); + this.on('keyup', handleActivity); + + // Run an interval every 250 milliseconds instead of stuffing everything into + // the mousemove/touchmove function itself, to prevent performance degradation. + // `this.reportUserActivity` simply sets this.userActivity_ to true, which + // then gets picked up by this loop + // http://ejohn.org/blog/learning-from-twitter/ + var inactivityTimeout = void 0; + + this.setInterval(function () { + // Check to see if mouse/touch activity has happened + if (!this.userActivity_) { + return; + } + + // Reset the activity tracker + this.userActivity_ = false; + + // If the user state was inactive, set the state to active + this.userActive(true); + + // Clear any existing inactivity timeout to start the timer over + this.clearTimeout(inactivityTimeout); + + var timeout = this.options_.inactivityTimeout; + + if (timeout <= 0) { + return; + } + + // In <timeout> milliseconds, if no more activity has occurred the + // user will be considered inactive + inactivityTimeout = this.setTimeout(function () { + // Protect against the case where the inactivityTimeout can trigger just + // before the next user activity is picked up by the activity check loop + // causing a flicker + if (!this.userActivity_) { + this.userActive(false); + } + }, timeout); + }, 250); + }; + + /** + * Gets or sets the current playback rate. A playback rate of + * 1.0 represents normal speed and 0.5 would indicate half-speed + * playback, for instance. + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate + * + * @param {number} [rate] + * New playback rate to set. + * + * @return {number} + * The current playback rate when getting or 1.0 + */ + + + Player.prototype.playbackRate = function playbackRate(rate) { + if (rate !== undefined) { + // NOTE: this.cache_.lastPlaybackRate is set from the tech handler + // that is registered above + this.techCall_('setPlaybackRate', rate); + return; + } + + if (this.tech_ && this.tech_.featuresPlaybackRate) { + return this.cache_.lastPlaybackRate || this.techGet_('playbackRate'); + } + return 1.0; + }; + + /** + * Gets or sets the current default playback rate. A default playback rate of + * 1.0 represents normal speed and 0.5 would indicate half-speed playback, for instance. + * defaultPlaybackRate will only represent what the initial playbackRate of a video was, not + * not the current playbackRate. + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-defaultplaybackrate + * + * @param {number} [rate] + * New default playback rate to set. + * + * @return {number|Player} + * - The default playback rate when getting or 1.0 + * - the player when setting + */ + + + Player.prototype.defaultPlaybackRate = function defaultPlaybackRate(rate) { + if (rate !== undefined) { + return this.techCall_('setDefaultPlaybackRate', rate); + } + + if (this.tech_ && this.tech_.featuresPlaybackRate) { + return this.techGet_('defaultPlaybackRate'); + } + return 1.0; + }; + + /** + * Gets or sets the audio flag + * + * @param {boolean} bool + * - true signals that this is an audio player + * - false signals that this is not an audio player + * + * @return {boolean} + * The current value of isAudio when getting + */ + + + Player.prototype.isAudio = function isAudio(bool) { + if (bool !== undefined) { + this.isAudio_ = !!bool; + return; + } + + return !!this.isAudio_; + }; + + /** + * A helper method for adding a {@link TextTrack} to our + * {@link TextTrackList}. + * + * In addition to the W3C settings we allow adding additional info through options. + * + * @see http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack + * + * @param {string} [kind] + * the kind of TextTrack you are adding + * + * @param {string} [label] + * the label to give the TextTrack label + * + * @param {string} [language] + * the language to set on the TextTrack + * + * @return {TextTrack|undefined} + * the TextTrack that was added or undefined + * if there is no tech + */ + + + Player.prototype.addTextTrack = function addTextTrack(kind, label, language) { + if (this.tech_) { + return this.tech_.addTextTrack(kind, label, language); + } + }; + + /** + * Create a remote {@link TextTrack} and an {@link HTMLTrackElement}. It will + * automatically removed from the video element whenever the source changes, unless + * manualCleanup is set to false. + * + * @param {Object} options + * Options to pass to {@link HTMLTrackElement} during creation. See + * {@link HTMLTrackElement} for object properties that you should use. + * + * @param {boolean} [manualCleanup=true] if set to false, the TextTrack will be + * + * @return {HtmlTrackElement} + * the HTMLTrackElement that was created and added + * to the HtmlTrackElementList and the remote + * TextTrackList + * + * @deprecated The default value of the "manualCleanup" parameter will default + * to "false" in upcoming versions of Video.js + */ + + + Player.prototype.addRemoteTextTrack = function addRemoteTextTrack(options, manualCleanup) { + if (this.tech_) { + return this.tech_.addRemoteTextTrack(options, manualCleanup); + } + }; + + /** + * Remove a remote {@link TextTrack} from the respective + * {@link TextTrackList} and {@link HtmlTrackElementList}. + * + * @param {Object} track + * Remote {@link TextTrack} to remove + * + * @return {undefined} + * does not return anything + */ + + + Player.prototype.removeRemoteTextTrack = function removeRemoteTextTrack() { + var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref3$track = _ref3.track, + track = _ref3$track === undefined ? arguments[0] : _ref3$track; + + // destructure the input into an object with a track argument, defaulting to arguments[0] + // default the whole argument to an empty object if nothing was passed in + + if (this.tech_) { + return this.tech_.removeRemoteTextTrack(track); + } + }; + + /** + * Gets available media playback quality metrics as specified by the W3C's Media + * Playback Quality API. + * + * @see [Spec]{@link https://wicg.github.io/media-playback-quality} + * + * @return {Object|undefined} + * An object with supported media playback quality metrics or undefined if there + * is no tech or the tech does not support it. + */ + + + Player.prototype.getVideoPlaybackQuality = function getVideoPlaybackQuality() { + return this.techGet_('getVideoPlaybackQuality'); + }; + + /** + * Get video width + * + * @return {number} + * current video width + */ + + + Player.prototype.videoWidth = function videoWidth() { + return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0; + }; + + /** + * Get video height + * + * @return {number} + * current video height + */ + + + Player.prototype.videoHeight = function videoHeight() { + return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0; + }; + + /** + * The player's language code + * NOTE: The language should be set in the player options if you want the + * the controls to be built with a specific language. Changing the language + * later will not update controls text. + * + * @param {string} [code] + * the language code to set the player to + * + * @return {string} + * The current language code when getting + */ + + + Player.prototype.language = function language(code) { + if (code === undefined) { + return this.language_; + } + + this.language_ = String(code).toLowerCase(); + }; + + /** + * Get the player's language dictionary + * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time + * Languages specified directly in the player options have precedence + * + * @return {Array} + * An array of of supported languages + */ + + + Player.prototype.languages = function languages() { + return mergeOptions(Player.prototype.options_.languages, this.languages_); + }; + + /** + * returns a JavaScript object reperesenting the current track + * information. **DOES not return it as JSON** + * + * @return {Object} + * Object representing the current of track info + */ + + + Player.prototype.toJSON = function toJSON() { + var options = mergeOptions(this.options_); + var tracks = options.tracks; + + options.tracks = []; + + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + + // deep merge tracks and null out player so no circular references + track = mergeOptions(track); + track.player = undefined; + options.tracks[i] = track; + } + + return options; + }; + + /** + * Creates a simple modal dialog (an instance of the {@link ModalDialog} + * component) that immediately overlays the player with arbitrary + * content and removes itself when closed. + * + * @param {string|Function|Element|Array|null} content + * Same as {@link ModalDialog#content}'s param of the same name. + * The most straight-forward usage is to provide a string or DOM + * element. + * + * @param {Object} [options] + * Extra options which will be passed on to the {@link ModalDialog}. + * + * @return {ModalDialog} + * the {@link ModalDialog} that was created + */ + + + Player.prototype.createModal = function createModal(content, options) { + var _this10 = this; + + options = options || {}; + options.content = content || ''; + + var modal = new ModalDialog(this, options); + + this.addChild(modal); + modal.on('dispose', function () { + _this10.removeChild(modal); + }); + + modal.open(); + return modal; + }; + + /** + * Gets tag settings + * + * @param {Element} tag + * The player tag + * + * @return {Object} + * An object containing all of the settings + * for a player tag + */ + + + Player.getTagSettings = function getTagSettings(tag) { + var baseOptions = { + sources: [], + tracks: [] + }; + + var tagOptions = getAttributes(tag); + var dataSetup = tagOptions['data-setup']; + + if (hasClass(tag, 'vjs-fluid')) { + tagOptions.fluid = true; + } + + // Check if data-setup attr exists. + if (dataSetup !== null) { + // Parse options JSON + // If empty string, make it a parsable json object. + var _safeParseTuple = tuple(dataSetup || '{}'), + err = _safeParseTuple[0], + data = _safeParseTuple[1]; + + if (err) { + log$1.error(err); + } + assign(tagOptions, data); + } + + assign(baseOptions, tagOptions); + + // Get tag children settings + if (tag.hasChildNodes()) { + var children = tag.childNodes; + + for (var i = 0, j = children.length; i < j; i++) { + var child = children[i]; + // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/ + var childName = child.nodeName.toLowerCase(); + + if (childName === 'source') { + baseOptions.sources.push(getAttributes(child)); + } else if (childName === 'track') { + baseOptions.tracks.push(getAttributes(child)); + } + } + } + + return baseOptions; + }; + + /** + * Determine whether or not flexbox is supported + * + * @return {boolean} + * - true if flexbox is supported + * - false if flexbox is not supported + */ + + + Player.prototype.flexNotSupported_ = function flexNotSupported_() { + var elem = document_1.createElement('i'); + + // Note: We don't actually use flexBasis (or flexOrder), but it's one of the more + // common flex features that we can rely on when checking for flex support. + return !('flexBasis' in elem.style || 'webkitFlexBasis' in elem.style || 'mozFlexBasis' in elem.style || 'msFlexBasis' in elem.style || + // IE10-specific (2012 flex spec), available for completeness + 'msFlexOrder' in elem.style); + }; + + return Player; + }(Component); + + /** + * Get the {@link VideoTrackList} + * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist + * + * @return {VideoTrackList} + * the current video track list + * + * @method Player.prototype.videoTracks + */ + + /** + * Get the {@link AudioTrackList} + * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist + * + * @return {AudioTrackList} + * the current audio track list + * + * @method Player.prototype.audioTracks + */ + + /** + * Get the {@link TextTrackList} + * + * @link http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks + * + * @return {TextTrackList} + * the current text track list + * + * @method Player.prototype.textTracks + */ + + /** + * Get the remote {@link TextTrackList} + * + * @return {TextTrackList} + * The current remote text track list + * + * @method Player.prototype.remoteTextTracks + */ + + /** + * Get the remote {@link HtmlTrackElementList} tracks. + * + * @return {HtmlTrackElementList} + * The current remote text track element list + * + * @method Player.prototype.remoteTextTrackEls + */ + + ALL.names.forEach(function (name$$1) { + var props = ALL[name$$1]; + + Player.prototype[props.getterName] = function () { + if (this.tech_) { + return this.tech_[props.getterName](); + } + + // if we have not yet loadTech_, we create {video,audio,text}Tracks_ + // these will be passed to the tech during loading + this[props.privateName] = this[props.privateName] || new props.ListClass(); + return this[props.privateName]; + }; + }); + + /** + * Global player list + * + * @type {Object} + */ + Player.players = {}; + + var navigator = window_1.navigator; + + /* + * Player instance options, surfaced using options + * options = Player.prototype.options_ + * Make changes in options, not here. + * + * @type {Object} + * @private + */ + Player.prototype.options_ = { + // Default order of fallback technology + techOrder: Tech.defaultTechOrder_, + + html5: {}, + flash: {}, + + // default inactivity timeout + inactivityTimeout: 2000, + + // default playback rates + playbackRates: [], + // Add playback rate selection by adding rates + // 'playbackRates': [0.5, 1, 1.5, 2], + + // Included control sets + children: ['mediaLoader', 'posterImage', 'textTrackDisplay', 'loadingSpinner', 'bigPlayButton', 'controlBar', 'errorDisplay', 'textTrackSettings', 'resizeManager'], + + language: navigator && (navigator.languages && navigator.languages[0] || navigator.userLanguage || navigator.language) || 'en', + + // locales and their language translations + languages: {}, + + // Default message to show when a video cannot be played. + notSupportedMessage: 'No compatible source was found for this media.' + }; + + [ + /** + * Returns whether or not the player is in the "ended" state. + * + * @return {Boolean} True if the player is in the ended state, false if not. + * @method Player#ended + */ + 'ended', + /** + * Returns whether or not the player is in the "seeking" state. + * + * @return {Boolean} True if the player is in the seeking state, false if not. + * @method Player#seeking + */ + 'seeking', + /** + * Returns the TimeRanges of the media that are currently available + * for seeking to. + * + * @return {TimeRanges} the seekable intervals of the media timeline + * @method Player#seekable + */ + 'seekable', + /** + * Returns the current state of network activity for the element, from + * the codes in the list below. + * - NETWORK_EMPTY (numeric value 0) + * The element has not yet been initialised. All attributes are in + * their initial states. + * - NETWORK_IDLE (numeric value 1) + * The element's resource selection algorithm is active and has + * selected a resource, but it is not actually using the network at + * this time. + * - NETWORK_LOADING (numeric value 2) + * The user agent is actively trying to download data. + * - NETWORK_NO_SOURCE (numeric value 3) + * The element's resource selection algorithm is active, but it has + * not yet found a resource to use. + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states + * @return {number} the current network activity state + * @method Player#networkState + */ + 'networkState', + /** + * Returns a value that expresses the current state of the element + * with respect to rendering the current playback position, from the + * codes in the list below. + * - HAVE_NOTHING (numeric value 0) + * No information regarding the media resource is available. + * - HAVE_METADATA (numeric value 1) + * Enough of the resource has been obtained that the duration of the + * resource is available. + * - HAVE_CURRENT_DATA (numeric value 2) + * Data for the immediate current playback position is available. + * - HAVE_FUTURE_DATA (numeric value 3) + * Data for the immediate current playback position is available, as + * well as enough data for the user agent to advance the current + * playback position in the direction of playback. + * - HAVE_ENOUGH_DATA (numeric value 4) + * The user agent estimates that enough data is available for + * playback to proceed uninterrupted. + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate + * @return {number} the current playback rendering state + * @method Player#readyState + */ + 'readyState'].forEach(function (fn) { + Player.prototype[fn] = function () { + return this.techGet_(fn); + }; + }); + + TECH_EVENTS_RETRIGGER.forEach(function (event) { + Player.prototype['handleTech' + toTitleCase(event) + '_'] = function () { + return this.trigger(event); + }; + }); + + /** + * Fired when the player has initial duration and dimension information + * + * @event Player#loadedmetadata + * @type {EventTarget~Event} + */ + + /** + * Fired when the player has downloaded data at the current playback position + * + * @event Player#loadeddata + * @type {EventTarget~Event} + */ + + /** + * Fired when the current playback position has changed * + * During playback this is fired every 15-250 milliseconds, depending on the + * playback technology in use. + * + * @event Player#timeupdate + * @type {EventTarget~Event} + */ + + /** + * Fired when the volume changes + * + * @event Player#volumechange + * @type {EventTarget~Event} + */ + + /** + * Reports whether or not a player has a plugin available. + * + * This does not report whether or not the plugin has ever been initialized + * on this player. For that, [usingPlugin]{@link Player#usingPlugin}. + * + * @method Player#hasPlugin + * @param {string} name + * The name of a plugin. + * + * @return {boolean} + * Whether or not this player has the requested plugin available. + */ + + /** + * Reports whether or not a player is using a plugin by name. + * + * For basic plugins, this only reports whether the plugin has _ever_ been + * initialized on this player. + * + * @method Player#usingPlugin + * @param {string} name + * The name of a plugin. + * + * @return {boolean} + * Whether or not this player is using the requested plugin. + */ + + Component.registerComponent('Player', Player); + + /** + * @file plugin.js + */ + + /** + * The base plugin name. + * + * @private + * @constant + * @type {string} + */ + var BASE_PLUGIN_NAME = 'plugin'; + + /** + * The key on which a player's active plugins cache is stored. + * + * @private + * @constant + * @type {string} + */ + var PLUGIN_CACHE_KEY = 'activePlugins_'; + + /** + * Stores registered plugins in a private space. + * + * @private + * @type {Object} + */ + var pluginStorage = {}; + + /** + * Reports whether or not a plugin has been registered. + * + * @private + * @param {string} name + * The name of a plugin. + * + * @returns {boolean} + * Whether or not the plugin has been registered. + */ + var pluginExists = function pluginExists(name) { + return pluginStorage.hasOwnProperty(name); + }; + + /** + * Get a single registered plugin by name. + * + * @private + * @param {string} name + * The name of a plugin. + * + * @returns {Function|undefined} + * The plugin (or undefined). + */ + var getPlugin = function getPlugin(name) { + return pluginExists(name) ? pluginStorage[name] : undefined; + }; + + /** + * Marks a plugin as "active" on a player. + * + * Also, ensures that the player has an object for tracking active plugins. + * + * @private + * @param {Player} player + * A Video.js player instance. + * + * @param {string} name + * The name of a plugin. + */ + var markPluginAsActive = function markPluginAsActive(player, name) { + player[PLUGIN_CACHE_KEY] = player[PLUGIN_CACHE_KEY] || {}; + player[PLUGIN_CACHE_KEY][name] = true; + }; + + /** + * Triggers a pair of plugin setup events. + * + * @private + * @param {Player} player + * A Video.js player instance. + * + * @param {Plugin~PluginEventHash} hash + * A plugin event hash. + * + * @param {Boolean} [before] + * If true, prefixes the event name with "before". In other words, + * use this to trigger "beforepluginsetup" instead of "pluginsetup". + */ + var triggerSetupEvent = function triggerSetupEvent(player, hash, before) { + var eventName = (before ? 'before' : '') + 'pluginsetup'; + + player.trigger(eventName, hash); + player.trigger(eventName + ':' + hash.name, hash); + }; + + /** + * Takes a basic plugin function and returns a wrapper function which marks + * on the player that the plugin has been activated. + * + * @private + * @param {string} name + * The name of the plugin. + * + * @param {Function} plugin + * The basic plugin. + * + * @returns {Function} + * A wrapper function for the given plugin. + */ + var createBasicPlugin = function createBasicPlugin(name, plugin) { + var basicPluginWrapper = function basicPluginWrapper() { + + // We trigger the "beforepluginsetup" and "pluginsetup" events on the player + // regardless, but we want the hash to be consistent with the hash provided + // for advanced plugins. + // + // The only potentially counter-intuitive thing here is the `instance` in + // the "pluginsetup" event is the value returned by the `plugin` function. + triggerSetupEvent(this, {name: name, plugin: plugin, instance: null}, true); + + var instance = plugin.apply(this, arguments); + + markPluginAsActive(this, name); + triggerSetupEvent(this, {name: name, plugin: plugin, instance: instance}); + + return instance; + }; + + Object.keys(plugin).forEach(function (prop) { + basicPluginWrapper[prop] = plugin[prop]; + }); + + return basicPluginWrapper; + }; + + /** + * Takes a plugin sub-class and returns a factory function for generating + * instances of it. + * + * This factory function will replace itself with an instance of the requested + * sub-class of Plugin. + * + * @private + * @param {string} name + * The name of the plugin. + * + * @param {Plugin} PluginSubClass + * The advanced plugin. + * + * @returns {Function} + */ + var createPluginFactory = function createPluginFactory(name, PluginSubClass) { + + // Add a `name` property to the plugin prototype so that each plugin can + // refer to itself by name. + PluginSubClass.prototype.name = name; + + return function () { + triggerSetupEvent(this, {name: name, plugin: PluginSubClass, instance: null}, true); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var instance = new (Function.prototype.bind.apply(PluginSubClass, [null].concat([this].concat(args))))(); + + // The plugin is replaced by a function that returns the current instance. + this[name] = function () { + return instance; + }; + + triggerSetupEvent(this, instance.getEventHash()); + + return instance; + }; + }; + + /** + * Parent class for all advanced plugins. + * + * @mixes module:evented~EventedMixin + * @mixes module:stateful~StatefulMixin + * @fires Player#beforepluginsetup + * @fires Player#beforepluginsetup:$name + * @fires Player#pluginsetup + * @fires Player#pluginsetup:$name + * @listens Player#dispose + * @throws {Error} + * If attempting to instantiate the base {@link Plugin} class + * directly instead of via a sub-class. + */ + + var Plugin = function () { + + /** + * Creates an instance of this class. + * + * Sub-classes should call `super` to ensure plugins are properly initialized. + * + * @param {Player} player + * A Video.js player instance. + */ + function Plugin(player) { + classCallCheck(this, Plugin); + + if (this.constructor === Plugin) { + throw new Error('Plugin must be sub-classed; not directly instantiated.'); + } + + this.player = player; + + // Make this object evented, but remove the added `trigger` method so we + // use the prototype version instead. + evented(this); + delete this.trigger; + + stateful(this, this.constructor.defaultState); + markPluginAsActive(player, this.name); + + // Auto-bind the dispose method so we can use it as a listener and unbind + // it later easily. + this.dispose = bind(this, this.dispose); + + // If the player is disposed, dispose the plugin. + player.on('dispose', this.dispose); + } + + /** + * Get the version of the plugin that was set on <pluginName>.VERSION + */ + + + Plugin.prototype.version = function version() { + return this.constructor.VERSION; + }; + + /** + * Each event triggered by plugins includes a hash of additional data with + * conventional properties. + * + * This returns that object or mutates an existing hash. + * + * @param {Object} [hash={}] + * An object to be used as event an event hash. + * + * @returns {Plugin~PluginEventHash} + * An event hash object with provided properties mixed-in. + */ + + + Plugin.prototype.getEventHash = function getEventHash() { + var hash = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + hash.name = this.name; + hash.plugin = this.constructor; + hash.instance = this; + return hash; + }; + + /** + * Triggers an event on the plugin object and overrides + * {@link module:evented~EventedMixin.trigger|EventedMixin.trigger}. + * + * @param {string|Object} event + * An event type or an object with a type property. + * + * @param {Object} [hash={}] + * Additional data hash to merge with a + * {@link Plugin~PluginEventHash|PluginEventHash}. + * + * @returns {boolean} + * Whether or not default was prevented. + */ + + + Plugin.prototype.trigger = function trigger$$1(event) { + var hash = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + return trigger(this.eventBusEl_, event, this.getEventHash(hash)); + }; + + /** + * Handles "statechanged" events on the plugin. No-op by default, override by + * subclassing. + * + * @abstract + * @param {Event} e + * An event object provided by a "statechanged" event. + * + * @param {Object} e.changes + * An object describing changes that occurred with the "statechanged" + * event. + */ + + + Plugin.prototype.handleStateChanged = function handleStateChanged(e) { + }; + + /** + * Disposes a plugin. + * + * Subclasses can override this if they want, but for the sake of safety, + * it's probably best to subscribe the "dispose" event. + * + * @fires Plugin#dispose + */ + + + Plugin.prototype.dispose = function dispose() { + var name = this.name, + player = this.player; + + /** + * Signals that a advanced plugin is about to be disposed. + * + * @event Plugin#dispose + * @type {EventTarget~Event} + */ + + this.trigger('dispose'); + this.off(); + player.off('dispose', this.dispose); + + // Eliminate any possible sources of leaking memory by clearing up + // references between the player and the plugin instance and nulling out + // the plugin's state and replacing methods with a function that throws. + player[PLUGIN_CACHE_KEY][name] = false; + this.player = this.state = null; + + // Finally, replace the plugin name on the player with a new factory + // function, so that the plugin is ready to be set up again. + player[name] = createPluginFactory(name, pluginStorage[name]); + }; + + /** + * Determines if a plugin is a basic plugin (i.e. not a sub-class of `Plugin`). + * + * @param {string|Function} plugin + * If a string, matches the name of a plugin. If a function, will be + * tested directly. + * + * @returns {boolean} + * Whether or not a plugin is a basic plugin. + */ + + + Plugin.isBasic = function isBasic(plugin) { + var p = typeof plugin === 'string' ? getPlugin(plugin) : plugin; + + return typeof p === 'function' && !Plugin.prototype.isPrototypeOf(p.prototype); + }; + + /** + * Register a Video.js plugin. + * + * @param {string} name + * The name of the plugin to be registered. Must be a string and + * must not match an existing plugin or a method on the `Player` + * prototype. + * + * @param {Function} plugin + * A sub-class of `Plugin` or a function for basic plugins. + * + * @returns {Function} + * For advanced plugins, a factory function for that plugin. For + * basic plugins, a wrapper function that initializes the plugin. + */ + + + Plugin.registerPlugin = function registerPlugin(name, plugin) { + if (typeof name !== 'string') { + throw new Error('Illegal plugin name, "' + name + '", must be a string, was ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name)) + '.'); + } + + if (pluginExists(name)) { + log$1.warn('A plugin named "' + name + '" already exists. You may want to avoid re-registering plugins!'); + } else if (Player.prototype.hasOwnProperty(name)) { + throw new Error('Illegal plugin name, "' + name + '", cannot share a name with an existing player method!'); + } + + if (typeof plugin !== 'function') { + throw new Error('Illegal plugin for "' + name + '", must be a function, was ' + (typeof plugin === 'undefined' ? 'undefined' : _typeof(plugin)) + '.'); + } + + pluginStorage[name] = plugin; + + // Add a player prototype method for all sub-classed plugins (but not for + // the base Plugin class). + if (name !== BASE_PLUGIN_NAME) { + if (Plugin.isBasic(plugin)) { + Player.prototype[name] = createBasicPlugin(name, plugin); + } else { + Player.prototype[name] = createPluginFactory(name, plugin); + } + } + + return plugin; + }; + + /** + * De-register a Video.js plugin. + * + * @param {string} name + * The name of the plugin to be deregistered. + */ + + + Plugin.deregisterPlugin = function deregisterPlugin(name) { + if (name === BASE_PLUGIN_NAME) { + throw new Error('Cannot de-register base plugin.'); + } + if (pluginExists(name)) { + delete pluginStorage[name]; + delete Player.prototype[name]; + } + }; + + /** + * Gets an object containing multiple Video.js plugins. + * + * @param {Array} [names] + * If provided, should be an array of plugin names. Defaults to _all_ + * plugin names. + * + * @returns {Object|undefined} + * An object containing plugin(s) associated with their name(s) or + * `undefined` if no matching plugins exist). + */ + + + Plugin.getPlugins = function getPlugins() { + var names = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Object.keys(pluginStorage); + + var result = void 0; + + names.forEach(function (name) { + var plugin = getPlugin(name); + + if (plugin) { + result = result || {}; + result[name] = plugin; + } + }); + + return result; + }; + + /** + * Gets a plugin's version, if available + * + * @param {string} name + * The name of a plugin. + * + * @returns {string} + * The plugin's version or an empty string. + */ + + + Plugin.getPluginVersion = function getPluginVersion(name) { + var plugin = getPlugin(name); + + return plugin && plugin.VERSION || ''; + }; + + return Plugin; + }(); + + /** + * Gets a plugin by name if it exists. + * + * @static + * @method getPlugin + * @memberOf Plugin + * @param {string} name + * The name of a plugin. + * + * @returns {Function|undefined} + * The plugin (or `undefined`). + */ + + + Plugin.getPlugin = getPlugin; + + /** + * The name of the base plugin class as it is registered. + * + * @type {string} + */ + Plugin.BASE_PLUGIN_NAME = BASE_PLUGIN_NAME; + + Plugin.registerPlugin(BASE_PLUGIN_NAME, Plugin); + + /** + * Documented in player.js + * + * @ignore + */ + Player.prototype.usingPlugin = function (name) { + return !!this[PLUGIN_CACHE_KEY] && this[PLUGIN_CACHE_KEY][name] === true; + }; + + /** + * Documented in player.js + * + * @ignore + */ + Player.prototype.hasPlugin = function (name) { + return !!pluginExists(name); + }; + + /** + * @file extend.js + * @module extend + */ + + /** + * A combination of node inherits and babel's inherits (after transpile). + * Both work the same but node adds `super_` to the subClass + * and Bable adds the superClass as __proto__. Both seem useful. + * + * @param {Object} subClass + * The class to inherit to + * + * @param {Object} superClass + * The class to inherit from + * + * @private + */ + var _inherits = function _inherits(subClass, superClass) { + if (typeof superClass !== 'function' && superClass !== null) { + throw new TypeError('Super expression must either be null or a function, not ' + (typeof superClass === 'undefined' ? 'undefined' : _typeof(superClass))); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + + if (superClass) { + // node + subClass.super_ = superClass; + } + }; + + /** + * Function for subclassing using the same inheritance that + * videojs uses internally + * + * @static + * @const + * + * @param {Object} superClass + * The class to inherit from + * + * @param {Object} [subClassMethods={}] + * The class to inherit to + * + * @return {Object} + * The new object with subClassMethods that inherited superClass. + */ + var extendFn = function extendFn(superClass) { + var subClassMethods = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var subClass = function subClass() { + superClass.apply(this, arguments); + }; + + var methods = {}; + + if ((typeof subClassMethods === 'undefined' ? 'undefined' : _typeof(subClassMethods)) === 'object') { + if (subClassMethods.constructor !== Object.prototype.constructor) { + subClass = subClassMethods.constructor; + } + methods = subClassMethods; + } else if (typeof subClassMethods === 'function') { + subClass = subClassMethods; + } + + _inherits(subClass, superClass); + + // Extend subObj's prototype with functions and other properties from props + for (var name in methods) { + if (methods.hasOwnProperty(name)) { + subClass.prototype[name] = methods[name]; + } + } + + return subClass; + }; + + /** + * @file video.js + * @module videojs + */ + + /** + * Normalize an `id` value by trimming off a leading `#` + * + * @param {string} id + * A string, maybe with a leading `#`. + * + * @returns {string} + * The string, without any leading `#`. + */ + var normalizeId = function normalizeId(id) { + return id.indexOf('#') === 0 ? id.slice(1) : id; + }; + + /** + * Doubles as the main function for users to create a player instance and also + * the main library object. + * The `videojs` function can be used to initialize or retrieve a player. + * + * @param {string|Element} id + * Video element or video element ID + * + * @param {Object} [options] + * Optional options object for config/settings + * + * @param {Component~ReadyCallback} [ready] + * Optional ready callback + * + * @return {Player} + * A player instance + */ + function videojs$1(id, options, ready) { + var player = videojs$1.getPlayer(id); + + if (player) { + if (options) { + log$1.warn('Player "' + id + '" is already initialised. Options will not be applied.'); + } + if (ready) { + player.ready(ready); + } + return player; + } + + var el = typeof id === 'string' ? $('#' + normalizeId(id)) : id; + + if (!isEl(el)) { + throw new TypeError('The element or ID supplied is not valid. (videojs)'); + } + + if (!document_1.body.contains(el)) { + log$1.warn('The element supplied is not included in the DOM'); + } + + options = options || {}; + + videojs$1.hooks('beforesetup').forEach(function (hookFunction) { + var opts = hookFunction(el, mergeOptions(options)); + + if (!isObject(opts) || Array.isArray(opts)) { + log$1.error('please return an object in beforesetup hooks'); + return; + } + + options = mergeOptions(options, opts); + }); + + // We get the current "Player" component here in case an integration has + // replaced it with a custom player. + var PlayerComponent = Component.getComponent('Player'); + + player = new PlayerComponent(el, options, ready); + + videojs$1.hooks('setup').forEach(function (hookFunction) { + return hookFunction(player); + }); + + return player; + } + + /** + * An Object that contains lifecycle hooks as keys which point to an array + * of functions that are run when a lifecycle is triggered + */ + videojs$1.hooks_ = {}; + + /** + * Get a list of hooks for a specific lifecycle + * @function videojs.hooks + * + * @param {string} type + * the lifecyle to get hooks from + * + * @param {Function|Function[]} [fn] + * Optionally add a hook (or hooks) to the lifecycle that your are getting. + * + * @return {Array} + * an array of hooks, or an empty array if there are none. + */ + videojs$1.hooks = function (type, fn) { + videojs$1.hooks_[type] = videojs$1.hooks_[type] || []; + if (fn) { + videojs$1.hooks_[type] = videojs$1.hooks_[type].concat(fn); + } + return videojs$1.hooks_[type]; + }; + + /** + * Add a function hook to a specific videojs lifecycle. + * + * @param {string} type + * the lifecycle to hook the function to. + * + * @param {Function|Function[]} + * The function or array of functions to attach. + */ + videojs$1.hook = function (type, fn) { + videojs$1.hooks(type, fn); + }; + + /** + * Add a function hook that will only run once to a specific videojs lifecycle. + * + * @param {string} type + * the lifecycle to hook the function to. + * + * @param {Function|Function[]} + * The function or array of functions to attach. + */ + videojs$1.hookOnce = function (type, fn) { + videojs$1.hooks(type, [].concat(fn).map(function (original) { + var wrapper = function wrapper() { + videojs$1.removeHook(type, wrapper); + return original.apply(undefined, arguments); + }; + + return wrapper; + })); + }; + + /** + * Remove a hook from a specific videojs lifecycle. + * + * @param {string} type + * the lifecycle that the function hooked to + * + * @param {Function} fn + * The hooked function to remove + * + * @return {boolean} + * The function that was removed or undef + */ + videojs$1.removeHook = function (type, fn) { + var index = videojs$1.hooks(type).indexOf(fn); + + if (index <= -1) { + return false; + } + + videojs$1.hooks_[type] = videojs$1.hooks_[type].slice(); + videojs$1.hooks_[type].splice(index, 1); + + return true; + }; + + // Add default styles + if (window_1.VIDEOJS_NO_DYNAMIC_STYLE !== true && isReal()) { + var style$1 = $('.vjs-styles-defaults'); + + if (!style$1) { + style$1 = createStyleElement('vjs-styles-defaults'); + var head = $('head'); + + if (head) { + head.insertBefore(style$1, head.firstChild); + } + setTextContent(style$1, '\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n '); + } + } + + // Run Auto-load players + // You have to wait at least once in case this script is loaded after your + // video in the DOM (weird behavior only with minified version) + autoSetupTimeout(1, videojs$1); + + /** + * Current software version. Follows semver. + * + * @type {string} + */ + videojs$1.VERSION = version; + + /** + * The global options object. These are the settings that take effect + * if no overrides are specified when the player is created. + * + * @type {Object} + */ + videojs$1.options = Player.prototype.options_; + + /** + * Get an object with the currently created players, keyed by player ID + * + * @return {Object} + * The created players + */ + videojs$1.getPlayers = function () { + return Player.players; + }; + + /** + * Get a single player based on an ID or DOM element. + * + * This is useful if you want to check if an element or ID has an associated + * Video.js player, but not create one if it doesn't. + * + * @param {string|Element} id + * An HTML element - `<video>`, `<audio>`, or `<video-js>` - + * or a string matching the `id` of such an element. + * + * @returns {Player|undefined} + * A player instance or `undefined` if there is no player instance + * matching the argument. + */ + videojs$1.getPlayer = function (id) { + var players = Player.players; + var tag = void 0; + + if (typeof id === 'string') { + var nId = normalizeId(id); + var player = players[nId]; + + if (player) { + return player; + } + + tag = $('#' + nId); + } else { + tag = id; + } + + if (isEl(tag)) { + var _tag = tag, + _player = _tag.player, + playerId = _tag.playerId; + + // Element may have a `player` property referring to an already created + // player instance. If so, return that. + + if (_player || players[playerId]) { + return _player || players[playerId]; + } + } + }; + + /** + * Returns an array of all current players. + * + * @return {Array} + * An array of all players. The array will be in the order that + * `Object.keys` provides, which could potentially vary between + * JavaScript engines. + * + */ + videojs$1.getAllPlayers = function () { + return ( + + // Disposed players leave a key with a `null` value, so we need to make sure + // we filter those out. + Object.keys(Player.players).map(function (k) { + return Player.players[k]; + }).filter(Boolean) + ); + }; + + /** + * Expose players object. + * + * @memberOf videojs + * @property {Object} players + */ + videojs$1.players = Player.players; + + /** + * Get a component class object by name + * + * @borrows Component.getComponent as videojs.getComponent + */ + videojs$1.getComponent = Component.getComponent; + + /** + * Register a component so it can referred to by name. Used when adding to other + * components, either through addChild `component.addChild('myComponent')` or through + * default children options `{ children: ['myComponent'] }`. + * + * > NOTE: You could also just initialize the component before adding. + * `component.addChild(new MyComponent());` + * + * @param {string} name + * The class name of the component + * + * @param {Component} comp + * The component class + * + * @return {Component} + * The newly registered component + */ + videojs$1.registerComponent = function (name$$1, comp) { + if (Tech.isTech(comp)) { + log$1.warn('The ' + name$$1 + ' tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)'); + } + + Component.registerComponent.call(Component, name$$1, comp); + }; + + /** + * Get a Tech class object by name + * + * @borrows Tech.getTech as videojs.getTech + */ + videojs$1.getTech = Tech.getTech; + + /** + * Register a Tech so it can referred to by name. + * This is used in the tech order for the player. + * + * @borrows Tech.registerTech as videojs.registerTech + */ + videojs$1.registerTech = Tech.registerTech; + + /** + * Register a middleware to a source type. + * + * @param {String} type A string representing a MIME type. + * @param {function(player):object} middleware A middleware factory that takes a player. + */ + videojs$1.use = use; + + /** + * An object that can be returned by a middleware to signify + * that the middleware is being terminated. + * + * @type {object} + * @memberOf {videojs} + * @property {object} middleware.TERMINATOR + */ + Object.defineProperty(videojs$1, 'middleware', { + value: {}, + writeable: false, + enumerable: true + }); + + Object.defineProperty(videojs$1.middleware, 'TERMINATOR', { + value: TERMINATOR, + writeable: false, + enumerable: true + }); + + /** + * A suite of browser and device tests from {@link browser}. + * + * @type {Object} + * @private + */ + videojs$1.browser = browser; + + /** + * Whether or not the browser supports touch events. Included for backward + * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED` + * instead going forward. + * + * @deprecated since version 5.0 + * @type {boolean} + */ + videojs$1.TOUCH_ENABLED = TOUCH_ENABLED; + + /** + * Subclass an existing class + * Mimics ES6 subclassing with the `extend` keyword + * + * @borrows extend:extendFn as videojs.extend + */ + videojs$1.extend = extendFn; + + /** + * Merge two options objects recursively + * Performs a deep merge like lodash.merge but **only merges plain objects** + * (not arrays, elements, anything else) + * Other values will be copied directly from the second object. + * + * @borrows merge-options:mergeOptions as videojs.mergeOptions + */ + videojs$1.mergeOptions = mergeOptions; + + /** + * Change the context (this) of a function + * + * > NOTE: as of v5.0 we require an ES5 shim, so you should use the native + * `function() {}.bind(newContext);` instead of this. + * + * @borrows fn:bind as videojs.bind + */ + videojs$1.bind = bind; + + /** + * Register a Video.js plugin. + * + * @borrows plugin:registerPlugin as videojs.registerPlugin + * @method registerPlugin + * + * @param {string} name + * The name of the plugin to be registered. Must be a string and + * must not match an existing plugin or a method on the `Player` + * prototype. + * + * @param {Function} plugin + * A sub-class of `Plugin` or a function for basic plugins. + * + * @return {Function} + * For advanced plugins, a factory function for that plugin. For + * basic plugins, a wrapper function that initializes the plugin. + */ + videojs$1.registerPlugin = Plugin.registerPlugin; + + /** + * Deprecated method to register a plugin with Video.js + * + * @deprecated + * videojs.plugin() is deprecated; use videojs.registerPlugin() instead + * + * @param {string} name + * The plugin name + * + * @param {Plugin|Function} plugin + * The plugin sub-class or function + */ + videojs$1.plugin = function (name$$1, plugin) { + log$1.warn('videojs.plugin() is deprecated; use videojs.registerPlugin() instead'); + return Plugin.registerPlugin(name$$1, plugin); + }; + + /** + * Gets an object containing multiple Video.js plugins. + * + * @param {Array} [names] + * If provided, should be an array of plugin names. Defaults to _all_ + * plugin names. + * + * @return {Object|undefined} + * An object containing plugin(s) associated with their name(s) or + * `undefined` if no matching plugins exist). + */ + videojs$1.getPlugins = Plugin.getPlugins; + + /** + * Gets a plugin by name if it exists. + * + * @param {string} name + * The name of a plugin. + * + * @return {Function|undefined} + * The plugin (or `undefined`). + */ + videojs$1.getPlugin = Plugin.getPlugin; + + /** + * Gets a plugin's version, if available + * + * @param {string} name + * The name of a plugin. + * + * @return {string} + * The plugin's version or an empty string. + */ + videojs$1.getPluginVersion = Plugin.getPluginVersion; + + /** + * Adding languages so that they're available to all players. + * Example: `videojs.addLanguage('es', { 'Hello': 'Hola' });` + * + * @param {string} code + * The language code or dictionary property + * + * @param {Object} data + * The data values to be translated + * + * @return {Object} + * The resulting language dictionary object + */ + videojs$1.addLanguage = function (code, data) { + var _mergeOptions; + + code = ('' + code).toLowerCase(); + + videojs$1.options.languages = mergeOptions(videojs$1.options.languages, (_mergeOptions = {}, _mergeOptions[code] = data, _mergeOptions)); + + return videojs$1.options.languages[code]; + }; + + /** + * Log messages + * + * @borrows log:log as videojs.log + */ + videojs$1.log = log$1; + + /** + * Creates an emulated TimeRange object. + * + * @borrows time-ranges:createTimeRanges as videojs.createTimeRange + */ + /** + * @borrows time-ranges:createTimeRanges as videojs.createTimeRanges + */ + videojs$1.createTimeRange = videojs$1.createTimeRanges = createTimeRanges; + + /** + * Format seconds as a time string, H:MM:SS or M:SS + * Supplying a guide (in seconds) will force a number of leading zeros + * to cover the length of the guide + * + * @borrows format-time:formatTime as videojs.formatTime + */ + videojs$1.formatTime = formatTime; + + /** + * Replaces format-time with a custom implementation, to be used in place of the default. + * + * @borrows format-time:setFormatTime as videojs.setFormatTime + * + * @method setFormatTime + * + * @param {Function} customFn + * A custom format-time function which will be called with the current time and guide (in seconds) as arguments. + * Passed fn should return a string. + */ + videojs$1.setFormatTime = setFormatTime; + + /** + * Resets format-time to the default implementation. + * + * @borrows format-time:resetFormatTime as videojs.resetFormatTime + * + * @method resetFormatTime + */ + videojs$1.resetFormatTime = resetFormatTime; + + /** + * Resolve and parse the elements of a URL + * + * @borrows url:parseUrl as videojs.parseUrl + * + */ + videojs$1.parseUrl = parseUrl; + + /** + * Returns whether the url passed is a cross domain request or not. + * + * @borrows url:isCrossOrigin as videojs.isCrossOrigin + */ + videojs$1.isCrossOrigin = isCrossOrigin; + + /** + * Event target class. + * + * @borrows EventTarget as videojs.EventTarget + */ + videojs$1.EventTarget = EventTarget; + + /** + * Add an event listener to element + * It stores the handler function in a separate cache object + * and adds a generic handler to the element's event, + * along with a unique id (guid) to the element. + * + * @borrows events:on as videojs.on + */ + videojs$1.on = on; + + /** + * Trigger a listener only once for an event + * + * @borrows events:one as videojs.one + */ + videojs$1.one = one; + + /** + * Removes event listeners from an element + * + * @borrows events:off as videojs.off + */ + videojs$1.off = off; + + /** + * Trigger an event for an element + * + * @borrows events:trigger as videojs.trigger + */ + videojs$1.trigger = trigger; + + /** + * A cross-browser XMLHttpRequest wrapper. Here's a simple example: + * + * @param {Object} options + * settings for the request. + * + * @return {XMLHttpRequest|XDomainRequest} + * The request object. + * + * @see https://github.com/Raynos/xhr + */ + videojs$1.xhr = xhr; + + /** + * TextTrack class + * + * @borrows TextTrack as videojs.TextTrack + */ + videojs$1.TextTrack = TextTrack; + + /** + * export the AudioTrack class so that source handlers can create + * AudioTracks and then add them to the players AudioTrackList + * + * @borrows AudioTrack as videojs.AudioTrack + */ + videojs$1.AudioTrack = AudioTrack; + + /** + * export the VideoTrack class so that source handlers can create + * VideoTracks and then add them to the players VideoTrackList + * + * @borrows VideoTrack as videojs.VideoTrack + */ + videojs$1.VideoTrack = VideoTrack; + + /** + * Determines, via duck typing, whether or not a value is a DOM element. + * + * @borrows dom:isEl as videojs.isEl + * @deprecated Use videojs.dom.isEl() instead + */ + + /** + * Determines, via duck typing, whether or not a value is a text node. + * + * @borrows dom:isTextNode as videojs.isTextNode + * @deprecated Use videojs.dom.isTextNode() instead + */ + + /** + * Creates an element and applies properties. + * + * @borrows dom:createEl as videojs.createEl + * @deprecated Use videojs.dom.createEl() instead + */ + + /** + * Check if an element has a CSS class + * + * @borrows dom:hasElClass as videojs.hasClass + * @deprecated Use videojs.dom.hasClass() instead + */ + + /** + * Add a CSS class name to an element + * + * @borrows dom:addElClass as videojs.addClass + * @deprecated Use videojs.dom.addClass() instead + */ + + /** + * Remove a CSS class name from an element + * + * @borrows dom:removeElClass as videojs.removeClass + * @deprecated Use videojs.dom.removeClass() instead + */ + + /** + * Adds or removes a CSS class name on an element depending on an optional + * condition or the presence/absence of the class name. + * + * @borrows dom:toggleElClass as videojs.toggleClass + * @deprecated Use videojs.dom.toggleClass() instead + */ + + /** + * Apply attributes to an HTML element. + * + * @borrows dom:setElAttributes as videojs.setAttribute + * @deprecated Use videojs.dom.setAttributes() instead + */ + + /** + * Get an element's attribute values, as defined on the HTML tag + * Attributes are not the same as properties. They're defined on the tag + * or with setAttribute (which shouldn't be used with HTML) + * This will return true or false for boolean attributes. + * + * @borrows dom:getElAttributes as videojs.getAttributes + * @deprecated Use videojs.dom.getAttributes() instead + */ + + /** + * Empties the contents of an element. + * + * @borrows dom:emptyEl as videojs.emptyEl + * @deprecated Use videojs.dom.emptyEl() instead + */ + + /** + * Normalizes and appends content to an element. + * + * The content for an element can be passed in multiple types and + * combinations, whose behavior is as follows: + * + * - String + * Normalized into a text node. + * + * - Element, TextNode + * Passed through. + * + * - Array + * A one-dimensional array of strings, elements, nodes, or functions (which + * return single strings, elements, or nodes). + * + * - Function + * If the sole argument, is expected to produce a string, element, + * node, or array. + * + * @borrows dom:appendContents as videojs.appendContet + * @deprecated Use videojs.dom.appendContent() instead + */ + + /** + * Normalizes and inserts content into an element; this is identical to + * `appendContent()`, except it empties the element first. + * + * The content for an element can be passed in multiple types and + * combinations, whose behavior is as follows: + * + * - String + * Normalized into a text node. + * + * - Element, TextNode + * Passed through. + * + * - Array + * A one-dimensional array of strings, elements, nodes, or functions (which + * return single strings, elements, or nodes). + * + * - Function + * If the sole argument, is expected to produce a string, element, + * node, or array. + * + * @borrows dom:insertContent as videojs.insertContent + * @deprecated Use videojs.dom.insertContent() instead + */ + ['isEl', 'isTextNode', 'createEl', 'hasClass', 'addClass', 'removeClass', 'toggleClass', 'setAttributes', 'getAttributes', 'emptyEl', 'appendContent', 'insertContent'].forEach(function (k) { + videojs$1[k] = function () { + log$1.warn('videojs.' + k + '() is deprecated; use videojs.dom.' + k + '() instead'); + return Dom[k].apply(null, arguments); + }; + }); + + /** + * A safe getComputedStyle. + * + * This is because in Firefox, if the player is loaded in an iframe with `display:none`, + * then `getComputedStyle` returns `null`, so, we do a null-check to make sure + * that the player doesn't break in these cases. + * See https://bugzilla.mozilla.org/show_bug.cgi?id=548397 for more details. + * + * @borrows computed-style:computedStyle as videojs.computedStyle + */ + videojs$1.computedStyle = computedStyle; + + /** + * Export the Dom utilities for use in external plugins + * and Tech's + */ + videojs$1.dom = Dom; + + /** + * Export the Url utilities for use in external plugins + * and Tech's + */ + videojs$1.url = Url; + + var urlToolkit = createCommonjsModule(function (module, exports) { + // see https://tools.ietf.org/html/rfc1808 + + /* jshint ignore:start */ + (function (root) { + /* jshint ignore:end */ + + var URL_REGEX = /^((?:[a-zA-Z0-9+\-.]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/; + var FIRST_SEGMENT_REGEX = /^([^\/;?#]*)(.*)$/; + var SLASH_DOT_REGEX = /(?:\/|^)\.(?=\/)/g; + var SLASH_DOT_DOT_REGEX = /(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g; + + var URLToolkit = { // jshint ignore:line + // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or // + // E.g + // With opts.alwaysNormalize = false (default, spec compliant) + // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g + // With opts.alwaysNormalize = true (not spec compliant) + // http://a.com/b/cd + /e/f/../g => http://a.com/e/g + buildAbsoluteURL: function buildAbsoluteURL(baseURL, relativeURL, opts) { + opts = opts || {}; + // remove any remaining space and CRLF + baseURL = baseURL.trim(); + relativeURL = relativeURL.trim(); + if (!relativeURL) { + // 2a) If the embedded URL is entirely empty, it inherits the + // entire base URL (i.e., is set equal to the base URL) + // and we are done. + if (!opts.alwaysNormalize) { + return baseURL; + } + var basePartsForNormalise = URLToolkit.parseURL(baseURL); + if (!basePartsForNormalise) { + throw new Error('Error trying to parse base URL.'); + } + basePartsForNormalise.path = URLToolkit.normalizePath(basePartsForNormalise.path); + return URLToolkit.buildURLFromParts(basePartsForNormalise); + } + var relativeParts = URLToolkit.parseURL(relativeURL); + if (!relativeParts) { + throw new Error('Error trying to parse relative URL.'); + } + if (relativeParts.scheme) { + // 2b) If the embedded URL starts with a scheme name, it is + // interpreted as an absolute URL and we are done. + if (!opts.alwaysNormalize) { + return relativeURL; + } + relativeParts.path = URLToolkit.normalizePath(relativeParts.path); + return URLToolkit.buildURLFromParts(relativeParts); + } + var baseParts = URLToolkit.parseURL(baseURL); + if (!baseParts) { + throw new Error('Error trying to parse base URL.'); + } + if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== '/') { + // If netLoc missing and path doesn't start with '/', assume everthing before the first '/' is the netLoc + // This causes 'example.com/a' to be handled as '//example.com/a' instead of '/example.com/a' + var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path); + baseParts.netLoc = pathParts[1]; + baseParts.path = pathParts[2]; + } + if (baseParts.netLoc && !baseParts.path) { + baseParts.path = '/'; + } + var builtParts = { + // 2c) Otherwise, the embedded URL inherits the scheme of + // the base URL. + scheme: baseParts.scheme, + netLoc: relativeParts.netLoc, + path: null, + params: relativeParts.params, + query: relativeParts.query, + fragment: relativeParts.fragment + }; + if (!relativeParts.netLoc) { + // 3) If the embedded URL's <net_loc> is non-empty, we skip to + // Step 7. Otherwise, the embedded URL inherits the <net_loc> + // (if any) of the base URL. + builtParts.netLoc = baseParts.netLoc; + // 4) If the embedded URL path is preceded by a slash "/", the + // path is not relative and we skip to Step 7. + if (relativeParts.path[0] !== '/') { + if (!relativeParts.path) { + // 5) If the embedded URL path is empty (and not preceded by a + // slash), then the embedded URL inherits the base URL path + builtParts.path = baseParts.path; + // 5a) if the embedded URL's <params> is non-empty, we skip to + // step 7; otherwise, it inherits the <params> of the base + // URL (if any) and + if (!relativeParts.params) { + builtParts.params = baseParts.params; + // 5b) if the embedded URL's <query> is non-empty, we skip to + // step 7; otherwise, it inherits the <query> of the base + // URL (if any) and we skip to step 7. + if (!relativeParts.query) { + builtParts.query = baseParts.query; + } + } + } else { + // 6) The last segment of the base URL's path (anything + // following the rightmost slash "/", or the entire path if no + // slash is present) is removed and the embedded URL's path is + // appended in its place. + var baseURLPath = baseParts.path; + var newPath = baseURLPath.substring(0, baseURLPath.lastIndexOf('/') + 1) + relativeParts.path; + builtParts.path = URLToolkit.normalizePath(newPath); + } + } + } + if (builtParts.path === null) { + builtParts.path = opts.alwaysNormalize ? URLToolkit.normalizePath(relativeParts.path) : relativeParts.path; + } + return URLToolkit.buildURLFromParts(builtParts); + }, + parseURL: function parseURL(url) { + var parts = URL_REGEX.exec(url); + if (!parts) { + return null; + } + return { + scheme: parts[1] || '', + netLoc: parts[2] || '', + path: parts[3] || '', + params: parts[4] || '', + query: parts[5] || '', + fragment: parts[6] || '' + }; + }, + normalizePath: function normalizePath(path) { + // The following operations are + // then applied, in order, to the new path: + // 6a) All occurrences of "./", where "." is a complete path + // segment, are removed. + // 6b) If the path ends with "." as a complete path segment, + // that "." is removed. + path = path.split('').reverse().join('').replace(SLASH_DOT_REGEX, ''); + // 6c) All occurrences of "<segment>/../", where <segment> is a + // complete path segment not equal to "..", are removed. + // Removal of these path segments is performed iteratively, + // removing the leftmost matching pattern on each iteration, + // until no matching pattern remains. + // 6d) If the path ends with "<segment>/..", where <segment> is a + // complete path segment not equal to "..", that + // "<segment>/.." is removed. + while (path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, '')).length) { + } // jshint ignore:line + return path.split('').reverse().join(''); + }, + buildURLFromParts: function buildURLFromParts(parts) { + return parts.scheme + parts.netLoc + parts.path + parts.params + parts.query + parts.fragment; + } + }; + + /* jshint ignore:start */ + module.exports = URLToolkit; + })(commonjsGlobal); + /* jshint ignore:end */ + }); + + var classCallCheck$1 = function classCallCheck$$1(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + var _extends$1 = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + var inherits$1 = function inherits$$1(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : _typeof(superClass))); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + }; + + var possibleConstructorReturn$1 = function possibleConstructorReturn$$1(self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && ((typeof call === "undefined" ? "undefined" : _typeof(call)) === "object" || typeof call === "function") ? call : self; + }; + + /** + * @file stream.js + */ + /** + * A lightweight readable stream implemention that handles event dispatching. + * + * @class Stream + */ + var Stream = function () { + function Stream() { + classCallCheck$1(this, Stream); + + this.listeners = {}; + } + + /** + * Add a listener for a specified event type. + * + * @param {String} type the event name + * @param {Function} listener the callback to be invoked when an event of + * the specified type occurs + */ + + Stream.prototype.on = function on(type, listener) { + if (!this.listeners[type]) { + this.listeners[type] = []; + } + this.listeners[type].push(listener); + }; + + /** + * Remove a listener for a specified event type. + * + * @param {String} type the event name + * @param {Function} listener a function previously registered for this + * type of event through `on` + * @return {Boolean} if we could turn it off or not + */ + + Stream.prototype.off = function off(type, listener) { + if (!this.listeners[type]) { + return false; + } + + var index = this.listeners[type].indexOf(listener); + + this.listeners[type].splice(index, 1); + return index > -1; + }; + + /** + * Trigger an event of the specified type on this stream. Any additional + * arguments to this function are passed as parameters to event listeners. + * + * @param {String} type the event name + */ + + Stream.prototype.trigger = function trigger(type) { + var callbacks = this.listeners[type]; + var i = void 0; + var length = void 0; + var args = void 0; + + if (!callbacks) { + return; + } + // Slicing the arguments on every invocation of this method + // can add a significant amount of overhead. Avoid the + // intermediate object creation for the common case of a + // single callback argument + if (arguments.length === 2) { + length = callbacks.length; + for (i = 0; i < length; ++i) { + callbacks[i].call(this, arguments[1]); + } + } else { + args = Array.prototype.slice.call(arguments, 1); + length = callbacks.length; + for (i = 0; i < length; ++i) { + callbacks[i].apply(this, args); + } + } + }; + + /** + * Destroys the stream and cleans up. + */ + + Stream.prototype.dispose = function dispose() { + this.listeners = {}; + }; + /** + * Forwards all `data` events on this stream to the destination stream. The + * destination stream should provide a method `push` to receive the data + * events as they arrive. + * + * @param {Stream} destination the stream that will receive all `data` events + * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options + */ + + Stream.prototype.pipe = function pipe(destination) { + this.on('data', function (data) { + destination.push(data); + }); + }; + + return Stream; + }(); + + /** + * @file m3u8/line-stream.js + */ + /** + * A stream that buffers string input and generates a `data` event for each + * line. + * + * @class LineStream + * @extends Stream + */ + + var LineStream = function (_Stream) { + inherits$1(LineStream, _Stream); + + function LineStream() { + classCallCheck$1(this, LineStream); + + var _this = possibleConstructorReturn$1(this, _Stream.call(this)); + + _this.buffer = ''; + return _this; + } + + /** + * Add new data to be parsed. + * + * @param {String} data the text to process + */ + + LineStream.prototype.push = function push(data) { + var nextNewline = void 0; + + this.buffer += data; + nextNewline = this.buffer.indexOf('\n'); + + for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\n')) { + this.trigger('data', this.buffer.substring(0, nextNewline)); + this.buffer = this.buffer.substring(nextNewline + 1); + } + }; + + return LineStream; + }(Stream); + + /** + * @file m3u8/parse-stream.js + */ + /** + * "forgiving" attribute list psuedo-grammar: + * attributes -> keyvalue (',' keyvalue)* + * keyvalue -> key '=' value + * key -> [^=]* + * value -> '"' [^"]* '"' | [^,]* + */ + var attributeSeparator = function attributeSeparator() { + var key = '[^=]*'; + var value = '"[^"]*"|[^,]*'; + var keyvalue = '(?:' + key + ')=(?:' + value + ')'; + + return new RegExp('(?:^|,)(' + keyvalue + ')'); + }; + + /** + * Parse attributes from a line given the seperator + * + * @param {String} attributes the attibute line to parse + */ + var parseAttributes = function parseAttributes(attributes) { + // split the string using attributes as the separator + var attrs = attributes.split(attributeSeparator()); + var result = {}; + var i = attrs.length; + var attr = void 0; + + while (i--) { + // filter out unmatched portions of the string + if (attrs[i] === '') { + continue; + } + + // split the key and value + attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1); + // trim whitespace and remove optional quotes around the value + attr[0] = attr[0].replace(/^\s+|\s+$/g, ''); + attr[1] = attr[1].replace(/^\s+|\s+$/g, ''); + attr[1] = attr[1].replace(/^['"](.*)['"]$/g, '$1'); + result[attr[0]] = attr[1]; + } + return result; + }; + + /** + * A line-level M3U8 parser event stream. It expects to receive input one + * line at a time and performs a context-free parse of its contents. A stream + * interpretation of a manifest can be useful if the manifest is expected to + * be too large to fit comfortably into memory or the entirety of the input + * is not immediately available. Otherwise, it's probably much easier to work + * with a regular `Parser` object. + * + * Produces `data` events with an object that captures the parser's + * interpretation of the input. That object has a property `tag` that is one + * of `uri`, `comment`, or `tag`. URIs only have a single additional + * property, `line`, which captures the entirety of the input without + * interpretation. Comments similarly have a single additional property + * `text` which is the input without the leading `#`. + * + * Tags always have a property `tagType` which is the lower-cased version of + * the M3U8 directive without the `#EXT` or `#EXT-X-` prefix. For instance, + * `#EXT-X-MEDIA-SEQUENCE` becomes `media-sequence` when parsed. Unrecognized + * tags are given the tag type `unknown` and a single additional property + * `data` with the remainder of the input. + * + * @class ParseStream + * @extends Stream + */ + + var ParseStream = function (_Stream) { + inherits$1(ParseStream, _Stream); + + function ParseStream() { + classCallCheck$1(this, ParseStream); + + var _this = possibleConstructorReturn$1(this, _Stream.call(this)); + + _this.customParsers = []; + return _this; + } + + /** + * Parses an additional line of input. + * + * @param {String} line a single line of an M3U8 file to parse + */ + + ParseStream.prototype.push = function push(line) { + var match = void 0; + var event = void 0; + + // strip whitespace + line = line.replace(/^[\u0000\s]+|[\u0000\s]+$/g, ''); + if (line.length === 0) { + // ignore empty lines + return; + } + + // URIs + if (line[0] !== '#') { + this.trigger('data', { + type: 'uri', + uri: line + }); + return; + } + + for (var i = 0; i < this.customParsers.length; i++) { + if (this.customParsers[i].call(this, line)) { + return; + } + } + + // Comments + if (line.indexOf('#EXT') !== 0) { + this.trigger('data', { + type: 'comment', + text: line.slice(1) + }); + return; + } + + // strip off any carriage returns here so the regex matching + // doesn't have to account for them. + line = line.replace('\r', ''); + + // Tags + match = /^#EXTM3U/.exec(line); + if (match) { + this.trigger('data', { + type: 'tag', + tagType: 'm3u' + }); + return; + } + match = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'inf' + }; + if (match[1]) { + event.duration = parseFloat(match[1]); + } + if (match[2]) { + event.title = match[2]; + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'targetduration' + }; + if (match[1]) { + event.duration = parseInt(match[1], 10); + } + this.trigger('data', event); + return; + } + match = /^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'totalduration' + }; + if (match[1]) { + event.duration = parseInt(match[1], 10); + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'version' + }; + if (match[1]) { + event.version = parseInt(match[1], 10); + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'media-sequence' + }; + if (match[1]) { + event.number = parseInt(match[1], 10); + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'discontinuity-sequence' + }; + if (match[1]) { + event.number = parseInt(match[1], 10); + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'playlist-type' + }; + if (match[1]) { + event.playlistType = match[1]; + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'byterange' + }; + if (match[1]) { + event.length = parseInt(match[1], 10); + } + if (match[2]) { + event.offset = parseInt(match[2], 10); + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'allow-cache' + }; + if (match[1]) { + event.allowed = !/NO/.test(match[1]); + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-MAP:?(.*)$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'map' + }; + + if (match[1]) { + var attributes = parseAttributes(match[1]); + + if (attributes.URI) { + event.uri = attributes.URI; + } + if (attributes.BYTERANGE) { + var _attributes$BYTERANGE = attributes.BYTERANGE.split('@'), + length = _attributes$BYTERANGE[0], + offset = _attributes$BYTERANGE[1]; + + event.byterange = {}; + if (length) { + event.byterange.length = parseInt(length, 10); + } + if (offset) { + event.byterange.offset = parseInt(offset, 10); + } + } + } + + this.trigger('data', event); + return; + } + match = /^#EXT-X-STREAM-INF:?(.*)$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'stream-inf' + }; + if (match[1]) { + event.attributes = parseAttributes(match[1]); + + if (event.attributes.RESOLUTION) { + var split = event.attributes.RESOLUTION.split('x'); + var resolution = {}; + + if (split[0]) { + resolution.width = parseInt(split[0], 10); + } + if (split[1]) { + resolution.height = parseInt(split[1], 10); + } + event.attributes.RESOLUTION = resolution; + } + if (event.attributes.BANDWIDTH) { + event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10); + } + if (event.attributes['PROGRAM-ID']) { + event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10); + } + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-MEDIA:?(.*)$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'media' + }; + if (match[1]) { + event.attributes = parseAttributes(match[1]); + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-ENDLIST/.exec(line); + if (match) { + this.trigger('data', { + type: 'tag', + tagType: 'endlist' + }); + return; + } + match = /^#EXT-X-DISCONTINUITY/.exec(line); + if (match) { + this.trigger('data', { + type: 'tag', + tagType: 'discontinuity' + }); + return; + } + match = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'program-date-time' + }; + if (match[1]) { + event.dateTimeString = match[1]; + event.dateTimeObject = new Date(match[1]); + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-KEY:?(.*)$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'key' + }; + if (match[1]) { + event.attributes = parseAttributes(match[1]); + // parse the IV string into a Uint32Array + if (event.attributes.IV) { + if (event.attributes.IV.substring(0, 2).toLowerCase() === '0x') { + event.attributes.IV = event.attributes.IV.substring(2); + } + + event.attributes.IV = event.attributes.IV.match(/.{8}/g); + event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16); + event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16); + event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16); + event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16); + event.attributes.IV = new Uint32Array(event.attributes.IV); + } + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-START:?(.*)$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'start' + }; + if (match[1]) { + event.attributes = parseAttributes(match[1]); + + event.attributes['TIME-OFFSET'] = parseFloat(event.attributes['TIME-OFFSET']); + event.attributes.PRECISE = /YES/.test(event.attributes.PRECISE); + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'cue-out-cont' + }; + if (match[1]) { + event.data = match[1]; + } else { + event.data = ''; + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'cue-out' + }; + if (match[1]) { + event.data = match[1]; + } else { + event.data = ''; + } + this.trigger('data', event); + return; + } + match = /^#EXT-X-CUE-IN:?(.*)?$/.exec(line); + if (match) { + event = { + type: 'tag', + tagType: 'cue-in' + }; + if (match[1]) { + event.data = match[1]; + } else { + event.data = ''; + } + this.trigger('data', event); + return; + } + + // unknown tag type + this.trigger('data', { + type: 'tag', + data: line.slice(4) + }); + }; + + /** + * Add a parser for custom headers + * + * @param {Object} options a map of options for the added parser + * @param {RegExp} options.expression a regular expression to match the custom header + * @param {string} options.customType the custom type to register to the output + * @param {Function} [options.dataParser] function to parse the line into an object + * @param {boolean} [options.segment] should tag data be attached to the segment object + */ + + ParseStream.prototype.addParser = function addParser(_ref) { + var _this2 = this; + + var expression = _ref.expression, + customType = _ref.customType, + dataParser = _ref.dataParser, + segment = _ref.segment; + + if (typeof dataParser !== 'function') { + dataParser = function dataParser(line) { + return line; + }; + } + this.customParsers.push(function (line) { + var match = expression.exec(line); + + if (match) { + _this2.trigger('data', { + type: 'custom', + data: dataParser(line), + customType: customType, + segment: segment + }); + return true; + } + }); + }; + + return ParseStream; + }(Stream); + + /** + * @file m3u8/parser.js + */ + /** + * A parser for M3U8 files. The current interpretation of the input is + * exposed as a property `manifest` on parser objects. It's just two lines to + * create and parse a manifest once you have the contents available as a string: + * + * ```js + * var parser = new m3u8.Parser(); + * parser.push(xhr.responseText); + * ``` + * + * New input can later be applied to update the manifest object by calling + * `push` again. + * + * The parser attempts to create a usable manifest object even if the + * underlying input is somewhat nonsensical. It emits `info` and `warning` + * events during the parse if it encounters input that seems invalid or + * requires some property of the manifest object to be defaulted. + * + * @class Parser + * @extends Stream + */ + + var Parser = function (_Stream) { + inherits$1(Parser, _Stream); + + function Parser() { + classCallCheck$1(this, Parser); + + var _this = possibleConstructorReturn$1(this, _Stream.call(this)); + + _this.lineStream = new LineStream(); + _this.parseStream = new ParseStream(); + _this.lineStream.pipe(_this.parseStream); + + /* eslint-disable consistent-this */ + var self = _this; + /* eslint-enable consistent-this */ + var uris = []; + var currentUri = {}; + // if specified, the active EXT-X-MAP definition + var currentMap = void 0; + // if specified, the active decryption key + var _key = void 0; + var noop = function noop() { + }; + var defaultMediaGroups = { + 'AUDIO': {}, + 'VIDEO': {}, + 'CLOSED-CAPTIONS': {}, + 'SUBTITLES': {} + }; + // group segments into numbered timelines delineated by discontinuities + var currentTimeline = 0; + + // the manifest is empty until the parse stream begins delivering data + _this.manifest = { + allowCache: true, + discontinuityStarts: [], + segments: [] + }; + + // update the manifest with the m3u8 entry from the parse stream + _this.parseStream.on('data', function (entry) { + var mediaGroup = void 0; + var rendition = void 0; + + ({ + tag: function tag() { + // switch based on the tag type + (({ + 'allow-cache': function allowCache() { + this.manifest.allowCache = entry.allowed; + if (!('allowed' in entry)) { + this.trigger('info', { + message: 'defaulting allowCache to YES' + }); + this.manifest.allowCache = true; + } + }, + byterange: function byterange() { + var byterange = {}; + + if ('length' in entry) { + currentUri.byterange = byterange; + byterange.length = entry.length; + + if (!('offset' in entry)) { + this.trigger('info', { + message: 'defaulting offset to zero' + }); + entry.offset = 0; + } + } + if ('offset' in entry) { + currentUri.byterange = byterange; + byterange.offset = entry.offset; + } + }, + endlist: function endlist() { + this.manifest.endList = true; + }, + inf: function inf() { + if (!('mediaSequence' in this.manifest)) { + this.manifest.mediaSequence = 0; + this.trigger('info', { + message: 'defaulting media sequence to zero' + }); + } + if (!('discontinuitySequence' in this.manifest)) { + this.manifest.discontinuitySequence = 0; + this.trigger('info', { + message: 'defaulting discontinuity sequence to zero' + }); + } + if (entry.duration > 0) { + currentUri.duration = entry.duration; + } + + if (entry.duration === 0) { + currentUri.duration = 0.01; + this.trigger('info', { + message: 'updating zero segment duration to a small value' + }); + } + + this.manifest.segments = uris; + }, + key: function key() { + if (!entry.attributes) { + this.trigger('warn', { + message: 'ignoring key declaration without attribute list' + }); + return; + } + // clear the active encryption key + if (entry.attributes.METHOD === 'NONE') { + _key = null; + return; + } + if (!entry.attributes.URI) { + this.trigger('warn', { + message: 'ignoring key declaration without URI' + }); + return; + } + if (!entry.attributes.METHOD) { + this.trigger('warn', { + message: 'defaulting key method to AES-128' + }); + } + + // setup an encryption key for upcoming segments + _key = { + method: entry.attributes.METHOD || 'AES-128', + uri: entry.attributes.URI + }; + + if (typeof entry.attributes.IV !== 'undefined') { + _key.iv = entry.attributes.IV; + } + }, + 'media-sequence': function mediaSequence() { + if (!isFinite(entry.number)) { + this.trigger('warn', { + message: 'ignoring invalid media sequence: ' + entry.number + }); + return; + } + this.manifest.mediaSequence = entry.number; + }, + 'discontinuity-sequence': function discontinuitySequence() { + if (!isFinite(entry.number)) { + this.trigger('warn', { + message: 'ignoring invalid discontinuity sequence: ' + entry.number + }); + return; + } + this.manifest.discontinuitySequence = entry.number; + currentTimeline = entry.number; + }, + 'playlist-type': function playlistType() { + if (!/VOD|EVENT/.test(entry.playlistType)) { + this.trigger('warn', { + message: 'ignoring unknown playlist type: ' + entry.playlist + }); + return; + } + this.manifest.playlistType = entry.playlistType; + }, + map: function map() { + currentMap = {}; + if (entry.uri) { + currentMap.uri = entry.uri; + } + if (entry.byterange) { + currentMap.byterange = entry.byterange; + } + }, + 'stream-inf': function streamInf() { + this.manifest.playlists = uris; + this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups; + + if (!entry.attributes) { + this.trigger('warn', { + message: 'ignoring empty stream-inf attributes' + }); + return; + } + + if (!currentUri.attributes) { + currentUri.attributes = {}; + } + _extends$1(currentUri.attributes, entry.attributes); + }, + media: function media() { + this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups; + + if (!(entry.attributes && entry.attributes.TYPE && entry.attributes['GROUP-ID'] && entry.attributes.NAME)) { + this.trigger('warn', { + message: 'ignoring incomplete or missing media group' + }); + return; + } + + // find the media group, creating defaults as necessary + var mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE]; + + mediaGroupType[entry.attributes['GROUP-ID']] = mediaGroupType[entry.attributes['GROUP-ID']] || {}; + mediaGroup = mediaGroupType[entry.attributes['GROUP-ID']]; + + // collect the rendition metadata + rendition = { + 'default': /yes/i.test(entry.attributes.DEFAULT) + }; + if (rendition['default']) { + rendition.autoselect = true; + } else { + rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT); + } + if (entry.attributes.LANGUAGE) { + rendition.language = entry.attributes.LANGUAGE; + } + if (entry.attributes.URI) { + rendition.uri = entry.attributes.URI; + } + if (entry.attributes['INSTREAM-ID']) { + rendition.instreamId = entry.attributes['INSTREAM-ID']; + } + if (entry.attributes.CHARACTERISTICS) { + rendition.characteristics = entry.attributes.CHARACTERISTICS; + } + if (entry.attributes.FORCED) { + rendition.forced = /yes/i.test(entry.attributes.FORCED); + } + + // insert the new rendition + mediaGroup[entry.attributes.NAME] = rendition; + }, + discontinuity: function discontinuity() { + currentTimeline += 1; + currentUri.discontinuity = true; + this.manifest.discontinuityStarts.push(uris.length); + }, + 'program-date-time': function programDateTime() { + if (typeof this.manifest.dateTimeString === 'undefined') { + // PROGRAM-DATE-TIME is a media-segment tag, but for backwards + // compatibility, we add the first occurence of the PROGRAM-DATE-TIME tag + // to the manifest object + // TODO: Consider removing this in future major version + this.manifest.dateTimeString = entry.dateTimeString; + this.manifest.dateTimeObject = entry.dateTimeObject; + } + + currentUri.dateTimeString = entry.dateTimeString; + currentUri.dateTimeObject = entry.dateTimeObject; + }, + targetduration: function targetduration() { + if (!isFinite(entry.duration) || entry.duration < 0) { + this.trigger('warn', { + message: 'ignoring invalid target duration: ' + entry.duration + }); + return; + } + this.manifest.targetDuration = entry.duration; + }, + totalduration: function totalduration() { + if (!isFinite(entry.duration) || entry.duration < 0) { + this.trigger('warn', { + message: 'ignoring invalid total duration: ' + entry.duration + }); + return; + } + this.manifest.totalDuration = entry.duration; + }, + start: function start() { + if (!entry.attributes || isNaN(entry.attributes['TIME-OFFSET'])) { + this.trigger('warn', { + message: 'ignoring start declaration without appropriate attribute list' + }); + return; + } + this.manifest.start = { + timeOffset: entry.attributes['TIME-OFFSET'], + precise: entry.attributes.PRECISE + }; + }, + 'cue-out': function cueOut() { + currentUri.cueOut = entry.data; + }, + 'cue-out-cont': function cueOutCont() { + currentUri.cueOutCont = entry.data; + }, + 'cue-in': function cueIn() { + currentUri.cueIn = entry.data; + } + })[entry.tagType] || noop).call(self); + }, + uri: function uri() { + currentUri.uri = entry.uri; + uris.push(currentUri); + + // if no explicit duration was declared, use the target duration + if (this.manifest.targetDuration && !('duration' in currentUri)) { + this.trigger('warn', { + message: 'defaulting segment duration to the target duration' + }); + currentUri.duration = this.manifest.targetDuration; + } + // annotate with encryption information, if necessary + if (_key) { + currentUri.key = _key; + } + currentUri.timeline = currentTimeline; + // annotate with initialization segment information, if necessary + if (currentMap) { + currentUri.map = currentMap; + } + + // prepare for the next URI + currentUri = {}; + }, + comment: function comment() { + // comments are not important for playback + }, + custom: function custom() { + // if this is segment-level data attach the output to the segment + if (entry.segment) { + currentUri.custom = currentUri.custom || {}; + currentUri.custom[entry.customType] = entry.data; + // if this is manifest-level data attach to the top level manifest object + } else { + this.manifest.custom = this.manifest.custom || {}; + this.manifest.custom[entry.customType] = entry.data; + } + } + })[entry.type].call(self); + }); + return _this; + } + + /** + * Parse the input string and update the manifest object. + * + * @param {String} chunk a potentially incomplete portion of the manifest + */ + + Parser.prototype.push = function push(chunk) { + this.lineStream.push(chunk); + }; + + /** + * Flush any remaining input. This can be handy if the last line of an M3U8 + * manifest did not contain a trailing newline but the file has been + * completely received. + */ + + Parser.prototype.end = function end() { + // flush any buffered input + this.lineStream.push('\n'); + }; + /** + * Add an additional parser for non-standard tags + * + * @param {Object} options a map of options for the added parser + * @param {RegExp} options.expression a regular expression to match the custom header + * @param {string} options.type the type to register to the output + * @param {Function} [options.dataParser] function to parse the line into an object + * @param {boolean} [options.segment] should tag data be attached to the segment object + */ + + Parser.prototype.addParser = function addParser(options) { + this.parseStream.addParser(options); + }; + + return Parser; + }(Stream); + + /** + * mpd-parser + * @version 0.6.0 + * @copyright 2018 Brightcove, Inc + * @license Apache-2.0 + */ + + var formatAudioPlaylist = function formatAudioPlaylist(_ref) { + var _attributes; + + var attributes = _ref.attributes, + segments = _ref.segments; + + var playlist = { + attributes: (_attributes = { + NAME: attributes.id, + BANDWIDTH: attributes.bandwidth, + CODECS: attributes.codecs + }, _attributes['PROGRAM-ID'] = 1, _attributes), + uri: '', + endList: (attributes.type || 'static') === 'static', + timeline: attributes.periodIndex, + resolvedUri: '', + targetDuration: attributes.duration, + segments: segments, + mediaSequence: segments.length ? segments[0].number : 1 + }; + + if (attributes.contentProtection) { + playlist.contentProtection = attributes.contentProtection; + } + + return playlist; + }; + + var formatVttPlaylist = function formatVttPlaylist(_ref2) { + var _attributes2; + + var attributes = _ref2.attributes, + segments = _ref2.segments; + + if (typeof segments === 'undefined') { + // vtt tracks may use single file in BaseURL + segments = [{ + uri: attributes.baseUrl, + timeline: attributes.periodIndex, + resolvedUri: attributes.baseUrl || '', + duration: attributes.sourceDuration, + number: 0 + }]; + // targetDuration should be the same duration as the only segment + attributes.duration = attributes.sourceDuration; + } + return { + attributes: (_attributes2 = { + NAME: attributes.id, + BANDWIDTH: attributes.bandwidth + }, _attributes2['PROGRAM-ID'] = 1, _attributes2), + uri: '', + endList: (attributes.type || 'static') === 'static', + timeline: attributes.periodIndex, + resolvedUri: attributes.baseUrl || '', + targetDuration: attributes.duration, + segments: segments, + mediaSequence: segments.length ? segments[0].number : 1 + }; + }; + + var organizeAudioPlaylists = function organizeAudioPlaylists(playlists) { + return playlists.reduce(function (a, playlist) { + var role = playlist.attributes.role && playlist.attributes.role.value || 'main'; + var language = playlist.attributes.lang || ''; + + var label = 'main'; + + if (language) { + label = playlist.attributes.lang + ' (' + role + ')'; + } + + // skip if we already have the highest quality audio for a language + if (a[label] && a[label].playlists[0].attributes.BANDWIDTH > playlist.attributes.bandwidth) { + return a; + } + + a[label] = { + language: language, + autoselect: true, + default: role === 'main', + playlists: [formatAudioPlaylist(playlist)], + uri: '' + }; + + return a; + }, {}); + }; + + var organizeVttPlaylists = function organizeVttPlaylists(playlists) { + return playlists.reduce(function (a, playlist) { + var label = playlist.attributes.lang || 'text'; + + // skip if we already have subtitles + if (a[label]) { + return a; + } + + a[label] = { + language: label, + default: false, + autoselect: false, + playlists: [formatVttPlaylist(playlist)], + uri: '' + }; + + return a; + }, {}); + }; + + var formatVideoPlaylist = function formatVideoPlaylist(_ref3) { + var _attributes3; + + var attributes = _ref3.attributes, + segments = _ref3.segments; + + var playlist = { + attributes: (_attributes3 = { + NAME: attributes.id, + AUDIO: 'audio', + SUBTITLES: 'subs', + RESOLUTION: { + width: attributes.width, + height: attributes.height + }, + CODECS: attributes.codecs, + BANDWIDTH: attributes.bandwidth + }, _attributes3['PROGRAM-ID'] = 1, _attributes3), + uri: '', + endList: (attributes.type || 'static') === 'static', + timeline: attributes.periodIndex, + resolvedUri: '', + targetDuration: attributes.duration, + segments: segments, + mediaSequence: segments.length ? segments[0].number : 1 + }; + + if (attributes.contentProtection) { + playlist.contentProtection = attributes.contentProtection; + } + + return playlist; + }; + + var toM3u8 = function toM3u8(dashPlaylists) { + var _mediaGroups; + + if (!dashPlaylists.length) { + return {}; + } + + // grab all master attributes + var _dashPlaylists$0$attr = dashPlaylists[0].attributes, + duration = _dashPlaylists$0$attr.sourceDuration, + _dashPlaylists$0$attr2 = _dashPlaylists$0$attr.minimumUpdatePeriod, + minimumUpdatePeriod = _dashPlaylists$0$attr2 === undefined ? 0 : _dashPlaylists$0$attr2; + + + var videoOnly = function videoOnly(_ref4) { + var attributes = _ref4.attributes; + return attributes.mimeType === 'video/mp4' || attributes.contentType === 'video'; + }; + var audioOnly = function audioOnly(_ref5) { + var attributes = _ref5.attributes; + return attributes.mimeType === 'audio/mp4' || attributes.contentType === 'audio'; + }; + var vttOnly = function vttOnly(_ref6) { + var attributes = _ref6.attributes; + return attributes.mimeType === 'text/vtt' || attributes.contentType === 'text'; + }; + + var videoPlaylists = dashPlaylists.filter(videoOnly).map(formatVideoPlaylist); + var audioPlaylists = dashPlaylists.filter(audioOnly); + var vttPlaylists = dashPlaylists.filter(vttOnly); + + var master = { + allowCache: true, + discontinuityStarts: [], + segments: [], + endList: true, + mediaGroups: (_mediaGroups = { + AUDIO: {}, + VIDEO: {} + }, _mediaGroups['CLOSED-CAPTIONS'] = {}, _mediaGroups.SUBTITLES = {}, _mediaGroups), + uri: '', + duration: duration, + playlists: videoPlaylists, + minimumUpdatePeriod: minimumUpdatePeriod * 1000 + }; + + if (audioPlaylists.length) { + master.mediaGroups.AUDIO.audio = organizeAudioPlaylists(audioPlaylists); + } + + if (vttPlaylists.length) { + master.mediaGroups.SUBTITLES.subs = organizeVttPlaylists(vttPlaylists); + } + + return master; + }; + + var isObject$1 = function isObject(obj) { + return !!obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object'; + }; + + var merge = function merge() { + for (var _len = arguments.length, objects = Array(_len), _key = 0; _key < _len; _key++) { + objects[_key] = arguments[_key]; + } + + return objects.reduce(function (result, source) { + + Object.keys(source).forEach(function (key) { + + if (Array.isArray(result[key]) && Array.isArray(source[key])) { + result[key] = result[key].concat(source[key]); + } else if (isObject$1(result[key]) && isObject$1(source[key])) { + result[key] = merge(result[key], source[key]); + } else { + result[key] = source[key]; + } + }); + return result; + }, {}); + }; + + var resolveUrl = function resolveUrl(baseUrl, relativeUrl) { + // return early if we don't need to resolve + if (/^[a-z]+:/i.test(relativeUrl)) { + return relativeUrl; + } + + // if the base URL is relative then combine with the current location + if (!/\/\//i.test(baseUrl)) { + baseUrl = urlToolkit.buildAbsoluteURL(window_1.location.href, baseUrl); + } + + return urlToolkit.buildAbsoluteURL(baseUrl, relativeUrl); + }; + + /** + * @typedef {Object} SingleUri + * @property {string} uri - relative location of segment + * @property {string} resolvedUri - resolved location of segment + * @property {Object} byterange - Object containing information on how to make byte range + * requests following byte-range-spec per RFC2616. + * @property {String} byterange.length - length of range request + * @property {String} byterange.offset - byte offset of range request + * + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.1 + */ + + /** + * Converts a URLType node (5.3.9.2.3 Table 13) to a segment object + * that conforms to how m3u8-parser is structured + * + * @see https://github.com/videojs/m3u8-parser + * + * @param {string} baseUrl - baseUrl provided by <BaseUrl> nodes + * @param {string} source - source url for segment + * @param {string} range - optional range used for range calls, follows + * @return {SingleUri} full segment information transformed into a format similar + * to m3u8-parser + */ + var urlTypeToSegment = function urlTypeToSegment(_ref7) { + var _ref7$baseUrl = _ref7.baseUrl, + baseUrl = _ref7$baseUrl === undefined ? '' : _ref7$baseUrl, + _ref7$source = _ref7.source, + source = _ref7$source === undefined ? '' : _ref7$source, + _ref7$range = _ref7.range, + range = _ref7$range === undefined ? '' : _ref7$range; + + var init = { + uri: source, + resolvedUri: resolveUrl(baseUrl || '', source) + }; + + if (range) { + var ranges = range.split('-'); + var startRange = parseInt(ranges[0], 10); + var endRange = parseInt(ranges[1], 10); + + init.byterange = { + length: endRange - startRange, + offset: startRange + }; + } + + return init; + }; + + /** + * Calculates the R (repetition) value for a live stream (for the final segment + * in a manifest where the r value is negative 1) + * + * @param {Object} attributes + * Object containing all inherited attributes from parent elements with attribute + * names as keys + * @param {number} time + * current time (typically the total time up until the final segment) + * @param {number} duration + * duration property for the given <S /> + * + * @return {number} + * R value to reach the end of the given period + */ + var getLiveRValue = function getLiveRValue(attributes, time, duration) { + var NOW = attributes.NOW, + clientOffset = attributes.clientOffset, + availabilityStartTime = attributes.availabilityStartTime, + _attributes$timescale = attributes.timescale, + timescale = _attributes$timescale === undefined ? 1 : _attributes$timescale, + _attributes$start = attributes.start, + start = _attributes$start === undefined ? 0 : _attributes$start, + _attributes$minimumUp = attributes.minimumUpdatePeriod, + minimumUpdatePeriod = _attributes$minimumUp === undefined ? 0 : _attributes$minimumUp; + + var now = (NOW + clientOffset) / 1000; + var periodStartWC = availabilityStartTime + start; + var periodEndWC = now + minimumUpdatePeriod; + var periodDuration = periodEndWC - periodStartWC; + + return Math.ceil((periodDuration * timescale - time) / duration); + }; + + /** + * Uses information provided by SegmentTemplate.SegmentTimeline to determine segment + * timing and duration + * + * @param {Object} attributes + * Object containing all inherited attributes from parent elements with attribute + * names as keys + * @param {Object[]} segmentTimeline + * List of objects representing the attributes of each S element contained within + * + * @return {{number: number, duration: number, time: number, timeline: number}[]} + * List of Objects with segment timing and duration info + */ + var parseByTimeline = function parseByTimeline(attributes, segmentTimeline) { + var _attributes$type = attributes.type, + type = _attributes$type === undefined ? 'static' : _attributes$type, + _attributes$minimumUp2 = attributes.minimumUpdatePeriod, + minimumUpdatePeriod = _attributes$minimumUp2 === undefined ? 0 : _attributes$minimumUp2, + _attributes$media = attributes.media, + media = _attributes$media === undefined ? '' : _attributes$media, + sourceDuration = attributes.sourceDuration, + _attributes$timescale2 = attributes.timescale, + timescale = _attributes$timescale2 === undefined ? 1 : _attributes$timescale2, + _attributes$startNumb = attributes.startNumber, + startNumber = _attributes$startNumb === undefined ? 1 : _attributes$startNumb, + timeline = attributes.periodIndex; + + var segments = []; + var time = -1; + + for (var sIndex = 0; sIndex < segmentTimeline.length; sIndex++) { + var S = segmentTimeline[sIndex]; + var duration = S.d; + var repeat = S.r || 0; + var segmentTime = S.t || 0; + + if (time < 0) { + // first segment + time = segmentTime; + } + + if (segmentTime && segmentTime > time) { + // discontinuity + + // TODO: How to handle this type of discontinuity + // timeline++ here would treat it like HLS discontuity and content would + // get appended without gap + // E.G. + // <S t="0" d="1" /> + // <S d="1" /> + // <S d="1" /> + // <S t="5" d="1" /> + // would have $Time$ values of [0, 1, 2, 5] + // should this be appened at time positions [0, 1, 2, 3],(#EXT-X-DISCONTINUITY) + // or [0, 1, 2, gap, gap, 5]? (#EXT-X-GAP) + // does the value of sourceDuration consider this when calculating arbitrary + // negative @r repeat value? + // E.G. Same elements as above with this added at the end + // <S d="1" r="-1" /> + // with a sourceDuration of 10 + // Would the 2 gaps be included in the time duration calculations resulting in + // 8 segments with $Time$ values of [0, 1, 2, 5, 6, 7, 8, 9] or 10 segments + // with $Time$ values of [0, 1, 2, 5, 6, 7, 8, 9, 10, 11] ? + + time = segmentTime; + } + + var count = void 0; + + if (repeat < 0) { + var nextS = sIndex + 1; + + if (nextS === segmentTimeline.length) { + // last segment + if (type === 'dynamic' && minimumUpdatePeriod > 0 && media.indexOf('$Number$') > 0) { + count = getLiveRValue(attributes, time, duration); + } else { + // TODO: This may be incorrect depending on conclusion of TODO above + count = (sourceDuration * timescale - time) / duration; + } + } else { + count = (segmentTimeline[nextS].t - time) / duration; + } + } else { + count = repeat + 1; + } + + var end = startNumber + segments.length + count; + var number = startNumber + segments.length; + + while (number < end) { + segments.push({number: number, duration: duration / timescale, time: time, timeline: timeline}); + time += duration; + number++; + } + } + + return segments; + }; + + var range = function range(start, end) { + var result = []; + + for (var i = start; i < end; i++) { + result.push(i); + } + + return result; + }; + + var flatten = function flatten(lists) { + return lists.reduce(function (x, y) { + return x.concat(y); + }, []); + }; + + var from = function from(list) { + if (!list.length) { + return []; + } + + var result = []; + + for (var i = 0; i < list.length; i++) { + result.push(list[i]); + } + + return result; + }; + + /** + * Functions for calculating the range of available segments in static and dynamic + * manifests. + */ + var segmentRange = { + /** + * Returns the entire range of available segments for a static MPD + * + * @param {Object} attributes + * Inheritied MPD attributes + * @return {{ start: number, end: number }} + * The start and end numbers for available segments + */ + static: function _static(attributes) { + var duration = attributes.duration, + _attributes$timescale3 = attributes.timescale, + timescale = _attributes$timescale3 === undefined ? 1 : _attributes$timescale3, + sourceDuration = attributes.sourceDuration; + + + return { + start: 0, + end: Math.ceil(sourceDuration / (duration / timescale)) + }; + }, + + + /** + * Returns the current live window range of available segments for a dynamic MPD + * + * @param {Object} attributes + * Inheritied MPD attributes + * @return {{ start: number, end: number }} + * The start and end numbers for available segments + */ + dynamic: function dynamic(attributes) { + var NOW = attributes.NOW, + clientOffset = attributes.clientOffset, + availabilityStartTime = attributes.availabilityStartTime, + _attributes$timescale4 = attributes.timescale, + timescale = _attributes$timescale4 === undefined ? 1 : _attributes$timescale4, + duration = attributes.duration, + _attributes$start2 = attributes.start, + start = _attributes$start2 === undefined ? 0 : _attributes$start2, + _attributes$minimumUp3 = attributes.minimumUpdatePeriod, + minimumUpdatePeriod = _attributes$minimumUp3 === undefined ? 0 : _attributes$minimumUp3, + _attributes$timeShift = attributes.timeShiftBufferDepth, + timeShiftBufferDepth = _attributes$timeShift === undefined ? Infinity : _attributes$timeShift; + + var now = (NOW + clientOffset) / 1000; + var periodStartWC = availabilityStartTime + start; + var periodEndWC = now + minimumUpdatePeriod; + var periodDuration = periodEndWC - periodStartWC; + var segmentCount = Math.ceil(periodDuration * timescale / duration); + var availableStart = Math.floor((now - periodStartWC - timeShiftBufferDepth) * timescale / duration); + var availableEnd = Math.floor((now - periodStartWC) * timescale / duration); + + return { + start: Math.max(0, availableStart), + end: Math.min(segmentCount, availableEnd) + }; + } + }; + + /** + * Maps a range of numbers to objects with information needed to build the corresponding + * segment list + * + * @name toSegmentsCallback + * @function + * @param {number} number + * Number of the segment + * @param {number} index + * Index of the number in the range list + * @return {{ number: Number, duration: Number, timeline: Number, time: Number }} + * Object with segment timing and duration info + */ + + /** + * Returns a callback for Array.prototype.map for mapping a range of numbers to + * information needed to build the segment list. + * + * @param {Object} attributes + * Inherited MPD attributes + * @return {toSegmentsCallback} + * Callback map function + */ + var toSegments = function toSegments(attributes) { + return function (number, index) { + var duration = attributes.duration, + _attributes$timescale5 = attributes.timescale, + timescale = _attributes$timescale5 === undefined ? 1 : _attributes$timescale5, + periodIndex = attributes.periodIndex, + _attributes$startNumb2 = attributes.startNumber, + startNumber = _attributes$startNumb2 === undefined ? 1 : _attributes$startNumb2; + + + return { + number: startNumber + number, + duration: duration / timescale, + timeline: periodIndex, + time: index * duration + }; + }; + }; + + /** + * Returns a list of objects containing segment timing and duration info used for + * building the list of segments. This uses the @duration attribute specified + * in the MPD manifest to derive the range of segments. + * + * @param {Object} attributes + * Inherited MPD attributes + * @return {{number: number, duration: number, time: number, timeline: number}[]} + * List of Objects with segment timing and duration info + */ + var parseByDuration = function parseByDuration(attributes) { + var _attributes$type2 = attributes.type, + type = _attributes$type2 === undefined ? 'static' : _attributes$type2, + duration = attributes.duration, + _attributes$timescale6 = attributes.timescale, + timescale = _attributes$timescale6 === undefined ? 1 : _attributes$timescale6, + sourceDuration = attributes.sourceDuration; + + var _segmentRange$type = segmentRange[type](attributes), + start = _segmentRange$type.start, + end = _segmentRange$type.end; + + var segments = range(start, end).map(toSegments(attributes)); + + if (type === 'static') { + var index = segments.length - 1; + + // final segment may be less than full segment duration + segments[index].duration = sourceDuration - duration / timescale * index; + } + + return segments; + }; + + var identifierPattern = /\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g; + + /** + * Replaces template identifiers with corresponding values. To be used as the callback + * for String.prototype.replace + * + * @name replaceCallback + * @function + * @param {string} match + * Entire match of identifier + * @param {string} identifier + * Name of matched identifier + * @param {string} format + * Format tag string. Its presence indicates that padding is expected + * @param {string} width + * Desired length of the replaced value. Values less than this width shall be left + * zero padded + * @return {string} + * Replacement for the matched identifier + */ + + /** + * Returns a function to be used as a callback for String.prototype.replace to replace + * template identifiers + * + * @param {Obect} values + * Object containing values that shall be used to replace known identifiers + * @param {number} values.RepresentationID + * Value of the Representation@id attribute + * @param {number} values.Number + * Number of the corresponding segment + * @param {number} values.Bandwidth + * Value of the Representation@bandwidth attribute. + * @param {number} values.Time + * Timestamp value of the corresponding segment + * @return {replaceCallback} + * Callback to be used with String.prototype.replace to replace identifiers + */ + var identifierReplacement = function identifierReplacement(values) { + return function (match, identifier, format, width) { + if (match === '$$') { + // escape sequence + return '$'; + } + + if (typeof values[identifier] === 'undefined') { + return match; + } + + var value = '' + values[identifier]; + + if (identifier === 'RepresentationID') { + // Format tag shall not be present with RepresentationID + return value; + } + + if (!format) { + width = 1; + } else { + width = parseInt(width, 10); + } + + if (value.length >= width) { + return value; + } + + return '' + new Array(width - value.length + 1).join('0') + value; + }; + }; + + /** + * Constructs a segment url from a template string + * + * @param {string} url + * Template string to construct url from + * @param {Obect} values + * Object containing values that shall be used to replace known identifiers + * @param {number} values.RepresentationID + * Value of the Representation@id attribute + * @param {number} values.Number + * Number of the corresponding segment + * @param {number} values.Bandwidth + * Value of the Representation@bandwidth attribute. + * @param {number} values.Time + * Timestamp value of the corresponding segment + * @return {string} + * Segment url with identifiers replaced + */ + var constructTemplateUrl = function constructTemplateUrl(url, values) { + return url.replace(identifierPattern, identifierReplacement(values)); + }; + + /** + * Generates a list of objects containing timing and duration information about each + * segment needed to generate segment uris and the complete segment object + * + * @param {Object} attributes + * Object containing all inherited attributes from parent elements with attribute + * names as keys + * @param {Object[]|undefined} segmentTimeline + * List of objects representing the attributes of each S element contained within + * the SegmentTimeline element + * @return {{number: number, duration: number, time: number, timeline: number}[]} + * List of Objects with segment timing and duration info + */ + var parseTemplateInfo = function parseTemplateInfo(attributes, segmentTimeline) { + if (!attributes.duration && !segmentTimeline) { + // if neither @duration or SegmentTimeline are present, then there shall be exactly + // one media segment + return [{ + number: attributes.startNumber || 1, + duration: attributes.sourceDuration, + time: 0, + timeline: attributes.periodIndex + }]; + } + + if (attributes.duration) { + return parseByDuration(attributes); + } + + return parseByTimeline(attributes, segmentTimeline); + }; + + /** + * Generates a list of segments using information provided by the SegmentTemplate element + * + * @param {Object} attributes + * Object containing all inherited attributes from parent elements with attribute + * names as keys + * @param {Object[]|undefined} segmentTimeline + * List of objects representing the attributes of each S element contained within + * the SegmentTimeline element + * @return {Object[]} + * List of segment objects + */ + var segmentsFromTemplate = function segmentsFromTemplate(attributes, segmentTimeline) { + var templateValues = { + RepresentationID: attributes.id, + Bandwidth: attributes.bandwidth || 0 + }; + + var _attributes$initializ = attributes.initialization, + initialization = _attributes$initializ === undefined ? {sourceURL: '', range: ''} : _attributes$initializ; + + + var mapSegment = urlTypeToSegment({ + baseUrl: attributes.baseUrl, + source: constructTemplateUrl(initialization.sourceURL, templateValues), + range: initialization.range + }); + + var segments = parseTemplateInfo(attributes, segmentTimeline); + + return segments.map(function (segment) { + templateValues.Number = segment.number; + templateValues.Time = segment.time; + + var uri = constructTemplateUrl(attributes.media || '', templateValues); + + return { + uri: uri, + timeline: segment.timeline, + duration: segment.duration, + resolvedUri: resolveUrl(attributes.baseUrl || '', uri), + map: mapSegment, + number: segment.number + }; + }); + }; + + var errors = { + INVALID_NUMBER_OF_PERIOD: 'INVALID_NUMBER_OF_PERIOD', + DASH_EMPTY_MANIFEST: 'DASH_EMPTY_MANIFEST', + DASH_INVALID_XML: 'DASH_INVALID_XML', + NO_BASE_URL: 'NO_BASE_URL', + MISSING_SEGMENT_INFORMATION: 'MISSING_SEGMENT_INFORMATION', + SEGMENT_TIME_UNSPECIFIED: 'SEGMENT_TIME_UNSPECIFIED', + UNSUPPORTED_UTC_TIMING_SCHEME: 'UNSUPPORTED_UTC_TIMING_SCHEME' + }; + + /** + * Converts a <SegmentUrl> (of type URLType from the DASH spec 5.3.9.2 Table 14) + * to an object that matches the output of a segment in videojs/mpd-parser + * + * @param {Object} attributes + * Object containing all inherited attributes from parent elements with attribute + * names as keys + * @param {Object} segmentUrl + * <SegmentURL> node to translate into a segment object + * @return {Object} translated segment object + */ + var SegmentURLToSegmentObject = function SegmentURLToSegmentObject(attributes, segmentUrl) { + var baseUrl = attributes.baseUrl, + _attributes$initializ2 = attributes.initialization, + initialization = _attributes$initializ2 === undefined ? {} : _attributes$initializ2; + + + var initSegment = urlTypeToSegment({ + baseUrl: baseUrl, + source: initialization.sourceURL, + range: initialization.range + }); + + var segment = urlTypeToSegment({ + baseUrl: baseUrl, + source: segmentUrl.media, + range: segmentUrl.mediaRange + }); + + segment.map = initSegment; + + return segment; + }; + + /** + * Generates a list of segments using information provided by the SegmentList element + * SegmentList (DASH SPEC Section 5.3.9.3.2) contains a set of <SegmentURL> nodes. Each + * node should be translated into segment. + * + * @param {Object} attributes + * Object containing all inherited attributes from parent elements with attribute + * names as keys + * @param {Object[]|undefined} segmentTimeline + * List of objects representing the attributes of each S element contained within + * the SegmentTimeline element + * @return {Object.<Array>} list of segments + */ + var segmentsFromList = function segmentsFromList(attributes, segmentTimeline) { + var duration = attributes.duration, + _attributes$segmentUr = attributes.segmentUrls, + segmentUrls = _attributes$segmentUr === undefined ? [] : _attributes$segmentUr; + + // Per spec (5.3.9.2.1) no way to determine segment duration OR + // if both SegmentTimeline and @duration are defined, it is outside of spec. + + if (!duration && !segmentTimeline || duration && segmentTimeline) { + throw new Error(errors.SEGMENT_TIME_UNSPECIFIED); + } + + var segmentUrlMap = segmentUrls.map(function (segmentUrlObject) { + return SegmentURLToSegmentObject(attributes, segmentUrlObject); + }); + var segmentTimeInfo = void 0; + + if (duration) { + segmentTimeInfo = parseByDuration(attributes); + } + + if (segmentTimeline) { + segmentTimeInfo = parseByTimeline(attributes, segmentTimeline); + } + + var segments = segmentTimeInfo.map(function (segmentTime, index) { + if (segmentUrlMap[index]) { + var segment = segmentUrlMap[index]; + + segment.timeline = segmentTime.timeline; + segment.duration = segmentTime.duration; + segment.number = segmentTime.number; + return segment; + } + // Since we're mapping we should get rid of any blank segments (in case + // the given SegmentTimeline is handling for more elements than we have + // SegmentURLs for). + }).filter(function (segment) { + return segment; + }); + + return segments; + }; + + /** + * Translates SegmentBase into a set of segments. + * (DASH SPEC Section 5.3.9.3.2) contains a set of <SegmentURL> nodes. Each + * node should be translated into segment. + * + * @param {Object} attributes + * Object containing all inherited attributes from parent elements with attribute + * names as keys + * @return {Object.<Array>} list of segments + */ + var segmentsFromBase = function segmentsFromBase(attributes) { + var baseUrl = attributes.baseUrl, + _attributes$initializ3 = attributes.initialization, + initialization = _attributes$initializ3 === undefined ? {} : _attributes$initializ3, + sourceDuration = attributes.sourceDuration, + _attributes$timescale7 = attributes.timescale, + timescale = _attributes$timescale7 === undefined ? 1 : _attributes$timescale7, + _attributes$indexRang = attributes.indexRange, + indexRange = _attributes$indexRang === undefined ? '' : _attributes$indexRang, + duration = attributes.duration; + + // base url is required for SegmentBase to work, per spec (Section 5.3.9.2.1) + + if (!baseUrl) { + throw new Error(errors.NO_BASE_URL); + } + + var initSegment = urlTypeToSegment({ + baseUrl: baseUrl, + source: initialization.sourceURL, + range: initialization.range + }); + var segment = urlTypeToSegment({baseUrl: baseUrl, source: baseUrl, range: indexRange}); + + segment.map = initSegment; + + // If there is a duration, use it, otherwise use the given duration of the source + // (since SegmentBase is only for one total segment) + if (duration) { + var segmentTimeInfo = parseByDuration(attributes); + + if (segmentTimeInfo.length) { + segment.duration = segmentTimeInfo[0].duration; + segment.timeline = segmentTimeInfo[0].timeline; + } + } else if (sourceDuration) { + segment.duration = sourceDuration / timescale; + segment.timeline = 0; + } + + // This is used for mediaSequence + segment.number = 0; + + return [segment]; + }; + + var generateSegments = function generateSegments(_ref8) { + var attributes = _ref8.attributes, + segmentInfo = _ref8.segmentInfo; + + var segmentAttributes = void 0; + var segmentsFn = void 0; + + if (segmentInfo.template) { + segmentsFn = segmentsFromTemplate; + segmentAttributes = merge(attributes, segmentInfo.template); + } else if (segmentInfo.base) { + segmentsFn = segmentsFromBase; + segmentAttributes = merge(attributes, segmentInfo.base); + } else if (segmentInfo.list) { + segmentsFn = segmentsFromList; + segmentAttributes = merge(attributes, segmentInfo.list); + } + + if (!segmentsFn) { + return {attributes: attributes}; + } + + var segments = segmentsFn(segmentAttributes, segmentInfo.timeline); + + // The @duration attribute will be used to determin the playlist's targetDuration which + // must be in seconds. Since we've generated the segment list, we no longer need + // @duration to be in @timescale units, so we can convert it here. + if (segmentAttributes.duration) { + var _segmentAttributes = segmentAttributes, + duration = _segmentAttributes.duration, + _segmentAttributes$ti = _segmentAttributes.timescale, + timescale = _segmentAttributes$ti === undefined ? 1 : _segmentAttributes$ti; + + + segmentAttributes.duration = duration / timescale; + } else if (segments.length) { + // if there is no @duration attribute, use the largest segment duration as + // as target duration + segmentAttributes.duration = segments.reduce(function (max, segment) { + return Math.max(max, Math.ceil(segment.duration)); + }, 0); + } else { + segmentAttributes.duration = 0; + } + + return { + attributes: segmentAttributes, + segments: segments + }; + }; + + var toPlaylists = function toPlaylists(representations) { + return representations.map(generateSegments); + }; + + var findChildren = function findChildren(element, name) { + return from(element.childNodes).filter(function (_ref9) { + var tagName = _ref9.tagName; + return tagName === name; + }); + }; + + var getContent = function getContent(element) { + return element.textContent.trim(); + }; + + var parseDuration = function parseDuration(str) { + var SECONDS_IN_YEAR = 365 * 24 * 60 * 60; + var SECONDS_IN_MONTH = 30 * 24 * 60 * 60; + var SECONDS_IN_DAY = 24 * 60 * 60; + var SECONDS_IN_HOUR = 60 * 60; + var SECONDS_IN_MIN = 60; + + // P10Y10M10DT10H10M10.1S + var durationRegex = /P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)D)?(?:T(?:(\d*)H)?(?:(\d*)M)?(?:([\d.]*)S)?)?/; + var match = durationRegex.exec(str); + + if (!match) { + return 0; + } + + var _match$slice = match.slice(1), + year = _match$slice[0], + month = _match$slice[1], + day = _match$slice[2], + hour = _match$slice[3], + minute = _match$slice[4], + second = _match$slice[5]; + + return parseFloat(year || 0) * SECONDS_IN_YEAR + parseFloat(month || 0) * SECONDS_IN_MONTH + parseFloat(day || 0) * SECONDS_IN_DAY + parseFloat(hour || 0) * SECONDS_IN_HOUR + parseFloat(minute || 0) * SECONDS_IN_MIN + parseFloat(second || 0); + }; + + var parseDate = function parseDate(str) { + // Date format without timezone according to ISO 8601 + // YYY-MM-DDThh:mm:ss.ssssss + var dateRegex = /^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/; + + // If the date string does not specifiy a timezone, we must specifiy UTC. This is + // expressed by ending with 'Z' + if (dateRegex.test(str)) { + str += 'Z'; + } + + return Date.parse(str); + }; + + // TODO: maybe order these in some way that makes it easy to find specific attributes + var parsers = { + /** + * Specifies the duration of the entire Media Presentation. Format is a duration string + * as specified in ISO 8601 + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The duration in seconds + */ + mediaPresentationDuration: function mediaPresentationDuration(value) { + return parseDuration(value); + }, + + + /** + * Specifies the Segment availability start time for all Segments referred to in this + * MPD. For a dynamic manifest, it specifies the anchor for the earliest availability + * time. Format is a date string as specified in ISO 8601 + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The date as seconds from unix epoch + */ + availabilityStartTime: function availabilityStartTime(value) { + return parseDate(value) / 1000; + }, + + + /** + * Specifies the smallest period between potential changes to the MPD. Format is a + * duration string as specified in ISO 8601 + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The duration in seconds + */ + minimumUpdatePeriod: function minimumUpdatePeriod(value) { + return parseDuration(value); + }, + + + /** + * Specifies the duration of the smallest time shifting buffer for any Representation + * in the MPD. Format is a duration string as specified in ISO 8601 + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The duration in seconds + */ + timeShiftBufferDepth: function timeShiftBufferDepth(value) { + return parseDuration(value); + }, + + + /** + * Specifies the PeriodStart time of the Period relative to the availabilityStarttime. + * Format is a duration string as specified in ISO 8601 + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The duration in seconds + */ + start: function start(value) { + return parseDuration(value); + }, + + + /** + * Specifies the width of the visual presentation + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The parsed width + */ + width: function width(value) { + return parseInt(value, 10); + }, + + + /** + * Specifies the height of the visual presentation + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The parsed height + */ + height: function height(value) { + return parseInt(value, 10); + }, + + + /** + * Specifies the bitrate of the representation + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The parsed bandwidth + */ + bandwidth: function bandwidth(value) { + return parseInt(value, 10); + }, + + + /** + * Specifies the number of the first Media Segment in this Representation in the Period + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The parsed number + */ + startNumber: function startNumber(value) { + return parseInt(value, 10); + }, + + + /** + * Specifies the timescale in units per seconds + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The aprsed timescale + */ + timescale: function timescale(value) { + return parseInt(value, 10); + }, + + + /** + * Specifies the constant approximate Segment duration + * NOTE: The <Period> element also contains an @duration attribute. This duration + * specifies the duration of the Period. This attribute is currently not + * supported by the rest of the parser, however we still check for it to prevent + * errors. + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The parsed duration + */ + duration: function duration(value) { + var parsedValue = parseInt(value, 10); + + if (isNaN(parsedValue)) { + return parseDuration(value); + } + + return parsedValue; + }, + + + /** + * Specifies the Segment duration, in units of the value of the @timescale. + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The parsed duration + */ + d: function d(value) { + return parseInt(value, 10); + }, + + + /** + * Specifies the MPD start time, in @timescale units, the first Segment in the series + * starts relative to the beginning of the Period + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The parsed time + */ + t: function t(value) { + return parseInt(value, 10); + }, + + + /** + * Specifies the repeat count of the number of following contiguous Segments with the + * same duration expressed by the value of @d + * + * @param {string} value + * value of attribute as a string + * @return {number} + * The parsed number + */ + r: function r(value) { + return parseInt(value, 10); + }, + + + /** + * Default parser for all other attributes. Acts as a no-op and just returns the value + * as a string + * + * @param {string} value + * value of attribute as a string + * @return {string} + * Unparsed value + */ + DEFAULT: function DEFAULT(value) { + return value; + } + }; + + /** + * Gets all the attributes and values of the provided node, parses attributes with known + * types, and returns an object with attribute names mapped to values. + * + * @param {Node} el + * The node to parse attributes from + * @return {Object} + * Object with all attributes of el parsed + */ + var parseAttributes$1 = function parseAttributes(el) { + if (!(el && el.attributes)) { + return {}; + } + + return from(el.attributes).reduce(function (a, e) { + var parseFn = parsers[e.name] || parsers.DEFAULT; + + a[e.name] = parseFn(e.value); + + return a; + }, {}); + }; + + function decodeB64ToUint8Array(b64Text) { + var decodedString = window_1.atob(b64Text); + var array = new Uint8Array(decodedString.length); + + for (var i = 0; i < decodedString.length; i++) { + array[i] = decodedString.charCodeAt(i); + } + return array; + } + + var keySystemsMap = { + 'urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b': 'org.w3.clearkey', + 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed': 'com.widevine.alpha', + 'urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95': 'com.microsoft.playready', + 'urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb': 'com.adobe.primetime' + }; + + /** + * Builds a list of urls that is the product of the reference urls and BaseURL values + * + * @param {string[]} referenceUrls + * List of reference urls to resolve to + * @param {Node[]} baseUrlElements + * List of BaseURL nodes from the mpd + * @return {string[]} + * List of resolved urls + */ + var buildBaseUrls = function buildBaseUrls(referenceUrls, baseUrlElements) { + if (!baseUrlElements.length) { + return referenceUrls; + } + + return flatten(referenceUrls.map(function (reference) { + return baseUrlElements.map(function (baseUrlElement) { + return resolveUrl(reference, getContent(baseUrlElement)); + }); + })); + }; + + /** + * Contains all Segment information for its containing AdaptationSet + * + * @typedef {Object} SegmentInformation + * @property {Object|undefined} template + * Contains the attributes for the SegmentTemplate node + * @property {Object[]|undefined} timeline + * Contains a list of atrributes for each S node within the SegmentTimeline node + * @property {Object|undefined} list + * Contains the attributes for the SegmentList node + * @property {Object|undefined} base + * Contains the attributes for the SegmentBase node + */ + + /** + * Returns all available Segment information contained within the AdaptationSet node + * + * @param {Node} adaptationSet + * The AdaptationSet node to get Segment information from + * @return {SegmentInformation} + * The Segment information contained within the provided AdaptationSet + */ + var getSegmentInformation = function getSegmentInformation(adaptationSet) { + var segmentTemplate = findChildren(adaptationSet, 'SegmentTemplate')[0]; + var segmentList = findChildren(adaptationSet, 'SegmentList')[0]; + var segmentUrls = segmentList && findChildren(segmentList, 'SegmentURL').map(function (s) { + return merge({tag: 'SegmentURL'}, parseAttributes$1(s)); + }); + var segmentBase = findChildren(adaptationSet, 'SegmentBase')[0]; + var segmentTimelineParentNode = segmentList || segmentTemplate; + var segmentTimeline = segmentTimelineParentNode && findChildren(segmentTimelineParentNode, 'SegmentTimeline')[0]; + var segmentInitializationParentNode = segmentList || segmentBase || segmentTemplate; + var segmentInitialization = segmentInitializationParentNode && findChildren(segmentInitializationParentNode, 'Initialization')[0]; + + // SegmentTemplate is handled slightly differently, since it can have both + // @initialization and an <Initialization> node. @initialization can be templated, + // while the node can have a url and range specified. If the <SegmentTemplate> has + // both @initialization and an <Initialization> subelement we opt to override with + // the node, as this interaction is not defined in the spec. + var template = segmentTemplate && parseAttributes$1(segmentTemplate); + + if (template && segmentInitialization) { + template.initialization = segmentInitialization && parseAttributes$1(segmentInitialization); + } else if (template && template.initialization) { + // If it is @initialization we convert it to an object since this is the format that + // later functions will rely on for the initialization segment. This is only valid + // for <SegmentTemplate> + template.initialization = {sourceURL: template.initialization}; + } + + var segmentInfo = { + template: template, + timeline: segmentTimeline && findChildren(segmentTimeline, 'S').map(function (s) { + return parseAttributes$1(s); + }), + list: segmentList && merge(parseAttributes$1(segmentList), { + segmentUrls: segmentUrls, + initialization: parseAttributes$1(segmentInitialization) + }), + base: segmentBase && merge(parseAttributes$1(segmentBase), { + initialization: parseAttributes$1(segmentInitialization) + }) + }; + + Object.keys(segmentInfo).forEach(function (key) { + if (!segmentInfo[key]) { + delete segmentInfo[key]; + } + }); + + return segmentInfo; + }; + + /** + * Contains Segment information and attributes needed to construct a Playlist object + * from a Representation + * + * @typedef {Object} RepresentationInformation + * @property {SegmentInformation} segmentInfo + * Segment information for this Representation + * @property {Object} attributes + * Inherited attributes for this Representation + */ + + /** + * Maps a Representation node to an object containing Segment information and attributes + * + * @name inheritBaseUrlsCallback + * @function + * @param {Node} representation + * Representation node from the mpd + * @return {RepresentationInformation} + * Representation information needed to construct a Playlist object + */ + + /** + * Returns a callback for Array.prototype.map for mapping Representation nodes to + * Segment information and attributes using inherited BaseURL nodes. + * + * @param {Object} adaptationSetAttributes + * Contains attributes inherited by the AdaptationSet + * @param {string[]} adaptationSetBaseUrls + * Contains list of resolved base urls inherited by the AdaptationSet + * @param {SegmentInformation} adaptationSetSegmentInfo + * Contains Segment information for the AdaptationSet + * @return {inheritBaseUrlsCallback} + * Callback map function + */ + var inheritBaseUrls = function inheritBaseUrls(adaptationSetAttributes, adaptationSetBaseUrls, adaptationSetSegmentInfo) { + return function (representation) { + var repBaseUrlElements = findChildren(representation, 'BaseURL'); + var repBaseUrls = buildBaseUrls(adaptationSetBaseUrls, repBaseUrlElements); + var attributes = merge(adaptationSetAttributes, parseAttributes$1(representation)); + var representationSegmentInfo = getSegmentInformation(representation); + + return repBaseUrls.map(function (baseUrl) { + return { + segmentInfo: merge(adaptationSetSegmentInfo, representationSegmentInfo), + attributes: merge(attributes, {baseUrl: baseUrl}) + }; + }); + }; + }; + + /** + * Tranforms a series of content protection nodes to + * an object containing pssh data by key system + * + * @param {Node[]} contentProtectionNodes + * Content protection nodes + * @return {Object} + * Object containing pssh data by key system + */ + var generateKeySystemInformation = function generateKeySystemInformation(contentProtectionNodes) { + return contentProtectionNodes.reduce(function (acc, node) { + var attributes = parseAttributes$1(node); + var keySystem = keySystemsMap[attributes.schemeIdUri]; + + if (keySystem) { + acc[keySystem] = {attributes: attributes}; + + var psshNode = findChildren(node, 'cenc:pssh')[0]; + + if (psshNode) { + var pssh = getContent(psshNode); + var psshBuffer = pssh && decodeB64ToUint8Array(pssh); + + acc[keySystem].pssh = psshBuffer; + } + } + + return acc; + }, {}); + }; + + /** + * Maps an AdaptationSet node to a list of Representation information objects + * + * @name toRepresentationsCallback + * @function + * @param {Node} adaptationSet + * AdaptationSet node from the mpd + * @return {RepresentationInformation[]} + * List of objects containing Representaion information + */ + + /** + * Returns a callback for Array.prototype.map for mapping AdaptationSet nodes to a list of + * Representation information objects + * + * @param {Object} periodAttributes + * Contains attributes inherited by the Period + * @param {string[]} periodBaseUrls + * Contains list of resolved base urls inherited by the Period + * @param {string[]} periodSegmentInfo + * Contains Segment Information at the period level + * @return {toRepresentationsCallback} + * Callback map function + */ + var toRepresentations = function toRepresentations(periodAttributes, periodBaseUrls, periodSegmentInfo) { + return function (adaptationSet) { + var adaptationSetAttributes = parseAttributes$1(adaptationSet); + var adaptationSetBaseUrls = buildBaseUrls(periodBaseUrls, findChildren(adaptationSet, 'BaseURL')); + var role = findChildren(adaptationSet, 'Role')[0]; + var roleAttributes = {role: parseAttributes$1(role)}; + + var attrs = merge(periodAttributes, adaptationSetAttributes, roleAttributes); + + var contentProtection = generateKeySystemInformation(findChildren(adaptationSet, 'ContentProtection')); + + if (Object.keys(contentProtection).length) { + attrs = merge(attrs, {contentProtection: contentProtection}); + } + + var segmentInfo = getSegmentInformation(adaptationSet); + var representations = findChildren(adaptationSet, 'Representation'); + var adaptationSetSegmentInfo = merge(periodSegmentInfo, segmentInfo); + + return flatten(representations.map(inheritBaseUrls(attrs, adaptationSetBaseUrls, adaptationSetSegmentInfo))); + }; + }; + + /** + * Maps an Period node to a list of Representation inforamtion objects for all + * AdaptationSet nodes contained within the Period + * + * @name toAdaptationSetsCallback + * @function + * @param {Node} period + * Period node from the mpd + * @param {number} periodIndex + * Index of the Period within the mpd + * @return {RepresentationInformation[]} + * List of objects containing Representaion information + */ + + /** + * Returns a callback for Array.prototype.map for mapping Period nodes to a list of + * Representation information objects + * + * @param {Object} mpdAttributes + * Contains attributes inherited by the mpd + * @param {string[]} mpdBaseUrls + * Contains list of resolved base urls inherited by the mpd + * @return {toAdaptationSetsCallback} + * Callback map function + */ + var toAdaptationSets = function toAdaptationSets(mpdAttributes, mpdBaseUrls) { + return function (period, periodIndex) { + var periodBaseUrls = buildBaseUrls(mpdBaseUrls, findChildren(period, 'BaseURL')); + var periodAtt = parseAttributes$1(period); + var periodAttributes = merge(mpdAttributes, periodAtt, {periodIndex: periodIndex}); + var adaptationSets = findChildren(period, 'AdaptationSet'); + var periodSegmentInfo = getSegmentInformation(period); + + return flatten(adaptationSets.map(toRepresentations(periodAttributes, periodBaseUrls, periodSegmentInfo))); + }; + }; + + /** + * Traverses the mpd xml tree to generate a list of Representation information objects + * that have inherited attributes from parent nodes + * + * @param {Node} mpd + * The root node of the mpd + * @param {Object} options + * Available options for inheritAttributes + * @param {string} options.manifestUri + * The uri source of the mpd + * @param {number} options.NOW + * Current time per DASH IOP. Default is current time in ms since epoch + * @param {number} options.clientOffset + * Client time difference from NOW (in milliseconds) + * @return {RepresentationInformation[]} + * List of objects containing Representation information + */ + var inheritAttributes = function inheritAttributes(mpd) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var _options$manifestUri = options.manifestUri, + manifestUri = _options$manifestUri === undefined ? '' : _options$manifestUri, + _options$NOW = options.NOW, + NOW = _options$NOW === undefined ? Date.now() : _options$NOW, + _options$clientOffset = options.clientOffset, + clientOffset = _options$clientOffset === undefined ? 0 : _options$clientOffset; + + var periods = findChildren(mpd, 'Period'); + + if (periods.length !== 1) { + // TODO add support for multiperiod + throw new Error(errors.INVALID_NUMBER_OF_PERIOD); + } + + var mpdAttributes = parseAttributes$1(mpd); + var mpdBaseUrls = buildBaseUrls([manifestUri], findChildren(mpd, 'BaseURL')); + + mpdAttributes.sourceDuration = mpdAttributes.mediaPresentationDuration || 0; + mpdAttributes.NOW = NOW; + mpdAttributes.clientOffset = clientOffset; + + return flatten(periods.map(toAdaptationSets(mpdAttributes, mpdBaseUrls))); + }; + + var stringToMpdXml = function stringToMpdXml(manifestString) { + if (manifestString === '') { + throw new Error(errors.DASH_EMPTY_MANIFEST); + } + + var parser = new window_1.DOMParser(); + var xml = parser.parseFromString(manifestString, 'application/xml'); + var mpd = xml && xml.documentElement.tagName === 'MPD' ? xml.documentElement : null; + + if (!mpd || mpd && mpd.getElementsByTagName('parsererror').length > 0) { + throw new Error(errors.DASH_INVALID_XML); + } + + return mpd; + }; + + /** + * Parses the manifest for a UTCTiming node, returning the nodes attributes if found + * + * @param {string} mpd + * XML string of the MPD manifest + * @return {Object|null} + * Attributes of UTCTiming node specified in the manifest. Null if none found + */ + var parseUTCTimingScheme = function parseUTCTimingScheme(mpd) { + var UTCTimingNode = findChildren(mpd, 'UTCTiming')[0]; + + if (!UTCTimingNode) { + return null; + } + + var attributes = parseAttributes$1(UTCTimingNode); + + switch (attributes.schemeIdUri) { + case 'urn:mpeg:dash:utc:http-head:2014': + case 'urn:mpeg:dash:utc:http-head:2012': + attributes.method = 'HEAD'; + break; + case 'urn:mpeg:dash:utc:http-xsdate:2014': + case 'urn:mpeg:dash:utc:http-iso:2014': + case 'urn:mpeg:dash:utc:http-xsdate:2012': + case 'urn:mpeg:dash:utc:http-iso:2012': + attributes.method = 'GET'; + break; + case 'urn:mpeg:dash:utc:direct:2014': + case 'urn:mpeg:dash:utc:direct:2012': + attributes.method = 'DIRECT'; + attributes.value = Date.parse(attributes.value); + break; + case 'urn:mpeg:dash:utc:http-ntp:2014': + case 'urn:mpeg:dash:utc:ntp:2014': + case 'urn:mpeg:dash:utc:sntp:2014': + default: + throw new Error(errors.UNSUPPORTED_UTC_TIMING_SCHEME); + } + + return attributes; + }; + + var parse = function parse(manifestString, options) { + return toM3u8(toPlaylists(inheritAttributes(stringToMpdXml(manifestString), options))); + }; + + /** + * Parses the manifest for a UTCTiming node, returning the nodes attributes if found + * + * @param {string} manifestString + * XML string of the MPD manifest + * @return {Object|null} + * Attributes of UTCTiming node specified in the manifest. Null if none found + */ + var parseUTCTiming = function parseUTCTiming(manifestString) { + return parseUTCTimingScheme(stringToMpdXml(manifestString)); + }; + + var toUnsigned = function toUnsigned(value) { + return value >>> 0; + }; + + var bin = { + toUnsigned: toUnsigned + }; + var bin_1 = bin.toUnsigned; + + var bin$1 = /*#__PURE__*/Object.freeze({ + default: bin, + __moduleExports: bin, + toUnsigned: bin_1 + }); + + var require$$0$1 = (bin$1 && bin) || bin$1; + + var toUnsigned$1 = require$$0$1.toUnsigned; + var _findBox, parseType, timescale, startTime; + + // Find the data for a box specified by its path + _findBox = function findBox(data, path) { + var results = [], + i, + size, + type, + end, + subresults; + + if (!path.length) { + // short-circuit the search for empty paths + return null; + } + + for (i = 0; i < data.byteLength;) { + size = toUnsigned$1(data[i] << 24 | data[i + 1] << 16 | data[i + 2] << 8 | data[i + 3]); + + type = parseType(data.subarray(i + 4, i + 8)); + + end = size > 1 ? i + size : data.byteLength; + + if (type === path[0]) { + if (path.length === 1) { + // this is the end of the path and we've found the box we were + // looking for + results.push(data.subarray(i + 8, end)); + } else { + // recursively search for the next box along the path + subresults = _findBox(data.subarray(i + 8, end), path.slice(1)); + if (subresults.length) { + results = results.concat(subresults); + } + } + } + i = end; + } + + // we've finished searching all of data + return results; + }; + + /** + * Returns the string representation of an ASCII encoded four byte buffer. + * @param buffer {Uint8Array} a four-byte buffer to translate + * @return {string} the corresponding string + */ + parseType = function parseType(buffer) { + var result = ''; + result += String.fromCharCode(buffer[0]); + result += String.fromCharCode(buffer[1]); + result += String.fromCharCode(buffer[2]); + result += String.fromCharCode(buffer[3]); + return result; + }; + + /** + * Parses an MP4 initialization segment and extracts the timescale + * values for any declared tracks. Timescale values indicate the + * number of clock ticks per second to assume for time-based values + * elsewhere in the MP4. + * + * To determine the start time of an MP4, you need two pieces of + * information: the timescale unit and the earliest base media decode + * time. Multiple timescales can be specified within an MP4 but the + * base media decode time is always expressed in the timescale from + * the media header box for the track: + * ``` + * moov > trak > mdia > mdhd.timescale + * ``` + * @param init {Uint8Array} the bytes of the init segment + * @return {object} a hash of track ids to timescale values or null if + * the init segment is malformed. + */ + timescale = function timescale(init) { + var result = {}, + traks = _findBox(init, ['moov', 'trak']); + + // mdhd timescale + return traks.reduce(function (result, trak) { + var tkhd, version, index, id, mdhd; + + tkhd = _findBox(trak, ['tkhd'])[0]; + if (!tkhd) { + return null; + } + version = tkhd[0]; + index = version === 0 ? 12 : 20; + id = toUnsigned$1(tkhd[index] << 24 | tkhd[index + 1] << 16 | tkhd[index + 2] << 8 | tkhd[index + 3]); + + mdhd = _findBox(trak, ['mdia', 'mdhd'])[0]; + if (!mdhd) { + return null; + } + version = mdhd[0]; + index = version === 0 ? 12 : 20; + result[id] = toUnsigned$1(mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]); + return result; + }, result); + }; + + /** + * Determine the base media decode start time, in seconds, for an MP4 + * fragment. If multiple fragments are specified, the earliest time is + * returned. + * + * The base media decode time can be parsed from track fragment + * metadata: + * ``` + * moof > traf > tfdt.baseMediaDecodeTime + * ``` + * It requires the timescale value from the mdhd to interpret. + * + * @param timescale {object} a hash of track ids to timescale values. + * @return {number} the earliest base media decode start time for the + * fragment, in seconds + */ + startTime = function startTime(timescale, fragment) { + var trafs, baseTimes, result; + + // we need info from two childrend of each track fragment box + trafs = _findBox(fragment, ['moof', 'traf']); + + // determine the start times for each track + baseTimes = [].concat.apply([], trafs.map(function (traf) { + return _findBox(traf, ['tfhd']).map(function (tfhd) { + var id, scale, baseTime; + + // get the track id from the tfhd + id = toUnsigned$1(tfhd[4] << 24 | tfhd[5] << 16 | tfhd[6] << 8 | tfhd[7]); + // assume a 90kHz clock if no timescale was specified + scale = timescale[id] || 90e3; + + // get the base media decode time from the tfdt + baseTime = _findBox(traf, ['tfdt']).map(function (tfdt) { + var version, result; + + version = tfdt[0]; + result = toUnsigned$1(tfdt[4] << 24 | tfdt[5] << 16 | tfdt[6] << 8 | tfdt[7]); + if (version === 1) { + result *= Math.pow(2, 32); + result += toUnsigned$1(tfdt[8] << 24 | tfdt[9] << 16 | tfdt[10] << 8 | tfdt[11]); + } + return result; + })[0]; + baseTime = baseTime || Infinity; + + // convert base time to seconds + return baseTime / scale; + }); + })); + + // return the minimum + result = Math.min.apply(null, baseTimes); + return isFinite(result) ? result : 0; + }; + + var probe = { + parseType: parseType, + timescale: timescale, + startTime: startTime + }; + + var streamTypes = { + H264_STREAM_TYPE: 0x1B, + ADTS_STREAM_TYPE: 0x0F, + METADATA_STREAM_TYPE: 0x15 + }; + var streamTypes_1 = streamTypes.H264_STREAM_TYPE; + var streamTypes_2 = streamTypes.ADTS_STREAM_TYPE; + var streamTypes_3 = streamTypes.METADATA_STREAM_TYPE; + + var streamTypes$1 = /*#__PURE__*/Object.freeze({ + default: streamTypes, + __moduleExports: streamTypes, + H264_STREAM_TYPE: streamTypes_1, + ADTS_STREAM_TYPE: streamTypes_2, + METADATA_STREAM_TYPE: streamTypes_3 + }); + + /** + * mux.js + * + * Copyright (c) 2014 Brightcove + * All rights reserved. + * + * A lightweight readable stream implemention that handles event dispatching. + * Objects that inherit from streams should call init in their constructors. + */ + + var Stream$1 = function Stream() { + this.init = function () { + var listeners = {}; + /** + * Add a listener for a specified event type. + * @param type {string} the event name + * @param listener {function} the callback to be invoked when an event of + * the specified type occurs + */ + this.on = function (type, listener) { + if (!listeners[type]) { + listeners[type] = []; + } + listeners[type] = listeners[type].concat(listener); + }; + /** + * Remove a listener for a specified event type. + * @param type {string} the event name + * @param listener {function} a function previously registered for this + * type of event through `on` + */ + this.off = function (type, listener) { + var index; + if (!listeners[type]) { + return false; + } + index = listeners[type].indexOf(listener); + listeners[type] = listeners[type].slice(); + listeners[type].splice(index, 1); + return index > -1; + }; + /** + * Trigger an event of the specified type on this stream. Any additional + * arguments to this function are passed as parameters to event listeners. + * @param type {string} the event name + */ + this.trigger = function (type) { + var callbacks, i, length, args; + callbacks = listeners[type]; + if (!callbacks) { + return; + } + // Slicing the arguments on every invocation of this method + // can add a significant amount of overhead. Avoid the + // intermediate object creation for the common case of a + // single callback argument + if (arguments.length === 2) { + length = callbacks.length; + for (i = 0; i < length; ++i) { + callbacks[i].call(this, arguments[1]); + } + } else { + args = []; + i = arguments.length; + for (i = 1; i < arguments.length; ++i) { + args.push(arguments[i]); + } + length = callbacks.length; + for (i = 0; i < length; ++i) { + callbacks[i].apply(this, args); + } + } + }; + /** + * Destroys the stream and cleans up. + */ + this.dispose = function () { + listeners = {}; + }; + }; + }; + + /** + * Forwards all `data` events on this stream to the destination stream. The + * destination stream should provide a method `push` to receive the data + * events as they arrive. + * @param destination {stream} the stream that will receive all `data` events + * @param autoFlush {boolean} if false, we will not call `flush` on the destination + * when the current stream emits a 'done' event + * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options + */ + Stream$1.prototype.pipe = function (destination) { + this.on('data', function (data) { + destination.push(data); + }); + + this.on('done', function (flushSource) { + destination.flush(flushSource); + }); + + return destination; + }; + + // Default stream functions that are expected to be overridden to perform + // actual work. These are provided by the prototype as a sort of no-op + // implementation so that we don't have to check for their existence in the + // `pipe` function above. + Stream$1.prototype.push = function (data) { + this.trigger('data', data); + }; + + Stream$1.prototype.flush = function (flushSource) { + this.trigger('done', flushSource); + }; + + var stream = Stream$1; + + var stream$1 = /*#__PURE__*/Object.freeze({ + default: stream, + __moduleExports: stream + }); + + var Stream$2 = (stream$1 && stream) || stream$1; + + var MAX_TS = 8589934592; + + var RO_THRESH = 4294967296; + + var handleRollover = function handleRollover(value, reference) { + var direction = 1; + + if (value > reference) { + // If the current timestamp value is greater than our reference timestamp and we detect a + // timestamp rollover, this means the roll over is happening in the opposite direction. + // Example scenario: Enter a long stream/video just after a rollover occurred. The reference + // point will be set to a small number, e.g. 1. The user then seeks backwards over the + // rollover point. In loading this segment, the timestamp values will be very large, + // e.g. 2^33 - 1. Since this comes before the data we loaded previously, we want to adjust + // the time stamp to be `value - 2^33`. + direction = -1; + } + + // Note: A seek forwards or back that is greater than the RO_THRESH (2^32, ~13 hours) will + // cause an incorrect adjustment. + while (Math.abs(reference - value) > RO_THRESH) { + value += direction * MAX_TS; + } + + return value; + }; + + var TimestampRolloverStream = function TimestampRolloverStream(type) { + var lastDTS, referenceDTS; + + TimestampRolloverStream.prototype.init.call(this); + + this.type_ = type; + + this.push = function (data) { + if (data.type !== this.type_) { + return; + } + + if (referenceDTS === undefined) { + referenceDTS = data.dts; + } + + data.dts = handleRollover(data.dts, referenceDTS); + data.pts = handleRollover(data.pts, referenceDTS); + + lastDTS = data.dts; + + this.trigger('data', data); + }; + + this.flush = function () { + referenceDTS = lastDTS; + this.trigger('done'); + }; + + this.discontinuity = function () { + referenceDTS = void 0; + lastDTS = void 0; + }; + }; + + TimestampRolloverStream.prototype = new Stream$2(); + + var timestampRolloverStream = { + TimestampRolloverStream: TimestampRolloverStream, + handleRollover: handleRollover + }; + var timestampRolloverStream_1 = timestampRolloverStream.TimestampRolloverStream; + var timestampRolloverStream_2 = timestampRolloverStream.handleRollover; + + var timestampRolloverStream$1 = /*#__PURE__*/Object.freeze({ + default: timestampRolloverStream, + __moduleExports: timestampRolloverStream, + TimestampRolloverStream: timestampRolloverStream_1, + handleRollover: timestampRolloverStream_2 + }); + + var StreamTypes = (streamTypes$1 && streamTypes) || streamTypes$1; + + var parsePid = function parsePid(packet) { + var pid = packet[1] & 0x1f; + pid <<= 8; + pid |= packet[2]; + return pid; + }; + + var parsePayloadUnitStartIndicator = function parsePayloadUnitStartIndicator(packet) { + return !!(packet[1] & 0x40); + }; + + var parseAdaptionField = function parseAdaptionField(packet) { + var offset = 0; + // if an adaption field is present, its length is specified by the + // fifth byte of the TS packet header. The adaptation field is + // used to add stuffing to PES packets that don't fill a complete + // TS packet, and to specify some forms of timing and control data + // that we do not currently use. + if ((packet[3] & 0x30) >>> 4 > 0x01) { + offset += packet[4] + 1; + } + return offset; + }; + + var parseType$1 = function parseType(packet, pmtPid) { + var pid = parsePid(packet); + if (pid === 0) { + return 'pat'; + } else if (pid === pmtPid) { + return 'pmt'; + } else if (pmtPid) { + return 'pes'; + } + return null; + }; + + var parsePat = function parsePat(packet) { + var pusi = parsePayloadUnitStartIndicator(packet); + var offset = 4 + parseAdaptionField(packet); + + if (pusi) { + offset += packet[offset] + 1; + } + + return (packet[offset + 10] & 0x1f) << 8 | packet[offset + 11]; + }; + + var parsePmt = function parsePmt(packet) { + var programMapTable = {}; + var pusi = parsePayloadUnitStartIndicator(packet); + var payloadOffset = 4 + parseAdaptionField(packet); + + if (pusi) { + payloadOffset += packet[payloadOffset] + 1; + } + + // PMTs can be sent ahead of the time when they should actually + // take effect. We don't believe this should ever be the case + // for HLS but we'll ignore "forward" PMT declarations if we see + // them. Future PMT declarations have the current_next_indicator + // set to zero. + if (!(packet[payloadOffset + 5] & 0x01)) { + return; + } + + var sectionLength, tableEnd, programInfoLength; + // the mapping table ends at the end of the current section + sectionLength = (packet[payloadOffset + 1] & 0x0f) << 8 | packet[payloadOffset + 2]; + tableEnd = 3 + sectionLength - 4; + + // to determine where the table is, we have to figure out how + // long the program info descriptors are + programInfoLength = (packet[payloadOffset + 10] & 0x0f) << 8 | packet[payloadOffset + 11]; + + // advance the offset to the first entry in the mapping table + var offset = 12 + programInfoLength; + while (offset < tableEnd) { + var i = payloadOffset + offset; + // add an entry that maps the elementary_pid to the stream_type + programMapTable[(packet[i + 1] & 0x1F) << 8 | packet[i + 2]] = packet[i]; + + // move to the next table entry + // skip past the elementary stream descriptors, if present + offset += ((packet[i + 3] & 0x0F) << 8 | packet[i + 4]) + 5; + } + return programMapTable; + }; + + var parsePesType = function parsePesType(packet, programMapTable) { + var pid = parsePid(packet); + var type = programMapTable[pid]; + switch (type) { + case StreamTypes.H264_STREAM_TYPE: + return 'video'; + case StreamTypes.ADTS_STREAM_TYPE: + return 'audio'; + case StreamTypes.METADATA_STREAM_TYPE: + return 'timed-metadata'; + default: + return null; + } + }; + + var parsePesTime = function parsePesTime(packet) { + var pusi = parsePayloadUnitStartIndicator(packet); + if (!pusi) { + return null; + } + + var offset = 4 + parseAdaptionField(packet); + + if (offset >= packet.byteLength) { + // From the H 222.0 MPEG-TS spec + // "For transport stream packets carrying PES packets, stuffing is needed when there + // is insufficient PES packet data to completely fill the transport stream packet + // payload bytes. Stuffing is accomplished by defining an adaptation field longer than + // the sum of the lengths of the data elements in it, so that the payload bytes + // remaining after the adaptation field exactly accommodates the available PES packet + // data." + // + // If the offset is >= the length of the packet, then the packet contains no data + // and instead is just adaption field stuffing bytes + return null; + } + + var pes = null; + var ptsDtsFlags; + + // PES packets may be annotated with a PTS value, or a PTS value + // and a DTS value. Determine what combination of values is + // available to work with. + ptsDtsFlags = packet[offset + 7]; + + // PTS and DTS are normally stored as a 33-bit number. Javascript + // performs all bitwise operations on 32-bit integers but javascript + // supports a much greater range (52-bits) of integer using standard + // mathematical operations. + // We construct a 31-bit value using bitwise operators over the 31 + // most significant bits and then multiply by 4 (equal to a left-shift + // of 2) before we add the final 2 least significant bits of the + // timestamp (equal to an OR.) + if (ptsDtsFlags & 0xC0) { + pes = {}; + // the PTS and DTS are not written out directly. For information + // on how they are encoded, see + // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html + pes.pts = (packet[offset + 9] & 0x0E) << 27 | (packet[offset + 10] & 0xFF) << 20 | (packet[offset + 11] & 0xFE) << 12 | (packet[offset + 12] & 0xFF) << 5 | (packet[offset + 13] & 0xFE) >>> 3; + pes.pts *= 4; // Left shift by 2 + pes.pts += (packet[offset + 13] & 0x06) >>> 1; // OR by the two LSBs + pes.dts = pes.pts; + if (ptsDtsFlags & 0x40) { + pes.dts = (packet[offset + 14] & 0x0E) << 27 | (packet[offset + 15] & 0xFF) << 20 | (packet[offset + 16] & 0xFE) << 12 | (packet[offset + 17] & 0xFF) << 5 | (packet[offset + 18] & 0xFE) >>> 3; + pes.dts *= 4; // Left shift by 2 + pes.dts += (packet[offset + 18] & 0x06) >>> 1; // OR by the two LSBs + } + } + return pes; + }; + + var parseNalUnitType = function parseNalUnitType(type) { + switch (type) { + case 0x05: + return 'slice_layer_without_partitioning_rbsp_idr'; + case 0x06: + return 'sei_rbsp'; + case 0x07: + return 'seq_parameter_set_rbsp'; + case 0x08: + return 'pic_parameter_set_rbsp'; + case 0x09: + return 'access_unit_delimiter_rbsp'; + default: + return null; + } + }; + + var videoPacketContainsKeyFrame = function videoPacketContainsKeyFrame(packet) { + var offset = 4 + parseAdaptionField(packet); + var frameBuffer = packet.subarray(offset); + var frameI = 0; + var frameSyncPoint = 0; + var foundKeyFrame = false; + var nalType; + + // advance the sync point to a NAL start, if necessary + for (; frameSyncPoint < frameBuffer.byteLength - 3; frameSyncPoint++) { + if (frameBuffer[frameSyncPoint + 2] === 1) { + // the sync point is properly aligned + frameI = frameSyncPoint + 5; + break; + } + } + + while (frameI < frameBuffer.byteLength) { + // look at the current byte to determine if we've hit the end of + // a NAL unit boundary + switch (frameBuffer[frameI]) { + case 0: + // skip past non-sync sequences + if (frameBuffer[frameI - 1] !== 0) { + frameI += 2; + break; + } else if (frameBuffer[frameI - 2] !== 0) { + frameI++; + break; + } + + if (frameSyncPoint + 3 !== frameI - 2) { + nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f); + if (nalType === 'slice_layer_without_partitioning_rbsp_idr') { + foundKeyFrame = true; + } + } + + // drop trailing zeroes + do { + frameI++; + } while (frameBuffer[frameI] !== 1 && frameI < frameBuffer.length); + frameSyncPoint = frameI - 2; + frameI += 3; + break; + case 1: + // skip past non-sync sequences + if (frameBuffer[frameI - 1] !== 0 || frameBuffer[frameI - 2] !== 0) { + frameI += 3; + break; + } + + nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f); + if (nalType === 'slice_layer_without_partitioning_rbsp_idr') { + foundKeyFrame = true; + } + frameSyncPoint = frameI - 2; + frameI += 3; + break; + default: + // the current byte isn't a one or zero, so it cannot be part + // of a sync sequence + frameI += 3; + break; + } + } + frameBuffer = frameBuffer.subarray(frameSyncPoint); + frameI -= frameSyncPoint; + frameSyncPoint = 0; + // parse the final nal + if (frameBuffer && frameBuffer.byteLength > 3) { + nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f); + if (nalType === 'slice_layer_without_partitioning_rbsp_idr') { + foundKeyFrame = true; + } + } + + return foundKeyFrame; + }; + + var probe$1 = { + parseType: parseType$1, + parsePat: parsePat, + parsePmt: parsePmt, + parsePayloadUnitStartIndicator: parsePayloadUnitStartIndicator, + parsePesType: parsePesType, + parsePesTime: parsePesTime, + videoPacketContainsKeyFrame: videoPacketContainsKeyFrame + }; + var probe_1$1 = probe$1.parseType; + var probe_2$1 = probe$1.parsePat; + var probe_3$1 = probe$1.parsePmt; + var probe_4 = probe$1.parsePayloadUnitStartIndicator; + var probe_5 = probe$1.parsePesType; + var probe_6 = probe$1.parsePesTime; + var probe_7 = probe$1.videoPacketContainsKeyFrame; + + var probe$2 = /*#__PURE__*/Object.freeze({ + default: probe$1, + __moduleExports: probe$1, + parseType: probe_1$1, + parsePat: probe_2$1, + parsePmt: probe_3$1, + parsePayloadUnitStartIndicator: probe_4, + parsePesType: probe_5, + parsePesTime: probe_6, + videoPacketContainsKeyFrame: probe_7 + }); + + /** + * mux.js + * + * Copyright (c) 2016 Brightcove + * All rights reserved. + * + * Utilities to detect basic properties and metadata about Aac data. + */ + + var ADTS_SAMPLING_FREQUENCIES = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350]; + + var parseSyncSafeInteger = function parseSyncSafeInteger(data) { + return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3]; + }; + + // return a percent-encoded representation of the specified byte range + // @see http://en.wikipedia.org/wiki/Percent-encoding + var percentEncode = function percentEncode(bytes, start, end) { + var i, + result = ''; + for (i = start; i < end; i++) { + result += '%' + ('00' + bytes[i].toString(16)).slice(-2); + } + return result; + }; + + // return the string representation of the specified byte range, + // interpreted as ISO-8859-1. + var parseIso88591 = function parseIso88591(bytes, start, end) { + return unescape(percentEncode(bytes, start, end)); // jshint ignore:line + }; + + var parseId3TagSize = function parseId3TagSize(header, byteIndex) { + var returnSize = header[byteIndex + 6] << 21 | header[byteIndex + 7] << 14 | header[byteIndex + 8] << 7 | header[byteIndex + 9], + flags = header[byteIndex + 5], + footerPresent = (flags & 16) >> 4; + + if (footerPresent) { + return returnSize + 20; + } + return returnSize + 10; + }; + + var parseAdtsSize = function parseAdtsSize(header, byteIndex) { + var lowThree = (header[byteIndex + 5] & 0xE0) >> 5, + middle = header[byteIndex + 4] << 3, + highTwo = header[byteIndex + 3] & 0x3 << 11; + + return highTwo | middle | lowThree; + }; + + var parseType$2 = function parseType(header, byteIndex) { + if (header[byteIndex] === 'I'.charCodeAt(0) && header[byteIndex + 1] === 'D'.charCodeAt(0) && header[byteIndex + 2] === '3'.charCodeAt(0)) { + return 'timed-metadata'; + } else if (header[byteIndex] & 0xff === 0xff && (header[byteIndex + 1] & 0xf0) === 0xf0) { + return 'audio'; + } + return null; + }; + + var parseSampleRate = function parseSampleRate(packet) { + var i = 0; + + while (i + 5 < packet.length) { + if (packet[i] !== 0xFF || (packet[i + 1] & 0xF6) !== 0xF0) { + // If a valid header was not found, jump one forward and attempt to + // find a valid ADTS header starting at the next byte + i++; + continue; + } + return ADTS_SAMPLING_FREQUENCIES[(packet[i + 2] & 0x3c) >>> 2]; + } + + return null; + }; + + var parseAacTimestamp = function parseAacTimestamp(packet) { + var frameStart, frameSize, frame, frameHeader; + + // find the start of the first frame and the end of the tag + frameStart = 10; + if (packet[5] & 0x40) { + // advance the frame start past the extended header + frameStart += 4; // header size field + frameStart += parseSyncSafeInteger(packet.subarray(10, 14)); + } + + // parse one or more ID3 frames + // http://id3.org/id3v2.3.0#ID3v2_frame_overview + do { + // determine the number of bytes in this frame + frameSize = parseSyncSafeInteger(packet.subarray(frameStart + 4, frameStart + 8)); + if (frameSize < 1) { + return null; + } + frameHeader = String.fromCharCode(packet[frameStart], packet[frameStart + 1], packet[frameStart + 2], packet[frameStart + 3]); + + if (frameHeader === 'PRIV') { + frame = packet.subarray(frameStart + 10, frameStart + frameSize + 10); + + for (var i = 0; i < frame.byteLength; i++) { + if (frame[i] === 0) { + var owner = parseIso88591(frame, 0, i); + if (owner === 'com.apple.streaming.transportStreamTimestamp') { + var d = frame.subarray(i + 1); + var size = (d[3] & 0x01) << 30 | d[4] << 22 | d[5] << 14 | d[6] << 6 | d[7] >>> 2; + size *= 4; + size += d[7] & 0x03; + + return size; + } + break; + } + } + } + + frameStart += 10; // advance past the frame header + frameStart += frameSize; // advance past the frame body + } while (frameStart < packet.byteLength); + return null; + }; + + var probe$3 = { + parseId3TagSize: parseId3TagSize, + parseAdtsSize: parseAdtsSize, + parseType: parseType$2, + parseSampleRate: parseSampleRate, + parseAacTimestamp: parseAacTimestamp + }; + var probe_1$2 = probe$3.parseId3TagSize; + var probe_2$2 = probe$3.parseAdtsSize; + var probe_3$2 = probe$3.parseType; + var probe_4$1 = probe$3.parseSampleRate; + var probe_5$1 = probe$3.parseAacTimestamp; + + var probe$4 = /*#__PURE__*/Object.freeze({ + default: probe$3, + __moduleExports: probe$3, + parseId3TagSize: probe_1$2, + parseAdtsSize: probe_2$2, + parseType: probe_3$2, + parseSampleRate: probe_4$1, + parseAacTimestamp: probe_5$1 + }); + + var require$$0$2 = (timestampRolloverStream$1 && timestampRolloverStream) || timestampRolloverStream$1; + + var require$$1$1 = (probe$2 && probe$1) || probe$2; + + var require$$2$1 = (probe$4 && probe$3) || probe$4; + + var handleRollover$1 = require$$0$2.handleRollover; + var probe$5 = {}; + probe$5.ts = require$$1$1; + probe$5.aac = require$$2$1; + + var PES_TIMESCALE = 90000, + MP2T_PACKET_LENGTH = 188, + // bytes + SYNC_BYTE = 0x47; + + var isLikelyAacData = function isLikelyAacData(data) { + if (data[0] === 'I'.charCodeAt(0) && data[1] === 'D'.charCodeAt(0) && data[2] === '3'.charCodeAt(0)) { + return true; + } + return false; + }; + + /** + * walks through segment data looking for pat and pmt packets to parse out + * program map table information + */ + var parsePsi_ = function parsePsi_(bytes, pmt) { + var startIndex = 0, + endIndex = MP2T_PACKET_LENGTH, + packet, + type; + + while (endIndex < bytes.byteLength) { + // Look for a pair of start and end sync bytes in the data.. + if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { + // We found a packet + packet = bytes.subarray(startIndex, endIndex); + type = probe$5.ts.parseType(packet, pmt.pid); + + switch (type) { + case 'pat': + if (!pmt.pid) { + pmt.pid = probe$5.ts.parsePat(packet); + } + break; + case 'pmt': + if (!pmt.table) { + pmt.table = probe$5.ts.parsePmt(packet); + } + break; + default: + break; + } + + // Found the pat and pmt, we can stop walking the segment + if (pmt.pid && pmt.table) { + return; + } + + startIndex += MP2T_PACKET_LENGTH; + endIndex += MP2T_PACKET_LENGTH; + continue; + } + + // If we get here, we have somehow become de-synchronized and we need to step + // forward one byte at a time until we find a pair of sync bytes that denote + // a packet + startIndex++; + endIndex++; + } + }; + + /** + * walks through the segment data from the start and end to get timing information + * for the first and last audio pes packets + */ + var parseAudioPes_ = function parseAudioPes_(bytes, pmt, result) { + var startIndex = 0, + endIndex = MP2T_PACKET_LENGTH, + packet, + type, + pesType, + pusi, + parsed; + + var endLoop = false; + + // Start walking from start of segment to get first audio packet + while (endIndex < bytes.byteLength) { + // Look for a pair of start and end sync bytes in the data.. + if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { + // We found a packet + packet = bytes.subarray(startIndex, endIndex); + type = probe$5.ts.parseType(packet, pmt.pid); + + switch (type) { + case 'pes': + pesType = probe$5.ts.parsePesType(packet, pmt.table); + pusi = probe$5.ts.parsePayloadUnitStartIndicator(packet); + if (pesType === 'audio' && pusi) { + parsed = probe$5.ts.parsePesTime(packet); + if (parsed) { + parsed.type = 'audio'; + result.audio.push(parsed); + endLoop = true; + } + } + break; + default: + break; + } + + if (endLoop) { + break; + } + + startIndex += MP2T_PACKET_LENGTH; + endIndex += MP2T_PACKET_LENGTH; + continue; + } + + // If we get here, we have somehow become de-synchronized and we need to step + // forward one byte at a time until we find a pair of sync bytes that denote + // a packet + startIndex++; + endIndex++; + } + + // Start walking from end of segment to get last audio packet + endIndex = bytes.byteLength; + startIndex = endIndex - MP2T_PACKET_LENGTH; + endLoop = false; + while (startIndex >= 0) { + // Look for a pair of start and end sync bytes in the data.. + if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { + // We found a packet + packet = bytes.subarray(startIndex, endIndex); + type = probe$5.ts.parseType(packet, pmt.pid); + + switch (type) { + case 'pes': + pesType = probe$5.ts.parsePesType(packet, pmt.table); + pusi = probe$5.ts.parsePayloadUnitStartIndicator(packet); + if (pesType === 'audio' && pusi) { + parsed = probe$5.ts.parsePesTime(packet); + if (parsed) { + parsed.type = 'audio'; + result.audio.push(parsed); + endLoop = true; + } + } + break; + default: + break; + } + + if (endLoop) { + break; + } + + startIndex -= MP2T_PACKET_LENGTH; + endIndex -= MP2T_PACKET_LENGTH; + continue; + } + + // If we get here, we have somehow become de-synchronized and we need to step + // forward one byte at a time until we find a pair of sync bytes that denote + // a packet + startIndex--; + endIndex--; + } + }; + + /** + * walks through the segment data from the start and end to get timing information + * for the first and last video pes packets as well as timing information for the first + * key frame. + */ + var parseVideoPes_ = function parseVideoPes_(bytes, pmt, result) { + var startIndex = 0, + endIndex = MP2T_PACKET_LENGTH, + packet, + type, + pesType, + pusi, + parsed, + frame, + i, + pes; + + var endLoop = false; + + var currentFrame = { + data: [], + size: 0 + }; + + // Start walking from start of segment to get first video packet + while (endIndex < bytes.byteLength) { + // Look for a pair of start and end sync bytes in the data.. + if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { + // We found a packet + packet = bytes.subarray(startIndex, endIndex); + type = probe$5.ts.parseType(packet, pmt.pid); + + switch (type) { + case 'pes': + pesType = probe$5.ts.parsePesType(packet, pmt.table); + pusi = probe$5.ts.parsePayloadUnitStartIndicator(packet); + if (pesType === 'video') { + if (pusi && !endLoop) { + parsed = probe$5.ts.parsePesTime(packet); + if (parsed) { + parsed.type = 'video'; + result.video.push(parsed); + endLoop = true; + } + } + if (!result.firstKeyFrame) { + if (pusi) { + if (currentFrame.size !== 0) { + frame = new Uint8Array(currentFrame.size); + i = 0; + while (currentFrame.data.length) { + pes = currentFrame.data.shift(); + frame.set(pes, i); + i += pes.byteLength; + } + if (probe$5.ts.videoPacketContainsKeyFrame(frame)) { + result.firstKeyFrame = probe$5.ts.parsePesTime(frame); + result.firstKeyFrame.type = 'video'; + } + currentFrame.size = 0; + } + } + currentFrame.data.push(packet); + currentFrame.size += packet.byteLength; + } + } + break; + default: + break; + } + + if (endLoop && result.firstKeyFrame) { + break; + } + + startIndex += MP2T_PACKET_LENGTH; + endIndex += MP2T_PACKET_LENGTH; + continue; + } + + // If we get here, we have somehow become de-synchronized and we need to step + // forward one byte at a time until we find a pair of sync bytes that denote + // a packet + startIndex++; + endIndex++; + } + + // Start walking from end of segment to get last video packet + endIndex = bytes.byteLength; + startIndex = endIndex - MP2T_PACKET_LENGTH; + endLoop = false; + while (startIndex >= 0) { + // Look for a pair of start and end sync bytes in the data.. + if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { + // We found a packet + packet = bytes.subarray(startIndex, endIndex); + type = probe$5.ts.parseType(packet, pmt.pid); + + switch (type) { + case 'pes': + pesType = probe$5.ts.parsePesType(packet, pmt.table); + pusi = probe$5.ts.parsePayloadUnitStartIndicator(packet); + if (pesType === 'video' && pusi) { + parsed = probe$5.ts.parsePesTime(packet); + if (parsed) { + parsed.type = 'video'; + result.video.push(parsed); + endLoop = true; + } + } + break; + default: + break; + } + + if (endLoop) { + break; + } + + startIndex -= MP2T_PACKET_LENGTH; + endIndex -= MP2T_PACKET_LENGTH; + continue; + } + + // If we get here, we have somehow become de-synchronized and we need to step + // forward one byte at a time until we find a pair of sync bytes that denote + // a packet + startIndex--; + endIndex--; + } + }; + + /** + * Adjusts the timestamp information for the segment to account for + * rollover and convert to seconds based on pes packet timescale (90khz clock) + */ + var adjustTimestamp_ = function adjustTimestamp_(segmentInfo, baseTimestamp) { + if (segmentInfo.audio && segmentInfo.audio.length) { + var audioBaseTimestamp = baseTimestamp; + if (typeof audioBaseTimestamp === 'undefined') { + audioBaseTimestamp = segmentInfo.audio[0].dts; + } + segmentInfo.audio.forEach(function (info) { + info.dts = handleRollover$1(info.dts, audioBaseTimestamp); + info.pts = handleRollover$1(info.pts, audioBaseTimestamp); + // time in seconds + info.dtsTime = info.dts / PES_TIMESCALE; + info.ptsTime = info.pts / PES_TIMESCALE; + }); + } + + if (segmentInfo.video && segmentInfo.video.length) { + var videoBaseTimestamp = baseTimestamp; + if (typeof videoBaseTimestamp === 'undefined') { + videoBaseTimestamp = segmentInfo.video[0].dts; + } + segmentInfo.video.forEach(function (info) { + info.dts = handleRollover$1(info.dts, videoBaseTimestamp); + info.pts = handleRollover$1(info.pts, videoBaseTimestamp); + // time in seconds + info.dtsTime = info.dts / PES_TIMESCALE; + info.ptsTime = info.pts / PES_TIMESCALE; + }); + if (segmentInfo.firstKeyFrame) { + var frame = segmentInfo.firstKeyFrame; + frame.dts = handleRollover$1(frame.dts, videoBaseTimestamp); + frame.pts = handleRollover$1(frame.pts, videoBaseTimestamp); + // time in seconds + frame.dtsTime = frame.dts / PES_TIMESCALE; + frame.ptsTime = frame.dts / PES_TIMESCALE; + } + } + }; + + /** + * inspects the aac data stream for start and end time information + */ + var inspectAac_ = function inspectAac_(bytes) { + var endLoop = false, + audioCount = 0, + sampleRate = null, + timestamp = null, + frameSize = 0, + byteIndex = 0, + packet; + + while (bytes.length - byteIndex >= 3) { + var type = probe$5.aac.parseType(bytes, byteIndex); + switch (type) { + case 'timed-metadata': + // Exit early because we don't have enough to parse + // the ID3 tag header + if (bytes.length - byteIndex < 10) { + endLoop = true; + break; + } + + frameSize = probe$5.aac.parseId3TagSize(bytes, byteIndex); + + // Exit early if we don't have enough in the buffer + // to emit a full packet + if (frameSize > bytes.length) { + endLoop = true; + break; + } + if (timestamp === null) { + packet = bytes.subarray(byteIndex, byteIndex + frameSize); + timestamp = probe$5.aac.parseAacTimestamp(packet); + } + byteIndex += frameSize; + break; + case 'audio': + // Exit early because we don't have enough to parse + // the ADTS frame header + if (bytes.length - byteIndex < 7) { + endLoop = true; + break; + } + + frameSize = probe$5.aac.parseAdtsSize(bytes, byteIndex); + + // Exit early if we don't have enough in the buffer + // to emit a full packet + if (frameSize > bytes.length) { + endLoop = true; + break; + } + if (sampleRate === null) { + packet = bytes.subarray(byteIndex, byteIndex + frameSize); + sampleRate = probe$5.aac.parseSampleRate(packet); + } + audioCount++; + byteIndex += frameSize; + break; + default: + byteIndex++; + break; + } + if (endLoop) { + return null; + } + } + if (sampleRate === null || timestamp === null) { + return null; + } + + var audioTimescale = PES_TIMESCALE / sampleRate; + + var result = { + audio: [{ + type: 'audio', + dts: timestamp, + pts: timestamp + }, { + type: 'audio', + dts: timestamp + audioCount * 1024 * audioTimescale, + pts: timestamp + audioCount * 1024 * audioTimescale + }] + }; + + return result; + }; + + /** + * inspects the transport stream segment data for start and end time information + * of the audio and video tracks (when present) as well as the first key frame's + * start time. + */ + var inspectTs_ = function inspectTs_(bytes) { + var pmt = { + pid: null, + table: null + }; + + var result = {}; + + parsePsi_(bytes, pmt); + + for (var pid in pmt.table) { + if (pmt.table.hasOwnProperty(pid)) { + var type = pmt.table[pid]; + switch (type) { + case StreamTypes.H264_STREAM_TYPE: + result.video = []; + parseVideoPes_(bytes, pmt, result); + if (result.video.length === 0) { + delete result.video; + } + break; + case StreamTypes.ADTS_STREAM_TYPE: + result.audio = []; + parseAudioPes_(bytes, pmt, result); + if (result.audio.length === 0) { + delete result.audio; + } + break; + default: + break; + } + } + } + return result; + }; + + /** + * Inspects segment byte data and returns an object with start and end timing information + * + * @param {Uint8Array} bytes The segment byte data + * @param {Number} baseTimestamp Relative reference timestamp used when adjusting frame + * timestamps for rollover. This value must be in 90khz clock. + * @return {Object} Object containing start and end frame timing info of segment. + */ + var inspect = function inspect(bytes, baseTimestamp) { + var isAacData = isLikelyAacData(bytes); + + var result; + + if (isAacData) { + result = inspectAac_(bytes); + } else { + result = inspectTs_(bytes); + } + + if (!result || !result.audio && !result.video) { + return null; + } + + adjustTimestamp_(result, baseTimestamp); + + return result; + }; + + var tsInspector = { + inspect: inspect + }; + + /* + * pkcs7.pad + * https://github.com/brightcove/pkcs7 + * + * Copyright (c) 2014 Brightcove + * Licensed under the apache2 license. + */ + + /** + * Returns the subarray of a Uint8Array without PKCS#7 padding. + * @param padded {Uint8Array} unencrypted bytes that have been padded + * @return {Uint8Array} the unpadded bytes + * @see http://tools.ietf.org/html/rfc5652 + */ + function unpad(padded) { + return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]); + } + + var classCallCheck$2 = function classCallCheck$$1(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + var createClass$1 = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + var inherits$2 = function inherits$$1(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : _typeof(superClass))); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + }; + + var possibleConstructorReturn$2 = function possibleConstructorReturn$$1(self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && ((typeof call === "undefined" ? "undefined" : _typeof(call)) === "object" || typeof call === "function") ? call : self; + }; + + /** + * @file aes.js + * + * This file contains an adaptation of the AES decryption algorithm + * from the Standford Javascript Cryptography Library. That work is + * covered by the following copyright and permissions notice: + * + * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation + * are those of the authors and should not be interpreted as representing + * official policies, either expressed or implied, of the authors. + */ + + /** + * Expand the S-box tables. + * + * @private + */ + var precompute = function precompute() { + var tables = [[[], [], [], [], []], [[], [], [], [], []]]; + var encTable = tables[0]; + var decTable = tables[1]; + var sbox = encTable[4]; + var sboxInv = decTable[4]; + var i = void 0; + var x = void 0; + var xInv = void 0; + var d = []; + var th = []; + var x2 = void 0; + var x4 = void 0; + var x8 = void 0; + var s = void 0; + var tEnc = void 0; + var tDec = void 0; + + // Compute double and third tables + for (i = 0; i < 256; i++) { + th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i; + } + + for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) { + // Compute sbox + s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4; + s = s >> 8 ^ s & 255 ^ 99; + sbox[x] = s; + sboxInv[s] = x; + + // Compute MixColumns + x8 = d[x4 = d[x2 = d[x]]]; + tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100; + tEnc = d[s] * 0x101 ^ s * 0x1010100; + + for (i = 0; i < 4; i++) { + encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8; + decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8; + } + } + + // Compactify. Considerable speedup on Firefox. + for (i = 0; i < 5; i++) { + encTable[i] = encTable[i].slice(0); + decTable[i] = decTable[i].slice(0); + } + return tables; + }; + var aesTables = null; + + /** + * Schedule out an AES key for both encryption and decryption. This + * is a low-level class. Use a cipher mode to do bulk encryption. + * + * @class AES + * @param key {Array} The key as an array of 4, 6 or 8 words. + */ + + var AES = function () { + function AES(key) { + classCallCheck$2(this, AES); + + /** + * The expanded S-box and inverse S-box tables. These will be computed + * on the client so that we don't have to send them down the wire. + * + * There are two tables, _tables[0] is for encryption and + * _tables[1] is for decryption. + * + * The first 4 sub-tables are the expanded S-box with MixColumns. The + * last (_tables[01][4]) is the S-box itself. + * + * @private + */ + // if we have yet to precompute the S-box tables + // do so now + if (!aesTables) { + aesTables = precompute(); + } + // then make a copy of that object for use + this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]]; + var i = void 0; + var j = void 0; + var tmp = void 0; + var encKey = void 0; + var decKey = void 0; + var sbox = this._tables[0][4]; + var decTable = this._tables[1]; + var keyLen = key.length; + var rcon = 1; + + if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) { + throw new Error('Invalid aes key size'); + } + + encKey = key.slice(0); + decKey = []; + this._key = [encKey, decKey]; + + // schedule encryption keys + for (i = keyLen; i < 4 * keyLen + 28; i++) { + tmp = encKey[i - 1]; + + // apply sbox + if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) { + tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; + + // shift rows and add rcon + if (i % keyLen === 0) { + tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24; + rcon = rcon << 1 ^ (rcon >> 7) * 283; + } + } + + encKey[i] = encKey[i - keyLen] ^ tmp; + } + + // schedule decryption keys + for (j = 0; i; j++, i--) { + tmp = encKey[j & 3 ? i : i - 4]; + if (i <= 4 || j < 4) { + decKey[j] = tmp; + } else { + decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]]; + } + } + } + + /** + * Decrypt 16 bytes, specified as four 32-bit words. + * + * @param {Number} encrypted0 the first word to decrypt + * @param {Number} encrypted1 the second word to decrypt + * @param {Number} encrypted2 the third word to decrypt + * @param {Number} encrypted3 the fourth word to decrypt + * @param {Int32Array} out the array to write the decrypted words + * into + * @param {Number} offset the offset into the output array to start + * writing results + * @return {Array} The plaintext. + */ + + AES.prototype.decrypt = function decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) { + var key = this._key[1]; + // state variables a,b,c,d are loaded with pre-whitened data + var a = encrypted0 ^ key[0]; + var b = encrypted3 ^ key[1]; + var c = encrypted2 ^ key[2]; + var d = encrypted1 ^ key[3]; + var a2 = void 0; + var b2 = void 0; + var c2 = void 0; + + // key.length === 2 ? + var nInnerRounds = key.length / 4 - 2; + var i = void 0; + var kIndex = 4; + var table = this._tables[1]; + + // load up the tables + var table0 = table[0]; + var table1 = table[1]; + var table2 = table[2]; + var table3 = table[3]; + var sbox = table[4]; + + // Inner rounds. Cribbed from OpenSSL. + for (i = 0; i < nInnerRounds; i++) { + a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d & 255] ^ key[kIndex]; + b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1]; + c2 = table0[c >>> 24] ^ table1[d >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2]; + d = table0[d >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3]; + kIndex += 4; + a = a2; + b = b2; + c = c2; + } + + // Last round. + for (i = 0; i < 4; i++) { + out[(3 & -i) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++]; + a2 = a; + a = b; + b = c; + c = d; + d = a2; + } + }; + + return AES; + }(); + + /** + * @file stream.js + */ + /** + * A lightweight readable stream implemention that handles event dispatching. + * + * @class Stream + */ + var Stream$3 = function () { + function Stream() { + classCallCheck$2(this, Stream); + + this.listeners = {}; + } + + /** + * Add a listener for a specified event type. + * + * @param {String} type the event name + * @param {Function} listener the callback to be invoked when an event of + * the specified type occurs + */ + + Stream.prototype.on = function on(type, listener) { + if (!this.listeners[type]) { + this.listeners[type] = []; + } + this.listeners[type].push(listener); + }; + + /** + * Remove a listener for a specified event type. + * + * @param {String} type the event name + * @param {Function} listener a function previously registered for this + * type of event through `on` + * @return {Boolean} if we could turn it off or not + */ + + Stream.prototype.off = function off(type, listener) { + if (!this.listeners[type]) { + return false; + } + + var index = this.listeners[type].indexOf(listener); + + this.listeners[type].splice(index, 1); + return index > -1; + }; + + /** + * Trigger an event of the specified type on this stream. Any additional + * arguments to this function are passed as parameters to event listeners. + * + * @param {String} type the event name + */ + + Stream.prototype.trigger = function trigger(type) { + var callbacks = this.listeners[type]; + + if (!callbacks) { + return; + } + + // Slicing the arguments on every invocation of this method + // can add a significant amount of overhead. Avoid the + // intermediate object creation for the common case of a + // single callback argument + if (arguments.length === 2) { + var length = callbacks.length; + + for (var i = 0; i < length; ++i) { + callbacks[i].call(this, arguments[1]); + } + } else { + var args = Array.prototype.slice.call(arguments, 1); + var _length = callbacks.length; + + for (var _i = 0; _i < _length; ++_i) { + callbacks[_i].apply(this, args); + } + } + }; + + /** + * Destroys the stream and cleans up. + */ + + Stream.prototype.dispose = function dispose() { + this.listeners = {}; + }; + /** + * Forwards all `data` events on this stream to the destination stream. The + * destination stream should provide a method `push` to receive the data + * events as they arrive. + * + * @param {Stream} destination the stream that will receive all `data` events + * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options + */ + + Stream.prototype.pipe = function pipe(destination) { + this.on('data', function (data) { + destination.push(data); + }); + }; + + return Stream; + }(); + + /** + * @file async-stream.js + */ + /** + * A wrapper around the Stream class to use setTiemout + * and run stream "jobs" Asynchronously + * + * @class AsyncStream + * @extends Stream + */ + + var AsyncStream = function (_Stream) { + inherits$2(AsyncStream, _Stream); + + function AsyncStream() { + classCallCheck$2(this, AsyncStream); + + var _this = possibleConstructorReturn$2(this, _Stream.call(this, Stream$3)); + + _this.jobs = []; + _this.delay = 1; + _this.timeout_ = null; + return _this; + } + + /** + * process an async job + * + * @private + */ + + AsyncStream.prototype.processJob_ = function processJob_() { + this.jobs.shift()(); + if (this.jobs.length) { + this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay); + } else { + this.timeout_ = null; + } + }; + + /** + * push a job into the stream + * + * @param {Function} job the job to push into the stream + */ + + AsyncStream.prototype.push = function push(job) { + this.jobs.push(job); + if (!this.timeout_) { + this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay); + } + }; + + return AsyncStream; + }(Stream$3); + + /** + * @file decrypter.js + * + * An asynchronous implementation of AES-128 CBC decryption with + * PKCS#7 padding. + */ + + /** + * Convert network-order (big-endian) bytes into their little-endian + * representation. + */ + var ntoh = function ntoh(word) { + return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24; + }; + + /** + * Decrypt bytes using AES-128 with CBC and PKCS#7 padding. + * + * @param {Uint8Array} encrypted the encrypted bytes + * @param {Uint32Array} key the bytes of the decryption key + * @param {Uint32Array} initVector the initialization vector (IV) to + * use for the first round of CBC. + * @return {Uint8Array} the decrypted bytes + * + * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard + * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29 + * @see https://tools.ietf.org/html/rfc2315 + */ + var decrypt = function decrypt(encrypted, key, initVector) { + // word-level access to the encrypted bytes + var encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2); + + var decipher = new AES(Array.prototype.slice.call(key)); + + // byte and word-level access for the decrypted output + var decrypted = new Uint8Array(encrypted.byteLength); + var decrypted32 = new Int32Array(decrypted.buffer); + + // temporary variables for working with the IV, encrypted, and + // decrypted data + var init0 = void 0; + var init1 = void 0; + var init2 = void 0; + var init3 = void 0; + var encrypted0 = void 0; + var encrypted1 = void 0; + var encrypted2 = void 0; + var encrypted3 = void 0; + + // iteration variable + var wordIx = void 0; + + // pull out the words of the IV to ensure we don't modify the + // passed-in reference and easier access + init0 = initVector[0]; + init1 = initVector[1]; + init2 = initVector[2]; + init3 = initVector[3]; + + // decrypt four word sequences, applying cipher-block chaining (CBC) + // to each decrypted block + for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) { + // convert big-endian (network order) words into little-endian + // (javascript order) + encrypted0 = ntoh(encrypted32[wordIx]); + encrypted1 = ntoh(encrypted32[wordIx + 1]); + encrypted2 = ntoh(encrypted32[wordIx + 2]); + encrypted3 = ntoh(encrypted32[wordIx + 3]); + + // decrypt the block + decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx); + + // XOR with the IV, and restore network byte-order to obtain the + // plaintext + decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0); + decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1); + decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2); + decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3); + + // setup the IV for the next round + init0 = encrypted0; + init1 = encrypted1; + init2 = encrypted2; + init3 = encrypted3; + } + + return decrypted; + }; + + /** + * The `Decrypter` class that manages decryption of AES + * data through `AsyncStream` objects and the `decrypt` + * function + * + * @param {Uint8Array} encrypted the encrypted bytes + * @param {Uint32Array} key the bytes of the decryption key + * @param {Uint32Array} initVector the initialization vector (IV) to + * @param {Function} done the function to run when done + * @class Decrypter + */ + + var Decrypter = function () { + function Decrypter(encrypted, key, initVector, done) { + classCallCheck$2(this, Decrypter); + + var step = Decrypter.STEP; + var encrypted32 = new Int32Array(encrypted.buffer); + var decrypted = new Uint8Array(encrypted.byteLength); + var i = 0; + + this.asyncStream_ = new AsyncStream(); + + // split up the encryption job and do the individual chunks asynchronously + this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted)); + for (i = step; i < encrypted32.length; i += step) { + initVector = new Uint32Array([ntoh(encrypted32[i - 4]), ntoh(encrypted32[i - 3]), ntoh(encrypted32[i - 2]), ntoh(encrypted32[i - 1])]); + this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted)); + } + // invoke the done() callback when everything is finished + this.asyncStream_.push(function () { + // remove pkcs#7 padding from the decrypted bytes + done(null, unpad(decrypted)); + }); + } + + /** + * a getter for step the maximum number of bytes to process at one time + * + * @return {Number} the value of step 32000 + */ + + /** + * @private + */ + Decrypter.prototype.decryptChunk_ = function decryptChunk_(encrypted, key, initVector, decrypted) { + return function () { + var bytes = decrypt(encrypted, key, initVector); + + decrypted.set(bytes, encrypted.byteOffset); + }; + }; + + createClass$1(Decrypter, null, [{ + key: 'STEP', + get: function get$$1() { + // 4 * 8000; + return 32000; + } + }]); + return Decrypter; + }(); + + /** + * @videojs/http-streaming + * @version 1.0.0 + * @copyright 2018 Brightcove, Inc + * @license Apache-2.0 + */ + + /** + * @file resolve-url.js + */ + + var resolveUrl$1 = function resolveUrl(baseURL, relativeURL) { + // return early if we don't need to resolve + if (/^[a-z]+:/i.test(relativeURL)) { + return relativeURL; + } + + // if the base URL is relative then combine with the current location + if (!/\/\//i.test(baseURL)) { + baseURL = urlToolkit.buildAbsoluteURL(window_1.location.href, baseURL); + } + + return urlToolkit.buildAbsoluteURL(baseURL, relativeURL); + }; + + /** + * @file playlist-loader.js + * + * A state machine that manages the loading, caching, and updating of + * M3U8 playlists. + * + */ + + var mergeOptions$1 = videojs$1.mergeOptions, + EventTarget$1 = videojs$1.EventTarget, + log$2 = videojs$1.log; + + /** + * Loops through all supported media groups in master and calls the provided + * callback for each group + * + * @param {Object} master + * The parsed master manifest object + * @param {Function} callback + * Callback to call for each media group + */ + + var forEachMediaGroup = function forEachMediaGroup(master, callback) { + ['AUDIO', 'SUBTITLES'].forEach(function (mediaType) { + for (var groupKey in master.mediaGroups[mediaType]) { + for (var labelKey in master.mediaGroups[mediaType][groupKey]) { + var mediaProperties = master.mediaGroups[mediaType][groupKey][labelKey]; + + callback(mediaProperties, mediaType, groupKey, labelKey); + } + } + }); + }; + + /** + * Returns a new array of segments that is the result of merging + * properties from an older list of segments onto an updated + * list. No properties on the updated playlist will be overridden. + * + * @param {Array} original the outdated list of segments + * @param {Array} update the updated list of segments + * @param {Number=} offset the index of the first update + * segment in the original segment list. For non-live playlists, + * this should always be zero and does not need to be + * specified. For live playlists, it should be the difference + * between the media sequence numbers in the original and updated + * playlists. + * @return a list of merged segment objects + */ + var updateSegments = function updateSegments(original, update, offset) { + var result = update.slice(); + + offset = offset || 0; + var length = Math.min(original.length, update.length + offset); + + for (var i = offset; i < length; i++) { + result[i - offset] = mergeOptions$1(original[i], result[i - offset]); + } + return result; + }; + + var resolveSegmentUris = function resolveSegmentUris(segment, baseUri) { + if (!segment.resolvedUri) { + segment.resolvedUri = resolveUrl$1(baseUri, segment.uri); + } + if (segment.key && !segment.key.resolvedUri) { + segment.key.resolvedUri = resolveUrl$1(baseUri, segment.key.uri); + } + if (segment.map && !segment.map.resolvedUri) { + segment.map.resolvedUri = resolveUrl$1(baseUri, segment.map.uri); + } + }; + + /** + * Returns a new master playlist that is the result of merging an + * updated media playlist into the original version. If the + * updated media playlist does not match any of the playlist + * entries in the original master playlist, null is returned. + * + * @param {Object} master a parsed master M3U8 object + * @param {Object} media a parsed media M3U8 object + * @return {Object} a new object that represents the original + * master playlist with the updated media playlist merged in, or + * null if the merge produced no change. + */ + var updateMaster = function updateMaster(master, media) { + var result = mergeOptions$1(master, {}); + var playlist = result.playlists[media.uri]; + + if (!playlist) { + return null; + } + + // consider the playlist unchanged if the number of segments is equal and the media + // sequence number is unchanged + if (playlist.segments && media.segments && playlist.segments.length === media.segments.length && playlist.mediaSequence === media.mediaSequence) { + return null; + } + + var mergedPlaylist = mergeOptions$1(playlist, media); + + // if the update could overlap existing segment information, merge the two segment lists + if (playlist.segments) { + mergedPlaylist.segments = updateSegments(playlist.segments, media.segments, media.mediaSequence - playlist.mediaSequence); + } + + // resolve any segment URIs to prevent us from having to do it later + mergedPlaylist.segments.forEach(function (segment) { + resolveSegmentUris(segment, mergedPlaylist.resolvedUri); + }); + + // TODO Right now in the playlists array there are two references to each playlist, one + // that is referenced by index, and one by URI. The index reference may no longer be + // necessary. + for (var i = 0; i < result.playlists.length; i++) { + if (result.playlists[i].uri === media.uri) { + result.playlists[i] = mergedPlaylist; + } + } + result.playlists[media.uri] = mergedPlaylist; + + return result; + }; + + var setupMediaPlaylists = function setupMediaPlaylists(master) { + // setup by-URI lookups and resolve media playlist URIs + var i = master.playlists.length; + + while (i--) { + var playlist = master.playlists[i]; + + master.playlists[playlist.uri] = playlist; + playlist.resolvedUri = resolveUrl$1(master.uri, playlist.uri); + playlist.id = i; + + if (!playlist.attributes) { + // Although the spec states an #EXT-X-STREAM-INF tag MUST have a + // BANDWIDTH attribute, we can play the stream without it. This means a poorly + // formatted master playlist may not have an attribute list. An attributes + // property is added here to prevent undefined references when we encounter + // this scenario. + playlist.attributes = {}; + + log$2.warn('Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute.'); + } + } + }; + + var resolveMediaGroupUris = function resolveMediaGroupUris(master) { + forEachMediaGroup(master, function (properties) { + if (properties.uri) { + properties.resolvedUri = resolveUrl$1(master.uri, properties.uri); + } + }); + }; + + /** + * Calculates the time to wait before refreshing a live playlist + * + * @param {Object} media + * The current media + * @param {Boolean} update + * True if there were any updates from the last refresh, false otherwise + * @return {Number} + * The time in ms to wait before refreshing the live playlist + */ + var refreshDelay = function refreshDelay(media, update) { + var lastSegment = media.segments[media.segments.length - 1]; + var delay = void 0; + + if (update && lastSegment && lastSegment.duration) { + delay = lastSegment.duration * 1000; + } else { + // if the playlist is unchanged since the last reload or last segment duration + // cannot be determined, try again after half the target duration + delay = (media.targetDuration || 10) * 500; + } + return delay; + }; + + /** + * Load a playlist from a remote location + * + * @class PlaylistLoader + * @extends Stream + * @param {String} srcUrl the url to start with + * @param {Boolean} withCredentials the withCredentials xhr option + * @constructor + */ + + var PlaylistLoader = function (_EventTarget) { + inherits(PlaylistLoader, _EventTarget); + + function PlaylistLoader(srcUrl, hls, withCredentials) { + classCallCheck(this, PlaylistLoader); + + var _this2 = possibleConstructorReturn(this, _EventTarget.call(this)); + + _this2.srcUrl = srcUrl; + _this2.hls_ = hls; + _this2.withCredentials = withCredentials; + + if (!_this2.srcUrl) { + throw new Error('A non-empty playlist URL is required'); + } + + // initialize the loader state + _this2.state = 'HAVE_NOTHING'; + + // live playlist staleness timeout + _this2.on('mediaupdatetimeout', function () { + if (_this2.state !== 'HAVE_METADATA') { + // only refresh the media playlist if no other activity is going on + return; + } + + _this2.state = 'HAVE_CURRENT_METADATA'; + + _this2.request = _this2.hls_.xhr({ + uri: resolveUrl$1(_this2.master.uri, _this2.media().uri), + withCredentials: _this2.withCredentials + }, function (error, req) { + // disposed + if (!_this2.request) { + return; + } + + if (error) { + return _this2.playlistRequestError(_this2.request, _this2.media().uri, 'HAVE_METADATA'); + } + + _this2.haveMetadata(_this2.request, _this2.media().uri); + }); + }); + return _this2; + } + + PlaylistLoader.prototype.playlistRequestError = function playlistRequestError(xhr, url, startingState) { + // any in-flight request is now finished + this.request = null; + + if (startingState) { + this.state = startingState; + } + + this.error = { + playlist: this.master.playlists[url], + status: xhr.status, + message: 'HLS playlist request error at URL: ' + url, + responseText: xhr.responseText, + code: xhr.status >= 500 ? 4 : 2 + }; + + this.trigger('error'); + }; + + // update the playlist loader's state in response to a new or + // updated playlist. + + + PlaylistLoader.prototype.haveMetadata = function haveMetadata(xhr, url) { + var _this3 = this; + + // any in-flight request is now finished + this.request = null; + this.state = 'HAVE_METADATA'; + + var parser = new Parser(); + + parser.push(xhr.responseText); + parser.end(); + parser.manifest.uri = url; + // m3u8-parser does not attach an attributes property to media playlists so make + // sure that the property is attached to avoid undefined reference errors + parser.manifest.attributes = parser.manifest.attributes || {}; + + // merge this playlist into the master + var update = updateMaster(this.master, parser.manifest); + + this.targetDuration = parser.manifest.targetDuration; + + if (update) { + this.master = update; + this.media_ = this.master.playlists[parser.manifest.uri]; + } else { + this.trigger('playlistunchanged'); + } + + // refresh live playlists after a target duration passes + if (!this.media().endList) { + window_1.clearTimeout(this.mediaUpdateTimeout); + this.mediaUpdateTimeout = window_1.setTimeout(function () { + _this3.trigger('mediaupdatetimeout'); + }, refreshDelay(this.media(), !!update)); + } + + this.trigger('loadedplaylist'); + }; + + /** + * Abort any outstanding work and clean up. + */ + + + PlaylistLoader.prototype.dispose = function dispose() { + this.stopRequest(); + window_1.clearTimeout(this.mediaUpdateTimeout); + }; + + PlaylistLoader.prototype.stopRequest = function stopRequest() { + if (this.request) { + var oldRequest = this.request; + + this.request = null; + oldRequest.onreadystatechange = null; + oldRequest.abort(); + } + }; + + /** + * When called without any arguments, returns the currently + * active media playlist. When called with a single argument, + * triggers the playlist loader to asynchronously switch to the + * specified media playlist. Calling this method while the + * loader is in the HAVE_NOTHING causes an error to be emitted + * but otherwise has no effect. + * + * @param {Object=} playlist the parsed media playlist + * object to switch to + * @return {Playlist} the current loaded media + */ + + + PlaylistLoader.prototype.media = function media(playlist) { + var _this4 = this; + + // getter + if (!playlist) { + return this.media_; + } + + // setter + if (this.state === 'HAVE_NOTHING') { + throw new Error('Cannot switch media playlist from ' + this.state); + } + + var startingState = this.state; + + // find the playlist object if the target playlist has been + // specified by URI + if (typeof playlist === 'string') { + if (!this.master.playlists[playlist]) { + throw new Error('Unknown playlist URI: ' + playlist); + } + playlist = this.master.playlists[playlist]; + } + + var mediaChange = !this.media_ || playlist.uri !== this.media_.uri; + + // switch to fully loaded playlists immediately + if (this.master.playlists[playlist.uri].endList) { + // abort outstanding playlist requests + if (this.request) { + this.request.onreadystatechange = null; + this.request.abort(); + this.request = null; + } + this.state = 'HAVE_METADATA'; + this.media_ = playlist; + + // trigger media change if the active media has been updated + if (mediaChange) { + this.trigger('mediachanging'); + this.trigger('mediachange'); + } + return; + } + + // switching to the active playlist is a no-op + if (!mediaChange) { + return; + } + + this.state = 'SWITCHING_MEDIA'; + + // there is already an outstanding playlist request + if (this.request) { + if (resolveUrl$1(this.master.uri, playlist.uri) === this.request.url) { + // requesting to switch to the same playlist multiple times + // has no effect after the first + return; + } + this.request.onreadystatechange = null; + this.request.abort(); + this.request = null; + } + + // request the new playlist + if (this.media_) { + this.trigger('mediachanging'); + } + + this.request = this.hls_.xhr({ + uri: resolveUrl$1(this.master.uri, playlist.uri), + withCredentials: this.withCredentials + }, function (error, req) { + // disposed + if (!_this4.request) { + return; + } + + if (error) { + return _this4.playlistRequestError(_this4.request, playlist.uri, startingState); + } + + _this4.haveMetadata(req, playlist.uri); + + // fire loadedmetadata the first time a media playlist is loaded + if (startingState === 'HAVE_MASTER') { + _this4.trigger('loadedmetadata'); + } else { + _this4.trigger('mediachange'); + } + }); + }; + + /** + * pause loading of the playlist + */ + + + PlaylistLoader.prototype.pause = function pause() { + this.stopRequest(); + window_1.clearTimeout(this.mediaUpdateTimeout); + if (this.state === 'HAVE_NOTHING') { + // If we pause the loader before any data has been retrieved, its as if we never + // started, so reset to an unstarted state. + this.started = false; + } + // Need to restore state now that no activity is happening + if (this.state === 'SWITCHING_MEDIA') { + // if the loader was in the process of switching media, it should either return to + // HAVE_MASTER or HAVE_METADATA depending on if the loader has loaded a media + // playlist yet. This is determined by the existence of loader.media_ + if (this.media_) { + this.state = 'HAVE_METADATA'; + } else { + this.state = 'HAVE_MASTER'; + } + } else if (this.state === 'HAVE_CURRENT_METADATA') { + this.state = 'HAVE_METADATA'; + } + }; + + /** + * start loading of the playlist + */ + + + PlaylistLoader.prototype.load = function load(isFinalRendition) { + var _this5 = this; + + window_1.clearTimeout(this.mediaUpdateTimeout); + + var media = this.media(); + + if (isFinalRendition) { + var delay = media ? media.targetDuration / 2 * 1000 : 5 * 1000; + + this.mediaUpdateTimeout = window_1.setTimeout(function () { + return _this5.load(); + }, delay); + return; + } + + if (!this.started) { + this.start(); + return; + } + + if (media && !media.endList) { + this.trigger('mediaupdatetimeout'); + } else { + this.trigger('loadedplaylist'); + } + }; + + /** + * start loading of the playlist + */ + + + PlaylistLoader.prototype.start = function start() { + var _this6 = this; + + this.started = true; + + // request the specified URL + this.request = this.hls_.xhr({ + uri: this.srcUrl, + withCredentials: this.withCredentials + }, function (error, req) { + // disposed + if (!_this6.request) { + return; + } + + // clear the loader's request reference + _this6.request = null; + + if (error) { + _this6.error = { + status: req.status, + message: 'HLS playlist request error at URL: ' + _this6.srcUrl, + responseText: req.responseText, + // MEDIA_ERR_NETWORK + code: 2 + }; + if (_this6.state === 'HAVE_NOTHING') { + _this6.started = false; + } + return _this6.trigger('error'); + } + + var parser = new Parser(); + + parser.push(req.responseText); + parser.end(); + + _this6.state = 'HAVE_MASTER'; + + parser.manifest.uri = _this6.srcUrl; + + // loaded a master playlist + if (parser.manifest.playlists) { + _this6.master = parser.manifest; + + setupMediaPlaylists(_this6.master); + resolveMediaGroupUris(_this6.master); + + _this6.trigger('loadedplaylist'); + if (!_this6.request) { + // no media playlist was specifically selected so start + // from the first listed one + _this6.media(parser.manifest.playlists[0]); + } + return; + } + + // loaded a media playlist + // infer a master playlist if none was previously requested + _this6.master = { + mediaGroups: { + 'AUDIO': {}, + 'VIDEO': {}, + 'CLOSED-CAPTIONS': {}, + 'SUBTITLES': {} + }, + uri: window_1.location.href, + playlists: [{ + uri: _this6.srcUrl, + id: 0 + }] + }; + _this6.master.playlists[_this6.srcUrl] = _this6.master.playlists[0]; + _this6.master.playlists[0].resolvedUri = _this6.srcUrl; + // m3u8-parser does not attach an attributes property to media playlists so make + // sure that the property is attached to avoid undefined reference errors + _this6.master.playlists[0].attributes = _this6.master.playlists[0].attributes || {}; + _this6.haveMetadata(req, _this6.srcUrl); + return _this6.trigger('loadedmetadata'); + }); + }; + + return PlaylistLoader; + }(EventTarget$1); + + /** + * @file playlist.js + * + * Playlist related utilities. + */ + + var createTimeRange = videojs$1.createTimeRange; + + /** + * walk backward until we find a duration we can use + * or return a failure + * + * @param {Playlist} playlist the playlist to walk through + * @param {Number} endSequence the mediaSequence to stop walking on + */ + + var backwardDuration = function backwardDuration(playlist, endSequence) { + var result = 0; + var i = endSequence - playlist.mediaSequence; + // if a start time is available for segment immediately following + // the interval, use it + var segment = playlist.segments[i]; + + // Walk backward until we find the latest segment with timeline + // information that is earlier than endSequence + if (segment) { + if (typeof segment.start !== 'undefined') { + return {result: segment.start, precise: true}; + } + if (typeof segment.end !== 'undefined') { + return { + result: segment.end - segment.duration, + precise: true + }; + } + } + while (i--) { + segment = playlist.segments[i]; + if (typeof segment.end !== 'undefined') { + return {result: result + segment.end, precise: true}; + } + + result += segment.duration; + + if (typeof segment.start !== 'undefined') { + return {result: result + segment.start, precise: true}; + } + } + return {result: result, precise: false}; + }; + + /** + * walk forward until we find a duration we can use + * or return a failure + * + * @param {Playlist} playlist the playlist to walk through + * @param {Number} endSequence the mediaSequence to stop walking on + */ + var forwardDuration = function forwardDuration(playlist, endSequence) { + var result = 0; + var segment = void 0; + var i = endSequence - playlist.mediaSequence; + // Walk forward until we find the earliest segment with timeline + // information + + for (; i < playlist.segments.length; i++) { + segment = playlist.segments[i]; + if (typeof segment.start !== 'undefined') { + return { + result: segment.start - result, + precise: true + }; + } + + result += segment.duration; + + if (typeof segment.end !== 'undefined') { + return { + result: segment.end - result, + precise: true + }; + } + } + // indicate we didn't find a useful duration estimate + return {result: -1, precise: false}; + }; + + /** + * Calculate the media duration from the segments associated with a + * playlist. The duration of a subinterval of the available segments + * may be calculated by specifying an end index. + * + * @param {Object} playlist a media playlist object + * @param {Number=} endSequence an exclusive upper boundary + * for the playlist. Defaults to playlist length. + * @param {Number} expired the amount of time that has dropped + * off the front of the playlist in a live scenario + * @return {Number} the duration between the first available segment + * and end index. + */ + var intervalDuration = function intervalDuration(playlist, endSequence, expired) { + var backward = void 0; + var forward = void 0; + + if (typeof endSequence === 'undefined') { + endSequence = playlist.mediaSequence + playlist.segments.length; + } + + if (endSequence < playlist.mediaSequence) { + return 0; + } + + // do a backward walk to estimate the duration + backward = backwardDuration(playlist, endSequence); + if (backward.precise) { + // if we were able to base our duration estimate on timing + // information provided directly from the Media Source, return + // it + return backward.result; + } + + // walk forward to see if a precise duration estimate can be made + // that way + forward = forwardDuration(playlist, endSequence); + if (forward.precise) { + // we found a segment that has been buffered and so it's + // position is known precisely + return forward.result; + } + + // return the less-precise, playlist-based duration estimate + return backward.result + expired; + }; + + /** + * Calculates the duration of a playlist. If a start and end index + * are specified, the duration will be for the subset of the media + * timeline between those two indices. The total duration for live + * playlists is always Infinity. + * + * @param {Object} playlist a media playlist object + * @param {Number=} endSequence an exclusive upper + * boundary for the playlist. Defaults to the playlist media + * sequence number plus its length. + * @param {Number=} expired the amount of time that has + * dropped off the front of the playlist in a live scenario + * @return {Number} the duration between the start index and end + * index. + */ + var duration = function duration(playlist, endSequence, expired) { + if (!playlist) { + return 0; + } + + if (typeof expired !== 'number') { + expired = 0; + } + + // if a slice of the total duration is not requested, use + // playlist-level duration indicators when they're present + if (typeof endSequence === 'undefined') { + // if present, use the duration specified in the playlist + if (playlist.totalDuration) { + return playlist.totalDuration; + } + + // duration should be Infinity for live playlists + if (!playlist.endList) { + return window_1.Infinity; + } + } + + // calculate the total duration based on the segment durations + return intervalDuration(playlist, endSequence, expired); + }; + + /** + * Calculate the time between two indexes in the current playlist + * neight the start- nor the end-index need to be within the current + * playlist in which case, the targetDuration of the playlist is used + * to approximate the durations of the segments + * + * @param {Object} playlist a media playlist object + * @param {Number} startIndex + * @param {Number} endIndex + * @return {Number} the number of seconds between startIndex and endIndex + */ + var sumDurations = function sumDurations(playlist, startIndex, endIndex) { + var durations = 0; + + if (startIndex > endIndex) { + var _ref = [endIndex, startIndex]; + startIndex = _ref[0]; + endIndex = _ref[1]; + } + + if (startIndex < 0) { + for (var i = startIndex; i < Math.min(0, endIndex); i++) { + durations += playlist.targetDuration; + } + startIndex = 0; + } + + for (var _i2 = startIndex; _i2 < endIndex; _i2++) { + durations += playlist.segments[_i2].duration; + } + + return durations; + }; + + /** + * Determines the media index of the segment corresponding to the safe edge of the live + * window which is the duration of the last segment plus 2 target durations from the end + * of the playlist. + * + * @param {Object} playlist + * a media playlist object + * @return {Number} + * The media index of the segment at the safe live point. 0 if there is no "safe" + * point. + * @function safeLiveIndex + */ + var safeLiveIndex = function safeLiveIndex(playlist) { + if (!playlist.segments.length) { + return 0; + } + + var i = playlist.segments.length - 1; + var distanceFromEnd = playlist.segments[i].duration || playlist.targetDuration; + var safeDistance = distanceFromEnd + playlist.targetDuration * 2; + + while (i--) { + distanceFromEnd += playlist.segments[i].duration; + + if (distanceFromEnd >= safeDistance) { + break; + } + } + + return Math.max(0, i); + }; + + /** + * Calculates the playlist end time + * + * @param {Object} playlist a media playlist object + * @param {Number=} expired the amount of time that has + * dropped off the front of the playlist in a live scenario + * @param {Boolean|false} useSafeLiveEnd a boolean value indicating whether or not the + * playlist end calculation should consider the safe live end + * (truncate the playlist end by three segments). This is normally + * used for calculating the end of the playlist's seekable range. + * @returns {Number} the end time of playlist + * @function playlistEnd + */ + var playlistEnd = function playlistEnd(playlist, expired, useSafeLiveEnd) { + if (!playlist || !playlist.segments) { + return null; + } + if (playlist.endList) { + return duration(playlist); + } + + if (expired === null) { + return null; + } + + expired = expired || 0; + + var endSequence = useSafeLiveEnd ? safeLiveIndex(playlist) : playlist.segments.length; + + return intervalDuration(playlist, playlist.mediaSequence + endSequence, expired); + }; + + /** + * Calculates the interval of time that is currently seekable in a + * playlist. The returned time ranges are relative to the earliest + * moment in the specified playlist that is still available. A full + * seekable implementation for live streams would need to offset + * these values by the duration of content that has expired from the + * stream. + * + * @param {Object} playlist a media playlist object + * dropped off the front of the playlist in a live scenario + * @param {Number=} expired the amount of time that has + * dropped off the front of the playlist in a live scenario + * @return {TimeRanges} the periods of time that are valid targets + * for seeking + */ + var seekable = function seekable(playlist, expired) { + var useSafeLiveEnd = true; + var seekableStart = expired || 0; + var seekableEnd = playlistEnd(playlist, expired, useSafeLiveEnd); + + if (seekableEnd === null) { + return createTimeRange(); + } + return createTimeRange(seekableStart, seekableEnd); + }; + + var isWholeNumber = function isWholeNumber(num) { + return num - Math.floor(num) === 0; + }; + + var roundSignificantDigit = function roundSignificantDigit(increment, num) { + // If we have a whole number, just add 1 to it + if (isWholeNumber(num)) { + return num + increment * 0.1; + } + + var numDecimalDigits = num.toString().split('.')[1].length; + + for (var i = 1; i <= numDecimalDigits; i++) { + var scale = Math.pow(10, i); + var temp = num * scale; + + if (isWholeNumber(temp) || i === numDecimalDigits) { + return (temp + increment) / scale; + } + } + }; + + var ceilLeastSignificantDigit = roundSignificantDigit.bind(null, 1); + var floorLeastSignificantDigit = roundSignificantDigit.bind(null, -1); + + /** + * Determine the index and estimated starting time of the segment that + * contains a specified playback position in a media playlist. + * + * @param {Object} playlist the media playlist to query + * @param {Number} currentTime The number of seconds since the earliest + * possible position to determine the containing segment for + * @param {Number} startIndex + * @param {Number} startTime + * @return {Object} + */ + var getMediaInfoForTime = function getMediaInfoForTime(playlist, currentTime, startIndex, startTime) { + var i = void 0; + var segment = void 0; + var numSegments = playlist.segments.length; + + var time = currentTime - startTime; + + if (time < 0) { + // Walk backward from startIndex in the playlist, adding durations + // until we find a segment that contains `time` and return it + if (startIndex > 0) { + for (i = startIndex - 1; i >= 0; i--) { + segment = playlist.segments[i]; + time += floorLeastSignificantDigit(segment.duration); + if (time > 0) { + return { + mediaIndex: i, + startTime: startTime - sumDurations(playlist, startIndex, i) + }; + } + } + } + // We were unable to find a good segment within the playlist + // so select the first segment + return { + mediaIndex: 0, + startTime: currentTime + }; + } + + // When startIndex is negative, we first walk forward to first segment + // adding target durations. If we "run out of time" before getting to + // the first segment, return the first segment + if (startIndex < 0) { + for (i = startIndex; i < 0; i++) { + time -= playlist.targetDuration; + if (time < 0) { + return { + mediaIndex: 0, + startTime: currentTime + }; + } + } + startIndex = 0; + } + + // Walk forward from startIndex in the playlist, subtracting durations + // until we find a segment that contains `time` and return it + for (i = startIndex; i < numSegments; i++) { + segment = playlist.segments[i]; + time -= ceilLeastSignificantDigit(segment.duration); + if (time < 0) { + return { + mediaIndex: i, + startTime: startTime + sumDurations(playlist, startIndex, i) + }; + } + } + + // We are out of possible candidates so load the last one... + return { + mediaIndex: numSegments - 1, + startTime: currentTime + }; + }; + + /** + * Check whether the playlist is blacklisted or not. + * + * @param {Object} playlist the media playlist object + * @return {boolean} whether the playlist is blacklisted or not + * @function isBlacklisted + */ + var isBlacklisted = function isBlacklisted(playlist) { + return playlist.excludeUntil && playlist.excludeUntil > Date.now(); + }; + + /** + * Check whether the playlist is compatible with current playback configuration or has + * been blacklisted permanently for being incompatible. + * + * @param {Object} playlist the media playlist object + * @return {boolean} whether the playlist is incompatible or not + * @function isIncompatible + */ + var isIncompatible = function isIncompatible(playlist) { + return playlist.excludeUntil && playlist.excludeUntil === Infinity; + }; + + /** + * Check whether the playlist is enabled or not. + * + * @param {Object} playlist the media playlist object + * @return {boolean} whether the playlist is enabled or not + * @function isEnabled + */ + var isEnabled = function isEnabled(playlist) { + var blacklisted = isBlacklisted(playlist); + + return !playlist.disabled && !blacklisted; + }; + + /** + * Check whether the playlist has been manually disabled through the representations api. + * + * @param {Object} playlist the media playlist object + * @return {boolean} whether the playlist is disabled manually or not + * @function isDisabled + */ + var isDisabled = function isDisabled(playlist) { + return playlist.disabled; + }; + + /** + * Returns whether the current playlist is an AES encrypted HLS stream + * + * @return {Boolean} true if it's an AES encrypted HLS stream + */ + var isAes = function isAes(media) { + for (var i = 0; i < media.segments.length; i++) { + if (media.segments[i].key) { + return true; + } + } + return false; + }; + + /** + * Returns whether the current playlist contains fMP4 + * + * @return {Boolean} true if the playlist contains fMP4 + */ + var isFmp4 = function isFmp4(media) { + for (var i = 0; i < media.segments.length; i++) { + if (media.segments[i].map) { + return true; + } + } + return false; + }; + + /** + * Checks if the playlist has a value for the specified attribute + * + * @param {String} attr + * Attribute to check for + * @param {Object} playlist + * The media playlist object + * @return {Boolean} + * Whether the playlist contains a value for the attribute or not + * @function hasAttribute + */ + var hasAttribute = function hasAttribute(attr, playlist) { + return playlist.attributes && playlist.attributes[attr]; + }; + + /** + * Estimates the time required to complete a segment download from the specified playlist + * + * @param {Number} segmentDuration + * Duration of requested segment + * @param {Number} bandwidth + * Current measured bandwidth of the player + * @param {Object} playlist + * The media playlist object + * @param {Number=} bytesReceived + * Number of bytes already received for the request. Defaults to 0 + * @return {Number|NaN} + * The estimated time to request the segment. NaN if bandwidth information for + * the given playlist is unavailable + * @function estimateSegmentRequestTime + */ + var estimateSegmentRequestTime = function estimateSegmentRequestTime(segmentDuration, bandwidth, playlist) { + var bytesReceived = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + + if (!hasAttribute('BANDWIDTH', playlist)) { + return NaN; + } + + var size = segmentDuration * playlist.attributes.BANDWIDTH; + + return (size - bytesReceived * 8) / bandwidth; + }; + + /* + * Returns whether the current playlist is the lowest rendition + * + * @return {Boolean} true if on lowest rendition + */ + var isLowestEnabledRendition = function isLowestEnabledRendition(master, media) { + if (master.playlists.length === 1) { + return true; + } + + var currentBandwidth = media.attributes.BANDWIDTH || Number.MAX_VALUE; + + return master.playlists.filter(function (playlist) { + if (!isEnabled(playlist)) { + return false; + } + + return (playlist.attributes.BANDWIDTH || 0) < currentBandwidth; + }).length === 0; + }; + + // exports + var Playlist = { + duration: duration, + seekable: seekable, + safeLiveIndex: safeLiveIndex, + getMediaInfoForTime: getMediaInfoForTime, + isEnabled: isEnabled, + isDisabled: isDisabled, + isBlacklisted: isBlacklisted, + isIncompatible: isIncompatible, + playlistEnd: playlistEnd, + isAes: isAes, + isFmp4: isFmp4, + hasAttribute: hasAttribute, + estimateSegmentRequestTime: estimateSegmentRequestTime, + isLowestEnabledRendition: isLowestEnabledRendition + }; + + /** + * @file xhr.js + */ + + var videojsXHR = videojs$1.xhr, + mergeOptions$1$1 = videojs$1.mergeOptions; + + + var xhrFactory = function xhrFactory() { + var xhr = function XhrFunction(options, callback) { + // Add a default timeout for all hls requests + options = mergeOptions$1$1({ + timeout: 45e3 + }, options); + + // Allow an optional user-specified function to modify the option + // object before we construct the xhr request + var beforeRequest = XhrFunction.beforeRequest || videojs$1.Hls.xhr.beforeRequest; + + if (beforeRequest && typeof beforeRequest === 'function') { + var newOptions = beforeRequest(options); + + if (newOptions) { + options = newOptions; + } + } + + var request = videojsXHR(options, function (error, response) { + var reqResponse = request.response; + + if (!error && reqResponse) { + request.responseTime = Date.now(); + request.roundTripTime = request.responseTime - request.requestTime; + request.bytesReceived = reqResponse.byteLength || reqResponse.length; + if (!request.bandwidth) { + request.bandwidth = Math.floor(request.bytesReceived / request.roundTripTime * 8 * 1000); + } + } + + if (response.headers) { + request.responseHeaders = response.headers; + } + + // videojs.xhr now uses a specific code on the error + // object to signal that a request has timed out instead + // of setting a boolean on the request object + if (error && error.code === 'ETIMEDOUT') { + request.timedout = true; + } + + // videojs.xhr no longer considers status codes outside of 200 and 0 + // (for file uris) to be errors, but the old XHR did, so emulate that + // behavior. Status 206 may be used in response to byterange requests. + if (!error && !request.aborted && response.statusCode !== 200 && response.statusCode !== 206 && response.statusCode !== 0) { + error = new Error('XHR Failed with a response of: ' + (request && (reqResponse || request.responseText))); + } + + callback(error, request); + }); + var originalAbort = request.abort; + + request.abort = function () { + request.aborted = true; + return originalAbort.apply(request, arguments); + }; + request.uri = options.uri; + request.requestTime = Date.now(); + return request; + }; + + return xhr; + }; + + /** + * @file bin-utils.js + */ + + /** + * convert a TimeRange to text + * + * @param {TimeRange} range the timerange to use for conversion + * @param {Number} i the iterator on the range to convert + */ + var textRange = function textRange(range, i) { + return range.start(i) + '-' + range.end(i); + }; + + /** + * format a number as hex string + * + * @param {Number} e The number + * @param {Number} i the iterator + */ + var formatHexString = function formatHexString(e, i) { + var value = e.toString(16); + + return '00'.substring(0, 2 - value.length) + value + (i % 2 ? ' ' : ''); + }; + var formatAsciiString = function formatAsciiString(e) { + if (e >= 0x20 && e < 0x7e) { + return String.fromCharCode(e); + } + return '.'; + }; + + /** + * Creates an object for sending to a web worker modifying properties that are TypedArrays + * into a new object with seperated properties for the buffer, byteOffset, and byteLength. + * + * @param {Object} message + * Object of properties and values to send to the web worker + * @return {Object} + * Modified message with TypedArray values expanded + * @function createTransferableMessage + */ + var createTransferableMessage = function createTransferableMessage(message) { + var transferable = {}; + + Object.keys(message).forEach(function (key) { + var value = message[key]; + + if (ArrayBuffer.isView(value)) { + transferable[key] = { + bytes: value.buffer, + byteOffset: value.byteOffset, + byteLength: value.byteLength + }; + } else { + transferable[key] = value; + } + }); + + return transferable; + }; + + /** + * Returns a unique string identifier for a media initialization + * segment. + */ + var initSegmentId = function initSegmentId(initSegment) { + var byterange = initSegment.byterange || { + length: Infinity, + offset: 0 + }; + + return [byterange.length, byterange.offset, initSegment.resolvedUri].join(','); + }; + + /** + * utils to help dump binary data to the console + */ + var hexDump = function hexDump(data) { + var bytes = Array.prototype.slice.call(data); + var step = 16; + var result = ''; + var hex = void 0; + var ascii = void 0; + + for (var j = 0; j < bytes.length / step; j++) { + hex = bytes.slice(j * step, j * step + step).map(formatHexString).join(''); + ascii = bytes.slice(j * step, j * step + step).map(formatAsciiString).join(''); + result += hex + ' ' + ascii + '\n'; + } + + return result; + }; + + var tagDump = function tagDump(_ref2) { + var bytes = _ref2.bytes; + return hexDump(bytes); + }; + + var textRanges = function textRanges(ranges) { + var result = ''; + var i = void 0; + + for (i = 0; i < ranges.length; i++) { + result += textRange(ranges, i) + ' '; + } + return result; + }; + + var utils = /*#__PURE__*/Object.freeze({ + createTransferableMessage: createTransferableMessage, + initSegmentId: initSegmentId, + hexDump: hexDump, + tagDump: tagDump, + textRanges: textRanges + }); + + /** + * ranges + * + * Utilities for working with TimeRanges. + * + */ + + // Fudge factor to account for TimeRanges rounding + var TIME_FUDGE_FACTOR = 1 / 30; + // Comparisons between time values such as current time and the end of the buffered range + // can be misleading because of precision differences or when the current media has poorly + // aligned audio and video, which can cause values to be slightly off from what you would + // expect. This value is what we consider to be safe to use in such comparisons to account + // for these scenarios. + var SAFE_TIME_DELTA = TIME_FUDGE_FACTOR * 3; + var filterRanges = function filterRanges(timeRanges, predicate) { + var results = []; + var i = void 0; + + if (timeRanges && timeRanges.length) { + // Search for ranges that match the predicate + for (i = 0; i < timeRanges.length; i++) { + if (predicate(timeRanges.start(i), timeRanges.end(i))) { + results.push([timeRanges.start(i), timeRanges.end(i)]); + } + } + } + + return videojs$1.createTimeRanges(results); + }; + + /** + * Attempts to find the buffered TimeRange that contains the specified + * time. + * @param {TimeRanges} buffered - the TimeRanges object to query + * @param {number} time - the time to filter on. + * @returns {TimeRanges} a new TimeRanges object + */ + var findRange = function findRange(buffered, time) { + return filterRanges(buffered, function (start, end) { + return start - TIME_FUDGE_FACTOR <= time && end + TIME_FUDGE_FACTOR >= time; + }); + }; + + /** + * Returns the TimeRanges that begin later than the specified time. + * @param {TimeRanges} timeRanges - the TimeRanges object to query + * @param {number} time - the time to filter on. + * @returns {TimeRanges} a new TimeRanges object. + */ + var findNextRange = function findNextRange(timeRanges, time) { + return filterRanges(timeRanges, function (start) { + return start - TIME_FUDGE_FACTOR >= time; + }); + }; + + /** + * Returns gaps within a list of TimeRanges + * @param {TimeRanges} buffered - the TimeRanges object + * @return {TimeRanges} a TimeRanges object of gaps + */ + var findGaps = function findGaps(buffered) { + if (buffered.length < 2) { + return videojs$1.createTimeRanges(); + } + + var ranges = []; + + for (var i = 1; i < buffered.length; i++) { + var start = buffered.end(i - 1); + var end = buffered.start(i); + + ranges.push([start, end]); + } + + return videojs$1.createTimeRanges(ranges); + }; + + /** + * Gets a human readable string for a TimeRange + * + * @param {TimeRange} range + * @returns {String} a human readable string + */ + var printableRange = function printableRange(range) { + var strArr = []; + + if (!range || !range.length) { + return ''; + } + + for (var i = 0; i < range.length; i++) { + strArr.push(range.start(i) + ' => ' + range.end(i)); + } + + return strArr.join(', '); + }; + + /** + * Calculates the amount of time left in seconds until the player hits the end of the + * buffer and causes a rebuffer + * + * @param {TimeRange} buffered + * The state of the buffer + * @param {Numnber} currentTime + * The current time of the player + * @param {Number} playbackRate + * The current playback rate of the player. Defaults to 1. + * @return {Number} + * Time until the player has to start rebuffering in seconds. + * @function timeUntilRebuffer + */ + var timeUntilRebuffer = function timeUntilRebuffer(buffered, currentTime) { + var playbackRate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + + var bufferedEnd = buffered.length ? buffered.end(buffered.length - 1) : 0; + + return (bufferedEnd - currentTime) / playbackRate; + }; + + /** + * Converts a TimeRanges object into an array representation + * @param {TimeRanges} timeRanges + * @returns {Array} + */ + var timeRangesToArray = function timeRangesToArray(timeRanges) { + var timeRangesList = []; + + for (var i = 0; i < timeRanges.length; i++) { + timeRangesList.push({ + start: timeRanges.start(i), + end: timeRanges.end(i) + }); + } + + return timeRangesList; + }; + + /** + * @file create-text-tracks-if-necessary.js + */ + + /** + * Create text tracks on video.js if they exist on a segment. + * + * @param {Object} sourceBuffer the VSB or FSB + * @param {Object} mediaSource the HTML media source + * @param {Object} segment the segment that may contain the text track + * @private + */ + var createTextTracksIfNecessary = function createTextTracksIfNecessary(sourceBuffer, mediaSource, segment) { + var player = mediaSource.player_; + + // create an in-band caption track if one is present in the segment + if (segment.captions && segment.captions.length) { + if (!sourceBuffer.inbandTextTracks_) { + sourceBuffer.inbandTextTracks_ = {}; + } + + for (var trackId in segment.captionStreams) { + if (!sourceBuffer.inbandTextTracks_[trackId]) { + player.tech_.trigger({type: 'usage', name: 'hls-608'}); + var track = player.textTracks().getTrackById(trackId); + + if (track) { + // Resuse an existing track with a CC# id because this was + // very likely created by videojs-contrib-hls from information + // in the m3u8 for us to use + sourceBuffer.inbandTextTracks_[trackId] = track; + } else { + // Otherwise, create a track with the default `CC#` label and + // without a language + sourceBuffer.inbandTextTracks_[trackId] = player.addRemoteTextTrack({ + kind: 'captions', + id: trackId, + label: trackId + }, false).track; + } + } + } + } + + if (segment.metadata && segment.metadata.length && !sourceBuffer.metadataTrack_) { + sourceBuffer.metadataTrack_ = player.addRemoteTextTrack({ + kind: 'metadata', + label: 'Timed Metadata' + }, false).track; + sourceBuffer.metadataTrack_.inBandMetadataTrackDispatchType = segment.metadata.dispatchType; + } + }; + + /** + * @file remove-cues-from-track.js + */ + + /** + * Remove cues from a track on video.js. + * + * @param {Double} start start of where we should remove the cue + * @param {Double} end end of where the we should remove the cue + * @param {Object} track the text track to remove the cues from + * @private + */ + var removeCuesFromTrack = function removeCuesFromTrack(start, end, track) { + var i = void 0; + var cue = void 0; + + if (!track) { + return; + } + + if (!track.cues) { + return; + } + + i = track.cues.length; + + while (i--) { + cue = track.cues[i]; + + // Remove any overlapping cue + if (cue.startTime <= end && cue.endTime >= start) { + track.removeCue(cue); + } + } + }; + + /** + * @file add-text-track-data.js + */ + /** + * Define properties on a cue for backwards compatability, + * but warn the user that the way that they are using it + * is depricated and will be removed at a later date. + * + * @param {Cue} cue the cue to add the properties on + * @private + */ + var deprecateOldCue = function deprecateOldCue(cue) { + Object.defineProperties(cue.frame, { + id: { + get: function get$$1() { + videojs$1.log.warn('cue.frame.id is deprecated. Use cue.value.key instead.'); + return cue.value.key; + } + }, + value: { + get: function get$$1() { + videojs$1.log.warn('cue.frame.value is deprecated. Use cue.value.data instead.'); + return cue.value.data; + } + }, + privateData: { + get: function get$$1() { + videojs$1.log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.'); + return cue.value.data; + } + } + }); + }; + + var durationOfVideo = function durationOfVideo(duration) { + var dur = void 0; + + if (isNaN(duration) || Math.abs(duration) === Infinity) { + dur = Number.MAX_VALUE; + } else { + dur = duration; + } + return dur; + }; + /** + * Add text track data to a source handler given the captions and + * metadata from the buffer. + * + * @param {Object} sourceHandler the virtual source buffer + * @param {Array} captionArray an array of caption data + * @param {Array} metadataArray an array of meta data + * @private + */ + var addTextTrackData = function addTextTrackData(sourceHandler, captionArray, metadataArray) { + var Cue = window_1.WebKitDataCue || window_1.VTTCue; + + if (captionArray) { + captionArray.forEach(function (caption) { + var track = caption.stream; + + this.inbandTextTracks_[track].addCue(new Cue(caption.startTime + this.timestampOffset, caption.endTime + this.timestampOffset, caption.text)); + }, sourceHandler); + } + + if (metadataArray) { + var videoDuration = durationOfVideo(sourceHandler.mediaSource_.duration); + + metadataArray.forEach(function (metadata) { + var time = metadata.cueTime + this.timestampOffset; + + metadata.frames.forEach(function (frame) { + var cue = new Cue(time, time, frame.value || frame.url || frame.data || ''); + + cue.frame = frame; + cue.value = frame; + deprecateOldCue(cue); + + this.metadataTrack_.addCue(cue); + }, this); + }, sourceHandler); + + // Updating the metadeta cues so that + // the endTime of each cue is the startTime of the next cue + // the endTime of last cue is the duration of the video + if (sourceHandler.metadataTrack_ && sourceHandler.metadataTrack_.cues && sourceHandler.metadataTrack_.cues.length) { + var cues = sourceHandler.metadataTrack_.cues; + var cuesArray = []; + + // Create a copy of the TextTrackCueList... + // ...disregarding cues with a falsey value + for (var i = 0; i < cues.length; i++) { + if (cues[i]) { + cuesArray.push(cues[i]); + } + } + + // Group cues by their startTime value + var cuesGroupedByStartTime = cuesArray.reduce(function (obj, cue) { + var timeSlot = obj[cue.startTime] || []; + + timeSlot.push(cue); + obj[cue.startTime] = timeSlot; + + return obj; + }, {}); + + // Sort startTimes by ascending order + var sortedStartTimes = Object.keys(cuesGroupedByStartTime).sort(function (a, b) { + return Number(a) - Number(b); + }); + + // Map each cue group's endTime to the next group's startTime + sortedStartTimes.forEach(function (startTime, idx) { + var cueGroup = cuesGroupedByStartTime[startTime]; + var nextTime = Number(sortedStartTimes[idx + 1]) || videoDuration; + + // Map each cue's endTime the next group's startTime + cueGroup.forEach(function (cue) { + cue.endTime = nextTime; + }); + }); + } + } + }; + + var win$1 = typeof window !== 'undefined' ? window : {}, + TARGET = typeof Symbol === 'undefined' ? '__target' : Symbol(), + SCRIPT_TYPE = 'application/javascript', + BlobBuilder = win$1.BlobBuilder || win$1.WebKitBlobBuilder || win$1.MozBlobBuilder || win$1.MSBlobBuilder, + URL = win$1.URL || win$1.webkitURL || URL && URL.msURL, + Worker = win$1.Worker; + + /** + * Returns a wrapper around Web Worker code that is constructible. + * + * @function shimWorker + * + * @param { String } filename The name of the file + * @param { Function } fn Function wrapping the code of the worker + */ + function shimWorker(filename, fn) { + return function ShimWorker(forceFallback) { + var o = this; + + if (!fn) { + return new Worker(filename); + } else if (Worker && !forceFallback) { + // Convert the function's inner code to a string to construct the worker + var source = fn.toString().replace(/^function.+?{/, '').slice(0, -1), + objURL = createSourceObject(source); + + this[TARGET] = new Worker(objURL); + wrapTerminate(this[TARGET], objURL); + return this[TARGET]; + } else { + var selfShim = { + postMessage: function postMessage(m) { + if (o.onmessage) { + setTimeout(function () { + o.onmessage({data: m, target: selfShim}); + }); + } + } + }; + + fn.call(selfShim); + this.postMessage = function (m) { + setTimeout(function () { + selfShim.onmessage({data: m, target: o}); + }); + }; + this.isThisThread = true; + } + }; + } + + // Test Worker capabilities + if (Worker) { + var testWorker, + objURL = createSourceObject('self.onmessage = function () {}'), + testArray = new Uint8Array(1); + + try { + testWorker = new Worker(objURL); + + // Native browser on some Samsung devices throws for transferables, let's detect it + testWorker.postMessage(testArray, [testArray.buffer]); + } catch (e) { + Worker = null; + } finally { + URL.revokeObjectURL(objURL); + if (testWorker) { + testWorker.terminate(); + } + } + } + + function createSourceObject(str) { + try { + return URL.createObjectURL(new Blob([str], {type: SCRIPT_TYPE})); + } catch (e) { + var blob = new BlobBuilder(); + blob.append(str); + return URL.createObjectURL(blob.getBlob(type)); + } + } + + function wrapTerminate(worker, objURL) { + if (!worker || !objURL) return; + var term = worker.terminate; + worker.objURL = objURL; + worker.terminate = function () { + if (worker.objURL) URL.revokeObjectURL(worker.objURL); + term.call(worker); + }; + } + + var TransmuxWorker = new shimWorker("./transmuxer-worker.worker.js", function (window, document$$1) { + var self = this; + var transmuxerWorker = function () { + + var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + var win; + + if (typeof window !== "undefined") { + win = window; + } else if (typeof commonjsGlobal !== "undefined") { + win = commonjsGlobal; + } else if (typeof self !== "undefined") { + win = self; + } else { + win = {}; + } + + var window_1$$1 = win; + + /** + * mux.js + * + * Copyright (c) 2015 Brightcove + * All rights reserved. + * + * Functions that generate fragmented MP4s suitable for use with Media + * Source Extensions. + */ + + var UINT32_MAX = Math.pow(2, 32) - 1; + + var box, dinf, esds, ftyp, mdat, mfhd, minf, moof, moov, mvex, mvhd, trak, tkhd, mdia, mdhd, hdlr, sdtp, stbl, + stsd, traf, trex, trun, types, MAJOR_BRAND, MINOR_VERSION, AVC1_BRAND, VIDEO_HDLR, AUDIO_HDLR, HDLR_TYPES, VMHD, + SMHD, DREF, STCO, STSC, STSZ, STTS; + + // pre-calculate constants + (function () { + var i; + types = { + avc1: [], // codingname + avcC: [], + btrt: [], + dinf: [], + dref: [], + esds: [], + ftyp: [], + hdlr: [], + mdat: [], + mdhd: [], + mdia: [], + mfhd: [], + minf: [], + moof: [], + moov: [], + mp4a: [], // codingname + mvex: [], + mvhd: [], + sdtp: [], + smhd: [], + stbl: [], + stco: [], + stsc: [], + stsd: [], + stsz: [], + stts: [], + styp: [], + tfdt: [], + tfhd: [], + traf: [], + trak: [], + trun: [], + trex: [], + tkhd: [], + vmhd: [] + }; + + // In environments where Uint8Array is undefined (e.g., IE8), skip set up so that we + // don't throw an error + if (typeof Uint8Array === 'undefined') { + return; + } + + for (i in types) { + if (types.hasOwnProperty(i)) { + types[i] = [i.charCodeAt(0), i.charCodeAt(1), i.charCodeAt(2), i.charCodeAt(3)]; + } + } + + MAJOR_BRAND = new Uint8Array(['i'.charCodeAt(0), 's'.charCodeAt(0), 'o'.charCodeAt(0), 'm'.charCodeAt(0)]); + AVC1_BRAND = new Uint8Array(['a'.charCodeAt(0), 'v'.charCodeAt(0), 'c'.charCodeAt(0), '1'.charCodeAt(0)]); + MINOR_VERSION = new Uint8Array([0, 0, 0, 1]); + VIDEO_HDLR = new Uint8Array([0x00, // version 0 + 0x00, 0x00, 0x00, // flags + 0x00, 0x00, 0x00, 0x00, // pre_defined + 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide' + 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x00, 0x00, 0x00, // reserved + 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler' + ]); + AUDIO_HDLR = new Uint8Array([0x00, // version 0 + 0x00, 0x00, 0x00, // flags + 0x00, 0x00, 0x00, 0x00, // pre_defined + 0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun' + 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x00, 0x00, 0x00, // reserved + 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler' + ]); + HDLR_TYPES = { + video: VIDEO_HDLR, + audio: AUDIO_HDLR + }; + DREF = new Uint8Array([0x00, // version 0 + 0x00, 0x00, 0x00, // flags + 0x00, 0x00, 0x00, 0x01, // entry_count + 0x00, 0x00, 0x00, 0x0c, // entry_size + 0x75, 0x72, 0x6c, 0x20, // 'url' type + 0x00, // version 0 + 0x00, 0x00, 0x01 // entry_flags + ]); + SMHD = new Uint8Array([0x00, // version + 0x00, 0x00, 0x00, // flags + 0x00, 0x00, // balance, 0 means centered + 0x00, 0x00 // reserved + ]); + STCO = new Uint8Array([0x00, // version + 0x00, 0x00, 0x00, // flags + 0x00, 0x00, 0x00, 0x00 // entry_count + ]); + STSC = STCO; + STSZ = new Uint8Array([0x00, // version + 0x00, 0x00, 0x00, // flags + 0x00, 0x00, 0x00, 0x00, // sample_size + 0x00, 0x00, 0x00, 0x00 // sample_count + ]); + STTS = STCO; + VMHD = new Uint8Array([0x00, // version + 0x00, 0x00, 0x01, // flags + 0x00, 0x00, // graphicsmode + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // opcolor + ]); + })(); + + box = function box(type) { + var payload = [], + size = 0, + i, + result, + view; + + for (i = 1; i < arguments.length; i++) { + payload.push(arguments[i]); + } + + i = payload.length; + + // calculate the total size we need to allocate + while (i--) { + size += payload[i].byteLength; + } + result = new Uint8Array(size + 8); + view = new DataView(result.buffer, result.byteOffset, result.byteLength); + view.setUint32(0, result.byteLength); + result.set(type, 4); + + // copy the payload into the result + for (i = 0, size = 8; i < payload.length; i++) { + result.set(payload[i], size); + size += payload[i].byteLength; + } + return result; + }; + + dinf = function dinf() { + return box(types.dinf, box(types.dref, DREF)); + }; + + esds = function esds(track) { + return box(types.esds, new Uint8Array([0x00, // version + 0x00, 0x00, 0x00, // flags + + // ES_Descriptor + 0x03, // tag, ES_DescrTag + 0x19, // length + 0x00, 0x00, // ES_ID + 0x00, // streamDependenceFlag, URL_flag, reserved, streamPriority + + // DecoderConfigDescriptor + 0x04, // tag, DecoderConfigDescrTag + 0x11, // length + 0x40, // object type + 0x15, // streamType + 0x00, 0x06, 0x00, // bufferSizeDB + 0x00, 0x00, 0xda, 0xc0, // maxBitrate + 0x00, 0x00, 0xda, 0xc0, // avgBitrate + + // DecoderSpecificInfo + 0x05, // tag, DecoderSpecificInfoTag + 0x02, // length + // ISO/IEC 14496-3, AudioSpecificConfig + // for samplingFrequencyIndex see ISO/IEC 13818-7:2006, 8.1.3.2.2, Table 35 + track.audioobjecttype << 3 | track.samplingfrequencyindex >>> 1, track.samplingfrequencyindex << 7 | track.channelcount << 3, 0x06, 0x01, 0x02 // GASpecificConfig + ])); + }; + + ftyp = function ftyp() { + return box(types.ftyp, MAJOR_BRAND, MINOR_VERSION, MAJOR_BRAND, AVC1_BRAND); + }; + + hdlr = function hdlr(type) { + return box(types.hdlr, HDLR_TYPES[type]); + }; + mdat = function mdat(data) { + return box(types.mdat, data); + }; + mdhd = function mdhd(track) { + var result = new Uint8Array([0x00, // version 0 + 0x00, 0x00, 0x00, // flags + 0x00, 0x00, 0x00, 0x02, // creation_time + 0x00, 0x00, 0x00, 0x03, // modification_time + 0x00, 0x01, 0x5f, 0x90, // timescale, 90,000 "ticks" per second + + track.duration >>> 24 & 0xFF, track.duration >>> 16 & 0xFF, track.duration >>> 8 & 0xFF, track.duration & 0xFF, // duration + 0x55, 0xc4, // 'und' language (undetermined) + 0x00, 0x00]); + + // Use the sample rate from the track metadata, when it is + // defined. The sample rate can be parsed out of an ADTS header, for + // instance. + if (track.samplerate) { + result[12] = track.samplerate >>> 24 & 0xFF; + result[13] = track.samplerate >>> 16 & 0xFF; + result[14] = track.samplerate >>> 8 & 0xFF; + result[15] = track.samplerate & 0xFF; + } + + return box(types.mdhd, result); + }; + mdia = function mdia(track) { + return box(types.mdia, mdhd(track), hdlr(track.type), minf(track)); + }; + mfhd = function mfhd(sequenceNumber) { + return box(types.mfhd, new Uint8Array([0x00, 0x00, 0x00, 0x00, // flags + (sequenceNumber & 0xFF000000) >> 24, (sequenceNumber & 0xFF0000) >> 16, (sequenceNumber & 0xFF00) >> 8, sequenceNumber & 0xFF // sequence_number + ])); + }; + minf = function minf(track) { + return box(types.minf, track.type === 'video' ? box(types.vmhd, VMHD) : box(types.smhd, SMHD), dinf(), stbl(track)); + }; + moof = function moof(sequenceNumber, tracks) { + var trackFragments = [], + i = tracks.length; + // build traf boxes for each track fragment + while (i--) { + trackFragments[i] = traf(tracks[i]); + } + return box.apply(null, [types.moof, mfhd(sequenceNumber)].concat(trackFragments)); + }; + /** + * Returns a movie box. + * @param tracks {array} the tracks associated with this movie + * @see ISO/IEC 14496-12:2012(E), section 8.2.1 + */ + moov = function moov(tracks) { + var i = tracks.length, + boxes = []; + + while (i--) { + boxes[i] = trak(tracks[i]); + } + + return box.apply(null, [types.moov, mvhd(0xffffffff)].concat(boxes).concat(mvex(tracks))); + }; + mvex = function mvex(tracks) { + var i = tracks.length, + boxes = []; + + while (i--) { + boxes[i] = trex(tracks[i]); + } + return box.apply(null, [types.mvex].concat(boxes)); + }; + mvhd = function mvhd(duration) { + var bytes = new Uint8Array([0x00, // version 0 + 0x00, 0x00, 0x00, // flags + 0x00, 0x00, 0x00, 0x01, // creation_time + 0x00, 0x00, 0x00, 0x02, // modification_time + 0x00, 0x01, 0x5f, 0x90, // timescale, 90,000 "ticks" per second + (duration & 0xFF000000) >> 24, (duration & 0xFF0000) >> 16, (duration & 0xFF00) >> 8, duration & 0xFF, // duration + 0x00, 0x01, 0x00, 0x00, // 1.0 rate + 0x01, 0x00, // 1.0 volume + 0x00, 0x00, // reserved + 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre_defined + 0xff, 0xff, 0xff, 0xff // next_track_ID + ]); + return box(types.mvhd, bytes); + }; + + sdtp = function sdtp(track) { + var samples = track.samples || [], + bytes = new Uint8Array(4 + samples.length), + flags, + i; + + // leave the full box header (4 bytes) all zero + + // write the sample table + for (i = 0; i < samples.length; i++) { + flags = samples[i].flags; + + bytes[i + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy; + } + + return box(types.sdtp, bytes); + }; + + stbl = function stbl(track) { + return box(types.stbl, stsd(track), box(types.stts, STTS), box(types.stsc, STSC), box(types.stsz, STSZ), box(types.stco, STCO)); + }; + + (function () { + var videoSample, audioSample; + + stsd = function stsd(track) { + + return box(types.stsd, new Uint8Array([0x00, // version 0 + 0x00, 0x00, 0x00, // flags + 0x00, 0x00, 0x00, 0x01]), track.type === 'video' ? videoSample(track) : audioSample(track)); + }; + + videoSample = function videoSample(track) { + var sps = track.sps || [], + pps = track.pps || [], + sequenceParameterSets = [], + pictureParameterSets = [], + i; + + // assemble the SPSs + for (i = 0; i < sps.length; i++) { + sequenceParameterSets.push((sps[i].byteLength & 0xFF00) >>> 8); + sequenceParameterSets.push(sps[i].byteLength & 0xFF); // sequenceParameterSetLength + sequenceParameterSets = sequenceParameterSets.concat(Array.prototype.slice.call(sps[i])); // SPS + } + + // assemble the PPSs + for (i = 0; i < pps.length; i++) { + pictureParameterSets.push((pps[i].byteLength & 0xFF00) >>> 8); + pictureParameterSets.push(pps[i].byteLength & 0xFF); + pictureParameterSets = pictureParameterSets.concat(Array.prototype.slice.call(pps[i])); + } + + return box(types.avc1, new Uint8Array([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x01, // data_reference_index + 0x00, 0x00, // pre_defined + 0x00, 0x00, // reserved + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre_defined + (track.width & 0xff00) >> 8, track.width & 0xff, // width + (track.height & 0xff00) >> 8, track.height & 0xff, // height + 0x00, 0x48, 0x00, 0x00, // horizresolution + 0x00, 0x48, 0x00, 0x00, // vertresolution + 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x01, // frame_count + 0x13, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x6a, 0x73, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x2d, 0x68, 0x6c, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // compressorname + 0x00, 0x18, // depth = 24 + 0x11, 0x11 // pre_defined = -1 + ]), box(types.avcC, new Uint8Array([0x01, // configurationVersion + track.profileIdc, // AVCProfileIndication + track.profileCompatibility, // profile_compatibility + track.levelIdc, // AVCLevelIndication + 0xff // lengthSizeMinusOne, hard-coded to 4 bytes + ].concat([sps.length // numOfSequenceParameterSets + ]).concat(sequenceParameterSets).concat([pps.length // numOfPictureParameterSets + ]).concat(pictureParameterSets))), // "PPS" + box(types.btrt, new Uint8Array([0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB + 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate + 0x00, 0x2d, 0xc6, 0xc0])) // avgBitrate + ); + }; + + audioSample = function audioSample(track) { + return box(types.mp4a, new Uint8Array([ + + // SampleEntry, ISO/IEC 14496-12 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x01, // data_reference_index + + // AudioSampleEntry, ISO/IEC 14496-12 + 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x00, 0x00, 0x00, // reserved + (track.channelcount & 0xff00) >> 8, track.channelcount & 0xff, // channelcount + + (track.samplesize & 0xff00) >> 8, track.samplesize & 0xff, // samplesize + 0x00, 0x00, // pre_defined + 0x00, 0x00, // reserved + + (track.samplerate & 0xff00) >> 8, track.samplerate & 0xff, 0x00, 0x00 // samplerate, 16.16 + + // MP4AudioSampleEntry, ISO/IEC 14496-14 + ]), esds(track)); + }; + })(); + + tkhd = function tkhd(track) { + var result = new Uint8Array([0x00, // version 0 + 0x00, 0x00, 0x07, // flags + 0x00, 0x00, 0x00, 0x00, // creation_time + 0x00, 0x00, 0x00, 0x00, // modification_time + (track.id & 0xFF000000) >> 24, (track.id & 0xFF0000) >> 16, (track.id & 0xFF00) >> 8, track.id & 0xFF, // track_ID + 0x00, 0x00, 0x00, 0x00, // reserved + (track.duration & 0xFF000000) >> 24, (track.duration & 0xFF0000) >> 16, (track.duration & 0xFF00) >> 8, track.duration & 0xFF, // duration + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved + 0x00, 0x00, // layer + 0x00, 0x00, // alternate_group + 0x01, 0x00, // non-audio track volume + 0x00, 0x00, // reserved + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix + (track.width & 0xFF00) >> 8, track.width & 0xFF, 0x00, 0x00, // width + (track.height & 0xFF00) >> 8, track.height & 0xFF, 0x00, 0x00 // height + ]); + + return box(types.tkhd, result); + }; + + /** + * Generate a track fragment (traf) box. A traf box collects metadata + * about tracks in a movie fragment (moof) box. + */ + traf = function traf(track) { + var trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun, sampleDependencyTable, dataOffset, + upperWordBaseMediaDecodeTime, lowerWordBaseMediaDecodeTime; + + trackFragmentHeader = box(types.tfhd, new Uint8Array([0x00, // version 0 + 0x00, 0x00, 0x3a, // flags + (track.id & 0xFF000000) >> 24, (track.id & 0xFF0000) >> 16, (track.id & 0xFF00) >> 8, track.id & 0xFF, // track_ID + 0x00, 0x00, 0x00, 0x01, // sample_description_index + 0x00, 0x00, 0x00, 0x00, // default_sample_duration + 0x00, 0x00, 0x00, 0x00, // default_sample_size + 0x00, 0x00, 0x00, 0x00 // default_sample_flags + ])); + + upperWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime / (UINT32_MAX + 1)); + lowerWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime % (UINT32_MAX + 1)); + + trackFragmentDecodeTime = box(types.tfdt, new Uint8Array([0x01, // version 1 + 0x00, 0x00, 0x00, // flags + // baseMediaDecodeTime + upperWordBaseMediaDecodeTime >>> 24 & 0xFF, upperWordBaseMediaDecodeTime >>> 16 & 0xFF, upperWordBaseMediaDecodeTime >>> 8 & 0xFF, upperWordBaseMediaDecodeTime & 0xFF, lowerWordBaseMediaDecodeTime >>> 24 & 0xFF, lowerWordBaseMediaDecodeTime >>> 16 & 0xFF, lowerWordBaseMediaDecodeTime >>> 8 & 0xFF, lowerWordBaseMediaDecodeTime & 0xFF])); + + // the data offset specifies the number of bytes from the start of + // the containing moof to the first payload byte of the associated + // mdat + dataOffset = 32 + // tfhd + 20 + // tfdt + 8 + // traf header + 16 + // mfhd + 8 + // moof header + 8; // mdat header + + // audio tracks require less metadata + if (track.type === 'audio') { + trackFragmentRun = trun(track, dataOffset); + return box(types.traf, trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun); + } + + // video tracks should contain an independent and disposable samples + // box (sdtp) + // generate one and adjust offsets to match + sampleDependencyTable = sdtp(track); + trackFragmentRun = trun(track, sampleDependencyTable.length + dataOffset); + return box(types.traf, trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun, sampleDependencyTable); + }; + + /** + * Generate a track box. + * @param track {object} a track definition + * @return {Uint8Array} the track box + */ + trak = function trak(track) { + track.duration = track.duration || 0xffffffff; + return box(types.trak, tkhd(track), mdia(track)); + }; + + trex = function trex(track) { + var result = new Uint8Array([0x00, // version 0 + 0x00, 0x00, 0x00, // flags + (track.id & 0xFF000000) >> 24, (track.id & 0xFF0000) >> 16, (track.id & 0xFF00) >> 8, track.id & 0xFF, // track_ID + 0x00, 0x00, 0x00, 0x01, // default_sample_description_index + 0x00, 0x00, 0x00, 0x00, // default_sample_duration + 0x00, 0x00, 0x00, 0x00, // default_sample_size + 0x00, 0x01, 0x00, 0x01 // default_sample_flags + ]); + // the last two bytes of default_sample_flags is the sample + // degradation priority, a hint about the importance of this sample + // relative to others. Lower the degradation priority for all sample + // types other than video. + if (track.type !== 'video') { + result[result.length - 1] = 0x00; + } + + return box(types.trex, result); + }; + + (function () { + var audioTrun, videoTrun, trunHeader; + + // This method assumes all samples are uniform. That is, if a + // duration is present for the first sample, it will be present for + // all subsequent samples. + // see ISO/IEC 14496-12:2012, Section 8.8.8.1 + trunHeader = function trunHeader(samples, offset) { + var durationPresent = 0, + sizePresent = 0, + flagsPresent = 0, + compositionTimeOffset = 0; + + // trun flag constants + if (samples.length) { + if (samples[0].duration !== undefined) { + durationPresent = 0x1; + } + if (samples[0].size !== undefined) { + sizePresent = 0x2; + } + if (samples[0].flags !== undefined) { + flagsPresent = 0x4; + } + if (samples[0].compositionTimeOffset !== undefined) { + compositionTimeOffset = 0x8; + } + } + + return [0x00, // version 0 + 0x00, durationPresent | sizePresent | flagsPresent | compositionTimeOffset, 0x01, // flags + (samples.length & 0xFF000000) >>> 24, (samples.length & 0xFF0000) >>> 16, (samples.length & 0xFF00) >>> 8, samples.length & 0xFF, // sample_count + (offset & 0xFF000000) >>> 24, (offset & 0xFF0000) >>> 16, (offset & 0xFF00) >>> 8, offset & 0xFF // data_offset + ]; + }; + + videoTrun = function videoTrun(track, offset) { + var bytes, samples, sample, i; + + samples = track.samples || []; + offset += 8 + 12 + 16 * samples.length; + + bytes = trunHeader(samples, offset); + + for (i = 0; i < samples.length; i++) { + sample = samples[i]; + bytes = bytes.concat([(sample.duration & 0xFF000000) >>> 24, (sample.duration & 0xFF0000) >>> 16, (sample.duration & 0xFF00) >>> 8, sample.duration & 0xFF, // sample_duration + (sample.size & 0xFF000000) >>> 24, (sample.size & 0xFF0000) >>> 16, (sample.size & 0xFF00) >>> 8, sample.size & 0xFF, // sample_size + sample.flags.isLeading << 2 | sample.flags.dependsOn, sample.flags.isDependedOn << 6 | sample.flags.hasRedundancy << 4 | sample.flags.paddingValue << 1 | sample.flags.isNonSyncSample, sample.flags.degradationPriority & 0xF0 << 8, sample.flags.degradationPriority & 0x0F, // sample_flags + (sample.compositionTimeOffset & 0xFF000000) >>> 24, (sample.compositionTimeOffset & 0xFF0000) >>> 16, (sample.compositionTimeOffset & 0xFF00) >>> 8, sample.compositionTimeOffset & 0xFF // sample_composition_time_offset + ]); + } + return box(types.trun, new Uint8Array(bytes)); + }; + + audioTrun = function audioTrun(track, offset) { + var bytes, samples, sample, i; + + samples = track.samples || []; + offset += 8 + 12 + 8 * samples.length; + + bytes = trunHeader(samples, offset); + + for (i = 0; i < samples.length; i++) { + sample = samples[i]; + bytes = bytes.concat([(sample.duration & 0xFF000000) >>> 24, (sample.duration & 0xFF0000) >>> 16, (sample.duration & 0xFF00) >>> 8, sample.duration & 0xFF, // sample_duration + (sample.size & 0xFF000000) >>> 24, (sample.size & 0xFF0000) >>> 16, (sample.size & 0xFF00) >>> 8, sample.size & 0xFF]); // sample_size + } + + return box(types.trun, new Uint8Array(bytes)); + }; + + trun = function trun(track, offset) { + if (track.type === 'audio') { + return audioTrun(track, offset); + } + + return videoTrun(track, offset); + }; + })(); + + var mp4Generator = { + ftyp: ftyp, + mdat: mdat, + moof: moof, + moov: moov, + initSegment: function initSegment(tracks) { + var fileType = ftyp(), + movie = moov(tracks), + result; + + result = new Uint8Array(fileType.byteLength + movie.byteLength); + result.set(fileType); + result.set(movie, fileType.byteLength); + return result; + } + }; + + /** + * mux.js + * + * Copyright (c) 2014 Brightcove + * All rights reserved. + * + * A lightweight readable stream implemention that handles event dispatching. + * Objects that inherit from streams should call init in their constructors. + */ + + var Stream = function Stream() { + this.init = function () { + var listeners = {}; + /** + * Add a listener for a specified event type. + * @param type {string} the event name + * @param listener {function} the callback to be invoked when an event of + * the specified type occurs + */ + this.on = function (type, listener) { + if (!listeners[type]) { + listeners[type] = []; + } + listeners[type] = listeners[type].concat(listener); + }; + /** + * Remove a listener for a specified event type. + * @param type {string} the event name + * @param listener {function} a function previously registered for this + * type of event through `on` + */ + this.off = function (type, listener) { + var index; + if (!listeners[type]) { + return false; + } + index = listeners[type].indexOf(listener); + listeners[type] = listeners[type].slice(); + listeners[type].splice(index, 1); + return index > -1; + }; + /** + * Trigger an event of the specified type on this stream. Any additional + * arguments to this function are passed as parameters to event listeners. + * @param type {string} the event name + */ + this.trigger = function (type) { + var callbacks, i, length, args; + callbacks = listeners[type]; + if (!callbacks) { + return; + } + // Slicing the arguments on every invocation of this method + // can add a significant amount of overhead. Avoid the + // intermediate object creation for the common case of a + // single callback argument + if (arguments.length === 2) { + length = callbacks.length; + for (i = 0; i < length; ++i) { + callbacks[i].call(this, arguments[1]); + } + } else { + args = []; + i = arguments.length; + for (i = 1; i < arguments.length; ++i) { + args.push(arguments[i]); + } + length = callbacks.length; + for (i = 0; i < length; ++i) { + callbacks[i].apply(this, args); + } + } + }; + /** + * Destroys the stream and cleans up. + */ + this.dispose = function () { + listeners = {}; + }; + }; + }; + + /** + * Forwards all `data` events on this stream to the destination stream. The + * destination stream should provide a method `push` to receive the data + * events as they arrive. + * @param destination {stream} the stream that will receive all `data` events + * @param autoFlush {boolean} if false, we will not call `flush` on the destination + * when the current stream emits a 'done' event + * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options + */ + Stream.prototype.pipe = function (destination) { + this.on('data', function (data) { + destination.push(data); + }); + + this.on('done', function (flushSource) { + destination.flush(flushSource); + }); + + return destination; + }; + + // Default stream functions that are expected to be overridden to perform + // actual work. These are provided by the prototype as a sort of no-op + // implementation so that we don't have to check for their existence in the + // `pipe` function above. + Stream.prototype.push = function (data) { + this.trigger('data', data); + }; + + Stream.prototype.flush = function (flushSource) { + this.trigger('done', flushSource); + }; + + var stream = Stream; + + // ----------------- + // Link To Transport + // ----------------- + + // Supplemental enhancement information (SEI) NAL units have a + // payload type field to indicate how they are to be + // interpreted. CEAS-708 caption content is always transmitted with + // payload type 0x04. + var USER_DATA_REGISTERED_ITU_T_T35 = 4, + RBSP_TRAILING_BITS = 128; + + /** + * Parse a supplemental enhancement information (SEI) NAL unit. + * Stops parsing once a message of type ITU T T35 has been found. + * + * @param bytes {Uint8Array} the bytes of a SEI NAL unit + * @return {object} the parsed SEI payload + * @see Rec. ITU-T H.264, 7.3.2.3.1 + */ + var parseSei = function parseSei(bytes) { + var i = 0, + result = { + payloadType: -1, + payloadSize: 0 + }, + payloadType = 0, + payloadSize = 0; + + // go through the sei_rbsp parsing each each individual sei_message + while (i < bytes.byteLength) { + // stop once we have hit the end of the sei_rbsp + if (bytes[i] === RBSP_TRAILING_BITS) { + break; + } + + // Parse payload type + while (bytes[i] === 0xFF) { + payloadType += 255; + i++; + } + payloadType += bytes[i++]; + + // Parse payload size + while (bytes[i] === 0xFF) { + payloadSize += 255; + i++; + } + payloadSize += bytes[i++]; + + // this sei_message is a 608/708 caption so save it and break + // there can only ever be one caption message in a frame's sei + if (!result.payload && payloadType === USER_DATA_REGISTERED_ITU_T_T35) { + result.payloadType = payloadType; + result.payloadSize = payloadSize; + result.payload = bytes.subarray(i, i + payloadSize); + break; + } + + // skip the payload and parse the next message + i += payloadSize; + payloadType = 0; + payloadSize = 0; + } + + return result; + }; + + // see ANSI/SCTE 128-1 (2013), section 8.1 + var parseUserData = function parseUserData(sei) { + // itu_t_t35_contry_code must be 181 (United States) for + // captions + if (sei.payload[0] !== 181) { + return null; + } + + // itu_t_t35_provider_code should be 49 (ATSC) for captions + if ((sei.payload[1] << 8 | sei.payload[2]) !== 49) { + return null; + } + + // the user_identifier should be "GA94" to indicate ATSC1 data + if (String.fromCharCode(sei.payload[3], sei.payload[4], sei.payload[5], sei.payload[6]) !== 'GA94') { + return null; + } + + // finally, user_data_type_code should be 0x03 for caption data + if (sei.payload[7] !== 0x03) { + return null; + } + + // return the user_data_type_structure and strip the trailing + // marker bits + return sei.payload.subarray(8, sei.payload.length - 1); + }; + + // see CEA-708-D, section 4.4 + var parseCaptionPackets = function parseCaptionPackets(pts, userData) { + var results = [], + i, + count, + offset, + data; + + // if this is just filler, return immediately + if (!(userData[0] & 0x40)) { + return results; + } + + // parse out the cc_data_1 and cc_data_2 fields + count = userData[0] & 0x1f; + for (i = 0; i < count; i++) { + offset = i * 3; + data = { + type: userData[offset + 2] & 0x03, + pts: pts + }; + + // capture cc data when cc_valid is 1 + if (userData[offset + 2] & 0x04) { + data.ccData = userData[offset + 3] << 8 | userData[offset + 4]; + results.push(data); + } + } + return results; + }; + + var CaptionStream = function CaptionStream() { + + CaptionStream.prototype.init.call(this); + + this.captionPackets_ = []; + + this.ccStreams_ = [new Cea608Stream(0, 0), // eslint-disable-line no-use-before-define + new Cea608Stream(0, 1), // eslint-disable-line no-use-before-define + new Cea608Stream(1, 0), // eslint-disable-line no-use-before-define + new Cea608Stream(1, 1) // eslint-disable-line no-use-before-define + ]; + + this.reset(); + + // forward data and done events from CCs to this CaptionStream + this.ccStreams_.forEach(function (cc) { + cc.on('data', this.trigger.bind(this, 'data')); + cc.on('done', this.trigger.bind(this, 'done')); + }, this); + }; + + CaptionStream.prototype = new stream(); + CaptionStream.prototype.push = function (event) { + var sei, userData; + + // only examine SEI NALs + if (event.nalUnitType !== 'sei_rbsp') { + return; + } + + // parse the sei + sei = parseSei(event.escapedRBSP); + + // ignore everything but user_data_registered_itu_t_t35 + if (sei.payloadType !== USER_DATA_REGISTERED_ITU_T_T35) { + return; + } + + // parse out the user data payload + userData = parseUserData(sei); + + // ignore unrecognized userData + if (!userData) { + return; + } + + // Sometimes, the same segment # will be downloaded twice. To stop the + // caption data from being processed twice, we track the latest dts we've + // received and ignore everything with a dts before that. However, since + // data for a specific dts can be split across packets on either side of + // a segment boundary, we need to make sure we *don't* ignore the packets + // from the *next* segment that have dts === this.latestDts_. By constantly + // tracking the number of packets received with dts === this.latestDts_, we + // know how many should be ignored once we start receiving duplicates. + if (event.dts < this.latestDts_) { + // We've started getting older data, so set the flag. + this.ignoreNextEqualDts_ = true; + return; + } else if (event.dts === this.latestDts_ && this.ignoreNextEqualDts_) { + this.numSameDts_--; + if (!this.numSameDts_) { + // We've received the last duplicate packet, time to start processing again + this.ignoreNextEqualDts_ = false; + } + return; + } + + // parse out CC data packets and save them for later + this.captionPackets_ = this.captionPackets_.concat(parseCaptionPackets(event.pts, userData)); + if (this.latestDts_ !== event.dts) { + this.numSameDts_ = 0; + } + this.numSameDts_++; + this.latestDts_ = event.dts; + }; + + CaptionStream.prototype.flush = function () { + // make sure we actually parsed captions before proceeding + if (!this.captionPackets_.length) { + this.ccStreams_.forEach(function (cc) { + cc.flush(); + }, this); + return; + } + + // In Chrome, the Array#sort function is not stable so add a + // presortIndex that we can use to ensure we get a stable-sort + this.captionPackets_.forEach(function (elem, idx) { + elem.presortIndex = idx; + }); + + // sort caption byte-pairs based on their PTS values + this.captionPackets_.sort(function (a, b) { + if (a.pts === b.pts) { + return a.presortIndex - b.presortIndex; + } + return a.pts - b.pts; + }); + + this.captionPackets_.forEach(function (packet) { + if (packet.type < 2) { + // Dispatch packet to the right Cea608Stream + this.dispatchCea608Packet(packet); + } + // this is where an 'else' would go for a dispatching packets + // to a theoretical Cea708Stream that handles SERVICEn data + }, this); + + this.captionPackets_.length = 0; + this.ccStreams_.forEach(function (cc) { + cc.flush(); + }, this); + return; + }; + + CaptionStream.prototype.reset = function () { + this.latestDts_ = null; + this.ignoreNextEqualDts_ = false; + this.numSameDts_ = 0; + this.activeCea608Channel_ = [null, null]; + this.ccStreams_.forEach(function (ccStream) { + ccStream.reset(); + }); + }; + + CaptionStream.prototype.dispatchCea608Packet = function (packet) { + // NOTE: packet.type is the CEA608 field + if (this.setsChannel1Active(packet)) { + this.activeCea608Channel_[packet.type] = 0; + } else if (this.setsChannel2Active(packet)) { + this.activeCea608Channel_[packet.type] = 1; + } + if (this.activeCea608Channel_[packet.type] === null) { + // If we haven't received anything to set the active channel, discard the + // data; we don't want jumbled captions + return; + } + this.ccStreams_[(packet.type << 1) + this.activeCea608Channel_[packet.type]].push(packet); + }; + + CaptionStream.prototype.setsChannel1Active = function (packet) { + return (packet.ccData & 0x7800) === 0x1000; + }; + CaptionStream.prototype.setsChannel2Active = function (packet) { + return (packet.ccData & 0x7800) === 0x1800; + }; + + // ---------------------- + // Session to Application + // ---------------------- + + var CHARACTER_TRANSLATION = { + 0x2a: 0xe1, // á + 0x5c: 0xe9, // é + 0x5e: 0xed, // à + 0x5f: 0xf3, // ó + 0x60: 0xfa, // ú + 0x7b: 0xe7, // ç + 0x7c: 0xf7, // ÷ + 0x7d: 0xd1, // Ñ + 0x7e: 0xf1, // ñ + 0x7f: 0x2588, // â–ˆ + 0x0130: 0xae, // ® + 0x0131: 0xb0, // ° + 0x0132: 0xbd, // ½ + 0x0133: 0xbf, // ¿ + 0x0134: 0x2122, // â„¢ + 0x0135: 0xa2, // ¢ + 0x0136: 0xa3, // £ + 0x0137: 0x266a, // ♪ + 0x0138: 0xe0, // à + 0x0139: 0xa0, // + 0x013a: 0xe8, // è + 0x013b: 0xe2, // â + 0x013c: 0xea, // ê + 0x013d: 0xee, // î + 0x013e: 0xf4, // ô + 0x013f: 0xfb, // û + 0x0220: 0xc1, // à + 0x0221: 0xc9, // É + 0x0222: 0xd3, // Ó + 0x0223: 0xda, // Ú + 0x0224: 0xdc, // Ü + 0x0225: 0xfc, // ü + 0x0226: 0x2018, // ‘ + 0x0227: 0xa1, // ¡ + 0x0228: 0x2a, // * + 0x0229: 0x27, // ' + 0x022a: 0x2014, // — + 0x022b: 0xa9, // © + 0x022c: 0x2120, // â„ + 0x022d: 0x2022, // • + 0x022e: 0x201c, // “ + 0x022f: 0x201d, // †+ 0x0230: 0xc0, // À + 0x0231: 0xc2, //  + 0x0232: 0xc7, // Ç + 0x0233: 0xc8, // È + 0x0234: 0xca, // Ê + 0x0235: 0xcb, // Ë + 0x0236: 0xeb, // ë + 0x0237: 0xce, // ÃŽ + 0x0238: 0xcf, // à + 0x0239: 0xef, // ï + 0x023a: 0xd4, // Ô + 0x023b: 0xd9, // Ù + 0x023c: 0xf9, // ù + 0x023d: 0xdb, // Û + 0x023e: 0xab, // « + 0x023f: 0xbb, // » + 0x0320: 0xc3, // à + 0x0321: 0xe3, // ã + 0x0322: 0xcd, // à + 0x0323: 0xcc, // ÃŒ + 0x0324: 0xec, // ì + 0x0325: 0xd2, // Ã’ + 0x0326: 0xf2, // ò + 0x0327: 0xd5, // Õ + 0x0328: 0xf5, // õ + 0x0329: 0x7b, // { + 0x032a: 0x7d, // } + 0x032b: 0x5c, // \ + 0x032c: 0x5e, // ^ + 0x032d: 0x5f, // _ + 0x032e: 0x7c, // | + 0x032f: 0x7e, // ~ + 0x0330: 0xc4, // Ä + 0x0331: 0xe4, // ä + 0x0332: 0xd6, // Ö + 0x0333: 0xf6, // ö + 0x0334: 0xdf, // ß + 0x0335: 0xa5, // Â¥ + 0x0336: 0xa4, // ¤ + 0x0337: 0x2502, // │ + 0x0338: 0xc5, // Ã… + 0x0339: 0xe5, // Ã¥ + 0x033a: 0xd8, // Ø + 0x033b: 0xf8, // ø + 0x033c: 0x250c, // ┌ + 0x033d: 0x2510, // â” + 0x033e: 0x2514, // â”” + 0x033f: 0x2518 // ┘ + }; + + var getCharFromCode = function getCharFromCode(code) { + if (code === null) { + return ''; + } + code = CHARACTER_TRANSLATION[code] || code; + return String.fromCharCode(code); + }; + + // the index of the last row in a CEA-608 display buffer + var BOTTOM_ROW = 14; + + // This array is used for mapping PACs -> row #, since there's no way of + // getting it through bit logic. + var ROWS = [0x1100, 0x1120, 0x1200, 0x1220, 0x1500, 0x1520, 0x1600, 0x1620, 0x1700, 0x1720, 0x1000, 0x1300, 0x1320, 0x1400, 0x1420]; + + // CEA-608 captions are rendered onto a 34x15 matrix of character + // cells. The "bottom" row is the last element in the outer array. + var createDisplayBuffer = function createDisplayBuffer() { + var result = [], + i = BOTTOM_ROW + 1; + while (i--) { + result.push(''); + } + return result; + }; + + var Cea608Stream = function Cea608Stream(field, dataChannel) { + Cea608Stream.prototype.init.call(this); + + this.field_ = field || 0; + this.dataChannel_ = dataChannel || 0; + + this.name_ = 'CC' + ((this.field_ << 1 | this.dataChannel_) + 1); + + this.setConstants(); + this.reset(); + + this.push = function (packet) { + var data, swap, char0, char1, text; + // remove the parity bits + data = packet.ccData & 0x7f7f; + + // ignore duplicate control codes; the spec demands they're sent twice + if (data === this.lastControlCode_) { + this.lastControlCode_ = null; + return; + } + + // Store control codes + if ((data & 0xf000) === 0x1000) { + this.lastControlCode_ = data; + } else if (data !== this.PADDING_) { + this.lastControlCode_ = null; + } + + char0 = data >>> 8; + char1 = data & 0xff; + + if (data === this.PADDING_) { + return; + } else if (data === this.RESUME_CAPTION_LOADING_) { + this.mode_ = 'popOn'; + } else if (data === this.END_OF_CAPTION_) { + this.clearFormatting(packet.pts); + // if a caption was being displayed, it's gone now + this.flushDisplayed(packet.pts); + + // flip memory + swap = this.displayed_; + this.displayed_ = this.nonDisplayed_; + this.nonDisplayed_ = swap; + + // start measuring the time to display the caption + this.startPts_ = packet.pts; + } else if (data === this.ROLL_UP_2_ROWS_) { + this.topRow_ = BOTTOM_ROW - 1; + this.mode_ = 'rollUp'; + } else if (data === this.ROLL_UP_3_ROWS_) { + this.topRow_ = BOTTOM_ROW - 2; + this.mode_ = 'rollUp'; + } else if (data === this.ROLL_UP_4_ROWS_) { + this.topRow_ = BOTTOM_ROW - 3; + this.mode_ = 'rollUp'; + } else if (data === this.CARRIAGE_RETURN_) { + this.clearFormatting(packet.pts); + this.flushDisplayed(packet.pts); + this.shiftRowsUp_(); + this.startPts_ = packet.pts; + } else if (data === this.BACKSPACE_) { + if (this.mode_ === 'popOn') { + this.nonDisplayed_[BOTTOM_ROW] = this.nonDisplayed_[BOTTOM_ROW].slice(0, -1); + } else { + this.displayed_[BOTTOM_ROW] = this.displayed_[BOTTOM_ROW].slice(0, -1); + } + } else if (data === this.ERASE_DISPLAYED_MEMORY_) { + this.flushDisplayed(packet.pts); + this.displayed_ = createDisplayBuffer(); + } else if (data === this.ERASE_NON_DISPLAYED_MEMORY_) { + this.nonDisplayed_ = createDisplayBuffer(); + } else if (data === this.RESUME_DIRECT_CAPTIONING_) { + this.mode_ = 'paintOn'; + + // Append special characters to caption text + } else if (this.isSpecialCharacter(char0, char1)) { + // Bitmask char0 so that we can apply character transformations + // regardless of field and data channel. + // Then byte-shift to the left and OR with char1 so we can pass the + // entire character code to `getCharFromCode`. + char0 = (char0 & 0x03) << 8; + text = getCharFromCode(char0 | char1); + this[this.mode_](packet.pts, text); + this.column_++; + + // Append extended characters to caption text + } else if (this.isExtCharacter(char0, char1)) { + // Extended characters always follow their "non-extended" equivalents. + // IE if a "è" is desired, you'll always receive "eè"; non-compliant + // decoders are supposed to drop the "è", while compliant decoders + // backspace the "e" and insert "è". + + // Delete the previous character + if (this.mode_ === 'popOn') { + this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1); + } else { + this.displayed_[BOTTOM_ROW] = this.displayed_[BOTTOM_ROW].slice(0, -1); + } + + // Bitmask char0 so that we can apply character transformations + // regardless of field and data channel. + // Then byte-shift to the left and OR with char1 so we can pass the + // entire character code to `getCharFromCode`. + char0 = (char0 & 0x03) << 8; + text = getCharFromCode(char0 | char1); + this[this.mode_](packet.pts, text); + this.column_++; + + // Process mid-row codes + } else if (this.isMidRowCode(char0, char1)) { + // Attributes are not additive, so clear all formatting + this.clearFormatting(packet.pts); + + // According to the standard, mid-row codes + // should be replaced with spaces, so add one now + this[this.mode_](packet.pts, ' '); + this.column_++; + + if ((char1 & 0xe) === 0xe) { + this.addFormatting(packet.pts, ['i']); + } + + if ((char1 & 0x1) === 0x1) { + this.addFormatting(packet.pts, ['u']); + } + + // Detect offset control codes and adjust cursor + } else if (this.isOffsetControlCode(char0, char1)) { + // Cursor position is set by indent PAC (see below) in 4-column + // increments, with an additional offset code of 1-3 to reach any + // of the 32 columns specified by CEA-608. So all we need to do + // here is increment the column cursor by the given offset. + this.column_ += char1 & 0x03; + + // Detect PACs (Preamble Address Codes) + } else if (this.isPAC(char0, char1)) { + + // There's no logic for PAC -> row mapping, so we have to just + // find the row code in an array and use its index :( + var row = ROWS.indexOf(data & 0x1f20); + + if (row !== this.row_) { + // formatting is only persistent for current row + this.clearFormatting(packet.pts); + this.row_ = row; + } + // All PACs can apply underline, so detect and apply + // (All odd-numbered second bytes set underline) + if (char1 & 0x1 && this.formatting_.indexOf('u') === -1) { + this.addFormatting(packet.pts, ['u']); + } + + if ((data & 0x10) === 0x10) { + // We've got an indent level code. Each successive even number + // increments the column cursor by 4, so we can get the desired + // column position by bit-shifting to the right (to get n/2) + // and multiplying by 4. + this.column_ = ((data & 0xe) >> 1) * 4; + } + + if (this.isColorPAC(char1)) { + // it's a color code, though we only support white, which + // can be either normal or italicized. white italics can be + // either 0x4e or 0x6e depending on the row, so we just + // bitwise-and with 0xe to see if italics should be turned on + if ((char1 & 0xe) === 0xe) { + this.addFormatting(packet.pts, ['i']); + } + } + + // We have a normal character in char0, and possibly one in char1 + } else if (this.isNormalChar(char0)) { + if (char1 === 0x00) { + char1 = null; + } + text = getCharFromCode(char0); + text += getCharFromCode(char1); + this[this.mode_](packet.pts, text); + this.column_ += text.length; + } // finish data processing + }; + }; + Cea608Stream.prototype = new stream(); + // Trigger a cue point that captures the current state of the + // display buffer + Cea608Stream.prototype.flushDisplayed = function (pts) { + var content = this.displayed_ + // remove spaces from the start and end of the string + .map(function (row) { + return row.trim(); + }) + // combine all text rows to display in one cue + .join('\n') + // and remove blank rows from the start and end, but not the middle + .replace(/^\n+|\n+$/g, ''); + + if (content.length) { + this.trigger('data', { + startPts: this.startPts_, + endPts: pts, + text: content, + stream: this.name_ + }); + } + }; + + /** + * Zero out the data, used for startup and on seek + */ + Cea608Stream.prototype.reset = function () { + this.mode_ = 'popOn'; + // When in roll-up mode, the index of the last row that will + // actually display captions. If a caption is shifted to a row + // with a lower index than this, it is cleared from the display + // buffer + this.topRow_ = 0; + this.startPts_ = 0; + this.displayed_ = createDisplayBuffer(); + this.nonDisplayed_ = createDisplayBuffer(); + this.lastControlCode_ = null; + + // Track row and column for proper line-breaking and spacing + this.column_ = 0; + this.row_ = BOTTOM_ROW; + + // This variable holds currently-applied formatting + this.formatting_ = []; + }; + + /** + * Sets up control code and related constants for this instance + */ + Cea608Stream.prototype.setConstants = function () { + // The following attributes have these uses: + // ext_ : char0 for mid-row codes, and the base for extended + // chars (ext_+0, ext_+1, and ext_+2 are char0s for + // extended codes) + // control_: char0 for control codes, except byte-shifted to the + // left so that we can do this.control_ | CONTROL_CODE + // offset_: char0 for tab offset codes + // + // It's also worth noting that control codes, and _only_ control codes, + // differ between field 1 and field2. Field 2 control codes are always + // their field 1 value plus 1. That's why there's the "| field" on the + // control value. + if (this.dataChannel_ === 0) { + this.BASE_ = 0x10; + this.EXT_ = 0x11; + this.CONTROL_ = (0x14 | this.field_) << 8; + this.OFFSET_ = 0x17; + } else if (this.dataChannel_ === 1) { + this.BASE_ = 0x18; + this.EXT_ = 0x19; + this.CONTROL_ = (0x1c | this.field_) << 8; + this.OFFSET_ = 0x1f; + } + + // Constants for the LSByte command codes recognized by Cea608Stream. This + // list is not exhaustive. For a more comprehensive listing and semantics see + // http://www.gpo.gov/fdsys/pkg/CFR-2010-title47-vol1/pdf/CFR-2010-title47-vol1-sec15-119.pdf + // Padding + this.PADDING_ = 0x0000; + // Pop-on Mode + this.RESUME_CAPTION_LOADING_ = this.CONTROL_ | 0x20; + this.END_OF_CAPTION_ = this.CONTROL_ | 0x2f; + // Roll-up Mode + this.ROLL_UP_2_ROWS_ = this.CONTROL_ | 0x25; + this.ROLL_UP_3_ROWS_ = this.CONTROL_ | 0x26; + this.ROLL_UP_4_ROWS_ = this.CONTROL_ | 0x27; + this.CARRIAGE_RETURN_ = this.CONTROL_ | 0x2d; + // paint-on mode (not supported) + this.RESUME_DIRECT_CAPTIONING_ = this.CONTROL_ | 0x29; + // Erasure + this.BACKSPACE_ = this.CONTROL_ | 0x21; + this.ERASE_DISPLAYED_MEMORY_ = this.CONTROL_ | 0x2c; + this.ERASE_NON_DISPLAYED_MEMORY_ = this.CONTROL_ | 0x2e; + }; + + /** + * Detects if the 2-byte packet data is a special character + * + * Special characters have a second byte in the range 0x30 to 0x3f, + * with the first byte being 0x11 (for data channel 1) or 0x19 (for + * data channel 2). + * + * @param {Integer} char0 The first byte + * @param {Integer} char1 The second byte + * @return {Boolean} Whether the 2 bytes are an special character + */ + Cea608Stream.prototype.isSpecialCharacter = function (char0, char1) { + return char0 === this.EXT_ && char1 >= 0x30 && char1 <= 0x3f; + }; + + /** + * Detects if the 2-byte packet data is an extended character + * + * Extended characters have a second byte in the range 0x20 to 0x3f, + * with the first byte being 0x12 or 0x13 (for data channel 1) or + * 0x1a or 0x1b (for data channel 2). + * + * @param {Integer} char0 The first byte + * @param {Integer} char1 The second byte + * @return {Boolean} Whether the 2 bytes are an extended character + */ + Cea608Stream.prototype.isExtCharacter = function (char0, char1) { + return (char0 === this.EXT_ + 1 || char0 === this.EXT_ + 2) && char1 >= 0x20 && char1 <= 0x3f; + }; + + /** + * Detects if the 2-byte packet is a mid-row code + * + * Mid-row codes have a second byte in the range 0x20 to 0x2f, with + * the first byte being 0x11 (for data channel 1) or 0x19 (for data + * channel 2). + * + * @param {Integer} char0 The first byte + * @param {Integer} char1 The second byte + * @return {Boolean} Whether the 2 bytes are a mid-row code + */ + Cea608Stream.prototype.isMidRowCode = function (char0, char1) { + return char0 === this.EXT_ && char1 >= 0x20 && char1 <= 0x2f; + }; + + /** + * Detects if the 2-byte packet is an offset control code + * + * Offset control codes have a second byte in the range 0x21 to 0x23, + * with the first byte being 0x17 (for data channel 1) or 0x1f (for + * data channel 2). + * + * @param {Integer} char0 The first byte + * @param {Integer} char1 The second byte + * @return {Boolean} Whether the 2 bytes are an offset control code + */ + Cea608Stream.prototype.isOffsetControlCode = function (char0, char1) { + return char0 === this.OFFSET_ && char1 >= 0x21 && char1 <= 0x23; + }; + + /** + * Detects if the 2-byte packet is a Preamble Address Code + * + * PACs have a first byte in the range 0x10 to 0x17 (for data channel 1) + * or 0x18 to 0x1f (for data channel 2), with the second byte in the + * range 0x40 to 0x7f. + * + * @param {Integer} char0 The first byte + * @param {Integer} char1 The second byte + * @return {Boolean} Whether the 2 bytes are a PAC + */ + Cea608Stream.prototype.isPAC = function (char0, char1) { + return char0 >= this.BASE_ && char0 < this.BASE_ + 8 && char1 >= 0x40 && char1 <= 0x7f; + }; + + /** + * Detects if a packet's second byte is in the range of a PAC color code + * + * PAC color codes have the second byte be in the range 0x40 to 0x4f, or + * 0x60 to 0x6f. + * + * @param {Integer} char1 The second byte + * @return {Boolean} Whether the byte is a color PAC + */ + Cea608Stream.prototype.isColorPAC = function (char1) { + return char1 >= 0x40 && char1 <= 0x4f || char1 >= 0x60 && char1 <= 0x7f; + }; + + /** + * Detects if a single byte is in the range of a normal character + * + * Normal text bytes are in the range 0x20 to 0x7f. + * + * @param {Integer} char The byte + * @return {Boolean} Whether the byte is a normal character + */ + Cea608Stream.prototype.isNormalChar = function (char) { + return char >= 0x20 && char <= 0x7f; + }; + + // Adds the opening HTML tag for the passed character to the caption text, + // and keeps track of it for later closing + Cea608Stream.prototype.addFormatting = function (pts, format) { + this.formatting_ = this.formatting_.concat(format); + var text = format.reduce(function (text, format) { + return text + '<' + format + '>'; + }, ''); + this[this.mode_](pts, text); + }; + + // Adds HTML closing tags for current formatting to caption text and + // clears remembered formatting + Cea608Stream.prototype.clearFormatting = function (pts) { + if (!this.formatting_.length) { + return; + } + var text = this.formatting_.reverse().reduce(function (text, format) { + return text + '</' + format + '>'; + }, ''); + this.formatting_ = []; + this[this.mode_](pts, text); + }; + + // Mode Implementations + Cea608Stream.prototype.popOn = function (pts, text) { + var baseRow = this.nonDisplayed_[this.row_]; + + // buffer characters + baseRow += text; + this.nonDisplayed_[this.row_] = baseRow; + }; + + Cea608Stream.prototype.rollUp = function (pts, text) { + var baseRow = this.displayed_[BOTTOM_ROW]; + + baseRow += text; + this.displayed_[BOTTOM_ROW] = baseRow; + }; + + Cea608Stream.prototype.shiftRowsUp_ = function () { + var i; + // clear out inactive rows + for (i = 0; i < this.topRow_; i++) { + this.displayed_[i] = ''; + } + // shift displayed rows up + for (i = this.topRow_; i < BOTTOM_ROW; i++) { + this.displayed_[i] = this.displayed_[i + 1]; + } + // clear out the bottom row + this.displayed_[BOTTOM_ROW] = ''; + }; + + // paintOn mode is not implemented + Cea608Stream.prototype.paintOn = function () { + }; + + // exports + var captionStream = { + CaptionStream: CaptionStream, + Cea608Stream: Cea608Stream + }; + + var streamTypes = { + H264_STREAM_TYPE: 0x1B, + ADTS_STREAM_TYPE: 0x0F, + METADATA_STREAM_TYPE: 0x15 + }; + + var MAX_TS = 8589934592; + + var RO_THRESH = 4294967296; + + var handleRollover = function handleRollover(value, reference) { + var direction = 1; + + if (value > reference) { + // If the current timestamp value is greater than our reference timestamp and we detect a + // timestamp rollover, this means the roll over is happening in the opposite direction. + // Example scenario: Enter a long stream/video just after a rollover occurred. The reference + // point will be set to a small number, e.g. 1. The user then seeks backwards over the + // rollover point. In loading this segment, the timestamp values will be very large, + // e.g. 2^33 - 1. Since this comes before the data we loaded previously, we want to adjust + // the time stamp to be `value - 2^33`. + direction = -1; + } + + // Note: A seek forwards or back that is greater than the RO_THRESH (2^32, ~13 hours) will + // cause an incorrect adjustment. + while (Math.abs(reference - value) > RO_THRESH) { + value += direction * MAX_TS; + } + + return value; + }; + + var TimestampRolloverStream = function TimestampRolloverStream(type) { + var lastDTS, referenceDTS; + + TimestampRolloverStream.prototype.init.call(this); + + this.type_ = type; + + this.push = function (data) { + if (data.type !== this.type_) { + return; + } + + if (referenceDTS === undefined) { + referenceDTS = data.dts; + } + + data.dts = handleRollover(data.dts, referenceDTS); + data.pts = handleRollover(data.pts, referenceDTS); + + lastDTS = data.dts; + + this.trigger('data', data); + }; + + this.flush = function () { + referenceDTS = lastDTS; + this.trigger('done'); + }; + + this.discontinuity = function () { + referenceDTS = void 0; + lastDTS = void 0; + }; + }; + + TimestampRolloverStream.prototype = new stream(); + + var timestampRolloverStream = { + TimestampRolloverStream: TimestampRolloverStream, + handleRollover: handleRollover + }; + + var percentEncode = function percentEncode(bytes, start, end) { + var i, + result = ''; + for (i = start; i < end; i++) { + result += '%' + ('00' + bytes[i].toString(16)).slice(-2); + } + return result; + }, + + + // return the string representation of the specified byte range, + // interpreted as UTf-8. + parseUtf8 = function parseUtf8(bytes, start, end) { + return decodeURIComponent(percentEncode(bytes, start, end)); + }, + + + // return the string representation of the specified byte range, + // interpreted as ISO-8859-1. + parseIso88591 = function parseIso88591(bytes, start, end) { + return unescape(percentEncode(bytes, start, end)); // jshint ignore:line + }, + parseSyncSafeInteger = function parseSyncSafeInteger(data) { + return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3]; + }, + tagParsers = { + TXXX: function TXXX(tag) { + var i; + if (tag.data[0] !== 3) { + // ignore frames with unrecognized character encodings + return; + } + + for (i = 1; i < tag.data.length; i++) { + if (tag.data[i] === 0) { + // parse the text fields + tag.description = parseUtf8(tag.data, 1, i); + // do not include the null terminator in the tag value + tag.value = parseUtf8(tag.data, i + 1, tag.data.length).replace(/\0*$/, ''); + break; + } + } + tag.data = tag.value; + }, + WXXX: function WXXX(tag) { + var i; + if (tag.data[0] !== 3) { + // ignore frames with unrecognized character encodings + return; + } + + for (i = 1; i < tag.data.length; i++) { + if (tag.data[i] === 0) { + // parse the description and URL fields + tag.description = parseUtf8(tag.data, 1, i); + tag.url = parseUtf8(tag.data, i + 1, tag.data.length); + break; + } + } + }, + PRIV: function PRIV(tag) { + var i; + + for (i = 0; i < tag.data.length; i++) { + if (tag.data[i] === 0) { + // parse the description and URL fields + tag.owner = parseIso88591(tag.data, 0, i); + break; + } + } + tag.privateData = tag.data.subarray(i + 1); + tag.data = tag.privateData; + } + }, + _MetadataStream; + + _MetadataStream = function MetadataStream(options) { + var settings = { + debug: !!(options && options.debug), + + // the bytes of the program-level descriptor field in MP2T + // see ISO/IEC 13818-1:2013 (E), section 2.6 "Program and + // program element descriptors" + descriptor: options && options.descriptor + }, + + + // the total size in bytes of the ID3 tag being parsed + tagSize = 0, + + + // tag data that is not complete enough to be parsed + buffer = [], + + + // the total number of bytes currently in the buffer + bufferSize = 0, + i; + + _MetadataStream.prototype.init.call(this); + + // calculate the text track in-band metadata track dispatch type + // https://html.spec.whatwg.org/multipage/embedded-content.html#steps-to-expose-a-media-resource-specific-text-track + this.dispatchType = streamTypes.METADATA_STREAM_TYPE.toString(16); + if (settings.descriptor) { + for (i = 0; i < settings.descriptor.length; i++) { + this.dispatchType += ('00' + settings.descriptor[i].toString(16)).slice(-2); + } + } + + this.push = function (chunk) { + var tag, frameStart, frameSize, frame, i, frameHeader; + if (chunk.type !== 'timed-metadata') { + return; + } + + // if data_alignment_indicator is set in the PES header, + // we must have the start of a new ID3 tag. Assume anything + // remaining in the buffer was malformed and throw it out + if (chunk.dataAlignmentIndicator) { + bufferSize = 0; + buffer.length = 0; + } + + // ignore events that don't look like ID3 data + if (buffer.length === 0 && (chunk.data.length < 10 || chunk.data[0] !== 'I'.charCodeAt(0) || chunk.data[1] !== 'D'.charCodeAt(0) || chunk.data[2] !== '3'.charCodeAt(0))) { + if (settings.debug) { + // eslint-disable-next-line no-console + console.log('Skipping unrecognized metadata packet'); + } + return; + } + + // add this chunk to the data we've collected so far + + buffer.push(chunk); + bufferSize += chunk.data.byteLength; + + // grab the size of the entire frame from the ID3 header + if (buffer.length === 1) { + // the frame size is transmitted as a 28-bit integer in the + // last four bytes of the ID3 header. + // The most significant bit of each byte is dropped and the + // results concatenated to recover the actual value. + tagSize = parseSyncSafeInteger(chunk.data.subarray(6, 10)); + + // ID3 reports the tag size excluding the header but it's more + // convenient for our comparisons to include it + tagSize += 10; + } + + // if the entire frame has not arrived, wait for more data + if (bufferSize < tagSize) { + return; + } + + // collect the entire frame so it can be parsed + tag = { + data: new Uint8Array(tagSize), + frames: [], + pts: buffer[0].pts, + dts: buffer[0].dts + }; + for (i = 0; i < tagSize;) { + tag.data.set(buffer[0].data.subarray(0, tagSize - i), i); + i += buffer[0].data.byteLength; + bufferSize -= buffer[0].data.byteLength; + buffer.shift(); + } + + // find the start of the first frame and the end of the tag + frameStart = 10; + if (tag.data[5] & 0x40) { + // advance the frame start past the extended header + frameStart += 4; // header size field + frameStart += parseSyncSafeInteger(tag.data.subarray(10, 14)); + + // clip any padding off the end + tagSize -= parseSyncSafeInteger(tag.data.subarray(16, 20)); + } + + // parse one or more ID3 frames + // http://id3.org/id3v2.3.0#ID3v2_frame_overview + do { + // determine the number of bytes in this frame + frameSize = parseSyncSafeInteger(tag.data.subarray(frameStart + 4, frameStart + 8)); + if (frameSize < 1) { + // eslint-disable-next-line no-console + return console.log('Malformed ID3 frame encountered. Skipping metadata parsing.'); + } + frameHeader = String.fromCharCode(tag.data[frameStart], tag.data[frameStart + 1], tag.data[frameStart + 2], tag.data[frameStart + 3]); + + frame = { + id: frameHeader, + data: tag.data.subarray(frameStart + 10, frameStart + frameSize + 10) + }; + frame.key = frame.id; + if (tagParsers[frame.id]) { + tagParsers[frame.id](frame); + + // handle the special PRIV frame used to indicate the start + // time for raw AAC data + if (frame.owner === 'com.apple.streaming.transportStreamTimestamp') { + var d = frame.data, + size = (d[3] & 0x01) << 30 | d[4] << 22 | d[5] << 14 | d[6] << 6 | d[7] >>> 2; + + size *= 4; + size += d[7] & 0x03; + frame.timeStamp = size; + // in raw AAC, all subsequent data will be timestamped based + // on the value of this frame + // we couldn't have known the appropriate pts and dts before + // parsing this ID3 tag so set those values now + if (tag.pts === undefined && tag.dts === undefined) { + tag.pts = frame.timeStamp; + tag.dts = frame.timeStamp; + } + this.trigger('timestamp', frame); + } + } + tag.frames.push(frame); + + frameStart += 10; // advance past the frame header + frameStart += frameSize; // advance past the frame body + } while (frameStart < tagSize); + this.trigger('data', tag); + }; + }; + _MetadataStream.prototype = new stream(); + + var metadataStream = _MetadataStream; + + var TimestampRolloverStream$1 = timestampRolloverStream.TimestampRolloverStream; + + // object types + var _TransportPacketStream, _TransportParseStream, _ElementaryStream; + + // constants + var MP2T_PACKET_LENGTH = 188, + + // bytes + SYNC_BYTE = 0x47; + + /** + * Splits an incoming stream of binary data into MPEG-2 Transport + * Stream packets. + */ + _TransportPacketStream = function TransportPacketStream() { + var buffer = new Uint8Array(MP2T_PACKET_LENGTH), + bytesInBuffer = 0; + + _TransportPacketStream.prototype.init.call(this); + + // Deliver new bytes to the stream. + + this.push = function (bytes) { + var startIndex = 0, + endIndex = MP2T_PACKET_LENGTH, + everything; + + // If there are bytes remaining from the last segment, prepend them to the + // bytes that were pushed in + if (bytesInBuffer) { + everything = new Uint8Array(bytes.byteLength + bytesInBuffer); + everything.set(buffer.subarray(0, bytesInBuffer)); + everything.set(bytes, bytesInBuffer); + bytesInBuffer = 0; + } else { + everything = bytes; + } + + // While we have enough data for a packet + while (endIndex < everything.byteLength) { + // Look for a pair of start and end sync bytes in the data.. + if (everything[startIndex] === SYNC_BYTE && everything[endIndex] === SYNC_BYTE) { + // We found a packet so emit it and jump one whole packet forward in + // the stream + this.trigger('data', everything.subarray(startIndex, endIndex)); + startIndex += MP2T_PACKET_LENGTH; + endIndex += MP2T_PACKET_LENGTH; + continue; + } + // If we get here, we have somehow become de-synchronized and we need to step + // forward one byte at a time until we find a pair of sync bytes that denote + // a packet + startIndex++; + endIndex++; + } + + // If there was some data left over at the end of the segment that couldn't + // possibly be a whole packet, keep it because it might be the start of a packet + // that continues in the next segment + if (startIndex < everything.byteLength) { + buffer.set(everything.subarray(startIndex), 0); + bytesInBuffer = everything.byteLength - startIndex; + } + }; + + this.flush = function () { + // If the buffer contains a whole packet when we are being flushed, emit it + // and empty the buffer. Otherwise hold onto the data because it may be + // important for decoding the next segment + if (bytesInBuffer === MP2T_PACKET_LENGTH && buffer[0] === SYNC_BYTE) { + this.trigger('data', buffer); + bytesInBuffer = 0; + } + this.trigger('done'); + }; + }; + _TransportPacketStream.prototype = new stream(); + + /** + * Accepts an MP2T TransportPacketStream and emits data events with parsed + * forms of the individual transport stream packets. + */ + _TransportParseStream = function TransportParseStream() { + var parsePsi, parsePat, parsePmt, self; + _TransportParseStream.prototype.init.call(this); + self = this; + + this.packetsWaitingForPmt = []; + this.programMapTable = undefined; + + parsePsi = function parsePsi(payload, psi) { + var offset = 0; + + // PSI packets may be split into multiple sections and those + // sections may be split into multiple packets. If a PSI + // section starts in this packet, the payload_unit_start_indicator + // will be true and the first byte of the payload will indicate + // the offset from the current position to the start of the + // section. + if (psi.payloadUnitStartIndicator) { + offset += payload[offset] + 1; + } + + if (psi.type === 'pat') { + parsePat(payload.subarray(offset), psi); + } else { + parsePmt(payload.subarray(offset), psi); + } + }; + + parsePat = function parsePat(payload, pat) { + pat.section_number = payload[7]; // eslint-disable-line camelcase + pat.last_section_number = payload[8]; // eslint-disable-line camelcase + + // skip the PSI header and parse the first PMT entry + self.pmtPid = (payload[10] & 0x1F) << 8 | payload[11]; + pat.pmtPid = self.pmtPid; + }; + + /** + * Parse out the relevant fields of a Program Map Table (PMT). + * @param payload {Uint8Array} the PMT-specific portion of an MP2T + * packet. The first byte in this array should be the table_id + * field. + * @param pmt {object} the object that should be decorated with + * fields parsed from the PMT. + */ + parsePmt = function parsePmt(payload, pmt) { + var sectionLength, tableEnd, programInfoLength, offset; + + // PMTs can be sent ahead of the time when they should actually + // take effect. We don't believe this should ever be the case + // for HLS but we'll ignore "forward" PMT declarations if we see + // them. Future PMT declarations have the current_next_indicator + // set to zero. + if (!(payload[5] & 0x01)) { + return; + } + + // overwrite any existing program map table + self.programMapTable = { + video: null, + audio: null, + 'timed-metadata': {} + }; + + // the mapping table ends at the end of the current section + sectionLength = (payload[1] & 0x0f) << 8 | payload[2]; + tableEnd = 3 + sectionLength - 4; + + // to determine where the table is, we have to figure out how + // long the program info descriptors are + programInfoLength = (payload[10] & 0x0f) << 8 | payload[11]; + + // advance the offset to the first entry in the mapping table + offset = 12 + programInfoLength; + while (offset < tableEnd) { + var streamType = payload[offset]; + var pid = (payload[offset + 1] & 0x1F) << 8 | payload[offset + 2]; + + // only map a single elementary_pid for audio and video stream types + // TODO: should this be done for metadata too? for now maintain behavior of + // multiple metadata streams + if (streamType === streamTypes.H264_STREAM_TYPE && self.programMapTable.video === null) { + self.programMapTable.video = pid; + } else if (streamType === streamTypes.ADTS_STREAM_TYPE && self.programMapTable.audio === null) { + self.programMapTable.audio = pid; + } else if (streamType === streamTypes.METADATA_STREAM_TYPE) { + // map pid to stream type for metadata streams + self.programMapTable['timed-metadata'][pid] = streamType; + } + + // move to the next table entry + // skip past the elementary stream descriptors, if present + offset += ((payload[offset + 3] & 0x0F) << 8 | payload[offset + 4]) + 5; + } + + // record the map on the packet as well + pmt.programMapTable = self.programMapTable; + }; + + /** + * Deliver a new MP2T packet to the stream. + */ + this.push = function (packet) { + var result = {}, + offset = 4; + + result.payloadUnitStartIndicator = !!(packet[1] & 0x40); + + // pid is a 13-bit field starting at the last bit of packet[1] + result.pid = packet[1] & 0x1f; + result.pid <<= 8; + result.pid |= packet[2]; + + // if an adaption field is present, its length is specified by the + // fifth byte of the TS packet header. The adaptation field is + // used to add stuffing to PES packets that don't fill a complete + // TS packet, and to specify some forms of timing and control data + // that we do not currently use. + if ((packet[3] & 0x30) >>> 4 > 0x01) { + offset += packet[offset] + 1; + } + + // parse the rest of the packet based on the type + if (result.pid === 0) { + result.type = 'pat'; + parsePsi(packet.subarray(offset), result); + this.trigger('data', result); + } else if (result.pid === this.pmtPid) { + result.type = 'pmt'; + parsePsi(packet.subarray(offset), result); + this.trigger('data', result); + + // if there are any packets waiting for a PMT to be found, process them now + while (this.packetsWaitingForPmt.length) { + this.processPes_.apply(this, this.packetsWaitingForPmt.shift()); + } + } else if (this.programMapTable === undefined) { + // When we have not seen a PMT yet, defer further processing of + // PES packets until one has been parsed + this.packetsWaitingForPmt.push([packet, offset, result]); + } else { + this.processPes_(packet, offset, result); + } + }; + + this.processPes_ = function (packet, offset, result) { + // set the appropriate stream type + if (result.pid === this.programMapTable.video) { + result.streamType = streamTypes.H264_STREAM_TYPE; + } else if (result.pid === this.programMapTable.audio) { + result.streamType = streamTypes.ADTS_STREAM_TYPE; + } else { + // if not video or audio, it is timed-metadata or unknown + // if unknown, streamType will be undefined + result.streamType = this.programMapTable['timed-metadata'][result.pid]; + } + + result.type = 'pes'; + result.data = packet.subarray(offset); + + this.trigger('data', result); + }; + }; + _TransportParseStream.prototype = new stream(); + _TransportParseStream.STREAM_TYPES = { + h264: 0x1b, + adts: 0x0f + }; + + /** + * Reconsistutes program elementary stream (PES) packets from parsed + * transport stream packets. That is, if you pipe an + * mp2t.TransportParseStream into a mp2t.ElementaryStream, the output + * events will be events which capture the bytes for individual PES + * packets plus relevant metadata that has been extracted from the + * container. + */ + _ElementaryStream = function ElementaryStream() { + var self = this, + + + // PES packet fragments + video = { + data: [], + size: 0 + }, + audio = { + data: [], + size: 0 + }, + timedMetadata = { + data: [], + size: 0 + }, + parsePes = function parsePes(payload, pes) { + var ptsDtsFlags; + + // get the packet length, this will be 0 for video + pes.packetLength = 6 + (payload[4] << 8 | payload[5]); + + // find out if this packets starts a new keyframe + pes.dataAlignmentIndicator = (payload[6] & 0x04) !== 0; + // PES packets may be annotated with a PTS value, or a PTS value + // and a DTS value. Determine what combination of values is + // available to work with. + ptsDtsFlags = payload[7]; + + // PTS and DTS are normally stored as a 33-bit number. Javascript + // performs all bitwise operations on 32-bit integers but javascript + // supports a much greater range (52-bits) of integer using standard + // mathematical operations. + // We construct a 31-bit value using bitwise operators over the 31 + // most significant bits and then multiply by 4 (equal to a left-shift + // of 2) before we add the final 2 least significant bits of the + // timestamp (equal to an OR.) + if (ptsDtsFlags & 0xC0) { + // the PTS and DTS are not written out directly. For information + // on how they are encoded, see + // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html + pes.pts = (payload[9] & 0x0E) << 27 | (payload[10] & 0xFF) << 20 | (payload[11] & 0xFE) << 12 | (payload[12] & 0xFF) << 5 | (payload[13] & 0xFE) >>> 3; + pes.pts *= 4; // Left shift by 2 + pes.pts += (payload[13] & 0x06) >>> 1; // OR by the two LSBs + pes.dts = pes.pts; + if (ptsDtsFlags & 0x40) { + pes.dts = (payload[14] & 0x0E) << 27 | (payload[15] & 0xFF) << 20 | (payload[16] & 0xFE) << 12 | (payload[17] & 0xFF) << 5 | (payload[18] & 0xFE) >>> 3; + pes.dts *= 4; // Left shift by 2 + pes.dts += (payload[18] & 0x06) >>> 1; // OR by the two LSBs + } + } + // the data section starts immediately after the PES header. + // pes_header_data_length specifies the number of header bytes + // that follow the last byte of the field. + pes.data = payload.subarray(9 + payload[8]); + }, + flushStream = function flushStream(stream$$1, type, forceFlush) { + var packetData = new Uint8Array(stream$$1.size), + event = { + type: type + }, + i = 0, + offset = 0, + packetFlushable = false, + fragment; + + // do nothing if there is not enough buffered data for a complete + // PES header + if (!stream$$1.data.length || stream$$1.size < 9) { + return; + } + event.trackId = stream$$1.data[0].pid; + + // reassemble the packet + for (i = 0; i < stream$$1.data.length; i++) { + fragment = stream$$1.data[i]; + + packetData.set(fragment.data, offset); + offset += fragment.data.byteLength; + } + + // parse assembled packet's PES header + parsePes(packetData, event); + + // non-video PES packets MUST have a non-zero PES_packet_length + // check that there is enough stream data to fill the packet + packetFlushable = type === 'video' || event.packetLength <= stream$$1.size; + + // flush pending packets if the conditions are right + if (forceFlush || packetFlushable) { + stream$$1.size = 0; + stream$$1.data.length = 0; + } + + // only emit packets that are complete. this is to avoid assembling + // incomplete PES packets due to poor segmentation + if (packetFlushable) { + self.trigger('data', event); + } + }; + + _ElementaryStream.prototype.init.call(this); + + this.push = function (data) { + ({ + pat: function pat() { + // we have to wait for the PMT to arrive as well before we + // have any meaningful metadata + }, + pes: function pes() { + var stream$$1, streamType; + + switch (data.streamType) { + case streamTypes.H264_STREAM_TYPE: + case streamTypes.H264_STREAM_TYPE: + stream$$1 = video; + streamType = 'video'; + break; + case streamTypes.ADTS_STREAM_TYPE: + stream$$1 = audio; + streamType = 'audio'; + break; + case streamTypes.METADATA_STREAM_TYPE: + stream$$1 = timedMetadata; + streamType = 'timed-metadata'; + break; + default: + // ignore unknown stream types + return; + } + + // if a new packet is starting, we can flush the completed + // packet + if (data.payloadUnitStartIndicator) { + flushStream(stream$$1, streamType, true); + } + + // buffer this fragment until we are sure we've received the + // complete payload + stream$$1.data.push(data); + stream$$1.size += data.data.byteLength; + }, + pmt: function pmt() { + var event = { + type: 'metadata', + tracks: [] + }, + programMapTable = data.programMapTable; + + // translate audio and video streams to tracks + if (programMapTable.video !== null) { + event.tracks.push({ + timelineStartInfo: { + baseMediaDecodeTime: 0 + }, + id: +programMapTable.video, + codec: 'avc', + type: 'video' + }); + } + if (programMapTable.audio !== null) { + event.tracks.push({ + timelineStartInfo: { + baseMediaDecodeTime: 0 + }, + id: +programMapTable.audio, + codec: 'adts', + type: 'audio' + }); + } + + self.trigger('data', event); + } + })[data.type](); + }; + + /** + * Flush any remaining input. Video PES packets may be of variable + * length. Normally, the start of a new video packet can trigger the + * finalization of the previous packet. That is not possible if no + * more video is forthcoming, however. In that case, some other + * mechanism (like the end of the file) has to be employed. When it is + * clear that no additional data is forthcoming, calling this method + * will flush the buffered packets. + */ + this.flush = function () { + // !!THIS ORDER IS IMPORTANT!! + // video first then audio + flushStream(video, 'video'); + flushStream(audio, 'audio'); + flushStream(timedMetadata, 'timed-metadata'); + this.trigger('done'); + }; + }; + _ElementaryStream.prototype = new stream(); + + var m2ts = { + PAT_PID: 0x0000, + MP2T_PACKET_LENGTH: MP2T_PACKET_LENGTH, + TransportPacketStream: _TransportPacketStream, + TransportParseStream: _TransportParseStream, + ElementaryStream: _ElementaryStream, + TimestampRolloverStream: TimestampRolloverStream$1, + CaptionStream: captionStream.CaptionStream, + Cea608Stream: captionStream.Cea608Stream, + MetadataStream: metadataStream + }; + + for (var type in streamTypes) { + if (streamTypes.hasOwnProperty(type)) { + m2ts[type] = streamTypes[type]; + } + } + + var m2ts_1 = m2ts; + + var _AdtsStream; + + var ADTS_SAMPLING_FREQUENCIES = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350]; + + /* + * Accepts a ElementaryStream and emits data events with parsed + * AAC Audio Frames of the individual packets. Input audio in ADTS + * format is unpacked and re-emitted as AAC frames. + * + * @see http://wiki.multimedia.cx/index.php?title=ADTS + * @see http://wiki.multimedia.cx/?title=Understanding_AAC + */ + _AdtsStream = function AdtsStream() { + var buffer; + + _AdtsStream.prototype.init.call(this); + + this.push = function (packet) { + var i = 0, + frameNum = 0, + frameLength, + protectionSkipBytes, + frameEnd, + oldBuffer, + sampleCount, + adtsFrameDuration; + + if (packet.type !== 'audio') { + // ignore non-audio data + return; + } + + // Prepend any data in the buffer to the input data so that we can parse + // aac frames the cross a PES packet boundary + if (buffer) { + oldBuffer = buffer; + buffer = new Uint8Array(oldBuffer.byteLength + packet.data.byteLength); + buffer.set(oldBuffer); + buffer.set(packet.data, oldBuffer.byteLength); + } else { + buffer = packet.data; + } + + // unpack any ADTS frames which have been fully received + // for details on the ADTS header, see http://wiki.multimedia.cx/index.php?title=ADTS + while (i + 5 < buffer.length) { + + // Loook for the start of an ADTS header.. + if (buffer[i] !== 0xFF || (buffer[i + 1] & 0xF6) !== 0xF0) { + // If a valid header was not found, jump one forward and attempt to + // find a valid ADTS header starting at the next byte + i++; + continue; + } + + // The protection skip bit tells us if we have 2 bytes of CRC data at the + // end of the ADTS header + protectionSkipBytes = (~buffer[i + 1] & 0x01) * 2; + + // Frame length is a 13 bit integer starting 16 bits from the + // end of the sync sequence + frameLength = (buffer[i + 3] & 0x03) << 11 | buffer[i + 4] << 3 | (buffer[i + 5] & 0xe0) >> 5; + + sampleCount = ((buffer[i + 6] & 0x03) + 1) * 1024; + adtsFrameDuration = sampleCount * 90000 / ADTS_SAMPLING_FREQUENCIES[(buffer[i + 2] & 0x3c) >>> 2]; + + frameEnd = i + frameLength; + + // If we don't have enough data to actually finish this ADTS frame, return + // and wait for more data + if (buffer.byteLength < frameEnd) { + return; + } + + // Otherwise, deliver the complete AAC frame + this.trigger('data', { + pts: packet.pts + frameNum * adtsFrameDuration, + dts: packet.dts + frameNum * adtsFrameDuration, + sampleCount: sampleCount, + audioobjecttype: (buffer[i + 2] >>> 6 & 0x03) + 1, + channelcount: (buffer[i + 2] & 1) << 2 | (buffer[i + 3] & 0xc0) >>> 6, + samplerate: ADTS_SAMPLING_FREQUENCIES[(buffer[i + 2] & 0x3c) >>> 2], + samplingfrequencyindex: (buffer[i + 2] & 0x3c) >>> 2, + // assume ISO/IEC 14496-12 AudioSampleEntry default of 16 + samplesize: 16, + data: buffer.subarray(i + 7 + protectionSkipBytes, frameEnd) + }); + + // If the buffer is empty, clear it and return + if (buffer.byteLength === frameEnd) { + buffer = undefined; + return; + } + + frameNum++; + + // Remove the finished frame from the buffer and start the process again + buffer = buffer.subarray(frameEnd); + } + }; + this.flush = function () { + this.trigger('done'); + }; + }; + + _AdtsStream.prototype = new stream(); + + var adts = _AdtsStream; + + var ExpGolomb; + + /** + * Parser for exponential Golomb codes, a variable-bitwidth number encoding + * scheme used by h264. + */ + ExpGolomb = function ExpGolomb(workingData) { + var + // the number of bytes left to examine in workingData + workingBytesAvailable = workingData.byteLength, + + + // the current word being examined + workingWord = 0, + + // :uint + + // the number of bits left to examine in the current word + workingBitsAvailable = 0; // :uint; + + // ():uint + this.length = function () { + return 8 * workingBytesAvailable; + }; + + // ():uint + this.bitsAvailable = function () { + return 8 * workingBytesAvailable + workingBitsAvailable; + }; + + // ():void + this.loadWord = function () { + var position = workingData.byteLength - workingBytesAvailable, + workingBytes = new Uint8Array(4), + availableBytes = Math.min(4, workingBytesAvailable); + + if (availableBytes === 0) { + throw new Error('no bytes available'); + } + + workingBytes.set(workingData.subarray(position, position + availableBytes)); + workingWord = new DataView(workingBytes.buffer).getUint32(0); + + // track the amount of workingData that has been processed + workingBitsAvailable = availableBytes * 8; + workingBytesAvailable -= availableBytes; + }; + + // (count:int):void + this.skipBits = function (count) { + var skipBytes; // :int + if (workingBitsAvailable > count) { + workingWord <<= count; + workingBitsAvailable -= count; + } else { + count -= workingBitsAvailable; + skipBytes = Math.floor(count / 8); + + count -= skipBytes * 8; + workingBytesAvailable -= skipBytes; + + this.loadWord(); + + workingWord <<= count; + workingBitsAvailable -= count; + } + }; + + // (size:int):uint + this.readBits = function (size) { + var bits = Math.min(workingBitsAvailable, size), + + // :uint + valu = workingWord >>> 32 - bits; // :uint + // if size > 31, handle error + workingBitsAvailable -= bits; + if (workingBitsAvailable > 0) { + workingWord <<= bits; + } else if (workingBytesAvailable > 0) { + this.loadWord(); + } + + bits = size - bits; + if (bits > 0) { + return valu << bits | this.readBits(bits); + } + return valu; + }; + + // ():uint + this.skipLeadingZeros = function () { + var leadingZeroCount; // :uint + for (leadingZeroCount = 0; leadingZeroCount < workingBitsAvailable; ++leadingZeroCount) { + if ((workingWord & 0x80000000 >>> leadingZeroCount) !== 0) { + // the first bit of working word is 1 + workingWord <<= leadingZeroCount; + workingBitsAvailable -= leadingZeroCount; + return leadingZeroCount; + } + } + + // we exhausted workingWord and still have not found a 1 + this.loadWord(); + return leadingZeroCount + this.skipLeadingZeros(); + }; + + // ():void + this.skipUnsignedExpGolomb = function () { + this.skipBits(1 + this.skipLeadingZeros()); + }; + + // ():void + this.skipExpGolomb = function () { + this.skipBits(1 + this.skipLeadingZeros()); + }; + + // ():uint + this.readUnsignedExpGolomb = function () { + var clz = this.skipLeadingZeros(); // :uint + return this.readBits(clz + 1) - 1; + }; + + // ():int + this.readExpGolomb = function () { + var valu = this.readUnsignedExpGolomb(); // :int + if (0x01 & valu) { + // the number is odd if the low order bit is set + return 1 + valu >>> 1; // add 1 to make it even, and divide by 2 + } + return -1 * (valu >>> 1); // divide by two then make it negative + }; + + // Some convenience functions + // :Boolean + this.readBoolean = function () { + return this.readBits(1) === 1; + }; + + // ():int + this.readUnsignedByte = function () { + return this.readBits(8); + }; + + this.loadWord(); + }; + + var expGolomb = ExpGolomb; + + var _H264Stream, _NalByteStream; + var PROFILES_WITH_OPTIONAL_SPS_DATA; + + /** + * Accepts a NAL unit byte stream and unpacks the embedded NAL units. + */ + _NalByteStream = function NalByteStream() { + var syncPoint = 0, + i, + buffer; + _NalByteStream.prototype.init.call(this); + + this.push = function (data) { + var swapBuffer; + + if (!buffer) { + buffer = data.data; + } else { + swapBuffer = new Uint8Array(buffer.byteLength + data.data.byteLength); + swapBuffer.set(buffer); + swapBuffer.set(data.data, buffer.byteLength); + buffer = swapBuffer; + } + + // Rec. ITU-T H.264, Annex B + // scan for NAL unit boundaries + + // a match looks like this: + // 0 0 1 .. NAL .. 0 0 1 + // ^ sync point ^ i + // or this: + // 0 0 1 .. NAL .. 0 0 0 + // ^ sync point ^ i + + // advance the sync point to a NAL start, if necessary + for (; syncPoint < buffer.byteLength - 3; syncPoint++) { + if (buffer[syncPoint + 2] === 1) { + // the sync point is properly aligned + i = syncPoint + 5; + break; + } + } + + while (i < buffer.byteLength) { + // look at the current byte to determine if we've hit the end of + // a NAL unit boundary + switch (buffer[i]) { + case 0: + // skip past non-sync sequences + if (buffer[i - 1] !== 0) { + i += 2; + break; + } else if (buffer[i - 2] !== 0) { + i++; + break; + } + + // deliver the NAL unit if it isn't empty + if (syncPoint + 3 !== i - 2) { + this.trigger('data', buffer.subarray(syncPoint + 3, i - 2)); + } + + // drop trailing zeroes + do { + i++; + } while (buffer[i] !== 1 && i < buffer.length); + syncPoint = i - 2; + i += 3; + break; + case 1: + // skip past non-sync sequences + if (buffer[i - 1] !== 0 || buffer[i - 2] !== 0) { + i += 3; + break; + } + + // deliver the NAL unit + this.trigger('data', buffer.subarray(syncPoint + 3, i - 2)); + syncPoint = i - 2; + i += 3; + break; + default: + // the current byte isn't a one or zero, so it cannot be part + // of a sync sequence + i += 3; + break; + } + } + // filter out the NAL units that were delivered + buffer = buffer.subarray(syncPoint); + i -= syncPoint; + syncPoint = 0; + }; + + this.flush = function () { + // deliver the last buffered NAL unit + if (buffer && buffer.byteLength > 3) { + this.trigger('data', buffer.subarray(syncPoint + 3)); + } + // reset the stream state + buffer = null; + syncPoint = 0; + this.trigger('done'); + }; + }; + _NalByteStream.prototype = new stream(); + + // values of profile_idc that indicate additional fields are included in the SPS + // see Recommendation ITU-T H.264 (4/2013), + // 7.3.2.1.1 Sequence parameter set data syntax + PROFILES_WITH_OPTIONAL_SPS_DATA = { + 100: true, + 110: true, + 122: true, + 244: true, + 44: true, + 83: true, + 86: true, + 118: true, + 128: true, + 138: true, + 139: true, + 134: true + }; + + /** + * Accepts input from a ElementaryStream and produces H.264 NAL unit data + * events. + */ + _H264Stream = function H264Stream() { + var nalByteStream = new _NalByteStream(), + self, + trackId, + currentPts, + currentDts, + discardEmulationPreventionBytes, + readSequenceParameterSet, + skipScalingList; + + _H264Stream.prototype.init.call(this); + self = this; + + this.push = function (packet) { + if (packet.type !== 'video') { + return; + } + trackId = packet.trackId; + currentPts = packet.pts; + currentDts = packet.dts; + + nalByteStream.push(packet); + }; + + nalByteStream.on('data', function (data) { + var event = { + trackId: trackId, + pts: currentPts, + dts: currentDts, + data: data + }; + + switch (data[0] & 0x1f) { + case 0x05: + event.nalUnitType = 'slice_layer_without_partitioning_rbsp_idr'; + break; + case 0x06: + event.nalUnitType = 'sei_rbsp'; + event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1)); + break; + case 0x07: + event.nalUnitType = 'seq_parameter_set_rbsp'; + event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1)); + event.config = readSequenceParameterSet(event.escapedRBSP); + break; + case 0x08: + event.nalUnitType = 'pic_parameter_set_rbsp'; + break; + case 0x09: + event.nalUnitType = 'access_unit_delimiter_rbsp'; + break; + + default: + break; + } + self.trigger('data', event); + }); + nalByteStream.on('done', function () { + self.trigger('done'); + }); + + this.flush = function () { + nalByteStream.flush(); + }; + + /** + * Advance the ExpGolomb decoder past a scaling list. The scaling + * list is optionally transmitted as part of a sequence parameter + * set and is not relevant to transmuxing. + * @param count {number} the number of entries in this scaling list + * @param expGolombDecoder {object} an ExpGolomb pointed to the + * start of a scaling list + * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1 + */ + skipScalingList = function skipScalingList(count, expGolombDecoder) { + var lastScale = 8, + nextScale = 8, + j, + deltaScale; + + for (j = 0; j < count; j++) { + if (nextScale !== 0) { + deltaScale = expGolombDecoder.readExpGolomb(); + nextScale = (lastScale + deltaScale + 256) % 256; + } + + lastScale = nextScale === 0 ? lastScale : nextScale; + } + }; + + /** + * Expunge any "Emulation Prevention" bytes from a "Raw Byte + * Sequence Payload" + * @param data {Uint8Array} the bytes of a RBSP from a NAL + * unit + * @return {Uint8Array} the RBSP without any Emulation + * Prevention Bytes + */ + discardEmulationPreventionBytes = function discardEmulationPreventionBytes(data) { + var length = data.byteLength, + emulationPreventionBytesPositions = [], + i = 1, + newLength, + newData; + + // Find all `Emulation Prevention Bytes` + while (i < length - 2) { + if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) { + emulationPreventionBytesPositions.push(i + 2); + i += 2; + } else { + i++; + } + } + + // If no Emulation Prevention Bytes were found just return the original + // array + if (emulationPreventionBytesPositions.length === 0) { + return data; + } + + // Create a new array to hold the NAL unit data + newLength = length - emulationPreventionBytesPositions.length; + newData = new Uint8Array(newLength); + var sourceIndex = 0; + + for (i = 0; i < newLength; sourceIndex++, i++) { + if (sourceIndex === emulationPreventionBytesPositions[0]) { + // Skip this byte + sourceIndex++; + // Remove this position index + emulationPreventionBytesPositions.shift(); + } + newData[i] = data[sourceIndex]; + } + + return newData; + }; + + /** + * Read a sequence parameter set and return some interesting video + * properties. A sequence parameter set is the H264 metadata that + * describes the properties of upcoming video frames. + * @param data {Uint8Array} the bytes of a sequence parameter set + * @return {object} an object with configuration parsed from the + * sequence parameter set, including the dimensions of the + * associated video frames. + */ + readSequenceParameterSet = function readSequenceParameterSet(data) { + var frameCropLeftOffset = 0, + frameCropRightOffset = 0, + frameCropTopOffset = 0, + frameCropBottomOffset = 0, + sarScale = 1, + expGolombDecoder, + profileIdc, + levelIdc, + profileCompatibility, + chromaFormatIdc, + picOrderCntType, + numRefFramesInPicOrderCntCycle, + picWidthInMbsMinus1, + picHeightInMapUnitsMinus1, + frameMbsOnlyFlag, + scalingListCount, + sarRatio, + aspectRatioIdc, + i; + + expGolombDecoder = new expGolomb(data); + profileIdc = expGolombDecoder.readUnsignedByte(); // profile_idc + profileCompatibility = expGolombDecoder.readUnsignedByte(); // constraint_set[0-5]_flag + levelIdc = expGolombDecoder.readUnsignedByte(); // level_idc u(8) + expGolombDecoder.skipUnsignedExpGolomb(); // seq_parameter_set_id + + // some profiles have more optional data we don't need + if (PROFILES_WITH_OPTIONAL_SPS_DATA[profileIdc]) { + chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb(); + if (chromaFormatIdc === 3) { + expGolombDecoder.skipBits(1); // separate_colour_plane_flag + } + expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_luma_minus8 + expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_chroma_minus8 + expGolombDecoder.skipBits(1); // qpprime_y_zero_transform_bypass_flag + if (expGolombDecoder.readBoolean()) { + // seq_scaling_matrix_present_flag + scalingListCount = chromaFormatIdc !== 3 ? 8 : 12; + for (i = 0; i < scalingListCount; i++) { + if (expGolombDecoder.readBoolean()) { + // seq_scaling_list_present_flag[ i ] + if (i < 6) { + skipScalingList(16, expGolombDecoder); + } else { + skipScalingList(64, expGolombDecoder); + } + } + } + } + } + + expGolombDecoder.skipUnsignedExpGolomb(); // log2_max_frame_num_minus4 + picOrderCntType = expGolombDecoder.readUnsignedExpGolomb(); + + if (picOrderCntType === 0) { + expGolombDecoder.readUnsignedExpGolomb(); // log2_max_pic_order_cnt_lsb_minus4 + } else if (picOrderCntType === 1) { + expGolombDecoder.skipBits(1); // delta_pic_order_always_zero_flag + expGolombDecoder.skipExpGolomb(); // offset_for_non_ref_pic + expGolombDecoder.skipExpGolomb(); // offset_for_top_to_bottom_field + numRefFramesInPicOrderCntCycle = expGolombDecoder.readUnsignedExpGolomb(); + for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) { + expGolombDecoder.skipExpGolomb(); // offset_for_ref_frame[ i ] + } + } + + expGolombDecoder.skipUnsignedExpGolomb(); // max_num_ref_frames + expGolombDecoder.skipBits(1); // gaps_in_frame_num_value_allowed_flag + + picWidthInMbsMinus1 = expGolombDecoder.readUnsignedExpGolomb(); + picHeightInMapUnitsMinus1 = expGolombDecoder.readUnsignedExpGolomb(); + + frameMbsOnlyFlag = expGolombDecoder.readBits(1); + if (frameMbsOnlyFlag === 0) { + expGolombDecoder.skipBits(1); // mb_adaptive_frame_field_flag + } + + expGolombDecoder.skipBits(1); // direct_8x8_inference_flag + if (expGolombDecoder.readBoolean()) { + // frame_cropping_flag + frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb(); + frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb(); + frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb(); + frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb(); + } + if (expGolombDecoder.readBoolean()) { + // vui_parameters_present_flag + if (expGolombDecoder.readBoolean()) { + // aspect_ratio_info_present_flag + aspectRatioIdc = expGolombDecoder.readUnsignedByte(); + switch (aspectRatioIdc) { + case 1: + sarRatio = [1, 1]; + break; + case 2: + sarRatio = [12, 11]; + break; + case 3: + sarRatio = [10, 11]; + break; + case 4: + sarRatio = [16, 11]; + break; + case 5: + sarRatio = [40, 33]; + break; + case 6: + sarRatio = [24, 11]; + break; + case 7: + sarRatio = [20, 11]; + break; + case 8: + sarRatio = [32, 11]; + break; + case 9: + sarRatio = [80, 33]; + break; + case 10: + sarRatio = [18, 11]; + break; + case 11: + sarRatio = [15, 11]; + break; + case 12: + sarRatio = [64, 33]; + break; + case 13: + sarRatio = [160, 99]; + break; + case 14: + sarRatio = [4, 3]; + break; + case 15: + sarRatio = [3, 2]; + break; + case 16: + sarRatio = [2, 1]; + break; + case 255: { + sarRatio = [expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte(), expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte()]; + break; + } + } + if (sarRatio) { + sarScale = sarRatio[0] / sarRatio[1]; + } + } + } + return { + profileIdc: profileIdc, + levelIdc: levelIdc, + profileCompatibility: profileCompatibility, + width: Math.ceil(((picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2) * sarScale), + height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - frameCropTopOffset * 2 - frameCropBottomOffset * 2 + }; + }; + }; + _H264Stream.prototype = new stream(); + + var h264 = { + H264Stream: _H264Stream, + NalByteStream: _NalByteStream + }; + + // Constants + var _AacStream; + + /** + * Splits an incoming stream of binary data into ADTS and ID3 Frames. + */ + + _AacStream = function AacStream() { + var everything = new Uint8Array(), + timeStamp = 0; + + _AacStream.prototype.init.call(this); + + this.setTimestamp = function (timestamp) { + timeStamp = timestamp; + }; + + this.parseId3TagSize = function (header, byteIndex) { + var returnSize = header[byteIndex + 6] << 21 | header[byteIndex + 7] << 14 | header[byteIndex + 8] << 7 | header[byteIndex + 9], + flags = header[byteIndex + 5], + footerPresent = (flags & 16) >> 4; + + if (footerPresent) { + return returnSize + 20; + } + return returnSize + 10; + }; + + this.parseAdtsSize = function (header, byteIndex) { + var lowThree = (header[byteIndex + 5] & 0xE0) >> 5, + middle = header[byteIndex + 4] << 3, + highTwo = header[byteIndex + 3] & 0x3 << 11; + + return highTwo | middle | lowThree; + }; + + this.push = function (bytes) { + var frameSize = 0, + byteIndex = 0, + bytesLeft, + chunk, + packet, + tempLength; + + // If there are bytes remaining from the last segment, prepend them to the + // bytes that were pushed in + if (everything.length) { + tempLength = everything.length; + everything = new Uint8Array(bytes.byteLength + tempLength); + everything.set(everything.subarray(0, tempLength)); + everything.set(bytes, tempLength); + } else { + everything = bytes; + } + + while (everything.length - byteIndex >= 3) { + if (everything[byteIndex] === 'I'.charCodeAt(0) && everything[byteIndex + 1] === 'D'.charCodeAt(0) && everything[byteIndex + 2] === '3'.charCodeAt(0)) { + + // Exit early because we don't have enough to parse + // the ID3 tag header + if (everything.length - byteIndex < 10) { + break; + } + + // check framesize + frameSize = this.parseId3TagSize(everything, byteIndex); + + // Exit early if we don't have enough in the buffer + // to emit a full packet + if (frameSize > everything.length) { + break; + } + chunk = { + type: 'timed-metadata', + data: everything.subarray(byteIndex, byteIndex + frameSize) + }; + this.trigger('data', chunk); + byteIndex += frameSize; + continue; + } else if (everything[byteIndex] & 0xff === 0xff && (everything[byteIndex + 1] & 0xf0) === 0xf0) { + + // Exit early because we don't have enough to parse + // the ADTS frame header + if (everything.length - byteIndex < 7) { + break; + } + + frameSize = this.parseAdtsSize(everything, byteIndex); + + // Exit early if we don't have enough in the buffer + // to emit a full packet + if (frameSize > everything.length) { + break; + } + + packet = { + type: 'audio', + data: everything.subarray(byteIndex, byteIndex + frameSize), + pts: timeStamp, + dts: timeStamp + }; + this.trigger('data', packet); + byteIndex += frameSize; + continue; + } + byteIndex++; + } + bytesLeft = everything.length - byteIndex; + + if (bytesLeft > 0) { + everything = everything.subarray(byteIndex); + } else { + everything = new Uint8Array(); + } + }; + }; + + _AacStream.prototype = new stream(); + + var aac = _AacStream; + + var highPrefix = [33, 16, 5, 32, 164, 27]; + var lowPrefix = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252]; + var zeroFill = function zeroFill(count) { + var a = []; + while (count--) { + a.push(0); + } + return a; + }; + + var makeTable = function makeTable(metaTable) { + return Object.keys(metaTable).reduce(function (obj, key) { + obj[key] = new Uint8Array(metaTable[key].reduce(function (arr, part) { + return arr.concat(part); + }, [])); + return obj; + }, {}); + }; + + // Frames-of-silence to use for filling in missing AAC frames + var coneOfSilence = { + 96000: [highPrefix, [227, 64], zeroFill(154), [56]], + 88200: [highPrefix, [231], zeroFill(170), [56]], + 64000: [highPrefix, [248, 192], zeroFill(240), [56]], + 48000: [highPrefix, [255, 192], zeroFill(268), [55, 148, 128], zeroFill(54), [112]], + 44100: [highPrefix, [255, 192], zeroFill(268), [55, 163, 128], zeroFill(84), [112]], + 32000: [highPrefix, [255, 192], zeroFill(268), [55, 234], zeroFill(226), [112]], + 24000: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 112], zeroFill(126), [224]], + 16000: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 255], zeroFill(269), [223, 108], zeroFill(195), [1, 192]], + 12000: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 253, 128], zeroFill(259), [56]], + 11025: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 255, 192], zeroFill(268), [55, 175, 128], zeroFill(108), [112]], + 8000: [lowPrefix, zeroFill(268), [3, 121, 16], zeroFill(47), [7]] + }; + + var silence = makeTable(coneOfSilence); + + var ONE_SECOND_IN_TS = 90000, + + // 90kHz clock + secondsToVideoTs, + secondsToAudioTs, + videoTsToSeconds, + audioTsToSeconds, + audioTsToVideoTs, + videoTsToAudioTs; + + secondsToVideoTs = function secondsToVideoTs(seconds) { + return seconds * ONE_SECOND_IN_TS; + }; + + secondsToAudioTs = function secondsToAudioTs(seconds, sampleRate) { + return seconds * sampleRate; + }; + + videoTsToSeconds = function videoTsToSeconds(timestamp) { + return timestamp / ONE_SECOND_IN_TS; + }; + + audioTsToSeconds = function audioTsToSeconds(timestamp, sampleRate) { + return timestamp / sampleRate; + }; + + audioTsToVideoTs = function audioTsToVideoTs(timestamp, sampleRate) { + return secondsToVideoTs(audioTsToSeconds(timestamp, sampleRate)); + }; + + videoTsToAudioTs = function videoTsToAudioTs(timestamp, sampleRate) { + return secondsToAudioTs(videoTsToSeconds(timestamp), sampleRate); + }; + + var clock = { + secondsToVideoTs: secondsToVideoTs, + secondsToAudioTs: secondsToAudioTs, + videoTsToSeconds: videoTsToSeconds, + audioTsToSeconds: audioTsToSeconds, + audioTsToVideoTs: audioTsToVideoTs, + videoTsToAudioTs: videoTsToAudioTs + }; + + var H264Stream = h264.H264Stream; + + // constants + var AUDIO_PROPERTIES = ['audioobjecttype', 'channelcount', 'samplerate', 'samplingfrequencyindex', 'samplesize']; + + var VIDEO_PROPERTIES = ['width', 'height', 'profileIdc', 'levelIdc', 'profileCompatibility']; + + var ONE_SECOND_IN_TS$1 = 90000; // 90kHz clock + + // object types + var _VideoSegmentStream, _AudioSegmentStream, _Transmuxer, _CoalesceStream; + + // Helper functions + var createDefaultSample, isLikelyAacData, collectDtsInfo, clearDtsInfo, calculateTrackBaseMediaDecodeTime, + arrayEquals, sumFrameByteLengths; + + /** + * Default sample object + * see ISO/IEC 14496-12:2012, section 8.6.4.3 + */ + createDefaultSample = function createDefaultSample() { + return { + size: 0, + flags: { + isLeading: 0, + dependsOn: 1, + isDependedOn: 0, + hasRedundancy: 0, + degradationPriority: 0 + } + }; + }; + + isLikelyAacData = function isLikelyAacData(data) { + if (data[0] === 'I'.charCodeAt(0) && data[1] === 'D'.charCodeAt(0) && data[2] === '3'.charCodeAt(0)) { + return true; + } + return false; + }; + + /** + * Compare two arrays (even typed) for same-ness + */ + arrayEquals = function arrayEquals(a, b) { + var i; + + if (a.length !== b.length) { + return false; + } + + // compare the value of each element in the array + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return false; + } + } + + return true; + }; + + /** + * Sum the `byteLength` properties of the data in each AAC frame + */ + sumFrameByteLengths = function sumFrameByteLengths(array) { + var i, + currentObj, + sum = 0; + + // sum the byteLength's all each nal unit in the frame + for (i = 0; i < array.length; i++) { + currentObj = array[i]; + sum += currentObj.data.byteLength; + } + + return sum; + }; + + /** + * Constructs a single-track, ISO BMFF media segment from AAC data + * events. The output of this stream can be fed to a SourceBuffer + * configured with a suitable initialization segment. + * @param track {object} track metadata configuration + * @param options {object} transmuxer options object + * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps + * in the source; false to adjust the first segment to start at 0. + */ + _AudioSegmentStream = function AudioSegmentStream(track, options) { + var adtsFrames = [], + sequenceNumber = 0, + earliestAllowedDts = 0, + audioAppendStartTs = 0, + videoBaseMediaDecodeTime = Infinity; + + options = options || {}; + + _AudioSegmentStream.prototype.init.call(this); + + this.push = function (data) { + collectDtsInfo(track, data); + + if (track) { + AUDIO_PROPERTIES.forEach(function (prop) { + track[prop] = data[prop]; + }); + } + + // buffer audio data until end() is called + adtsFrames.push(data); + }; + + this.setEarliestDts = function (earliestDts) { + earliestAllowedDts = earliestDts - track.timelineStartInfo.baseMediaDecodeTime; + }; + + this.setVideoBaseMediaDecodeTime = function (baseMediaDecodeTime) { + videoBaseMediaDecodeTime = baseMediaDecodeTime; + }; + + this.setAudioAppendStart = function (timestamp) { + audioAppendStartTs = timestamp; + }; + + this.flush = function () { + var frames, moof, mdat, boxes; + + // return early if no audio data has been observed + if (adtsFrames.length === 0) { + this.trigger('done', 'AudioSegmentStream'); + return; + } + + frames = this.trimAdtsFramesByEarliestDts_(adtsFrames); + track.baseMediaDecodeTime = calculateTrackBaseMediaDecodeTime(track, options.keepOriginalTimestamps); + + this.prefixWithSilence_(track, frames); + + // we have to build the index from byte locations to + // samples (that is, adts frames) in the audio data + track.samples = this.generateSampleTable_(frames); + + // concatenate the audio data to constuct the mdat + mdat = mp4Generator.mdat(this.concatenateFrameData_(frames)); + + adtsFrames = []; + + moof = mp4Generator.moof(sequenceNumber, [track]); + boxes = new Uint8Array(moof.byteLength + mdat.byteLength); + + // bump the sequence number for next time + sequenceNumber++; + + boxes.set(moof); + boxes.set(mdat, moof.byteLength); + + clearDtsInfo(track); + + this.trigger('data', {track: track, boxes: boxes}); + this.trigger('done', 'AudioSegmentStream'); + }; + + // Possibly pad (prefix) the audio track with silence if appending this track + // would lead to the introduction of a gap in the audio buffer + this.prefixWithSilence_ = function (track, frames) { + var baseMediaDecodeTimeTs, + frameDuration = 0, + audioGapDuration = 0, + audioFillFrameCount = 0, + audioFillDuration = 0, + silentFrame, + i; + + if (!frames.length) { + return; + } + + baseMediaDecodeTimeTs = clock.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate); + // determine frame clock duration based on sample rate, round up to avoid overfills + frameDuration = Math.ceil(ONE_SECOND_IN_TS$1 / (track.samplerate / 1024)); + + if (audioAppendStartTs && videoBaseMediaDecodeTime) { + // insert the shortest possible amount (audio gap or audio to video gap) + audioGapDuration = baseMediaDecodeTimeTs - Math.max(audioAppendStartTs, videoBaseMediaDecodeTime); + // number of full frames in the audio gap + audioFillFrameCount = Math.floor(audioGapDuration / frameDuration); + audioFillDuration = audioFillFrameCount * frameDuration; + } + + // don't attempt to fill gaps smaller than a single frame or larger + // than a half second + if (audioFillFrameCount < 1 || audioFillDuration > ONE_SECOND_IN_TS$1 / 2) { + return; + } + + silentFrame = silence[track.samplerate]; + + if (!silentFrame) { + // we don't have a silent frame pregenerated for the sample rate, so use a frame + // from the content instead + silentFrame = frames[0].data; + } + + for (i = 0; i < audioFillFrameCount; i++) { + frames.splice(i, 0, { + data: silentFrame + }); + } + + track.baseMediaDecodeTime -= Math.floor(clock.videoTsToAudioTs(audioFillDuration, track.samplerate)); + }; + + // If the audio segment extends before the earliest allowed dts + // value, remove AAC frames until starts at or after the earliest + // allowed DTS so that we don't end up with a negative baseMedia- + // DecodeTime for the audio track + this.trimAdtsFramesByEarliestDts_ = function (adtsFrames) { + if (track.minSegmentDts >= earliestAllowedDts) { + return adtsFrames; + } + + // We will need to recalculate the earliest segment Dts + track.minSegmentDts = Infinity; + + return adtsFrames.filter(function (currentFrame) { + // If this is an allowed frame, keep it and record it's Dts + if (currentFrame.dts >= earliestAllowedDts) { + track.minSegmentDts = Math.min(track.minSegmentDts, currentFrame.dts); + track.minSegmentPts = track.minSegmentDts; + return true; + } + // Otherwise, discard it + return false; + }); + }; + + // generate the track's raw mdat data from an array of frames + this.generateSampleTable_ = function (frames) { + var i, + currentFrame, + samples = []; + + for (i = 0; i < frames.length; i++) { + currentFrame = frames[i]; + samples.push({ + size: currentFrame.data.byteLength, + duration: 1024 // For AAC audio, all samples contain 1024 samples + }); + } + return samples; + }; + + // generate the track's sample table from an array of frames + this.concatenateFrameData_ = function (frames) { + var i, + currentFrame, + dataOffset = 0, + data = new Uint8Array(sumFrameByteLengths(frames)); + + for (i = 0; i < frames.length; i++) { + currentFrame = frames[i]; + + data.set(currentFrame.data, dataOffset); + dataOffset += currentFrame.data.byteLength; + } + return data; + }; + }; + + _AudioSegmentStream.prototype = new stream(); + + /** + * Constructs a single-track, ISO BMFF media segment from H264 data + * events. The output of this stream can be fed to a SourceBuffer + * configured with a suitable initialization segment. + * @param track {object} track metadata configuration + * @param options {object} transmuxer options object + * @param options.alignGopsAtEnd {boolean} If true, start from the end of the + * gopsToAlignWith list when attempting to align gop pts + * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps + * in the source; false to adjust the first segment to start at 0. + */ + _VideoSegmentStream = function VideoSegmentStream(track, options) { + var sequenceNumber = 0, + nalUnits = [], + gopsToAlignWith = [], + config, + pps; + + options = options || {}; + + _VideoSegmentStream.prototype.init.call(this); + + delete track.minPTS; + + this.gopCache_ = []; + + this.push = function (nalUnit) { + collectDtsInfo(track, nalUnit); + + // record the track config + if (nalUnit.nalUnitType === 'seq_parameter_set_rbsp' && !config) { + config = nalUnit.config; + track.sps = [nalUnit.data]; + + VIDEO_PROPERTIES.forEach(function (prop) { + track[prop] = config[prop]; + }, this); + } + + if (nalUnit.nalUnitType === 'pic_parameter_set_rbsp' && !pps) { + pps = nalUnit.data; + track.pps = [nalUnit.data]; + } + + // buffer video until flush() is called + nalUnits.push(nalUnit); + }; + + this.flush = function () { + var frames, gopForFusion, gops, moof, mdat, boxes; + + // Throw away nalUnits at the start of the byte stream until + // we find the first AUD + while (nalUnits.length) { + if (nalUnits[0].nalUnitType === 'access_unit_delimiter_rbsp') { + break; + } + nalUnits.shift(); + } + + // Return early if no video data has been observed + if (nalUnits.length === 0) { + this.resetStream_(); + this.trigger('done', 'VideoSegmentStream'); + return; + } + + // Organize the raw nal-units into arrays that represent + // higher-level constructs such as frames and gops + // (group-of-pictures) + frames = this.groupNalsIntoFrames_(nalUnits); + gops = this.groupFramesIntoGops_(frames); + + // If the first frame of this fragment is not a keyframe we have + // a problem since MSE (on Chrome) requires a leading keyframe. + // + // We have two approaches to repairing this situation: + // 1) GOP-FUSION: + // This is where we keep track of the GOPS (group-of-pictures) + // from previous fragments and attempt to find one that we can + // prepend to the current fragment in order to create a valid + // fragment. + // 2) KEYFRAME-PULLING: + // Here we search for the first keyframe in the fragment and + // throw away all the frames between the start of the fragment + // and that keyframe. We then extend the duration and pull the + // PTS of the keyframe forward so that it covers the time range + // of the frames that were disposed of. + // + // #1 is far prefereable over #2 which can cause "stuttering" but + // requires more things to be just right. + if (!gops[0][0].keyFrame) { + // Search for a gop for fusion from our gopCache + gopForFusion = this.getGopForFusion_(nalUnits[0], track); + + if (gopForFusion) { + gops.unshift(gopForFusion); + // Adjust Gops' metadata to account for the inclusion of the + // new gop at the beginning + gops.byteLength += gopForFusion.byteLength; + gops.nalCount += gopForFusion.nalCount; + gops.pts = gopForFusion.pts; + gops.dts = gopForFusion.dts; + gops.duration += gopForFusion.duration; + } else { + // If we didn't find a candidate gop fall back to keyframe-pulling + gops = this.extendFirstKeyFrame_(gops); + } + } + + // Trim gops to align with gopsToAlignWith + if (gopsToAlignWith.length) { + var alignedGops; + + if (options.alignGopsAtEnd) { + alignedGops = this.alignGopsAtEnd_(gops); + } else { + alignedGops = this.alignGopsAtStart_(gops); + } + + if (!alignedGops) { + // save all the nals in the last GOP into the gop cache + this.gopCache_.unshift({ + gop: gops.pop(), + pps: track.pps, + sps: track.sps + }); + + // Keep a maximum of 6 GOPs in the cache + this.gopCache_.length = Math.min(6, this.gopCache_.length); + + // Clear nalUnits + nalUnits = []; + + // return early no gops can be aligned with desired gopsToAlignWith + this.resetStream_(); + this.trigger('done', 'VideoSegmentStream'); + return; + } + + // Some gops were trimmed. clear dts info so minSegmentDts and pts are correct + // when recalculated before sending off to CoalesceStream + clearDtsInfo(track); + + gops = alignedGops; + } + + collectDtsInfo(track, gops); + + // First, we have to build the index from byte locations to + // samples (that is, frames) in the video data + track.samples = this.generateSampleTable_(gops); + + // Concatenate the video data and construct the mdat + mdat = mp4Generator.mdat(this.concatenateNalData_(gops)); + + track.baseMediaDecodeTime = calculateTrackBaseMediaDecodeTime(track, options.keepOriginalTimestamps); + + this.trigger('processedGopsInfo', gops.map(function (gop) { + return { + pts: gop.pts, + dts: gop.dts, + byteLength: gop.byteLength + }; + })); + + // save all the nals in the last GOP into the gop cache + this.gopCache_.unshift({ + gop: gops.pop(), + pps: track.pps, + sps: track.sps + }); + + // Keep a maximum of 6 GOPs in the cache + this.gopCache_.length = Math.min(6, this.gopCache_.length); + + // Clear nalUnits + nalUnits = []; + + this.trigger('baseMediaDecodeTime', track.baseMediaDecodeTime); + this.trigger('timelineStartInfo', track.timelineStartInfo); + + moof = mp4Generator.moof(sequenceNumber, [track]); + + // it would be great to allocate this array up front instead of + // throwing away hundreds of media segment fragments + boxes = new Uint8Array(moof.byteLength + mdat.byteLength); + + // Bump the sequence number for next time + sequenceNumber++; + + boxes.set(moof); + boxes.set(mdat, moof.byteLength); + + this.trigger('data', {track: track, boxes: boxes}); + + this.resetStream_(); + + // Continue with the flush process now + this.trigger('done', 'VideoSegmentStream'); + }; + + this.resetStream_ = function () { + clearDtsInfo(track); + + // reset config and pps because they may differ across segments + // for instance, when we are rendition switching + config = undefined; + pps = undefined; + }; + + // Search for a candidate Gop for gop-fusion from the gop cache and + // return it or return null if no good candidate was found + this.getGopForFusion_ = function (nalUnit) { + var halfSecond = 45000, + + // Half-a-second in a 90khz clock + allowableOverlap = 10000, + + // About 3 frames @ 30fps + nearestDistance = Infinity, + dtsDistance, + nearestGopObj, + currentGop, + currentGopObj, + i; + + // Search for the GOP nearest to the beginning of this nal unit + for (i = 0; i < this.gopCache_.length; i++) { + currentGopObj = this.gopCache_[i]; + currentGop = currentGopObj.gop; + + // Reject Gops with different SPS or PPS + if (!(track.pps && arrayEquals(track.pps[0], currentGopObj.pps[0])) || !(track.sps && arrayEquals(track.sps[0], currentGopObj.sps[0]))) { + continue; + } + + // Reject Gops that would require a negative baseMediaDecodeTime + if (currentGop.dts < track.timelineStartInfo.dts) { + continue; + } + + // The distance between the end of the gop and the start of the nalUnit + dtsDistance = nalUnit.dts - currentGop.dts - currentGop.duration; + + // Only consider GOPS that start before the nal unit and end within + // a half-second of the nal unit + if (dtsDistance >= -allowableOverlap && dtsDistance <= halfSecond) { + + // Always use the closest GOP we found if there is more than + // one candidate + if (!nearestGopObj || nearestDistance > dtsDistance) { + nearestGopObj = currentGopObj; + nearestDistance = dtsDistance; + } + } + } + + if (nearestGopObj) { + return nearestGopObj.gop; + } + return null; + }; + + this.extendFirstKeyFrame_ = function (gops) { + var currentGop; + + if (!gops[0][0].keyFrame && gops.length > 1) { + // Remove the first GOP + currentGop = gops.shift(); + + gops.byteLength -= currentGop.byteLength; + gops.nalCount -= currentGop.nalCount; + + // Extend the first frame of what is now the + // first gop to cover the time period of the + // frames we just removed + gops[0][0].dts = currentGop.dts; + gops[0][0].pts = currentGop.pts; + gops[0][0].duration += currentGop.duration; + } + + return gops; + }; + + // Convert an array of nal units into an array of frames with each frame being + // composed of the nal units that make up that frame + // Also keep track of cummulative data about the frame from the nal units such + // as the frame duration, starting pts, etc. + this.groupNalsIntoFrames_ = function (nalUnits) { + var i, + currentNal, + currentFrame = [], + frames = []; + + currentFrame.byteLength = 0; + + for (i = 0; i < nalUnits.length; i++) { + currentNal = nalUnits[i]; + + // Split on 'aud'-type nal units + if (currentNal.nalUnitType === 'access_unit_delimiter_rbsp') { + // Since the very first nal unit is expected to be an AUD + // only push to the frames array when currentFrame is not empty + if (currentFrame.length) { + currentFrame.duration = currentNal.dts - currentFrame.dts; + frames.push(currentFrame); + } + currentFrame = [currentNal]; + currentFrame.byteLength = currentNal.data.byteLength; + currentFrame.pts = currentNal.pts; + currentFrame.dts = currentNal.dts; + } else { + // Specifically flag key frames for ease of use later + if (currentNal.nalUnitType === 'slice_layer_without_partitioning_rbsp_idr') { + currentFrame.keyFrame = true; + } + currentFrame.duration = currentNal.dts - currentFrame.dts; + currentFrame.byteLength += currentNal.data.byteLength; + currentFrame.push(currentNal); + } + } + + // For the last frame, use the duration of the previous frame if we + // have nothing better to go on + if (frames.length && (!currentFrame.duration || currentFrame.duration <= 0)) { + currentFrame.duration = frames[frames.length - 1].duration; + } + + // Push the final frame + frames.push(currentFrame); + return frames; + }; + + // Convert an array of frames into an array of Gop with each Gop being composed + // of the frames that make up that Gop + // Also keep track of cummulative data about the Gop from the frames such as the + // Gop duration, starting pts, etc. + this.groupFramesIntoGops_ = function (frames) { + var i, + currentFrame, + currentGop = [], + gops = []; + + // We must pre-set some of the values on the Gop since we + // keep running totals of these values + currentGop.byteLength = 0; + currentGop.nalCount = 0; + currentGop.duration = 0; + currentGop.pts = frames[0].pts; + currentGop.dts = frames[0].dts; + + // store some metadata about all the Gops + gops.byteLength = 0; + gops.nalCount = 0; + gops.duration = 0; + gops.pts = frames[0].pts; + gops.dts = frames[0].dts; + + for (i = 0; i < frames.length; i++) { + currentFrame = frames[i]; + + if (currentFrame.keyFrame) { + // Since the very first frame is expected to be an keyframe + // only push to the gops array when currentGop is not empty + if (currentGop.length) { + gops.push(currentGop); + gops.byteLength += currentGop.byteLength; + gops.nalCount += currentGop.nalCount; + gops.duration += currentGop.duration; + } + + currentGop = [currentFrame]; + currentGop.nalCount = currentFrame.length; + currentGop.byteLength = currentFrame.byteLength; + currentGop.pts = currentFrame.pts; + currentGop.dts = currentFrame.dts; + currentGop.duration = currentFrame.duration; + } else { + currentGop.duration += currentFrame.duration; + currentGop.nalCount += currentFrame.length; + currentGop.byteLength += currentFrame.byteLength; + currentGop.push(currentFrame); + } + } + + if (gops.length && currentGop.duration <= 0) { + currentGop.duration = gops[gops.length - 1].duration; + } + gops.byteLength += currentGop.byteLength; + gops.nalCount += currentGop.nalCount; + gops.duration += currentGop.duration; + + // push the final Gop + gops.push(currentGop); + return gops; + }; + + // generate the track's sample table from an array of gops + this.generateSampleTable_ = function (gops, baseDataOffset) { + var h, + i, + sample, + currentGop, + currentFrame, + dataOffset = baseDataOffset || 0, + samples = []; + + for (h = 0; h < gops.length; h++) { + currentGop = gops[h]; + + for (i = 0; i < currentGop.length; i++) { + currentFrame = currentGop[i]; + + sample = createDefaultSample(); + + sample.dataOffset = dataOffset; + sample.compositionTimeOffset = currentFrame.pts - currentFrame.dts; + sample.duration = currentFrame.duration; + sample.size = 4 * currentFrame.length; // Space for nal unit size + sample.size += currentFrame.byteLength; + + if (currentFrame.keyFrame) { + sample.flags.dependsOn = 2; + } + + dataOffset += sample.size; + + samples.push(sample); + } + } + return samples; + }; + + // generate the track's raw mdat data from an array of gops + this.concatenateNalData_ = function (gops) { + var h, + i, + j, + currentGop, + currentFrame, + currentNal, + dataOffset = 0, + nalsByteLength = gops.byteLength, + numberOfNals = gops.nalCount, + totalByteLength = nalsByteLength + 4 * numberOfNals, + data = new Uint8Array(totalByteLength), + view = new DataView(data.buffer); + + // For each Gop.. + for (h = 0; h < gops.length; h++) { + currentGop = gops[h]; + + // For each Frame.. + for (i = 0; i < currentGop.length; i++) { + currentFrame = currentGop[i]; + + // For each NAL.. + for (j = 0; j < currentFrame.length; j++) { + currentNal = currentFrame[j]; + + view.setUint32(dataOffset, currentNal.data.byteLength); + dataOffset += 4; + data.set(currentNal.data, dataOffset); + dataOffset += currentNal.data.byteLength; + } + } + } + return data; + }; + + // trim gop list to the first gop found that has a matching pts with a gop in the list + // of gopsToAlignWith starting from the START of the list + this.alignGopsAtStart_ = function (gops) { + var alignIndex, gopIndex, align, gop, byteLength, nalCount, duration, alignedGops; + + byteLength = gops.byteLength; + nalCount = gops.nalCount; + duration = gops.duration; + alignIndex = gopIndex = 0; + + while (alignIndex < gopsToAlignWith.length && gopIndex < gops.length) { + align = gopsToAlignWith[alignIndex]; + gop = gops[gopIndex]; + + if (align.pts === gop.pts) { + break; + } + + if (gop.pts > align.pts) { + // this current gop starts after the current gop we want to align on, so increment + // align index + alignIndex++; + continue; + } + + // current gop starts before the current gop we want to align on. so increment gop + // index + gopIndex++; + byteLength -= gop.byteLength; + nalCount -= gop.nalCount; + duration -= gop.duration; + } + + if (gopIndex === 0) { + // no gops to trim + return gops; + } + + if (gopIndex === gops.length) { + // all gops trimmed, skip appending all gops + return null; + } + + alignedGops = gops.slice(gopIndex); + alignedGops.byteLength = byteLength; + alignedGops.duration = duration; + alignedGops.nalCount = nalCount; + alignedGops.pts = alignedGops[0].pts; + alignedGops.dts = alignedGops[0].dts; + + return alignedGops; + }; + + // trim gop list to the first gop found that has a matching pts with a gop in the list + // of gopsToAlignWith starting from the END of the list + this.alignGopsAtEnd_ = function (gops) { + var alignIndex, gopIndex, align, gop, alignEndIndex, matchFound; + + alignIndex = gopsToAlignWith.length - 1; + gopIndex = gops.length - 1; + alignEndIndex = null; + matchFound = false; + + while (alignIndex >= 0 && gopIndex >= 0) { + align = gopsToAlignWith[alignIndex]; + gop = gops[gopIndex]; + + if (align.pts === gop.pts) { + matchFound = true; + break; + } + + if (align.pts > gop.pts) { + alignIndex--; + continue; + } + + if (alignIndex === gopsToAlignWith.length - 1) { + // gop.pts is greater than the last alignment candidate. If no match is found + // by the end of this loop, we still want to append gops that come after this + // point + alignEndIndex = gopIndex; + } + + gopIndex--; + } + + if (!matchFound && alignEndIndex === null) { + return null; + } + + var trimIndex; + + if (matchFound) { + trimIndex = gopIndex; + } else { + trimIndex = alignEndIndex; + } + + if (trimIndex === 0) { + return gops; + } + + var alignedGops = gops.slice(trimIndex); + var metadata = alignedGops.reduce(function (total, gop) { + total.byteLength += gop.byteLength; + total.duration += gop.duration; + total.nalCount += gop.nalCount; + return total; + }, {byteLength: 0, duration: 0, nalCount: 0}); + + alignedGops.byteLength = metadata.byteLength; + alignedGops.duration = metadata.duration; + alignedGops.nalCount = metadata.nalCount; + alignedGops.pts = alignedGops[0].pts; + alignedGops.dts = alignedGops[0].dts; + + return alignedGops; + }; + + this.alignGopsWith = function (newGopsToAlignWith) { + gopsToAlignWith = newGopsToAlignWith; + }; + }; + + _VideoSegmentStream.prototype = new stream(); + + /** + * Store information about the start and end of the track and the + * duration for each frame/sample we process in order to calculate + * the baseMediaDecodeTime + */ + collectDtsInfo = function collectDtsInfo(track, data) { + if (typeof data.pts === 'number') { + if (track.timelineStartInfo.pts === undefined) { + track.timelineStartInfo.pts = data.pts; + } + + if (track.minSegmentPts === undefined) { + track.minSegmentPts = data.pts; + } else { + track.minSegmentPts = Math.min(track.minSegmentPts, data.pts); + } + + if (track.maxSegmentPts === undefined) { + track.maxSegmentPts = data.pts; + } else { + track.maxSegmentPts = Math.max(track.maxSegmentPts, data.pts); + } + } + + if (typeof data.dts === 'number') { + if (track.timelineStartInfo.dts === undefined) { + track.timelineStartInfo.dts = data.dts; + } + + if (track.minSegmentDts === undefined) { + track.minSegmentDts = data.dts; + } else { + track.minSegmentDts = Math.min(track.minSegmentDts, data.dts); + } + + if (track.maxSegmentDts === undefined) { + track.maxSegmentDts = data.dts; + } else { + track.maxSegmentDts = Math.max(track.maxSegmentDts, data.dts); + } + } + }; + + /** + * Clear values used to calculate the baseMediaDecodeTime between + * tracks + */ + clearDtsInfo = function clearDtsInfo(track) { + delete track.minSegmentDts; + delete track.maxSegmentDts; + delete track.minSegmentPts; + delete track.maxSegmentPts; + }; + + /** + * Calculate the track's baseMediaDecodeTime based on the earliest + * DTS the transmuxer has ever seen and the minimum DTS for the + * current track + * @param track {object} track metadata configuration + * @param keepOriginalTimestamps {boolean} If true, keep the timestamps + * in the source; false to adjust the first segment to start at 0. + */ + calculateTrackBaseMediaDecodeTime = function calculateTrackBaseMediaDecodeTime(track, keepOriginalTimestamps) { + var baseMediaDecodeTime, + scale, + minSegmentDts = track.minSegmentDts; + + // Optionally adjust the time so the first segment starts at zero. + if (!keepOriginalTimestamps) { + minSegmentDts -= track.timelineStartInfo.dts; + } + + // track.timelineStartInfo.baseMediaDecodeTime is the location, in time, where + // we want the start of the first segment to be placed + baseMediaDecodeTime = track.timelineStartInfo.baseMediaDecodeTime; + + // Add to that the distance this segment is from the very first + baseMediaDecodeTime += minSegmentDts; + + // baseMediaDecodeTime must not become negative + baseMediaDecodeTime = Math.max(0, baseMediaDecodeTime); + + if (track.type === 'audio') { + // Audio has a different clock equal to the sampling_rate so we need to + // scale the PTS values into the clock rate of the track + scale = track.samplerate / ONE_SECOND_IN_TS$1; + baseMediaDecodeTime *= scale; + baseMediaDecodeTime = Math.floor(baseMediaDecodeTime); + } + + return baseMediaDecodeTime; + }; + + /** + * A Stream that can combine multiple streams (ie. audio & video) + * into a single output segment for MSE. Also supports audio-only + * and video-only streams. + */ + _CoalesceStream = function CoalesceStream(options, metadataStream) { + // Number of Tracks per output segment + // If greater than 1, we combine multiple + // tracks into a single segment + this.numberOfTracks = 0; + this.metadataStream = metadataStream; + + if (typeof options.remux !== 'undefined') { + this.remuxTracks = !!options.remux; + } else { + this.remuxTracks = true; + } + + this.pendingTracks = []; + this.videoTrack = null; + this.pendingBoxes = []; + this.pendingCaptions = []; + this.pendingMetadata = []; + this.pendingBytes = 0; + this.emittedTracks = 0; + + _CoalesceStream.prototype.init.call(this); + + // Take output from multiple + this.push = function (output) { + // buffer incoming captions until the associated video segment + // finishes + if (output.text) { + return this.pendingCaptions.push(output); + } + // buffer incoming id3 tags until the final flush + if (output.frames) { + return this.pendingMetadata.push(output); + } + + // Add this track to the list of pending tracks and store + // important information required for the construction of + // the final segment + this.pendingTracks.push(output.track); + this.pendingBoxes.push(output.boxes); + this.pendingBytes += output.boxes.byteLength; + + if (output.track.type === 'video') { + this.videoTrack = output.track; + } + if (output.track.type === 'audio') { + this.audioTrack = output.track; + } + }; + }; + + _CoalesceStream.prototype = new stream(); + _CoalesceStream.prototype.flush = function (flushSource) { + var offset = 0, + event = { + captions: [], + captionStreams: {}, + metadata: [], + info: {} + }, + caption, + id3, + initSegment, + timelineStartPts = 0, + i; + + if (this.pendingTracks.length < this.numberOfTracks) { + if (flushSource !== 'VideoSegmentStream' && flushSource !== 'AudioSegmentStream') { + // Return because we haven't received a flush from a data-generating + // portion of the segment (meaning that we have only recieved meta-data + // or captions.) + return; + } else if (this.remuxTracks) { + // Return until we have enough tracks from the pipeline to remux (if we + // are remuxing audio and video into a single MP4) + return; + } else if (this.pendingTracks.length === 0) { + // In the case where we receive a flush without any data having been + // received we consider it an emitted track for the purposes of coalescing + // `done` events. + // We do this for the case where there is an audio and video track in the + // segment but no audio data. (seen in several playlists with alternate + // audio tracks and no audio present in the main TS segments.) + this.emittedTracks++; + + if (this.emittedTracks >= this.numberOfTracks) { + this.trigger('done'); + this.emittedTracks = 0; + } + return; + } + } + + if (this.videoTrack) { + timelineStartPts = this.videoTrack.timelineStartInfo.pts; + VIDEO_PROPERTIES.forEach(function (prop) { + event.info[prop] = this.videoTrack[prop]; + }, this); + } else if (this.audioTrack) { + timelineStartPts = this.audioTrack.timelineStartInfo.pts; + AUDIO_PROPERTIES.forEach(function (prop) { + event.info[prop] = this.audioTrack[prop]; + }, this); + } + + if (this.pendingTracks.length === 1) { + event.type = this.pendingTracks[0].type; + } else { + event.type = 'combined'; + } + + this.emittedTracks += this.pendingTracks.length; + + initSegment = mp4Generator.initSegment(this.pendingTracks); + + // Create a new typed array to hold the init segment + event.initSegment = new Uint8Array(initSegment.byteLength); + + // Create an init segment containing a moov + // and track definitions + event.initSegment.set(initSegment); + + // Create a new typed array to hold the moof+mdats + event.data = new Uint8Array(this.pendingBytes); + + // Append each moof+mdat (one per track) together + for (i = 0; i < this.pendingBoxes.length; i++) { + event.data.set(this.pendingBoxes[i], offset); + offset += this.pendingBoxes[i].byteLength; + } + + // Translate caption PTS times into second offsets into the + // video timeline for the segment, and add track info + for (i = 0; i < this.pendingCaptions.length; i++) { + caption = this.pendingCaptions[i]; + caption.startTime = caption.startPts - timelineStartPts; + caption.startTime /= 90e3; + caption.endTime = caption.endPts - timelineStartPts; + caption.endTime /= 90e3; + event.captionStreams[caption.stream] = true; + event.captions.push(caption); + } + + // Translate ID3 frame PTS times into second offsets into the + // video timeline for the segment + for (i = 0; i < this.pendingMetadata.length; i++) { + id3 = this.pendingMetadata[i]; + id3.cueTime = id3.pts - timelineStartPts; + id3.cueTime /= 90e3; + event.metadata.push(id3); + } + // We add this to every single emitted segment even though we only need + // it for the first + event.metadata.dispatchType = this.metadataStream.dispatchType; + + // Reset stream state + this.pendingTracks.length = 0; + this.videoTrack = null; + this.pendingBoxes.length = 0; + this.pendingCaptions.length = 0; + this.pendingBytes = 0; + this.pendingMetadata.length = 0; + + // Emit the built segment + this.trigger('data', event); + + // Only emit `done` if all tracks have been flushed and emitted + if (this.emittedTracks >= this.numberOfTracks) { + this.trigger('done'); + this.emittedTracks = 0; + } + }; + /** + * A Stream that expects MP2T binary data as input and produces + * corresponding media segments, suitable for use with Media Source + * Extension (MSE) implementations that support the ISO BMFF byte + * stream format, like Chrome. + */ + _Transmuxer = function Transmuxer(options) { + var self = this, + hasFlushed = true, + videoTrack, + audioTrack; + + _Transmuxer.prototype.init.call(this); + + options = options || {}; + this.baseMediaDecodeTime = options.baseMediaDecodeTime || 0; + this.transmuxPipeline_ = {}; + + this.setupAacPipeline = function () { + var pipeline = {}; + this.transmuxPipeline_ = pipeline; + + pipeline.type = 'aac'; + pipeline.metadataStream = new m2ts_1.MetadataStream(); + + // set up the parsing pipeline + pipeline.aacStream = new aac(); + pipeline.audioTimestampRolloverStream = new m2ts_1.TimestampRolloverStream('audio'); + pipeline.timedMetadataTimestampRolloverStream = new m2ts_1.TimestampRolloverStream('timed-metadata'); + pipeline.adtsStream = new adts(); + pipeline.coalesceStream = new _CoalesceStream(options, pipeline.metadataStream); + pipeline.headOfPipeline = pipeline.aacStream; + + pipeline.aacStream.pipe(pipeline.audioTimestampRolloverStream).pipe(pipeline.adtsStream); + pipeline.aacStream.pipe(pipeline.timedMetadataTimestampRolloverStream).pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream); + + pipeline.metadataStream.on('timestamp', function (frame) { + pipeline.aacStream.setTimestamp(frame.timeStamp); + }); + + pipeline.aacStream.on('data', function (data) { + if (data.type === 'timed-metadata' && !pipeline.audioSegmentStream) { + audioTrack = audioTrack || { + timelineStartInfo: { + baseMediaDecodeTime: self.baseMediaDecodeTime + }, + codec: 'adts', + type: 'audio' + }; + // hook up the audio segment stream to the first track with aac data + pipeline.coalesceStream.numberOfTracks++; + pipeline.audioSegmentStream = new _AudioSegmentStream(audioTrack, options); + // Set up the final part of the audio pipeline + pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream); + } + }); + + // Re-emit any data coming from the coalesce stream to the outside world + pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data')); + // Let the consumer know we have finished flushing the entire pipeline + pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done')); + }; + + this.setupTsPipeline = function () { + var pipeline = {}; + this.transmuxPipeline_ = pipeline; + + pipeline.type = 'ts'; + pipeline.metadataStream = new m2ts_1.MetadataStream(); + + // set up the parsing pipeline + pipeline.packetStream = new m2ts_1.TransportPacketStream(); + pipeline.parseStream = new m2ts_1.TransportParseStream(); + pipeline.elementaryStream = new m2ts_1.ElementaryStream(); + pipeline.videoTimestampRolloverStream = new m2ts_1.TimestampRolloverStream('video'); + pipeline.audioTimestampRolloverStream = new m2ts_1.TimestampRolloverStream('audio'); + pipeline.timedMetadataTimestampRolloverStream = new m2ts_1.TimestampRolloverStream('timed-metadata'); + pipeline.adtsStream = new adts(); + pipeline.h264Stream = new H264Stream(); + pipeline.captionStream = new m2ts_1.CaptionStream(); + pipeline.coalesceStream = new _CoalesceStream(options, pipeline.metadataStream); + pipeline.headOfPipeline = pipeline.packetStream; + + // disassemble MPEG2-TS packets into elementary streams + pipeline.packetStream.pipe(pipeline.parseStream).pipe(pipeline.elementaryStream); + + // !!THIS ORDER IS IMPORTANT!! + // demux the streams + pipeline.elementaryStream.pipe(pipeline.videoTimestampRolloverStream).pipe(pipeline.h264Stream); + pipeline.elementaryStream.pipe(pipeline.audioTimestampRolloverStream).pipe(pipeline.adtsStream); + + pipeline.elementaryStream.pipe(pipeline.timedMetadataTimestampRolloverStream).pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream); + + // Hook up CEA-608/708 caption stream + pipeline.h264Stream.pipe(pipeline.captionStream).pipe(pipeline.coalesceStream); + + pipeline.elementaryStream.on('data', function (data) { + var i; + + if (data.type === 'metadata') { + i = data.tracks.length; + + // scan the tracks listed in the metadata + while (i--) { + if (!videoTrack && data.tracks[i].type === 'video') { + videoTrack = data.tracks[i]; + videoTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime; + } else if (!audioTrack && data.tracks[i].type === 'audio') { + audioTrack = data.tracks[i]; + audioTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime; + } + } + + // hook up the video segment stream to the first track with h264 data + if (videoTrack && !pipeline.videoSegmentStream) { + pipeline.coalesceStream.numberOfTracks++; + pipeline.videoSegmentStream = new _VideoSegmentStream(videoTrack, options); + + pipeline.videoSegmentStream.on('timelineStartInfo', function (timelineStartInfo) { + // When video emits timelineStartInfo data after a flush, we forward that + // info to the AudioSegmentStream, if it exists, because video timeline + // data takes precedence. + if (audioTrack) { + audioTrack.timelineStartInfo = timelineStartInfo; + // On the first segment we trim AAC frames that exist before the + // very earliest DTS we have seen in video because Chrome will + // interpret any video track with a baseMediaDecodeTime that is + // non-zero as a gap. + pipeline.audioSegmentStream.setEarliestDts(timelineStartInfo.dts); + } + }); + + pipeline.videoSegmentStream.on('processedGopsInfo', self.trigger.bind(self, 'gopInfo')); + + pipeline.videoSegmentStream.on('baseMediaDecodeTime', function (baseMediaDecodeTime) { + if (audioTrack) { + pipeline.audioSegmentStream.setVideoBaseMediaDecodeTime(baseMediaDecodeTime); + } + }); + + // Set up the final part of the video pipeline + pipeline.h264Stream.pipe(pipeline.videoSegmentStream).pipe(pipeline.coalesceStream); + } + + if (audioTrack && !pipeline.audioSegmentStream) { + // hook up the audio segment stream to the first track with aac data + pipeline.coalesceStream.numberOfTracks++; + pipeline.audioSegmentStream = new _AudioSegmentStream(audioTrack, options); + + // Set up the final part of the audio pipeline + pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream); + } + } + }); + + // Re-emit any data coming from the coalesce stream to the outside world + pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data')); + // Let the consumer know we have finished flushing the entire pipeline + pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done')); + }; + + // hook up the segment streams once track metadata is delivered + this.setBaseMediaDecodeTime = function (baseMediaDecodeTime) { + var pipeline = this.transmuxPipeline_; + + this.baseMediaDecodeTime = baseMediaDecodeTime; + if (audioTrack) { + audioTrack.timelineStartInfo.dts = undefined; + audioTrack.timelineStartInfo.pts = undefined; + clearDtsInfo(audioTrack); + audioTrack.timelineStartInfo.baseMediaDecodeTime = baseMediaDecodeTime; + if (pipeline.audioTimestampRolloverStream) { + pipeline.audioTimestampRolloverStream.discontinuity(); + } + } + if (videoTrack) { + if (pipeline.videoSegmentStream) { + pipeline.videoSegmentStream.gopCache_ = []; + pipeline.videoTimestampRolloverStream.discontinuity(); + } + videoTrack.timelineStartInfo.dts = undefined; + videoTrack.timelineStartInfo.pts = undefined; + clearDtsInfo(videoTrack); + pipeline.captionStream.reset(); + videoTrack.timelineStartInfo.baseMediaDecodeTime = baseMediaDecodeTime; + } + + if (pipeline.timedMetadataTimestampRolloverStream) { + pipeline.timedMetadataTimestampRolloverStream.discontinuity(); + } + }; + + this.setAudioAppendStart = function (timestamp) { + if (audioTrack) { + this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(timestamp); + } + }; + + this.alignGopsWith = function (gopsToAlignWith) { + if (videoTrack && this.transmuxPipeline_.videoSegmentStream) { + this.transmuxPipeline_.videoSegmentStream.alignGopsWith(gopsToAlignWith); + } + }; + + // feed incoming data to the front of the parsing pipeline + this.push = function (data) { + if (hasFlushed) { + var isAac = isLikelyAacData(data); + + if (isAac && this.transmuxPipeline_.type !== 'aac') { + this.setupAacPipeline(); + } else if (!isAac && this.transmuxPipeline_.type !== 'ts') { + this.setupTsPipeline(); + } + hasFlushed = false; + } + this.transmuxPipeline_.headOfPipeline.push(data); + }; + + // flush any buffered data + this.flush = function () { + hasFlushed = true; + // Start at the top of the pipeline and flush all pending work + this.transmuxPipeline_.headOfPipeline.flush(); + }; + + // Caption data has to be reset when seeking outside buffered range + this.resetCaptions = function () { + if (this.transmuxPipeline_.captionStream) { + this.transmuxPipeline_.captionStream.reset(); + } + }; + }; + _Transmuxer.prototype = new stream(); + + var transmuxer = { + Transmuxer: _Transmuxer, + VideoSegmentStream: _VideoSegmentStream, + AudioSegmentStream: _AudioSegmentStream, + AUDIO_PROPERTIES: AUDIO_PROPERTIES, + VIDEO_PROPERTIES: VIDEO_PROPERTIES + }; + + var mp4 = { + generator: mp4Generator, + Transmuxer: transmuxer.Transmuxer, + AudioSegmentStream: transmuxer.AudioSegmentStream, + VideoSegmentStream: transmuxer.VideoSegmentStream + }; + + var classCallCheck$$1 = function classCallCheck$$1(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + var createClass$$1 = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + /** + * @file transmuxer-worker.js + */ + + /** + * Re-emits transmuxer events by converting them into messages to the + * world outside the worker. + * + * @param {Object} transmuxer the transmuxer to wire events on + * @private + */ + var wireTransmuxerEvents = function wireTransmuxerEvents(transmuxer) { + transmuxer.on('data', function (segment) { + // transfer ownership of the underlying ArrayBuffer + // instead of doing a copy to save memory + // ArrayBuffers are transferable but generic TypedArrays are not + // @link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects) + var initArray = segment.initSegment; + + segment.initSegment = { + data: initArray.buffer, + byteOffset: initArray.byteOffset, + byteLength: initArray.byteLength + }; + + var typedArray = segment.data; + + segment.data = typedArray.buffer; + window_1$$1.postMessage({ + action: 'data', + segment: segment, + byteOffset: typedArray.byteOffset, + byteLength: typedArray.byteLength + }, [segment.data]); + }); + + if (transmuxer.captionStream) { + transmuxer.captionStream.on('data', function (caption) { + window_1$$1.postMessage({ + action: 'caption', + data: caption + }); + }); + } + + transmuxer.on('done', function (data) { + window_1$$1.postMessage({action: 'done'}); + }); + + transmuxer.on('gopInfo', function (gopInfo) { + window_1$$1.postMessage({ + action: 'gopInfo', + gopInfo: gopInfo + }); + }); + }; + + /** + * All incoming messages route through this hash. If no function exists + * to handle an incoming message, then we ignore the message. + * + * @class MessageHandlers + * @param {Object} options the options to initialize with + */ + + var MessageHandlers = function () { + function MessageHandlers(options) { + classCallCheck$$1(this, MessageHandlers); + + this.options = options || {}; + this.init(); + } + + /** + * initialize our web worker and wire all the events. + */ + + createClass$$1(MessageHandlers, [{ + key: 'init', + value: function init() { + if (this.transmuxer) { + this.transmuxer.dispose(); + } + this.transmuxer = new mp4.Transmuxer(this.options); + wireTransmuxerEvents(this.transmuxer); + } + + /** + * Adds data (a ts segment) to the start of the transmuxer pipeline for + * processing. + * + * @param {ArrayBuffer} data data to push into the muxer + */ + + }, { + key: 'push', + value: function push(data) { + // Cast array buffer to correct type for transmuxer + var segment = new Uint8Array(data.data, data.byteOffset, data.byteLength); + + this.transmuxer.push(segment); + } + + /** + * Recreate the transmuxer so that the next segment added via `push` + * start with a fresh transmuxer. + */ + + }, { + key: 'reset', + value: function reset() { + this.init(); + } + + /** + * Set the value that will be used as the `baseMediaDecodeTime` time for the + * next segment pushed in. Subsequent segments will have their `baseMediaDecodeTime` + * set relative to the first based on the PTS values. + * + * @param {Object} data used to set the timestamp offset in the muxer + */ + + }, { + key: 'setTimestampOffset', + value: function setTimestampOffset(data) { + var timestampOffset = data.timestampOffset || 0; + + this.transmuxer.setBaseMediaDecodeTime(Math.round(timestampOffset * 90000)); + } + }, { + key: 'setAudioAppendStart', + value: function setAudioAppendStart(data) { + this.transmuxer.setAudioAppendStart(Math.ceil(data.appendStart * 90000)); + } + + /** + * Forces the pipeline to finish processing the last segment and emit it's + * results. + * + * @param {Object} data event data, not really used + */ + + }, { + key: 'flush', + value: function flush(data) { + this.transmuxer.flush(); + } + }, { + key: 'resetCaptions', + value: function resetCaptions() { + this.transmuxer.resetCaptions(); + } + }, { + key: 'alignGopsWith', + value: function alignGopsWith(data) { + this.transmuxer.alignGopsWith(data.gopsToAlignWith.slice()); + } + }]); + return MessageHandlers; + }(); + + /** + * Our web wroker interface so that things can talk to mux.js + * that will be running in a web worker. the scope is passed to this by + * webworkify. + * + * @param {Object} self the scope for the web worker + */ + + var TransmuxerWorker = function TransmuxerWorker(self) { + self.onmessage = function (event) { + if (event.data.action === 'init' && event.data.options) { + this.messageHandlers = new MessageHandlers(event.data.options); + return; + } + + if (!this.messageHandlers) { + this.messageHandlers = new MessageHandlers(); + } + + if (event.data && event.data.action && event.data.action !== 'init') { + if (this.messageHandlers[event.data.action]) { + this.messageHandlers[event.data.action](event.data); + } + } + }; + }; + + var transmuxerWorker = new TransmuxerWorker(self); + + return transmuxerWorker; + }(); + }); + + /** + * @file codec-utils.js + */ + + /** + * Check if a codec string refers to an audio codec. + * + * @param {String} codec codec string to check + * @return {Boolean} if this is an audio codec + * @private + */ + var isAudioCodec = function isAudioCodec(codec) { + return (/mp4a\.\d+.\d+/i.test(codec) + ); + }; + + /** + * Check if a codec string refers to a video codec. + * + * @param {String} codec codec string to check + * @return {Boolean} if this is a video codec + * @private + */ + var isVideoCodec = function isVideoCodec(codec) { + return (/avc1\.[\da-f]+/i.test(codec) + ); + }; + + /** + * Parse a content type header into a type and parameters + * object + * + * @param {String} type the content type header + * @return {Object} the parsed content-type + * @private + */ + var parseContentType = function parseContentType(type) { + var object = {type: '', parameters: {}}; + var parameters = type.trim().split(';'); + + // first parameter should always be content-type + object.type = parameters.shift().trim(); + parameters.forEach(function (parameter) { + var pair = parameter.trim().split('='); + + if (pair.length > 1) { + var name = pair[0].replace(/"/g, '').trim(); + var value = pair[1].replace(/"/g, '').trim(); + + object.parameters[name] = value; + } + }); + + return object; + }; + + /** + * Replace the old apple-style `avc1.<dd>.<dd>` codec string with the standard + * `avc1.<hhhhhh>` + * + * @param {Array} codecs an array of codec strings to fix + * @return {Array} the translated codec array + * @private + */ + var translateLegacyCodecs = function translateLegacyCodecs(codecs) { + return codecs.map(function (codec) { + return codec.replace(/avc1\.(\d+)\.(\d+)/i, function (orig, profile, avcLevel) { + var profileHex = ('00' + Number(profile).toString(16)).slice(-2); + var avcLevelHex = ('00' + Number(avcLevel).toString(16)).slice(-2); + + return 'avc1.' + profileHex + '00' + avcLevelHex; + }); + }); + }; + + /** + * @file virtual-source-buffer.js + */ + + // We create a wrapper around the SourceBuffer so that we can manage the + // state of the `updating` property manually. We have to do this because + // Firefox changes `updating` to false long before triggering `updateend` + // events and that was causing strange problems in videojs-contrib-hls + var makeWrappedSourceBuffer = function makeWrappedSourceBuffer(mediaSource, mimeType) { + var sourceBuffer = mediaSource.addSourceBuffer(mimeType); + var wrapper = Object.create(null); + + wrapper.updating = false; + wrapper.realBuffer_ = sourceBuffer; + + var _loop = function _loop(key) { + if (typeof sourceBuffer[key] === 'function') { + wrapper[key] = function () { + return sourceBuffer[key].apply(sourceBuffer, arguments); + }; + } else if (typeof wrapper[key] === 'undefined') { + Object.defineProperty(wrapper, key, { + get: function get$$1() { + return sourceBuffer[key]; + }, + set: function set$$1(v) { + return sourceBuffer[key] = v; + } + }); + } + }; + + for (var key in sourceBuffer) { + _loop(key); + } + + return wrapper; + }; + + /** + * Returns a list of gops in the buffer that have a pts value of 3 seconds or more in + * front of current time. + * + * @param {Array} buffer + * The current buffer of gop information + * @param {Player} player + * The player instance + * @param {Double} mapping + * Offset to map display time to stream presentation time + * @return {Array} + * List of gops considered safe to append over + */ + var gopsSafeToAlignWith = function gopsSafeToAlignWith(buffer, player, mapping) { + if (!player || !buffer.length) { + return []; + } + + // pts value for current time + 3 seconds to give a bit more wiggle room + var currentTimePts = Math.ceil((player.currentTime() - mapping + 3) * 90000); + + var i = void 0; + + for (i = 0; i < buffer.length; i++) { + if (buffer[i].pts > currentTimePts) { + break; + } + } + + return buffer.slice(i); + }; + + /** + * Appends gop information (timing and byteLength) received by the transmuxer for the + * gops appended in the last call to appendBuffer + * + * @param {Array} buffer + * The current buffer of gop information + * @param {Array} gops + * List of new gop information + * @param {boolean} replace + * If true, replace the buffer with the new gop information. If false, append the + * new gop information to the buffer in the right location of time. + * @return {Array} + * Updated list of gop information + */ + var updateGopBuffer = function updateGopBuffer(buffer, gops, replace) { + if (!gops.length) { + return buffer; + } + + if (replace) { + // If we are in safe append mode, then completely overwrite the gop buffer + // with the most recent appeneded data. This will make sure that when appending + // future segments, we only try to align with gops that are both ahead of current + // time and in the last segment appended. + return gops.slice(); + } + + var start = gops[0].pts; + + var i = 0; + + for (i; i < buffer.length; i++) { + if (buffer[i].pts >= start) { + break; + } + } + + return buffer.slice(0, i).concat(gops); + }; + + /** + * Removes gop information in buffer that overlaps with provided start and end + * + * @param {Array} buffer + * The current buffer of gop information + * @param {Double} start + * position to start the remove at + * @param {Double} end + * position to end the remove at + * @param {Double} mapping + * Offset to map display time to stream presentation time + */ + var removeGopBuffer = function removeGopBuffer(buffer, start, end, mapping) { + var startPts = Math.ceil((start - mapping) * 90000); + var endPts = Math.ceil((end - mapping) * 90000); + var updatedBuffer = buffer.slice(); + + var i = buffer.length; + + while (i--) { + if (buffer[i].pts <= endPts) { + break; + } + } + + if (i === -1) { + // no removal because end of remove range is before start of buffer + return updatedBuffer; + } + + var j = i + 1; + + while (j--) { + if (buffer[j].pts <= startPts) { + break; + } + } + + // clamp remove range start to 0 index + j = Math.max(j, 0); + + updatedBuffer.splice(j, i - j + 1); + + return updatedBuffer; + }; + + /** + * VirtualSourceBuffers exist so that we can transmux non native formats + * into a native format, but keep the same api as a native source buffer. + * It creates a transmuxer, that works in its own thread (a web worker) and + * that transmuxer muxes the data into a native format. VirtualSourceBuffer will + * then send all of that data to the naive sourcebuffer so that it is + * indestinguishable from a natively supported format. + * + * @param {HtmlMediaSource} mediaSource the parent mediaSource + * @param {Array} codecs array of codecs that we will be dealing with + * @class VirtualSourceBuffer + * @extends video.js.EventTarget + */ + + var VirtualSourceBuffer = function (_videojs$EventTarget) { + inherits(VirtualSourceBuffer, _videojs$EventTarget); + + function VirtualSourceBuffer(mediaSource, codecs) { + classCallCheck(this, VirtualSourceBuffer); + + var _this7 = possibleConstructorReturn(this, _videojs$EventTarget.call(this, videojs$1.EventTarget)); + + _this7.timestampOffset_ = 0; + _this7.pendingBuffers_ = []; + _this7.bufferUpdating_ = false; + + _this7.mediaSource_ = mediaSource; + _this7.codecs_ = codecs; + _this7.audioCodec_ = null; + _this7.videoCodec_ = null; + _this7.audioDisabled_ = false; + _this7.appendAudioInitSegment_ = true; + _this7.gopBuffer_ = []; + _this7.timeMapping_ = 0; + _this7.safeAppend_ = videojs$1.browser.IE_VERSION >= 11; + + var options = { + remux: false, + alignGopsAtEnd: _this7.safeAppend_ + }; + + _this7.codecs_.forEach(function (codec) { + if (isAudioCodec(codec)) { + _this7.audioCodec_ = codec; + } else if (isVideoCodec(codec)) { + _this7.videoCodec_ = codec; + } + }); + + // append muxed segments to their respective native buffers as + // soon as they are available + _this7.transmuxer_ = new TransmuxWorker(); + _this7.transmuxer_.postMessage({action: 'init', options: options}); + + _this7.transmuxer_.onmessage = function (event) { + if (event.data.action === 'data') { + return _this7.data_(event); + } + + if (event.data.action === 'done') { + return _this7.done_(event); + } + + if (event.data.action === 'gopInfo') { + return _this7.appendGopInfo_(event); + } + }; + + // this timestampOffset is a property with the side-effect of resetting + // baseMediaDecodeTime in the transmuxer on the setter + Object.defineProperty(_this7, 'timestampOffset', { + get: function get$$1() { + return this.timestampOffset_; + }, + set: function set$$1(val) { + if (typeof val === 'number' && val >= 0) { + this.timestampOffset_ = val; + this.appendAudioInitSegment_ = true; + + // reset gop buffer on timestampoffset as this signals a change in timeline + this.gopBuffer_.length = 0; + this.timeMapping_ = 0; + + // We have to tell the transmuxer to set the baseMediaDecodeTime to + // the desired timestampOffset for the next segment + this.transmuxer_.postMessage({ + action: 'setTimestampOffset', + timestampOffset: val + }); + } + } + }); + + // setting the append window affects both source buffers + Object.defineProperty(_this7, 'appendWindowStart', { + get: function get$$1() { + return (this.videoBuffer_ || this.audioBuffer_).appendWindowStart; + }, + set: function set$$1(start) { + if (this.videoBuffer_) { + this.videoBuffer_.appendWindowStart = start; + } + if (this.audioBuffer_) { + this.audioBuffer_.appendWindowStart = start; + } + } + }); + + // this buffer is "updating" if either of its native buffers are + Object.defineProperty(_this7, 'updating', { + get: function get$$1() { + return !!(this.bufferUpdating_ || !this.audioDisabled_ && this.audioBuffer_ && this.audioBuffer_.updating || this.videoBuffer_ && this.videoBuffer_.updating); + } + }); + + // the buffered property is the intersection of the buffered + // ranges of the native source buffers + Object.defineProperty(_this7, 'buffered', { + get: function get$$1() { + var start = null; + var end = null; + var arity = 0; + var extents = []; + var ranges = []; + + // neither buffer has been created yet + if (!this.videoBuffer_ && !this.audioBuffer_) { + return videojs$1.createTimeRange(); + } + + // only one buffer is configured + if (!this.videoBuffer_) { + return this.audioBuffer_.buffered; + } + if (!this.audioBuffer_) { + return this.videoBuffer_.buffered; + } + + // both buffers are configured + if (this.audioDisabled_) { + return this.videoBuffer_.buffered; + } + + // both buffers are empty + if (this.videoBuffer_.buffered.length === 0 && this.audioBuffer_.buffered.length === 0) { + return videojs$1.createTimeRange(); + } + + // Handle the case where we have both buffers and create an + // intersection of the two + var videoBuffered = this.videoBuffer_.buffered; + var audioBuffered = this.audioBuffer_.buffered; + var count = videoBuffered.length; + + // A) Gather up all start and end times + while (count--) { + extents.push({time: videoBuffered.start(count), type: 'start'}); + extents.push({time: videoBuffered.end(count), type: 'end'}); + } + count = audioBuffered.length; + while (count--) { + extents.push({time: audioBuffered.start(count), type: 'start'}); + extents.push({time: audioBuffered.end(count), type: 'end'}); + } + // B) Sort them by time + extents.sort(function (a, b) { + return a.time - b.time; + }); + + // C) Go along one by one incrementing arity for start and decrementing + // arity for ends + for (count = 0; count < extents.length; count++) { + if (extents[count].type === 'start') { + arity++; + + // D) If arity is ever incremented to 2 we are entering an + // overlapping range + if (arity === 2) { + start = extents[count].time; + } + } else if (extents[count].type === 'end') { + arity--; + + // E) If arity is ever decremented to 1 we leaving an + // overlapping range + if (arity === 1) { + end = extents[count].time; + } + } + + // F) Record overlapping ranges + if (start !== null && end !== null) { + ranges.push([start, end]); + start = null; + end = null; + } + } + + return videojs$1.createTimeRanges(ranges); + } + }); + return _this7; + } + + /** + * When we get a data event from the transmuxer + * we call this function and handle the data that + * was sent to us + * + * @private + * @param {Event} event the data event from the transmuxer + */ + + + VirtualSourceBuffer.prototype.data_ = function data_(event) { + var segment = event.data.segment; + + // Cast ArrayBuffer to TypedArray + segment.data = new Uint8Array(segment.data, event.data.byteOffset, event.data.byteLength); + + segment.initSegment = new Uint8Array(segment.initSegment.data, segment.initSegment.byteOffset, segment.initSegment.byteLength); + + createTextTracksIfNecessary(this, this.mediaSource_, segment); + + // Add the segments to the pendingBuffers array + this.pendingBuffers_.push(segment); + return; + }; + + /** + * When we get a done event from the transmuxer + * we call this function and we process all + * of the pending data that we have been saving in the + * data_ function + * + * @private + * @param {Event} event the done event from the transmuxer + */ + + + VirtualSourceBuffer.prototype.done_ = function done_(event) { + // Don't process and append data if the mediaSource is closed + if (this.mediaSource_.readyState === 'closed') { + this.pendingBuffers_.length = 0; + return; + } + + // All buffers should have been flushed from the muxer + // start processing anything we have received + this.processPendingSegments_(); + return; + }; + + /** + * Create our internal native audio/video source buffers and add + * event handlers to them with the following conditions: + * 1. they do not already exist on the mediaSource + * 2. this VSB has a codec for them + * + * @private + */ + + + VirtualSourceBuffer.prototype.createRealSourceBuffers_ = function createRealSourceBuffers_() { + var _this8 = this; + + var types = ['audio', 'video']; + + types.forEach(function (type) { + // Don't create a SourceBuffer of this type if we don't have a + // codec for it + if (!_this8[type + 'Codec_']) { + return; + } + + // Do nothing if a SourceBuffer of this type already exists + if (_this8[type + 'Buffer_']) { + return; + } + + var buffer = null; + + // If the mediasource already has a SourceBuffer for the codec + // use that + if (_this8.mediaSource_[type + 'Buffer_']) { + buffer = _this8.mediaSource_[type + 'Buffer_']; + // In multiple audio track cases, the audio source buffer is disabled + // on the main VirtualSourceBuffer by the HTMLMediaSource much earlier + // than createRealSourceBuffers_ is called to create the second + // VirtualSourceBuffer because that happens as a side-effect of + // videojs-contrib-hls starting the audioSegmentLoader. As a result, + // the audioBuffer is essentially "ownerless" and no one will toggle + // the `updating` state back to false once the `updateend` event is received + // + // Setting `updating` to false manually will work around this + // situation and allow work to continue + buffer.updating = false; + } else { + var codecProperty = type + 'Codec_'; + var mimeType = type + '/mp4;codecs="' + _this8[codecProperty] + '"'; + + buffer = makeWrappedSourceBuffer(_this8.mediaSource_.nativeMediaSource_, mimeType); + + _this8.mediaSource_[type + 'Buffer_'] = buffer; + } + + _this8[type + 'Buffer_'] = buffer; + + // Wire up the events to the SourceBuffer + ['update', 'updatestart', 'updateend'].forEach(function (event) { + buffer.addEventListener(event, function () { + // if audio is disabled + if (type === 'audio' && _this8.audioDisabled_) { + return; + } + + if (event === 'updateend') { + _this8[type + 'Buffer_'].updating = false; + } + + var shouldTrigger = types.every(function (t) { + // skip checking audio's updating status if audio + // is not enabled + if (t === 'audio' && _this8.audioDisabled_) { + return true; + } + // if the other type if updating we don't trigger + if (type !== t && _this8[t + 'Buffer_'] && _this8[t + 'Buffer_'].updating) { + return false; + } + return true; + }); + + if (shouldTrigger) { + return _this8.trigger(event); + } + }); + }); + }); + }; + + /** + * Emulate the native mediasource function, but our function will + * send all of the proposed segments to the transmuxer so that we + * can transmux them before we append them to our internal + * native source buffers in the correct format. + * + * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/appendBuffer + * @param {Uint8Array} segment the segment to append to the buffer + */ + + + VirtualSourceBuffer.prototype.appendBuffer = function appendBuffer(segment) { + // Start the internal "updating" state + this.bufferUpdating_ = true; + + if (this.audioBuffer_ && this.audioBuffer_.buffered.length) { + var audioBuffered = this.audioBuffer_.buffered; + + this.transmuxer_.postMessage({ + action: 'setAudioAppendStart', + appendStart: audioBuffered.end(audioBuffered.length - 1) + }); + } + + if (this.videoBuffer_) { + this.transmuxer_.postMessage({ + action: 'alignGopsWith', + gopsToAlignWith: gopsSafeToAlignWith(this.gopBuffer_, this.mediaSource_.player_, this.timeMapping_) + }); + } + + this.transmuxer_.postMessage({ + action: 'push', + // Send the typed-array of data as an ArrayBuffer so that + // it can be sent as a "Transferable" and avoid the costly + // memory copy + data: segment.buffer, + + // To recreate the original typed-array, we need information + // about what portion of the ArrayBuffer it was a view into + byteOffset: segment.byteOffset, + byteLength: segment.byteLength + }, [segment.buffer]); + this.transmuxer_.postMessage({action: 'flush'}); + }; + + /** + * Appends gop information (timing and byteLength) received by the transmuxer for the + * gops appended in the last call to appendBuffer + * + * @param {Event} event + * The gopInfo event from the transmuxer + * @param {Array} event.data.gopInfo + * List of gop info to append + */ + + + VirtualSourceBuffer.prototype.appendGopInfo_ = function appendGopInfo_(event) { + this.gopBuffer_ = updateGopBuffer(this.gopBuffer_, event.data.gopInfo, this.safeAppend_); + }; + + /** + * Emulate the native mediasource function and remove parts + * of the buffer from any of our internal buffers that exist + * + * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/remove + * @param {Double} start position to start the remove at + * @param {Double} end position to end the remove at + */ + + + VirtualSourceBuffer.prototype.remove = function remove(start, end) { + if (this.videoBuffer_) { + this.videoBuffer_.updating = true; + this.videoBuffer_.remove(start, end); + this.gopBuffer_ = removeGopBuffer(this.gopBuffer_, start, end, this.timeMapping_); + } + if (!this.audioDisabled_ && this.audioBuffer_) { + this.audioBuffer_.updating = true; + this.audioBuffer_.remove(start, end); + } + + // Remove Metadata Cues (id3) + removeCuesFromTrack(start, end, this.metadataTrack_); + + // Remove Any Captions + if (this.inbandTextTracks_) { + for (var track in this.inbandTextTracks_) { + removeCuesFromTrack(start, end, this.inbandTextTracks_[track]); + } + } + }; + + /** + * Process any segments that the muxer has output + * Concatenate segments together based on type and append them into + * their respective sourceBuffers + * + * @private + */ + + + VirtualSourceBuffer.prototype.processPendingSegments_ = function processPendingSegments_() { + var sortedSegments = { + video: { + segments: [], + bytes: 0 + }, + audio: { + segments: [], + bytes: 0 + }, + captions: [], + metadata: [] + }; + + // Sort segments into separate video/audio arrays and + // keep track of their total byte lengths + sortedSegments = this.pendingBuffers_.reduce(function (segmentObj, segment) { + var type = segment.type; + var data = segment.data; + var initSegment = segment.initSegment; + + segmentObj[type].segments.push(data); + segmentObj[type].bytes += data.byteLength; + + segmentObj[type].initSegment = initSegment; + + // Gather any captions into a single array + if (segment.captions) { + segmentObj.captions = segmentObj.captions.concat(segment.captions); + } + + if (segment.info) { + segmentObj[type].info = segment.info; + } + + // Gather any metadata into a single array + if (segment.metadata) { + segmentObj.metadata = segmentObj.metadata.concat(segment.metadata); + } + + return segmentObj; + }, sortedSegments); + + // Create the real source buffers if they don't exist by now since we + // finally are sure what tracks are contained in the source + if (!this.videoBuffer_ && !this.audioBuffer_) { + // Remove any codecs that may have been specified by default but + // are no longer applicable now + if (sortedSegments.video.bytes === 0) { + this.videoCodec_ = null; + } + if (sortedSegments.audio.bytes === 0) { + this.audioCodec_ = null; + } + + this.createRealSourceBuffers_(); + } + + if (sortedSegments.audio.info) { + this.mediaSource_.trigger({type: 'audioinfo', info: sortedSegments.audio.info}); + } + if (sortedSegments.video.info) { + this.mediaSource_.trigger({type: 'videoinfo', info: sortedSegments.video.info}); + } + + if (this.appendAudioInitSegment_) { + if (!this.audioDisabled_ && this.audioBuffer_) { + sortedSegments.audio.segments.unshift(sortedSegments.audio.initSegment); + sortedSegments.audio.bytes += sortedSegments.audio.initSegment.byteLength; + } + this.appendAudioInitSegment_ = false; + } + + var triggerUpdateend = false; + + // Merge multiple video and audio segments into one and append + if (this.videoBuffer_ && sortedSegments.video.bytes) { + sortedSegments.video.segments.unshift(sortedSegments.video.initSegment); + sortedSegments.video.bytes += sortedSegments.video.initSegment.byteLength; + this.concatAndAppendSegments_(sortedSegments.video, this.videoBuffer_); + // TODO: are video tracks the only ones with text tracks? + addTextTrackData(this, sortedSegments.captions, sortedSegments.metadata); + } else if (this.videoBuffer_ && (this.audioDisabled_ || !this.audioBuffer_)) { + // The transmuxer did not return any bytes of video, meaning it was all trimmed + // for gop alignment. Since we have a video buffer and audio is disabled, updateend + // will never be triggered by this source buffer, which will cause contrib-hls + // to be stuck forever waiting for updateend. If audio is not disabled, updateend + // will be triggered by the audio buffer, which will be sent upwards since the video + // buffer will not be in an updating state. + triggerUpdateend = true; + } + + if (!this.audioDisabled_ && this.audioBuffer_) { + this.concatAndAppendSegments_(sortedSegments.audio, this.audioBuffer_); + } + + this.pendingBuffers_.length = 0; + + if (triggerUpdateend) { + this.trigger('updateend'); + } + + // We are no longer in the internal "updating" state + this.bufferUpdating_ = false; + }; + + /** + * Combine all segments into a single Uint8Array and then append them + * to the destination buffer + * + * @param {Object} segmentObj + * @param {SourceBuffer} destinationBuffer native source buffer to append data to + * @private + */ + + + VirtualSourceBuffer.prototype.concatAndAppendSegments_ = function concatAndAppendSegments_(segmentObj, destinationBuffer) { + var offset = 0; + var tempBuffer = void 0; + + if (segmentObj.bytes) { + tempBuffer = new Uint8Array(segmentObj.bytes); + + // Combine the individual segments into one large typed-array + segmentObj.segments.forEach(function (segment) { + tempBuffer.set(segment, offset); + offset += segment.byteLength; + }); + + try { + destinationBuffer.updating = true; + destinationBuffer.appendBuffer(tempBuffer); + } catch (error) { + if (this.mediaSource_.player_) { + this.mediaSource_.player_.error({ + code: -3, + type: 'APPEND_BUFFER_ERR', + message: error.message, + originalError: error + }); + } + } + } + }; + + /** + * Emulate the native mediasource function. abort any soureBuffer + * actions and throw out any un-appended data. + * + * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/abort + */ + + + VirtualSourceBuffer.prototype.abort = function abort() { + if (this.videoBuffer_) { + this.videoBuffer_.abort(); + } + if (!this.audioDisabled_ && this.audioBuffer_) { + this.audioBuffer_.abort(); + } + if (this.transmuxer_) { + this.transmuxer_.postMessage({action: 'reset'}); + } + this.pendingBuffers_.length = 0; + this.bufferUpdating_ = false; + }; + + return VirtualSourceBuffer; + }(videojs$1.EventTarget); + + /** + * @file html-media-source.js + */ + + /** + * Our MediaSource implementation in HTML, mimics native + * MediaSource where/if possible. + * + * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource + * @class HtmlMediaSource + * @extends videojs.EventTarget + */ + + + var HtmlMediaSource = function (_videojs$EventTarget2) { + inherits(HtmlMediaSource, _videojs$EventTarget2); + + function HtmlMediaSource() { + classCallCheck(this, HtmlMediaSource); + + var _this9 = possibleConstructorReturn(this, _videojs$EventTarget2.call(this)); + + var property = void 0; + + _this9.nativeMediaSource_ = new window_1.MediaSource(); + // delegate to the native MediaSource's methods by default + for (property in _this9.nativeMediaSource_) { + if (!(property in HtmlMediaSource.prototype) && typeof _this9.nativeMediaSource_[property] === 'function') { + _this9[property] = _this9.nativeMediaSource_[property].bind(_this9.nativeMediaSource_); + } + } + + // emulate `duration` and `seekable` until seeking can be + // handled uniformly for live streams + // see https://github.com/w3c/media-source/issues/5 + _this9.duration_ = NaN; + Object.defineProperty(_this9, 'duration', { + get: function get$$1() { + if (this.duration_ === Infinity) { + return this.duration_; + } + return this.nativeMediaSource_.duration; + }, + set: function set$$1(duration) { + this.duration_ = duration; + if (duration !== Infinity) { + this.nativeMediaSource_.duration = duration; + return; + } + } + }); + Object.defineProperty(_this9, 'seekable', { + get: function get$$1() { + if (this.duration_ === Infinity) { + return videojs$1.createTimeRanges([[0, this.nativeMediaSource_.duration]]); + } + return this.nativeMediaSource_.seekable; + } + }); + + Object.defineProperty(_this9, 'readyState', { + get: function get$$1() { + return this.nativeMediaSource_.readyState; + } + }); + + Object.defineProperty(_this9, 'activeSourceBuffers', { + get: function get$$1() { + return this.activeSourceBuffers_; + } + }); + + // the list of virtual and native SourceBuffers created by this + // MediaSource + _this9.sourceBuffers = []; + + _this9.activeSourceBuffers_ = []; + + /** + * update the list of active source buffers based upon various + * imformation from HLS and video.js + * + * @private + */ + _this9.updateActiveSourceBuffers_ = function () { + // Retain the reference but empty the array + _this9.activeSourceBuffers_.length = 0; + + // If there is only one source buffer, then it will always be active and audio will + // be disabled based on the codec of the source buffer + if (_this9.sourceBuffers.length === 1) { + var sourceBuffer = _this9.sourceBuffers[0]; + + sourceBuffer.appendAudioInitSegment_ = true; + sourceBuffer.audioDisabled_ = !sourceBuffer.audioCodec_; + _this9.activeSourceBuffers_.push(sourceBuffer); + return; + } + + // There are 2 source buffers, a combined (possibly video only) source buffer and + // and an audio only source buffer. + // By default, the audio in the combined virtual source buffer is enabled + // and the audio-only source buffer (if it exists) is disabled. + var disableCombined = false; + var disableAudioOnly = true; + + // TODO: maybe we can store the sourcebuffers on the track objects? + // safari may do something like this + for (var i = 0; i < _this9.player_.audioTracks().length; i++) { + var track = _this9.player_.audioTracks()[i]; + + if (track.enabled && track.kind !== 'main') { + // The enabled track is an alternate audio track so disable the audio in + // the combined source buffer and enable the audio-only source buffer. + disableCombined = true; + disableAudioOnly = false; + break; + } + } + + _this9.sourceBuffers.forEach(function (sourceBuffer, index) { + /* eslinst-disable */ + // TODO once codecs are required, we can switch to using the codecs to determine + // what stream is the video stream, rather than relying on videoTracks + /* eslinst-enable */ + + sourceBuffer.appendAudioInitSegment_ = true; + + if (sourceBuffer.videoCodec_ && sourceBuffer.audioCodec_) { + // combined + sourceBuffer.audioDisabled_ = disableCombined; + } else if (sourceBuffer.videoCodec_ && !sourceBuffer.audioCodec_) { + // If the "combined" source buffer is video only, then we do not want + // disable the audio-only source buffer (this is mostly for demuxed + // audio and video hls) + sourceBuffer.audioDisabled_ = true; + disableAudioOnly = false; + } else if (!sourceBuffer.videoCodec_ && sourceBuffer.audioCodec_) { + // audio only + // In the case of audio only with alternate audio and disableAudioOnly is true + // this means we want to disable the audio on the alternate audio sourcebuffer + // but not the main "combined" source buffer. The "combined" source buffer is + // always at index 0, so this ensures audio won't be disabled in both source + // buffers. + sourceBuffer.audioDisabled_ = index ? disableAudioOnly : !disableAudioOnly; + if (sourceBuffer.audioDisabled_) { + return; + } + } + + _this9.activeSourceBuffers_.push(sourceBuffer); + }); + }; + + _this9.onPlayerMediachange_ = function () { + _this9.sourceBuffers.forEach(function (sourceBuffer) { + sourceBuffer.appendAudioInitSegment_ = true; + }); + }; + + _this9.onHlsReset_ = function () { + _this9.sourceBuffers.forEach(function (sourceBuffer) { + if (sourceBuffer.transmuxer_) { + sourceBuffer.transmuxer_.postMessage({action: 'resetCaptions'}); + } + }); + }; + + _this9.onHlsSegmentTimeMapping_ = function (event) { + _this9.sourceBuffers.forEach(function (buffer) { + return buffer.timeMapping_ = event.mapping; + }); + }; + + // Re-emit MediaSource events on the polyfill + ['sourceopen', 'sourceclose', 'sourceended'].forEach(function (eventName) { + this.nativeMediaSource_.addEventListener(eventName, this.trigger.bind(this)); + }, _this9); + + // capture the associated player when the MediaSource is + // successfully attached + _this9.on('sourceopen', function (event) { + // Get the player this MediaSource is attached to + var video = document_1.querySelector('[src="' + _this9.url_ + '"]'); + + if (!video) { + return; + } + + _this9.player_ = videojs$1(video.parentNode); + + // hls-reset is fired by videojs.Hls on to the tech after the main SegmentLoader + // resets its state and flushes the buffer + _this9.player_.tech_.on('hls-reset', _this9.onHlsReset_); + // hls-segment-time-mapping is fired by videojs.Hls on to the tech after the main + // SegmentLoader inspects an MTS segment and has an accurate stream to display + // time mapping + _this9.player_.tech_.on('hls-segment-time-mapping', _this9.onHlsSegmentTimeMapping_); + + if (_this9.player_.audioTracks && _this9.player_.audioTracks()) { + _this9.player_.audioTracks().on('change', _this9.updateActiveSourceBuffers_); + _this9.player_.audioTracks().on('addtrack', _this9.updateActiveSourceBuffers_); + _this9.player_.audioTracks().on('removetrack', _this9.updateActiveSourceBuffers_); + } + + _this9.player_.on('mediachange', _this9.onPlayerMediachange_); + }); + + _this9.on('sourceended', function (event) { + var duration = durationOfVideo(_this9.duration); + + for (var i = 0; i < _this9.sourceBuffers.length; i++) { + var sourcebuffer = _this9.sourceBuffers[i]; + var cues = sourcebuffer.metadataTrack_ && sourcebuffer.metadataTrack_.cues; + + if (cues && cues.length) { + cues[cues.length - 1].endTime = duration; + } + } + }); + + // explicitly terminate any WebWorkers that were created + // by SourceHandlers + _this9.on('sourceclose', function (event) { + this.sourceBuffers.forEach(function (sourceBuffer) { + if (sourceBuffer.transmuxer_) { + sourceBuffer.transmuxer_.terminate(); + } + }); + + this.sourceBuffers.length = 0; + if (!this.player_) { + return; + } + + if (this.player_.audioTracks && this.player_.audioTracks()) { + this.player_.audioTracks().off('change', this.updateActiveSourceBuffers_); + this.player_.audioTracks().off('addtrack', this.updateActiveSourceBuffers_); + this.player_.audioTracks().off('removetrack', this.updateActiveSourceBuffers_); + } + + // We can only change this if the player hasn't been disposed of yet + // because `off` eventually tries to use the el_ property. If it has + // been disposed of, then don't worry about it because there are no + // event handlers left to unbind anyway + if (this.player_.el_) { + this.player_.off('mediachange', this.onPlayerMediachange_); + this.player_.tech_.off('hls-reset', this.onHlsReset_); + this.player_.tech_.off('hls-segment-time-mapping', this.onHlsSegmentTimeMapping_); + } + }); + return _this9; + } + + /** + * Add a range that that can now be seeked to. + * + * @param {Double} start where to start the addition + * @param {Double} end where to end the addition + * @private + */ + + + HtmlMediaSource.prototype.addSeekableRange_ = function addSeekableRange_(start, end) { + var error = void 0; + + if (this.duration !== Infinity) { + error = new Error('MediaSource.addSeekableRange() can only be invoked ' + 'when the duration is Infinity'); + error.name = 'InvalidStateError'; + error.code = 11; + throw error; + } + + if (end > this.nativeMediaSource_.duration || isNaN(this.nativeMediaSource_.duration)) { + this.nativeMediaSource_.duration = end; + } + }; + + /** + * Add a source buffer to the media source. + * + * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/addSourceBuffer + * @param {String} type the content-type of the content + * @return {Object} the created source buffer + */ + + + HtmlMediaSource.prototype.addSourceBuffer = function addSourceBuffer(type) { + var buffer = void 0; + var parsedType = parseContentType(type); + + // Create a VirtualSourceBuffer to transmux MPEG-2 transport + // stream segments into fragmented MP4s + if (/^(video|audio)\/mp2t$/i.test(parsedType.type)) { + var codecs = []; + + if (parsedType.parameters && parsedType.parameters.codecs) { + codecs = parsedType.parameters.codecs.split(','); + codecs = translateLegacyCodecs(codecs); + codecs = codecs.filter(function (codec) { + return isAudioCodec(codec) || isVideoCodec(codec); + }); + } + + if (codecs.length === 0) { + codecs = ['avc1.4d400d', 'mp4a.40.2']; + } + + buffer = new VirtualSourceBuffer(this, codecs); + + if (this.sourceBuffers.length !== 0) { + // If another VirtualSourceBuffer already exists, then we are creating a + // SourceBuffer for an alternate audio track and therefore we know that + // the source has both an audio and video track. + // That means we should trigger the manual creation of the real + // SourceBuffers instead of waiting for the transmuxer to return data + this.sourceBuffers[0].createRealSourceBuffers_(); + buffer.createRealSourceBuffers_(); + + // Automatically disable the audio on the first source buffer if + // a second source buffer is ever created + this.sourceBuffers[0].audioDisabled_ = true; + } + } else { + // delegate to the native implementation + buffer = this.nativeMediaSource_.addSourceBuffer(type); + } + + this.sourceBuffers.push(buffer); + return buffer; + }; + + return HtmlMediaSource; + }(videojs$1.EventTarget); + + /** + * @file videojs-contrib-media-sources.js + */ + + + var urlCount = 0; + + // ------------ + // Media Source + // ------------ + + // store references to the media sources so they can be connected + // to a video element (a swf object) + // TODO: can we store this somewhere local to this module? + videojs$1.mediaSources = {}; + + /** + * Provide a method for a swf object to notify JS that a + * media source is now open. + * + * @param {String} msObjectURL string referencing the MSE Object URL + * @param {String} swfId the swf id + */ + var open = function open(msObjectURL, swfId) { + var mediaSource = videojs$1.mediaSources[msObjectURL]; + + if (mediaSource) { + mediaSource.trigger({type: 'sourceopen', swfId: swfId}); + } else { + throw new Error('Media Source not found (Video.js)'); + } + }; + + /** + * Check to see if the native MediaSource object exists and supports + * an MP4 container with both H.264 video and AAC-LC audio. + * + * @return {Boolean} if native media sources are supported + */ + var supportsNativeMediaSources = function supportsNativeMediaSources() { + return !!window_1.MediaSource && !!window_1.MediaSource.isTypeSupported && window_1.MediaSource.isTypeSupported('video/mp4;codecs="avc1.4d400d,mp4a.40.2"'); + }; + + /** + * An emulation of the MediaSource API so that we can support + * native and non-native functionality. returns an instance of + * HtmlMediaSource. + * + * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/MediaSource + */ + var MediaSource = function MediaSource() { + this.MediaSource = { + open: open, + supportsNativeMediaSources: supportsNativeMediaSources + }; + + if (supportsNativeMediaSources()) { + return new HtmlMediaSource(); + } + + throw new Error('Cannot use create a virtual MediaSource for this video'); + }; + + MediaSource.open = open; + MediaSource.supportsNativeMediaSources = supportsNativeMediaSources; + + /** + * A wrapper around the native URL for our MSE object + * implementation, this object is exposed under videojs.URL + * + * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/URL + */ + var URL$1 = { + /** + * A wrapper around the native createObjectURL for our objects. + * This function maps a native or emulated mediaSource to a blob + * url so that it can be loaded into video.js + * + * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL + * @param {MediaSource} object the object to create a blob url to + */ + createObjectURL: function createObjectURL(object) { + var objectUrlPrefix = 'blob:vjs-media-source/'; + var url = void 0; + + // use the native MediaSource to generate an object URL + if (object instanceof HtmlMediaSource) { + url = window_1.URL.createObjectURL(object.nativeMediaSource_); + object.url_ = url; + return url; + } + // if the object isn't an emulated MediaSource, delegate to the + // native implementation + if (!(object instanceof HtmlMediaSource)) { + url = window_1.URL.createObjectURL(object); + object.url_ = url; + return url; + } + + // build a URL that can be used to map back to the emulated + // MediaSource + url = objectUrlPrefix + urlCount; + + urlCount++; + + // setup the mapping back to object + videojs$1.mediaSources[url] = object; + + return url; + } + }; + + videojs$1.MediaSource = MediaSource; + videojs$1.URL = URL$1; + + var EventTarget$1$1 = videojs$1.EventTarget, + mergeOptions$2 = videojs$1.mergeOptions; + + /** + * Returns a new master manifest that is the result of merging an updated master manifest + * into the original version. + * + * @param {Object} oldMaster + * The old parsed mpd object + * @param {Object} newMaster + * The updated parsed mpd object + * @return {Object} + * A new object representing the original master manifest with the updated media + * playlists merged in + */ + + var updateMaster$1 = function updateMaster$1(oldMaster, newMaster) { + var update = mergeOptions$2(oldMaster, { + // These are top level properties that can be updated + duration: newMaster.duration, + minimumUpdatePeriod: newMaster.minimumUpdatePeriod + }); + + // First update the playlists in playlist list + for (var i = 0; i < newMaster.playlists.length; i++) { + var playlistUpdate = updateMaster(update, newMaster.playlists[i]); + + if (playlistUpdate) { + update = playlistUpdate; + } + } + + // Then update media group playlists + forEachMediaGroup(newMaster, function (properties, type, group, label) { + if (properties.playlists && properties.playlists.length) { + var uri = properties.playlists[0].uri; + var _playlistUpdate = updateMaster(update, properties.playlists[0]); + + if (_playlistUpdate) { + update = _playlistUpdate; + // update the playlist reference within media groups + update.mediaGroups[type][group][label].playlists[0] = update.playlists[uri]; + } + } + }); + + return update; + }; + + var DashPlaylistLoader = function (_EventTarget$) { + inherits(DashPlaylistLoader, _EventTarget$); + + // DashPlaylistLoader must accept either a src url or a playlist because subsequent + // playlist loader setups from media groups will expect to be able to pass a playlist + // (since there aren't external URLs to media playlists with DASH) + function DashPlaylistLoader(srcUrlOrPlaylist, hls, withCredentials, masterPlaylistLoader) { + classCallCheck(this, DashPlaylistLoader); + + var _this10 = possibleConstructorReturn(this, _EventTarget$.call(this)); + + _this10.hls_ = hls; + _this10.withCredentials = withCredentials; + + if (!srcUrlOrPlaylist) { + throw new Error('A non-empty playlist URL or playlist is required'); + } + + // event naming? + _this10.on('minimumUpdatePeriod', function () { + _this10.refreshXml_(); + }); + + // live playlist staleness timeout + _this10.on('mediaupdatetimeout', function () { + _this10.refreshMedia_(); + }); + + // initialize the loader state + if (typeof srcUrlOrPlaylist === 'string') { + _this10.srcUrl = srcUrlOrPlaylist; + _this10.state = 'HAVE_NOTHING'; + return possibleConstructorReturn(_this10); + } + + _this10.masterPlaylistLoader_ = masterPlaylistLoader; + + _this10.state = 'HAVE_METADATA'; + _this10.started = true; + // we only should have one playlist so select it + _this10.media(srcUrlOrPlaylist); + // trigger async to mimic behavior of HLS, where it must request a playlist + window_1.setTimeout(function () { + _this10.trigger('loadedmetadata'); + }, 0); + return _this10; + } + + DashPlaylistLoader.prototype.dispose = function dispose() { + this.stopRequest(); + window_1.clearTimeout(this.mediaUpdateTimeout); + }; + + DashPlaylistLoader.prototype.stopRequest = function stopRequest() { + if (this.request) { + var oldRequest = this.request; + + this.request = null; + oldRequest.onreadystatechange = null; + oldRequest.abort(); + } + }; + + DashPlaylistLoader.prototype.media = function media(playlist) { + // getter + if (!playlist) { + return this.media_; + } + + // setter + if (this.state === 'HAVE_NOTHING') { + throw new Error('Cannot switch media playlist from ' + this.state); + } + + var startingState = this.state; + + // find the playlist object if the target playlist has been specified by URI + if (typeof playlist === 'string') { + if (!this.master.playlists[playlist]) { + throw new Error('Unknown playlist URI: ' + playlist); + } + playlist = this.master.playlists[playlist]; + } + + var mediaChange = !this.media_ || playlist.uri !== this.media_.uri; + + this.state = 'HAVE_METADATA'; + + // switching to the active playlist is a no-op + if (!mediaChange) { + return; + } + + // switching from an already loaded playlist + if (this.media_) { + this.trigger('mediachanging'); + } + + this.media_ = playlist; + + this.refreshMedia_(); + + // trigger media change if the active media has been updated + if (startingState !== 'HAVE_MASTER') { + this.trigger('mediachange'); + } + }; + + DashPlaylistLoader.prototype.pause = function pause() { + this.stopRequest(); + if (this.state === 'HAVE_NOTHING') { + // If we pause the loader before any data has been retrieved, its as if we never + // started, so reset to an unstarted state. + this.started = false; + } + }; + + DashPlaylistLoader.prototype.load = function load() { + // because the playlists are internal to the manifest, load should either load the + // main manifest, or do nothing but trigger an event + if (!this.started) { + this.start(); + return; + } + + this.trigger('loadedplaylist'); + }; + + /** + * Parses the master xml string and updates playlist uri references + * + * @return {Object} + * The parsed mpd manifest object + */ + + + DashPlaylistLoader.prototype.parseMasterXml = function parseMasterXml() { + var master = parse(this.masterXml_, { + manifestUri: this.srcUrl, + clientOffset: this.clientOffset_ + }); + + master.uri = this.srcUrl; + + // Set up phony URIs for the playlists since we won't have external URIs for DASH + // but reference playlists by their URI throughout the project + // TODO: Should we create the dummy uris in mpd-parser as well (leaning towards yes). + for (var i = 0; i < master.playlists.length; i++) { + var phonyUri = 'placeholder-uri-' + i; + + master.playlists[i].uri = phonyUri; + // set up by URI references + master.playlists[phonyUri] = master.playlists[i]; + } + + // set up phony URIs for the media group playlists since we won't have external + // URIs for DASH but reference playlists by their URI throughout the project + forEachMediaGroup(master, function (properties, mediaType, groupKey, labelKey) { + if (properties.playlists && properties.playlists.length) { + var _phonyUri = 'placeholder-uri-' + mediaType + '-' + groupKey + '-' + labelKey; + + properties.playlists[0].uri = _phonyUri; + // setup URI references + master.playlists[_phonyUri] = properties.playlists[0]; + } + }); + + setupMediaPlaylists(master); + resolveMediaGroupUris(master); + + return master; + }; + + DashPlaylistLoader.prototype.start = function start() { + var _this11 = this; + + this.started = true; + + // request the specified URL + this.request = this.hls_.xhr({ + uri: this.srcUrl, + withCredentials: this.withCredentials + }, function (error, req) { + // disposed + if (!_this11.request) { + return; + } + + // clear the loader's request reference + _this11.request = null; + + if (error) { + _this11.error = { + status: req.status, + message: 'DASH playlist request error at URL: ' + _this11.srcUrl, + responseText: req.responseText, + // MEDIA_ERR_NETWORK + code: 2 + }; + if (_this11.state === 'HAVE_NOTHING') { + _this11.started = false; + } + return _this11.trigger('error'); + } + + _this11.masterXml_ = req.responseText; + + if (req.responseHeaders && req.responseHeaders.date) { + _this11.masterLoaded_ = Date.parse(req.responseHeaders.date); + } else { + _this11.masterLoaded_ = Date.now(); + } + + _this11.syncClientServerClock_(_this11.onClientServerClockSync_.bind(_this11)); + }); + }; + + /** + * Parses the master xml for UTCTiming node to sync the client clock to the server + * clock. If the UTCTiming node requires a HEAD or GET request, that request is made. + * + * @param {Function} done + * Function to call when clock sync has completed + */ + + + DashPlaylistLoader.prototype.syncClientServerClock_ = function syncClientServerClock_(done) { + var _this12 = this; + + var utcTiming = parseUTCTiming(this.masterXml_); + + // No UTCTiming element found in the mpd. Use Date header from mpd request as the + // server clock + if (utcTiming === null) { + this.clientOffset_ = this.masterLoaded_ - Date.now(); + return done(); + } + + if (utcTiming.method === 'DIRECT') { + this.clientOffset_ = utcTiming.value - Date.now(); + return done(); + } + + this.request = this.hls_.xhr({ + uri: resolveUrl$1(this.srcUrl, utcTiming.value), + method: utcTiming.method, + withCredentials: this.withCredentials + }, function (error, req) { + // disposed + if (!_this12.request) { + return; + } + + if (error) { + // sync request failed, fall back to using date header from mpd + // TODO: log warning + _this12.clientOffset_ = _this12.masterLoaded_ - Date.now(); + return done(); + } + + var serverTime = void 0; + + if (utcTiming.method === 'HEAD') { + if (!req.responseHeaders || !req.responseHeaders.date) { + // expected date header not preset, fall back to using date header from mpd + // TODO: log warning + serverTime = _this12.masterLoaded_; + } else { + serverTime = Date.parse(req.responseHeaders.date); + } + } else { + serverTime = Date.parse(req.responseText); + } + + _this12.clientOffset_ = serverTime - Date.now(); + + done(); + }); + }; + + /** + * Handler for after client/server clock synchronization has happened. Sets up + * xml refresh timer if specificed by the manifest. + */ + + + DashPlaylistLoader.prototype.onClientServerClockSync_ = function onClientServerClockSync_() { + var _this13 = this; + + this.master = this.parseMasterXml(); + + this.state = 'HAVE_MASTER'; + + this.trigger('loadedplaylist'); + + if (!this.media_) { + // no media playlist was specifically selected so start + // from the first listed one + this.media(this.master.playlists[0]); + } + // trigger loadedmetadata to resolve setup of media groups + // trigger async to mimic behavior of HLS, where it must request a playlist + window_1.setTimeout(function () { + _this13.trigger('loadedmetadata'); + }, 0); + + // TODO: minimumUpdatePeriod can have a value of 0. Currently the manifest will not + // be refreshed when this is the case. The inter-op guide says that when the + // minimumUpdatePeriod is 0, the manifest should outline all currently available + // segments, but future segments may require an update. I think a good solution + // would be to update the manifest at the same rate that the media playlists + // are "refreshed", i.e. every targetDuration. + if (this.master.minimumUpdatePeriod) { + window_1.setTimeout(function () { + _this13.trigger('minimumUpdatePeriod'); + }, this.master.minimumUpdatePeriod); + } + }; + + /** + * Sends request to refresh the master xml and updates the parsed master manifest + * TODO: Does the client offset need to be recalculated when the xml is refreshed? + */ + + + DashPlaylistLoader.prototype.refreshXml_ = function refreshXml_() { + var _this14 = this; + + this.request = this.hls_.xhr({ + uri: this.srcUrl, + withCredentials: this.withCredentials + }, function (error, req) { + // disposed + if (!_this14.request) { + return; + } + + // clear the loader's request reference + _this14.request = null; + + if (error) { + _this14.error = { + status: req.status, + message: 'DASH playlist request error at URL: ' + _this14.srcUrl, + responseText: req.responseText, + // MEDIA_ERR_NETWORK + code: 2 + }; + if (_this14.state === 'HAVE_NOTHING') { + _this14.started = false; + } + return _this14.trigger('error'); + } + + _this14.masterXml_ = req.responseText; + + var newMaster = _this14.parseMasterXml(); + + _this14.master = updateMaster$1(_this14.master, newMaster); + + window_1.setTimeout(function () { + _this14.trigger('minimumUpdatePeriod'); + }, _this14.master.minimumUpdatePeriod); + }); + }; + + /** + * Refreshes the media playlist by re-parsing the master xml and updating playlist + * references. If this is an alternate loader, the updated parsed manifest is retrieved + * from the master loader. + */ + + + DashPlaylistLoader.prototype.refreshMedia_ = function refreshMedia_() { + var _this15 = this; + + var oldMaster = void 0; + var newMaster = void 0; + + if (this.masterPlaylistLoader_) { + oldMaster = this.masterPlaylistLoader_.master; + newMaster = this.masterPlaylistLoader_.parseMasterXml(); + } else { + oldMaster = this.master; + newMaster = this.parseMasterXml(); + } + + var updatedMaster = updateMaster$1(oldMaster, newMaster); + + if (updatedMaster) { + if (this.masterPlaylistLoader_) { + this.masterPlaylistLoader_.master = updatedMaster; + } else { + this.master = updatedMaster; + } + this.media_ = updatedMaster.playlists[this.media_.uri]; + } else { + this.trigger('playlistunchanged'); + } + + if (!this.media().endList) { + this.mediaUpdateTimeout = window_1.setTimeout(function () { + _this15.trigger('mediaupdatetimeout'); + }, refreshDelay(this.media(), !!updatedMaster)); + } + + this.trigger('loadedplaylist'); + }; + + return DashPlaylistLoader; + }(EventTarget$1$1); + + var logger = function logger(source) { + if (videojs$1.log.debug) { + return videojs$1.log.debug.bind(videojs$1, 'VHS:', source + ' >'); + } + + return function () { + }; + }; + + function noop$1() { + } + + /** + * @file source-updater.js + */ + + /** + * A queue of callbacks to be serialized and applied when a + * MediaSource and its associated SourceBuffers are not in the + * updating state. It is used by the segment loader to update the + * underlying SourceBuffers when new data is loaded, for instance. + * + * @class SourceUpdater + * @param {MediaSource} mediaSource the MediaSource to create the + * SourceBuffer from + * @param {String} mimeType the desired MIME type of the underlying + * SourceBuffer + * @param {Object} sourceBufferEmitter an event emitter that fires when a source buffer is + * added to the media source + */ + + var SourceUpdater = function () { + function SourceUpdater(mediaSource, mimeType, type, sourceBufferEmitter) { + classCallCheck(this, SourceUpdater); + + this.callbacks_ = []; + this.pendingCallback_ = null; + this.timestampOffset_ = 0; + this.mediaSource = mediaSource; + this.processedAppend_ = false; + this.type_ = type; + this.mimeType_ = mimeType; + this.logger_ = logger('SourceUpdater[' + type + '][' + mimeType + ']'); + + if (mediaSource.readyState === 'closed') { + mediaSource.addEventListener('sourceopen', this.createSourceBuffer_.bind(this, mimeType, sourceBufferEmitter)); + } else { + this.createSourceBuffer_(mimeType, sourceBufferEmitter); + } + } + + SourceUpdater.prototype.createSourceBuffer_ = function createSourceBuffer_(mimeType, sourceBufferEmitter) { + var _this16 = this; + + this.sourceBuffer_ = this.mediaSource.addSourceBuffer(mimeType); + + this.logger_('created SourceBuffer'); + + if (sourceBufferEmitter) { + sourceBufferEmitter.trigger('sourcebufferadded'); + + if (this.mediaSource.sourceBuffers.length < 2) { + // There's another source buffer we must wait for before we can start updating + // our own (or else we can get into a bad state, i.e., appending video/audio data + // before the other video/audio source buffer is available and leading to a video + // or audio only buffer). + sourceBufferEmitter.on('sourcebufferadded', function () { + _this16.start_(); + }); + return; + } + } + + this.start_(); + }; + + SourceUpdater.prototype.start_ = function start_() { + var _this17 = this; + + this.started_ = true; + + // run completion handlers and process callbacks as updateend + // events fire + this.onUpdateendCallback_ = function () { + var pendingCallback = _this17.pendingCallback_; + + _this17.pendingCallback_ = null; + + _this17.logger_('buffered [' + printableRange(_this17.buffered()) + ']'); + + if (pendingCallback) { + pendingCallback(); + } + + _this17.runCallback_(); + }; + + this.sourceBuffer_.addEventListener('updateend', this.onUpdateendCallback_); + + this.runCallback_(); + }; + + /** + * Aborts the current segment and resets the segment parser. + * + * @param {Function} done function to call when done + * @see http://w3c.github.io/media-source/#widl-SourceBuffer-abort-void + */ + + + SourceUpdater.prototype.abort = function abort(done) { + var _this18 = this; + + if (this.processedAppend_) { + this.queueCallback_(function () { + _this18.sourceBuffer_.abort(); + }, done); + } + }; + + /** + * Queue an update to append an ArrayBuffer. + * + * @param {ArrayBuffer} bytes + * @param {Function} done the function to call when done + * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-appendBuffer-void-ArrayBuffer-data + */ + + + SourceUpdater.prototype.appendBuffer = function appendBuffer(bytes, done) { + var _this19 = this; + + this.processedAppend_ = true; + this.queueCallback_(function () { + _this19.sourceBuffer_.appendBuffer(bytes); + }, done); + }; + + /** + * Indicates what TimeRanges are buffered in the managed SourceBuffer. + * + * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-buffered + */ + + + SourceUpdater.prototype.buffered = function buffered() { + if (!this.sourceBuffer_) { + return videojs$1.createTimeRanges(); + } + return this.sourceBuffer_.buffered; + }; + + /** + * Queue an update to remove a time range from the buffer. + * + * @param {Number} start where to start the removal + * @param {Number} end where to end the removal + * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end + */ + + + SourceUpdater.prototype.remove = function remove(start, end) { + var _this20 = this; + + if (this.processedAppend_) { + this.queueCallback_(function () { + _this20.logger_('remove [' + start + ' => ' + end + ']'); + _this20.sourceBuffer_.remove(start, end); + }, noop$1); + } + }; + + /** + * Whether the underlying sourceBuffer is updating or not + * + * @return {Boolean} the updating status of the SourceBuffer + */ + + + SourceUpdater.prototype.updating = function updating() { + return !this.sourceBuffer_ || this.sourceBuffer_.updating || this.pendingCallback_; + }; + + /** + * Set/get the timestampoffset on the SourceBuffer + * + * @return {Number} the timestamp offset + */ + + + SourceUpdater.prototype.timestampOffset = function timestampOffset(offset) { + var _this21 = this; + + if (typeof offset !== 'undefined') { + this.queueCallback_(function () { + _this21.sourceBuffer_.timestampOffset = offset; + }); + this.timestampOffset_ = offset; + } + return this.timestampOffset_; + }; + + /** + * Queue a callback to run + */ + + + SourceUpdater.prototype.queueCallback_ = function queueCallback_(callback, done) { + this.callbacks_.push([callback.bind(this), done]); + this.runCallback_(); + }; + + /** + * Run a queued callback + */ + + + SourceUpdater.prototype.runCallback_ = function runCallback_() { + var callbacks = void 0; + + if (!this.updating() && this.callbacks_.length && this.started_) { + callbacks = this.callbacks_.shift(); + this.pendingCallback_ = callbacks[1]; + callbacks[0](); + } + }; + + /** + * dispose of the source updater and the underlying sourceBuffer + */ + + + SourceUpdater.prototype.dispose = function dispose() { + this.sourceBuffer_.removeEventListener('updateend', this.onUpdateendCallback_); + if (this.sourceBuffer_ && this.mediaSource.readyState === 'open') { + this.sourceBuffer_.abort(); + } + }; + + return SourceUpdater; + }(); + + var Config = { + GOAL_BUFFER_LENGTH: 30, + MAX_GOAL_BUFFER_LENGTH: 60, + GOAL_BUFFER_LENGTH_RATE: 1, + // A fudge factor to apply to advertised playlist bitrates to account for + // temporary flucations in client bandwidth + BANDWIDTH_VARIANCE: 1.2, + // How much of the buffer must be filled before we consider upswitching + BUFFER_LOW_WATER_LINE: 0, + MAX_BUFFER_LOW_WATER_LINE: 30, + BUFFER_LOW_WATER_LINE_RATE: 1 + }; + + var REQUEST_ERRORS = { + FAILURE: 2, + TIMEOUT: -101, + ABORTED: -102 + }; + + /** + * Turns segment byterange into a string suitable for use in + * HTTP Range requests + * + * @param {Object} byterange - an object with two values defining the start and end + * of a byte-range + */ + var byterangeStr = function byterangeStr(byterange) { + var byterangeStart = void 0; + var byterangeEnd = void 0; + + // `byterangeEnd` is one less than `offset + length` because the HTTP range + // header uses inclusive ranges + byterangeEnd = byterange.offset + byterange.length - 1; + byterangeStart = byterange.offset; + return 'bytes=' + byterangeStart + '-' + byterangeEnd; + }; + + /** + * Defines headers for use in the xhr request for a particular segment. + * + * @param {Object} segment - a simplified copy of the segmentInfo object + * from SegmentLoader + */ + var segmentXhrHeaders = function segmentXhrHeaders(segment) { + var headers = {}; + + if (segment.byterange) { + headers.Range = byterangeStr(segment.byterange); + } + return headers; + }; + + /** + * Abort all requests + * + * @param {Object} activeXhrs - an object that tracks all XHR requests + */ + var abortAll = function abortAll(activeXhrs) { + activeXhrs.forEach(function (xhr) { + xhr.abort(); + }); + }; + + /** + * Gather important bandwidth stats once a request has completed + * + * @param {Object} request - the XHR request from which to gather stats + */ + var getRequestStats = function getRequestStats(request) { + return { + bandwidth: request.bandwidth, + bytesReceived: request.bytesReceived || 0, + roundTripTime: request.roundTripTime || 0 + }; + }; + + /** + * If possible gather bandwidth stats as a request is in + * progress + * + * @param {Event} progressEvent - an event object from an XHR's progress event + */ + var getProgressStats = function getProgressStats(progressEvent) { + var request = progressEvent.target; + var roundTripTime = Date.now() - request.requestTime; + var stats = { + bandwidth: Infinity, + bytesReceived: 0, + roundTripTime: roundTripTime || 0 + }; + + stats.bytesReceived = progressEvent.loaded; + // This can result in Infinity if stats.roundTripTime is 0 but that is ok + // because we should only use bandwidth stats on progress to determine when + // abort a request early due to insufficient bandwidth + stats.bandwidth = Math.floor(stats.bytesReceived / stats.roundTripTime * 8 * 1000); + + return stats; + }; + + /** + * Handle all error conditions in one place and return an object + * with all the information + * + * @param {Error|null} error - if non-null signals an error occured with the XHR + * @param {Object} request - the XHR request that possibly generated the error + */ + var handleErrors = function handleErrors(error, request) { + if (request.timedout) { + return { + status: request.status, + message: 'HLS request timed-out at URL: ' + request.uri, + code: REQUEST_ERRORS.TIMEOUT, + xhr: request + }; + } + + if (request.aborted) { + return { + status: request.status, + message: 'HLS request aborted at URL: ' + request.uri, + code: REQUEST_ERRORS.ABORTED, + xhr: request + }; + } + + if (error) { + return { + status: request.status, + message: 'HLS request errored at URL: ' + request.uri, + code: REQUEST_ERRORS.FAILURE, + xhr: request + }; + } + + return null; + }; + + /** + * Handle responses for key data and convert the key data to the correct format + * for the decryption step later + * + * @param {Object} segment - a simplified copy of the segmentInfo object + * from SegmentLoader + * @param {Function} finishProcessingFn - a callback to execute to continue processing + * this request + */ + var handleKeyResponse = function handleKeyResponse(segment, finishProcessingFn) { + return function (error, request) { + var response = request.response; + var errorObj = handleErrors(error, request); + + if (errorObj) { + return finishProcessingFn(errorObj, segment); + } + + if (response.byteLength !== 16) { + return finishProcessingFn({ + status: request.status, + message: 'Invalid HLS key at URL: ' + request.uri, + code: REQUEST_ERRORS.FAILURE, + xhr: request + }, segment); + } + + var view = new DataView(response); + + segment.key.bytes = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]); + return finishProcessingFn(null, segment); + }; + }; + + /** + * Handle init-segment responses + * + * @param {Object} segment - a simplified copy of the segmentInfo object + * from SegmentLoader + * @param {Function} finishProcessingFn - a callback to execute to continue processing + * this request + */ + var handleInitSegmentResponse = function handleInitSegmentResponse(segment, finishProcessingFn) { + return function (error, request) { + var response = request.response; + var errorObj = handleErrors(error, request); + + if (errorObj) { + return finishProcessingFn(errorObj, segment); + } + + // stop processing if received empty content + if (response.byteLength === 0) { + return finishProcessingFn({ + status: request.status, + message: 'Empty HLS segment content at URL: ' + request.uri, + code: REQUEST_ERRORS.FAILURE, + xhr: request + }, segment); + } + + segment.map.bytes = new Uint8Array(request.response); + return finishProcessingFn(null, segment); + }; + }; + + /** + * Response handler for segment-requests being sure to set the correct + * property depending on whether the segment is encryped or not + * Also records and keeps track of stats that are used for ABR purposes + * + * @param {Object} segment - a simplified copy of the segmentInfo object + * from SegmentLoader + * @param {Function} finishProcessingFn - a callback to execute to continue processing + * this request + */ + var handleSegmentResponse = function handleSegmentResponse(segment, finishProcessingFn) { + return function (error, request) { + var response = request.response; + var errorObj = handleErrors(error, request); + + if (errorObj) { + return finishProcessingFn(errorObj, segment); + } + + // stop processing if received empty content + if (response.byteLength === 0) { + return finishProcessingFn({ + status: request.status, + message: 'Empty HLS segment content at URL: ' + request.uri, + code: REQUEST_ERRORS.FAILURE, + xhr: request + }, segment); + } + + segment.stats = getRequestStats(request); + + if (segment.key) { + segment.encryptedBytes = new Uint8Array(request.response); + } else { + segment.bytes = new Uint8Array(request.response); + } + + return finishProcessingFn(null, segment); + }; + }; + + /** + * Decrypt the segment via the decryption web worker + * + * @param {WebWorker} decrypter - a WebWorker interface to AES-128 decryption routines + * @param {Object} segment - a simplified copy of the segmentInfo object + * from SegmentLoader + * @param {Function} doneFn - a callback that is executed after decryption has completed + */ + var decryptSegment = function decryptSegment(decrypter, segment, doneFn) { + var decryptionHandler = function decryptionHandler(event) { + if (event.data.source === segment.requestId) { + decrypter.removeEventListener('message', decryptionHandler); + var decrypted = event.data.decrypted; + + segment.bytes = new Uint8Array(decrypted.bytes, decrypted.byteOffset, decrypted.byteLength); + return doneFn(null, segment); + } + }; + + decrypter.addEventListener('message', decryptionHandler); + + // this is an encrypted segment + // incrementally decrypt the segment + decrypter.postMessage(createTransferableMessage({ + source: segment.requestId, + encrypted: segment.encryptedBytes, + key: segment.key.bytes, + iv: segment.key.iv + }), [segment.encryptedBytes.buffer, segment.key.bytes.buffer]); + }; + + /** + * The purpose of this function is to get the most pertinent error from the + * array of errors. + * For instance if a timeout and two aborts occur, then the aborts were + * likely triggered by the timeout so return that error object. + */ + var getMostImportantError = function getMostImportantError(errors) { + return errors.reduce(function (prev, err) { + return err.code > prev.code ? err : prev; + }); + }; + + /** + * This function waits for all XHRs to finish (with either success or failure) + * before continueing processing via it's callback. The function gathers errors + * from each request into a single errors array so that the error status for + * each request can be examined later. + * + * @param {Object} activeXhrs - an object that tracks all XHR requests + * @param {WebWorker} decrypter - a WebWorker interface to AES-128 decryption routines + * @param {Function} doneFn - a callback that is executed after all resources have been + * downloaded and any decryption completed + */ + var waitForCompletion = function waitForCompletion(activeXhrs, decrypter, doneFn) { + var errors = []; + var count = 0; + + return function (error, segment) { + if (error) { + // If there are errors, we have to abort any outstanding requests + abortAll(activeXhrs); + errors.push(error); + } + count += 1; + + if (count === activeXhrs.length) { + // Keep track of when *all* of the requests have completed + segment.endOfAllRequests = Date.now(); + + if (errors.length > 0) { + var worstError = getMostImportantError(errors); + + return doneFn(worstError, segment); + } + if (segment.encryptedBytes) { + return decryptSegment(decrypter, segment, doneFn); + } + // Otherwise, everything is ready just continue + return doneFn(null, segment); + } + }; + }; + + /** + * Simple progress event callback handler that gathers some stats before + * executing a provided callback with the `segment` object + * + * @param {Object} segment - a simplified copy of the segmentInfo object + * from SegmentLoader + * @param {Function} progressFn - a callback that is executed each time a progress event + * is received + * @param {Event} event - the progress event object from XMLHttpRequest + */ + var handleProgress = function handleProgress(segment, progressFn) { + return function (event) { + segment.stats = videojs$1.mergeOptions(segment.stats, getProgressStats(event)); + + // record the time that we receive the first byte of data + if (!segment.stats.firstBytesReceivedAt && segment.stats.bytesReceived) { + segment.stats.firstBytesReceivedAt = Date.now(); + } + + return progressFn(event, segment); + }; + }; + + /** + * Load all resources and does any processing necessary for a media-segment + * + * Features: + * decrypts the media-segment if it has a key uri and an iv + * aborts *all* requests if *any* one request fails + * + * The segment object, at minimum, has the following format: + * { + * resolvedUri: String, + * [byterange]: { + * offset: Number, + * length: Number + * }, + * [key]: { + * resolvedUri: String + * [byterange]: { + * offset: Number, + * length: Number + * }, + * iv: { + * bytes: Uint32Array + * } + * }, + * [map]: { + * resolvedUri: String, + * [byterange]: { + * offset: Number, + * length: Number + * }, + * [bytes]: Uint8Array + * } + * } + * ...where [name] denotes optional properties + * + * @param {Function} xhr - an instance of the xhr wrapper in xhr.js + * @param {Object} xhrOptions - the base options to provide to all xhr requests + * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128 + * decryption routines + * @param {Object} segment - a simplified copy of the segmentInfo object + * from SegmentLoader + * @param {Function} progressFn - a callback that receives progress events from the main + * segment's xhr request + * @param {Function} doneFn - a callback that is executed only once all requests have + * succeeded or failed + * @returns {Function} a function that, when invoked, immediately aborts all + * outstanding requests + */ + var mediaSegmentRequest = function mediaSegmentRequest(xhr, xhrOptions, decryptionWorker, segment, progressFn, doneFn) { + var activeXhrs = []; + var finishProcessingFn = waitForCompletion(activeXhrs, decryptionWorker, doneFn); + + // optionally, request the decryption key + if (segment.key) { + var keyRequestOptions = videojs$1.mergeOptions(xhrOptions, { + uri: segment.key.resolvedUri, + responseType: 'arraybuffer' + }); + var keyRequestCallback = handleKeyResponse(segment, finishProcessingFn); + var keyXhr = xhr(keyRequestOptions, keyRequestCallback); + + activeXhrs.push(keyXhr); + } + + // optionally, request the associated media init segment + if (segment.map && !segment.map.bytes) { + var initSegmentOptions = videojs$1.mergeOptions(xhrOptions, { + uri: segment.map.resolvedUri, + responseType: 'arraybuffer', + headers: segmentXhrHeaders(segment.map) + }); + var initSegmentRequestCallback = handleInitSegmentResponse(segment, finishProcessingFn); + var initSegmentXhr = xhr(initSegmentOptions, initSegmentRequestCallback); + + activeXhrs.push(initSegmentXhr); + } + + var segmentRequestOptions = videojs$1.mergeOptions(xhrOptions, { + uri: segment.resolvedUri, + responseType: 'arraybuffer', + headers: segmentXhrHeaders(segment) + }); + var segmentRequestCallback = handleSegmentResponse(segment, finishProcessingFn); + var segmentXhr = xhr(segmentRequestOptions, segmentRequestCallback); + + segmentXhr.addEventListener('progress', handleProgress(segment, progressFn)); + activeXhrs.push(segmentXhr); + + return function () { + return abortAll(activeXhrs); + }; + }; + + /** + * @file - codecs.js - Handles tasks regarding codec strings such as translating them to + * codec strings, or translating codec strings into objects that can be examined. + */ + + // Default codec parameters if none were provided for video and/or audio + var defaultCodecs = { + videoCodec: 'avc1', + videoObjectTypeIndicator: '.4d400d', + // AAC-LC + audioProfile: '2' + }; + + /** + * Parses a codec string to retrieve the number of codecs specified, + * the video codec and object type indicator, and the audio profile. + */ + + var parseCodecs = function parseCodecs() { + var codecs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + + var result = { + codecCount: 0 + }; + var parsed = void 0; + + result.codecCount = codecs.split(',').length; + result.codecCount = result.codecCount || 2; + + // parse the video codec + parsed = /(^|\s|,)+(avc[13])([^ ,]*)/i.exec(codecs); + if (parsed) { + result.videoCodec = parsed[2]; + result.videoObjectTypeIndicator = parsed[3]; + } + + // parse the last field of the audio codec + result.audioProfile = /(^|\s|,)+mp4a.[0-9A-Fa-f]+\.([0-9A-Fa-f]+)/i.exec(codecs); + result.audioProfile = result.audioProfile && result.audioProfile[2]; + + return result; + }; + + /** + * Replace codecs in the codec string with the old apple-style `avc1.<dd>.<dd>` to the + * standard `avc1.<hhhhhh>`. + * + * @param codecString {String} the codec string + * @return {String} the codec string with old apple-style codecs replaced + * + * @private + */ + var mapLegacyAvcCodecs = function mapLegacyAvcCodecs(codecString) { + return codecString.replace(/avc1\.(\d+)\.(\d+)/i, function (match) { + return translateLegacyCodecs([match])[0]; + }); + }; + + /** + * Build a media mime-type string from a set of parameters + * @param {String} type either 'audio' or 'video' + * @param {String} container either 'mp2t' or 'mp4' + * @param {Array} codecs an array of codec strings to add + * @return {String} a valid media mime-type + */ + var makeMimeTypeString = function makeMimeTypeString(type, container, codecs) { + // The codecs array is filtered so that falsey values are + // dropped and don't cause Array#join to create spurious + // commas + return type + '/' + container + '; codecs="' + codecs.filter(function (c) { + return !!c; + }).join(', ') + '"'; + }; + + /** + * Returns the type container based on information in the playlist + * @param {Playlist} media the current media playlist + * @return {String} a valid media container type + */ + var getContainerType = function getContainerType(media) { + // An initialization segment means the media playlist is an iframe + // playlist or is using the mp4 container. We don't currently + // support iframe playlists, so assume this is signalling mp4 + // fragments. + if (media.segments && media.segments.length && media.segments[0].map) { + return 'mp4'; + } + return 'mp2t'; + }; + + /** + * Returns a set of codec strings parsed from the playlist or the default + * codec strings if no codecs were specified in the playlist + * @param {Playlist} media the current media playlist + * @return {Object} an object with the video and audio codecs + */ + var getCodecs = function getCodecs(media) { + // if the codecs were explicitly specified, use them instead of the + // defaults + var mediaAttributes = media.attributes || {}; + + if (mediaAttributes.CODECS) { + return parseCodecs(mediaAttributes.CODECS); + } + return defaultCodecs; + }; + + var audioProfileFromDefault = function audioProfileFromDefault(master, audioGroupId) { + if (!master.mediaGroups.AUDIO || !audioGroupId) { + return null; + } + + var audioGroup = master.mediaGroups.AUDIO[audioGroupId]; + + if (!audioGroup) { + return null; + } + + for (var name in audioGroup) { + var audioType = audioGroup[name]; + + if (audioType.default && audioType.playlists) { + // codec should be the same for all playlists within the audio type + return parseCodecs(audioType.playlists[0].attributes.CODECS).audioProfile; + } + } + + return null; + }; + + /** + * Calculates the MIME type strings for a working configuration of + * SourceBuffers to play variant streams in a master playlist. If + * there is no possible working configuration, an empty array will be + * returned. + * + * @param master {Object} the m3u8 object for the master playlist + * @param media {Object} the m3u8 object for the variant playlist + * @return {Array} the MIME type strings. If the array has more than + * one entry, the first element should be applied to the video + * SourceBuffer and the second to the audio SourceBuffer. + * + * @private + */ + var mimeTypesForPlaylist = function mimeTypesForPlaylist(master, media) { + var containerType = getContainerType(media); + var codecInfo = getCodecs(media); + var mediaAttributes = media.attributes || {}; + // Default condition for a traditional HLS (no demuxed audio/video) + var isMuxed = true; + var isMaat = false; + + if (!media) { + // Not enough information + return []; + } + + if (master.mediaGroups.AUDIO && mediaAttributes.AUDIO) { + var audioGroup = master.mediaGroups.AUDIO[mediaAttributes.AUDIO]; + + // Handle the case where we are in a multiple-audio track scenario + if (audioGroup) { + isMaat = true; + // Start with the everything demuxed then... + isMuxed = false; + // ...check to see if any audio group tracks are muxed (ie. lacking a uri) + for (var groupId in audioGroup) { + // either a uri is present (if the case of HLS and an external playlist), or + // playlists is present (in the case of DASH where we don't have external audio + // playlists) + if (!audioGroup[groupId].uri && !audioGroup[groupId].playlists) { + isMuxed = true; + break; + } + } + } + } + + // HLS with multiple-audio tracks must always get an audio codec. + // Put another way, there is no way to have a video-only multiple-audio HLS! + if (isMaat && !codecInfo.audioProfile) { + if (!isMuxed) { + // It is possible for codecs to be specified on the audio media group playlist but + // not on the rendition playlist. This is mostly the case for DASH, where audio and + // video are always separate (and separately specified). + codecInfo.audioProfile = audioProfileFromDefault(master, mediaAttributes.AUDIO); + } + + if (!codecInfo.audioProfile) { + videojs$1.log.warn('Multiple audio tracks present but no audio codec string is specified. ' + 'Attempting to use the default audio codec (mp4a.40.2)'); + codecInfo.audioProfile = defaultCodecs.audioProfile; + } + } + + // Generate the final codec strings from the codec object generated above + var codecStrings = {}; + + if (codecInfo.videoCodec) { + codecStrings.video = '' + codecInfo.videoCodec + codecInfo.videoObjectTypeIndicator; + } + + if (codecInfo.audioProfile) { + codecStrings.audio = 'mp4a.40.' + codecInfo.audioProfile; + } + + // Finally, make and return an array with proper mime-types depending on + // the configuration + var justAudio = makeMimeTypeString('audio', containerType, [codecStrings.audio]); + var justVideo = makeMimeTypeString('video', containerType, [codecStrings.video]); + var bothVideoAudio = makeMimeTypeString('video', containerType, [codecStrings.video, codecStrings.audio]); + + if (isMaat) { + if (!isMuxed && codecStrings.video) { + return [justVideo, justAudio]; + } + + if (!isMuxed && !codecStrings.video) { + // There is no muxed content and no video codec string, so this is an audio only + // stream with alternate audio. + return [justAudio, justAudio]; + } + + // There exists the possiblity that this will return a `video/container` + // mime-type for the first entry in the array even when there is only audio. + // This doesn't appear to be a problem and simplifies the code. + return [bothVideoAudio, justAudio]; + } + + // If there is no video codec at all, always just return a single + // audio/<container> mime-type + if (!codecStrings.video) { + return [justAudio]; + } + + // When not using separate audio media groups, audio and video is + // *always* muxed + return [bothVideoAudio]; + }; + + // Utilities + + /** + * Returns the CSS value for the specified property on an element + * using `getComputedStyle`. Firefox has a long-standing issue where + * getComputedStyle() may return null when running in an iframe with + * `display: none`. + * + * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397 + * @param {HTMLElement} el the htmlelement to work on + * @param {string} the proprety to get the style for + */ + var safeGetComputedStyle = function safeGetComputedStyle(el, property) { + var result = void 0; + + if (!el) { + return ''; + } + + result = window_1.getComputedStyle(el); + if (!result) { + return ''; + } + + return result[property]; + }; + + /** + * Resuable stable sort function + * + * @param {Playlists} array + * @param {Function} sortFn Different comparators + * @function stableSort + */ + var stableSort = function stableSort(array, sortFn) { + var newArray = array.slice(); + + array.sort(function (left, right) { + var cmp = sortFn(left, right); + + if (cmp === 0) { + return newArray.indexOf(left) - newArray.indexOf(right); + } + return cmp; + }); + }; + + /** + * A comparator function to sort two playlist object by bandwidth. + * + * @param {Object} left a media playlist object + * @param {Object} right a media playlist object + * @return {Number} Greater than zero if the bandwidth attribute of + * left is greater than the corresponding attribute of right. Less + * than zero if the bandwidth of right is greater than left and + * exactly zero if the two are equal. + */ + var comparePlaylistBandwidth = function comparePlaylistBandwidth(left, right) { + var leftBandwidth = void 0; + var rightBandwidth = void 0; + + if (left.attributes.BANDWIDTH) { + leftBandwidth = left.attributes.BANDWIDTH; + } + leftBandwidth = leftBandwidth || window_1.Number.MAX_VALUE; + if (right.attributes.BANDWIDTH) { + rightBandwidth = right.attributes.BANDWIDTH; + } + rightBandwidth = rightBandwidth || window_1.Number.MAX_VALUE; + + return leftBandwidth - rightBandwidth; + }; + + /** + * A comparator function to sort two playlist object by resolution (width). + * @param {Object} left a media playlist object + * @param {Object} right a media playlist object + * @return {Number} Greater than zero if the resolution.width attribute of + * left is greater than the corresponding attribute of right. Less + * than zero if the resolution.width of right is greater than left and + * exactly zero if the two are equal. + */ + var comparePlaylistResolution = function comparePlaylistResolution(left, right) { + var leftWidth = void 0; + var rightWidth = void 0; + + if (left.attributes.RESOLUTION && left.attributes.RESOLUTION.width) { + leftWidth = left.attributes.RESOLUTION.width; + } + + leftWidth = leftWidth || window_1.Number.MAX_VALUE; + + if (right.attributes.RESOLUTION && right.attributes.RESOLUTION.width) { + rightWidth = right.attributes.RESOLUTION.width; + } + + rightWidth = rightWidth || window_1.Number.MAX_VALUE; + + // NOTE - Fallback to bandwidth sort as appropriate in cases where multiple renditions + // have the same media dimensions/ resolution + if (leftWidth === rightWidth && left.attributes.BANDWIDTH && right.attributes.BANDWIDTH) { + return left.attributes.BANDWIDTH - right.attributes.BANDWIDTH; + } + return leftWidth - rightWidth; + }; + + /** + * Chooses the appropriate media playlist based on bandwidth and player size + * + * @param {Object} master + * Object representation of the master manifest + * @param {Number} playerBandwidth + * Current calculated bandwidth of the player + * @param {Number} playerWidth + * Current width of the player element + * @param {Number} playerHeight + * Current height of the player element + * @return {Playlist} the highest bitrate playlist less than the + * currently detected bandwidth, accounting for some amount of + * bandwidth variance + */ + var simpleSelector = function simpleSelector(master, playerBandwidth, playerWidth, playerHeight) { + // convert the playlists to an intermediary representation to make comparisons easier + var sortedPlaylistReps = master.playlists.map(function (playlist) { + var width = void 0; + var height = void 0; + var bandwidth = void 0; + + width = playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.width; + height = playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height; + bandwidth = playlist.attributes.BANDWIDTH; + + bandwidth = bandwidth || window_1.Number.MAX_VALUE; + + return { + bandwidth: bandwidth, + width: width, + height: height, + playlist: playlist + }; + }); + + stableSort(sortedPlaylistReps, function (left, right) { + return left.bandwidth - right.bandwidth; + }); + + // filter out any playlists that have been excluded due to + // incompatible configurations + sortedPlaylistReps = sortedPlaylistReps.filter(function (rep) { + return !Playlist.isIncompatible(rep.playlist); + }); + + // filter out any playlists that have been disabled manually through the representations + // api or blacklisted temporarily due to playback errors. + var enabledPlaylistReps = sortedPlaylistReps.filter(function (rep) { + return Playlist.isEnabled(rep.playlist); + }); + + if (!enabledPlaylistReps.length) { + // if there are no enabled playlists, then they have all been blacklisted or disabled + // by the user through the representations api. In this case, ignore blacklisting and + // fallback to what the user wants by using playlists the user has not disabled. + enabledPlaylistReps = sortedPlaylistReps.filter(function (rep) { + return !Playlist.isDisabled(rep.playlist); + }); + } + + // filter out any variant that has greater effective bitrate + // than the current estimated bandwidth + var bandwidthPlaylistReps = enabledPlaylistReps.filter(function (rep) { + return rep.bandwidth * Config.BANDWIDTH_VARIANCE < playerBandwidth; + }); + + var highestRemainingBandwidthRep = bandwidthPlaylistReps[bandwidthPlaylistReps.length - 1]; + + // get all of the renditions with the same (highest) bandwidth + // and then taking the very first element + var bandwidthBestRep = bandwidthPlaylistReps.filter(function (rep) { + return rep.bandwidth === highestRemainingBandwidthRep.bandwidth; + })[0]; + + // filter out playlists without resolution information + var haveResolution = bandwidthPlaylistReps.filter(function (rep) { + return rep.width && rep.height; + }); + + // sort variants by resolution + stableSort(haveResolution, function (left, right) { + return left.width - right.width; + }); + + // if we have the exact resolution as the player use it + var resolutionBestRepList = haveResolution.filter(function (rep) { + return rep.width === playerWidth && rep.height === playerHeight; + }); + + highestRemainingBandwidthRep = resolutionBestRepList[resolutionBestRepList.length - 1]; + // ensure that we pick the highest bandwidth variant that have exact resolution + var resolutionBestRep = resolutionBestRepList.filter(function (rep) { + return rep.bandwidth === highestRemainingBandwidthRep.bandwidth; + })[0]; + + var resolutionPlusOneList = void 0; + var resolutionPlusOneSmallest = void 0; + var resolutionPlusOneRep = void 0; + + // find the smallest variant that is larger than the player + // if there is no match of exact resolution + if (!resolutionBestRep) { + resolutionPlusOneList = haveResolution.filter(function (rep) { + return rep.width > playerWidth || rep.height > playerHeight; + }); + + // find all the variants have the same smallest resolution + resolutionPlusOneSmallest = resolutionPlusOneList.filter(function (rep) { + return rep.width === resolutionPlusOneList[0].width && rep.height === resolutionPlusOneList[0].height; + }); + + // ensure that we also pick the highest bandwidth variant that + // is just-larger-than the video player + highestRemainingBandwidthRep = resolutionPlusOneSmallest[resolutionPlusOneSmallest.length - 1]; + resolutionPlusOneRep = resolutionPlusOneSmallest.filter(function (rep) { + return rep.bandwidth === highestRemainingBandwidthRep.bandwidth; + })[0]; + } + + // fallback chain of variants + var chosenRep = resolutionPlusOneRep || resolutionBestRep || bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0]; + + return chosenRep ? chosenRep.playlist : null; + }; + + // Playlist Selectors + + /** + * Chooses the appropriate media playlist based on the most recent + * bandwidth estimate and the player size. + * + * Expects to be called within the context of an instance of HlsHandler + * + * @return {Playlist} the highest bitrate playlist less than the + * currently detected bandwidth, accounting for some amount of + * bandwidth variance + */ + var lastBandwidthSelector = function lastBandwidthSelector() { + return simpleSelector(this.playlists.master, this.systemBandwidth, parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10), parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10)); + }; + + /** + * Chooses the appropriate media playlist based on the potential to rebuffer + * + * @param {Object} settings + * Object of information required to use this selector + * @param {Object} settings.master + * Object representation of the master manifest + * @param {Number} settings.currentTime + * The current time of the player + * @param {Number} settings.bandwidth + * Current measured bandwidth + * @param {Number} settings.duration + * Duration of the media + * @param {Number} settings.segmentDuration + * Segment duration to be used in round trip time calculations + * @param {Number} settings.timeUntilRebuffer + * Time left in seconds until the player has to rebuffer + * @param {Number} settings.currentTimeline + * The current timeline segments are being loaded from + * @param {SyncController} settings.syncController + * SyncController for determining if we have a sync point for a given playlist + * @return {Object|null} + * {Object} return.playlist + * The highest bandwidth playlist with the least amount of rebuffering + * {Number} return.rebufferingImpact + * The amount of time in seconds switching to this playlist will rebuffer. A + * negative value means that switching will cause zero rebuffering. + */ + var minRebufferMaxBandwidthSelector = function minRebufferMaxBandwidthSelector(settings) { + var master = settings.master, + currentTime = settings.currentTime, + bandwidth = settings.bandwidth, + duration$$1 = settings.duration, + segmentDuration = settings.segmentDuration, + timeUntilRebuffer = settings.timeUntilRebuffer, + currentTimeline = settings.currentTimeline, + syncController = settings.syncController; + + // filter out any playlists that have been excluded due to + // incompatible configurations + + var compatiblePlaylists = master.playlists.filter(function (playlist) { + return !Playlist.isIncompatible(playlist); + }); + + // filter out any playlists that have been disabled manually through the representations + // api or blacklisted temporarily due to playback errors. + var enabledPlaylists = compatiblePlaylists.filter(Playlist.isEnabled); + + if (!enabledPlaylists.length) { + // if there are no enabled playlists, then they have all been blacklisted or disabled + // by the user through the representations api. In this case, ignore blacklisting and + // fallback to what the user wants by using playlists the user has not disabled. + enabledPlaylists = compatiblePlaylists.filter(function (playlist) { + return !Playlist.isDisabled(playlist); + }); + } + + var bandwidthPlaylists = enabledPlaylists.filter(Playlist.hasAttribute.bind(null, 'BANDWIDTH')); + + var rebufferingEstimates = bandwidthPlaylists.map(function (playlist) { + var syncPoint = syncController.getSyncPoint(playlist, duration$$1, currentTimeline, currentTime); + // If there is no sync point for this playlist, switching to it will require a + // sync request first. This will double the request time + var numRequests = syncPoint ? 1 : 2; + var requestTimeEstimate = Playlist.estimateSegmentRequestTime(segmentDuration, bandwidth, playlist); + var rebufferingImpact = requestTimeEstimate * numRequests - timeUntilRebuffer; + + return { + playlist: playlist, + rebufferingImpact: rebufferingImpact + }; + }); + + var noRebufferingPlaylists = rebufferingEstimates.filter(function (estimate) { + return estimate.rebufferingImpact <= 0; + }); + + // Sort by bandwidth DESC + stableSort(noRebufferingPlaylists, function (a, b) { + return comparePlaylistBandwidth(b.playlist, a.playlist); + }); + + if (noRebufferingPlaylists.length) { + return noRebufferingPlaylists[0]; + } + + stableSort(rebufferingEstimates, function (a, b) { + return a.rebufferingImpact - b.rebufferingImpact; + }); + + return rebufferingEstimates[0] || null; + }; + + /** + * Chooses the appropriate media playlist, which in this case is the lowest bitrate + * one with video. If no renditions with video exist, return the lowest audio rendition. + * + * Expects to be called within the context of an instance of HlsHandler + * + * @return {Object|null} + * {Object} return.playlist + * The lowest bitrate playlist that contains a video codec. If no such rendition + * exists pick the lowest audio rendition. + */ + var lowestBitrateCompatibleVariantSelector = function lowestBitrateCompatibleVariantSelector() { + // filter out any playlists that have been excluded due to + // incompatible configurations or playback errors + var playlists = this.playlists.master.playlists.filter(Playlist.isEnabled); + + // Sort ascending by bitrate + stableSort(playlists, function (a, b) { + return comparePlaylistBandwidth(a, b); + }); + + // Parse and assume that playlists with no video codec have no video + // (this is not necessarily true, although it is generally true). + // + // If an entire manifest has no valid videos everything will get filtered + // out. + var playlistsWithVideo = playlists.filter(function (playlist) { + return parseCodecs(playlist.attributes.CODECS).videoCodec; + }); + + return playlistsWithVideo[0] || null; + }; + + /** + * @file segment-loader.js + */ + + // in ms + var CHECK_BUFFER_DELAY = 500; + + /** + * Determines if we should call endOfStream on the media source based + * on the state of the buffer or if appened segment was the final + * segment in the playlist. + * + * @param {Object} playlist a media playlist object + * @param {Object} mediaSource the MediaSource object + * @param {Number} segmentIndex the index of segment we last appended + * @returns {Boolean} do we need to call endOfStream on the MediaSource + */ + var detectEndOfStream = function detectEndOfStream(playlist, mediaSource, segmentIndex) { + if (!playlist || !mediaSource) { + return false; + } + + var segments = playlist.segments; + + // determine a few boolean values to help make the branch below easier + // to read + var appendedLastSegment = segmentIndex === segments.length; + + // if we've buffered to the end of the video, we need to call endOfStream + // so that MediaSources can trigger the `ended` event when it runs out of + // buffered data instead of waiting for me + return playlist.endList && mediaSource.readyState === 'open' && appendedLastSegment; + }; + + var finite = function finite(num) { + return typeof num === 'number' && isFinite(num); + }; + + var illegalMediaSwitch = function illegalMediaSwitch(loaderType, startingMedia, newSegmentMedia) { + // Although these checks should most likely cover non 'main' types, for now it narrows + // the scope of our checks. + if (loaderType !== 'main' || !startingMedia || !newSegmentMedia) { + return null; + } + + if (!newSegmentMedia.containsAudio && !newSegmentMedia.containsVideo) { + return 'Neither audio nor video found in segment.'; + } + + if (startingMedia.containsVideo && !newSegmentMedia.containsVideo) { + return 'Only audio found in segment when we expected video.' + ' We can\'t switch to audio only from a stream that had video.' + ' To get rid of this message, please add codec information to the manifest.'; + } + + if (!startingMedia.containsVideo && newSegmentMedia.containsVideo) { + return 'Video found in segment when we expected only audio.' + ' We can\'t switch to a stream with video from an audio only stream.' + ' To get rid of this message, please add codec information to the manifest.'; + } + + return null; + }; + + /** + * Calculates a time value that is safe to remove from the back buffer without interupting + * playback. + * + * @param {TimeRange} seekable + * The current seekable range + * @param {Number} currentTime + * The current time of the player + * @param {Number} targetDuration + * The target duration of the current playlist + * @return {Number} + * Time that is safe to remove from the back buffer without interupting playback + */ + var safeBackBufferTrimTime = function safeBackBufferTrimTime(seekable$$1, currentTime, targetDuration) { + var removeToTime = void 0; + + if (seekable$$1.length && seekable$$1.start(0) > 0 && seekable$$1.start(0) < currentTime) { + // If we have a seekable range use that as the limit for what can be removed safely + removeToTime = seekable$$1.start(0); + } else { + // otherwise remove anything older than 30 seconds before the current play head + removeToTime = currentTime - 30; + } + + // Don't allow removing from the buffer within target duration of current time + // to avoid the possibility of removing the GOP currently being played which could + // cause playback stalls. + return Math.min(removeToTime, currentTime - targetDuration); + }; + + var segmentInfoString = function segmentInfoString(segmentInfo) { + var _segmentInfo$segment = segmentInfo.segment, + start = _segmentInfo$segment.start, + end = _segmentInfo$segment.end, + _segmentInfo$playlist = segmentInfo.playlist, + seq = _segmentInfo$playlist.mediaSequence, + id = _segmentInfo$playlist.id, + _segmentInfo$playlist2 = _segmentInfo$playlist.segments, + segments = _segmentInfo$playlist2 === undefined ? [] : _segmentInfo$playlist2, + index = segmentInfo.mediaIndex, + timeline = segmentInfo.timeline; + + + return ['appending [' + index + '] of [' + seq + ', ' + (seq + segments.length) + '] from playlist [' + id + ']', '[' + start + ' => ' + end + '] in timeline [' + timeline + ']'].join(' '); + }; + + /** + * An object that manages segment loading and appending. + * + * @class SegmentLoader + * @param {Object} options required and optional options + * @extends videojs.EventTarget + */ + + var SegmentLoader = function (_videojs$EventTarget3) { + inherits(SegmentLoader, _videojs$EventTarget3); + + function SegmentLoader(settings) { + classCallCheck(this, SegmentLoader); + + // check pre-conditions + var _this22 = possibleConstructorReturn(this, _videojs$EventTarget3.call(this)); + + if (!settings) { + throw new TypeError('Initialization settings are required'); + } + if (typeof settings.currentTime !== 'function') { + throw new TypeError('No currentTime getter specified'); + } + if (!settings.mediaSource) { + throw new TypeError('No MediaSource specified'); + } + // public properties + _this22.bandwidth = settings.bandwidth; + _this22.throughput = {rate: 0, count: 0}; + _this22.roundTrip = NaN; + _this22.resetStats_(); + _this22.mediaIndex = null; + + // private settings + _this22.hasPlayed_ = settings.hasPlayed; + _this22.currentTime_ = settings.currentTime; + _this22.seekable_ = settings.seekable; + _this22.seeking_ = settings.seeking; + _this22.duration_ = settings.duration; + _this22.mediaSource_ = settings.mediaSource; + _this22.hls_ = settings.hls; + _this22.loaderType_ = settings.loaderType; + _this22.startingMedia_ = void 0; + _this22.segmentMetadataTrack_ = settings.segmentMetadataTrack; + _this22.goalBufferLength_ = settings.goalBufferLength; + _this22.sourceType_ = settings.sourceType; + _this22.state_ = 'INIT'; + + // private instance variables + _this22.checkBufferTimeout_ = null; + _this22.error_ = void 0; + _this22.currentTimeline_ = -1; + _this22.pendingSegment_ = null; + _this22.mimeType_ = null; + _this22.sourceUpdater_ = null; + _this22.xhrOptions_ = null; + + // Fragmented mp4 playback + _this22.activeInitSegmentId_ = null; + _this22.initSegments_ = {}; + + _this22.decrypter_ = settings.decrypter; + + // Manages the tracking and generation of sync-points, mappings + // between a time in the display time and a segment index within + // a playlist + _this22.syncController_ = settings.syncController; + _this22.syncPoint_ = { + segmentIndex: 0, + time: 0 + }; + + _this22.syncController_.on('syncinfoupdate', function () { + return _this22.trigger('syncinfoupdate'); + }); + + _this22.mediaSource_.addEventListener('sourceopen', function () { + return _this22.ended_ = false; + }); + + // ...for determining the fetch location + _this22.fetchAtBuffer_ = false; + + _this22.logger_ = logger('SegmentLoader[' + _this22.loaderType_ + ']'); + + Object.defineProperty(_this22, 'state', { + get: function get$$1() { + return this.state_; + }, + set: function set$$1(newState) { + if (newState !== this.state_) { + this.logger_(this.state_ + ' -> ' + newState); + this.state_ = newState; + } + } + }); + return _this22; + } + + /** + * reset all of our media stats + * + * @private + */ + + + SegmentLoader.prototype.resetStats_ = function resetStats_() { + this.mediaBytesTransferred = 0; + this.mediaRequests = 0; + this.mediaRequestsAborted = 0; + this.mediaRequestsTimedout = 0; + this.mediaRequestsErrored = 0; + this.mediaTransferDuration = 0; + this.mediaSecondsLoaded = 0; + }; + + /** + * dispose of the SegmentLoader and reset to the default state + */ + + + SegmentLoader.prototype.dispose = function dispose() { + this.state = 'DISPOSED'; + this.pause(); + this.abort_(); + if (this.sourceUpdater_) { + this.sourceUpdater_.dispose(); + } + this.resetStats_(); + }; + + /** + * abort anything that is currently doing on with the SegmentLoader + * and reset to a default state + */ + + + SegmentLoader.prototype.abort = function abort() { + if (this.state !== 'WAITING') { + if (this.pendingSegment_) { + this.pendingSegment_ = null; + } + return; + } + + this.abort_(); + + // We aborted the requests we were waiting on, so reset the loader's state to READY + // since we are no longer "waiting" on any requests. XHR callback is not always run + // when the request is aborted. This will prevent the loader from being stuck in the + // WAITING state indefinitely. + this.state = 'READY'; + + // don't wait for buffer check timeouts to begin fetching the + // next segment + if (!this.paused()) { + this.monitorBuffer_(); + } + }; + + /** + * abort all pending xhr requests and null any pending segements + * + * @private + */ + + + SegmentLoader.prototype.abort_ = function abort_() { + if (this.pendingSegment_) { + this.pendingSegment_.abortRequests(); + } + + // clear out the segment being processed + this.pendingSegment_ = null; + }; + + /** + * set an error on the segment loader and null out any pending segements + * + * @param {Error} error the error to set on the SegmentLoader + * @return {Error} the error that was set or that is currently set + */ + + + SegmentLoader.prototype.error = function error(_error) { + if (typeof _error !== 'undefined') { + this.error_ = _error; + } + + this.pendingSegment_ = null; + return this.error_; + }; + + SegmentLoader.prototype.endOfStream = function endOfStream() { + this.ended_ = true; + this.pause(); + this.trigger('ended'); + }; + + /** + * Indicates which time ranges are buffered + * + * @return {TimeRange} + * TimeRange object representing the current buffered ranges + */ + + + SegmentLoader.prototype.buffered_ = function buffered_() { + if (!this.sourceUpdater_) { + return videojs$1.createTimeRanges(); + } + + return this.sourceUpdater_.buffered(); + }; + + /** + * Gets and sets init segment for the provided map + * + * @param {Object} map + * The map object representing the init segment to get or set + * @param {Boolean=} set + * If true, the init segment for the provided map should be saved + * @return {Object} + * map object for desired init segment + */ + + + SegmentLoader.prototype.initSegment = function initSegment(map) { + var set$$1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (!map) { + return null; + } + + var id = initSegmentId(map); + var storedMap = this.initSegments_[id]; + + if (set$$1 && !storedMap && map.bytes) { + this.initSegments_[id] = storedMap = { + resolvedUri: map.resolvedUri, + byterange: map.byterange, + bytes: map.bytes + }; + } + + return storedMap || map; + }; + + /** + * Returns true if all configuration required for loading is present, otherwise false. + * + * @return {Boolean} True if the all configuration is ready for loading + * @private + */ + + + SegmentLoader.prototype.couldBeginLoading_ = function couldBeginLoading_() { + return this.playlist_ && ( + // the source updater is created when init_ is called, so either having a + // source updater or being in the INIT state with a mimeType is enough + // to say we have all the needed configuration to start loading. + this.sourceUpdater_ || this.mimeType_ && this.state === 'INIT') && !this.paused(); + }; + + /** + * load a playlist and start to fill the buffer + */ + + + SegmentLoader.prototype.load = function load() { + // un-pause + this.monitorBuffer_(); + + // if we don't have a playlist yet, keep waiting for one to be + // specified + if (!this.playlist_) { + return; + } + + // not sure if this is the best place for this + this.syncController_.setDateTimeMapping(this.playlist_); + + // if all the configuration is ready, initialize and begin loading + if (this.state === 'INIT' && this.couldBeginLoading_()) { + return this.init_(); + } + + // if we're in the middle of processing a segment already, don't + // kick off an additional segment request + if (!this.couldBeginLoading_() || this.state !== 'READY' && this.state !== 'INIT') { + return; + } + + this.state = 'READY'; + }; + + /** + * Once all the starting parameters have been specified, begin + * operation. This method should only be invoked from the INIT + * state. + * + * @private + */ + + + SegmentLoader.prototype.init_ = function init_() { + this.state = 'READY'; + this.sourceUpdater_ = new SourceUpdater(this.mediaSource_, this.mimeType_, this.loaderType_, this.sourceBufferEmitter_); + this.resetEverything(); + return this.monitorBuffer_(); + }; + + /** + * set a playlist on the segment loader + * + * @param {PlaylistLoader} media the playlist to set on the segment loader + */ + + + SegmentLoader.prototype.playlist = function playlist(newPlaylist) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (!newPlaylist) { + return; + } + + var oldPlaylist = this.playlist_; + var segmentInfo = this.pendingSegment_; + + this.playlist_ = newPlaylist; + this.xhrOptions_ = options; + + // when we haven't started playing yet, the start of a live playlist + // is always our zero-time so force a sync update each time the playlist + // is refreshed from the server + if (!this.hasPlayed_()) { + newPlaylist.syncInfo = { + mediaSequence: newPlaylist.mediaSequence, + time: 0 + }; + } + + var oldId = oldPlaylist ? oldPlaylist.id : null; + + this.logger_('playlist update [' + oldId + ' => ' + newPlaylist.id + ']'); + + // in VOD, this is always a rendition switch (or we updated our syncInfo above) + // in LIVE, we always want to update with new playlists (including refreshes) + this.trigger('syncinfoupdate'); + + // if we were unpaused but waiting for a playlist, start + // buffering now + if (this.state === 'INIT' && this.couldBeginLoading_()) { + return this.init_(); + } + + if (!oldPlaylist || oldPlaylist.uri !== newPlaylist.uri) { + if (this.mediaIndex !== null) { + // we must "resync" the segment loader when we switch renditions and + // the segment loader is already synced to the previous rendition + this.resyncLoader(); + } + + // the rest of this function depends on `oldPlaylist` being defined + return; + } + + // we reloaded the same playlist so we are in a live scenario + // and we will likely need to adjust the mediaIndex + var mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence; + + this.logger_('live window shift [' + mediaSequenceDiff + ']'); + + // update the mediaIndex on the SegmentLoader + // this is important because we can abort a request and this value must be + // equal to the last appended mediaIndex + if (this.mediaIndex !== null) { + this.mediaIndex -= mediaSequenceDiff; + } + + // update the mediaIndex on the SegmentInfo object + // this is important because we will update this.mediaIndex with this value + // in `handleUpdateEnd_` after the segment has been successfully appended + if (segmentInfo) { + segmentInfo.mediaIndex -= mediaSequenceDiff; + + // we need to update the referenced segment so that timing information is + // saved for the new playlist's segment, however, if the segment fell off the + // playlist, we can leave the old reference and just lose the timing info + if (segmentInfo.mediaIndex >= 0) { + segmentInfo.segment = newPlaylist.segments[segmentInfo.mediaIndex]; + } + } + + this.syncController_.saveExpiredSegmentInfo(oldPlaylist, newPlaylist); + }; + + /** + * Prevent the loader from fetching additional segments. If there + * is a segment request outstanding, it will finish processing + * before the loader halts. A segment loader can be unpaused by + * calling load(). + */ + + + SegmentLoader.prototype.pause = function pause() { + if (this.checkBufferTimeout_) { + window_1.clearTimeout(this.checkBufferTimeout_); + + this.checkBufferTimeout_ = null; + } + }; + + /** + * Returns whether the segment loader is fetching additional + * segments when given the opportunity. This property can be + * modified through calls to pause() and load(). + */ + + + SegmentLoader.prototype.paused = function paused() { + return this.checkBufferTimeout_ === null; + }; + + /** + * create/set the following mimetype on the SourceBuffer through a + * SourceUpdater + * + * @param {String} mimeType the mime type string to use + * @param {Object} sourceBufferEmitter an event emitter that fires when a source buffer + * is added to the media source + */ + + + SegmentLoader.prototype.mimeType = function mimeType(_mimeType, sourceBufferEmitter) { + if (this.mimeType_) { + return; + } + + this.mimeType_ = _mimeType; + this.sourceBufferEmitter_ = sourceBufferEmitter; + // if we were unpaused but waiting for a sourceUpdater, start + // buffering now + if (this.state === 'INIT' && this.couldBeginLoading_()) { + this.init_(); + } + }; + + /** + * Delete all the buffered data and reset the SegmentLoader + */ + + + SegmentLoader.prototype.resetEverything = function resetEverything() { + this.ended_ = false; + this.resetLoader(); + this.remove(0, this.duration_()); + this.trigger('reseteverything'); + }; + + /** + * Force the SegmentLoader to resync and start loading around the currentTime instead + * of starting at the end of the buffer + * + * Useful for fast quality changes + */ + + + SegmentLoader.prototype.resetLoader = function resetLoader() { + this.fetchAtBuffer_ = false; + this.resyncLoader(); + }; + + /** + * Force the SegmentLoader to restart synchronization and make a conservative guess + * before returning to the simple walk-forward method + */ + + + SegmentLoader.prototype.resyncLoader = function resyncLoader() { + this.mediaIndex = null; + this.syncPoint_ = null; + this.abort(); + }; + + /** + * Remove any data in the source buffer between start and end times + * @param {Number} start - the start time of the region to remove from the buffer + * @param {Number} end - the end time of the region to remove from the buffer + */ + + + SegmentLoader.prototype.remove = function remove(start, end) { + if (this.sourceUpdater_) { + this.sourceUpdater_.remove(start, end); + } + removeCuesFromTrack(start, end, this.segmentMetadataTrack_); + }; + + /** + * (re-)schedule monitorBufferTick_ to run as soon as possible + * + * @private + */ + + + SegmentLoader.prototype.monitorBuffer_ = function monitorBuffer_() { + if (this.checkBufferTimeout_) { + window_1.clearTimeout(this.checkBufferTimeout_); + } + + this.checkBufferTimeout_ = window_1.setTimeout(this.monitorBufferTick_.bind(this), 1); + }; + + /** + * As long as the SegmentLoader is in the READY state, periodically + * invoke fillBuffer_(). + * + * @private + */ + + + SegmentLoader.prototype.monitorBufferTick_ = function monitorBufferTick_() { + if (this.state === 'READY') { + this.fillBuffer_(); + } + + if (this.checkBufferTimeout_) { + window_1.clearTimeout(this.checkBufferTimeout_); + } + + this.checkBufferTimeout_ = window_1.setTimeout(this.monitorBufferTick_.bind(this), CHECK_BUFFER_DELAY); + }; + + /** + * fill the buffer with segements unless the sourceBuffers are + * currently updating + * + * Note: this function should only ever be called by monitorBuffer_ + * and never directly + * + * @private + */ + + + SegmentLoader.prototype.fillBuffer_ = function fillBuffer_() { + if (this.sourceUpdater_.updating()) { + return; + } + + if (!this.syncPoint_) { + this.syncPoint_ = this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_()); + } + + // see if we need to begin loading immediately + var segmentInfo = this.checkBuffer_(this.buffered_(), this.playlist_, this.mediaIndex, this.hasPlayed_(), this.currentTime_(), this.syncPoint_); + + if (!segmentInfo) { + return; + } + + var isEndOfStream = detectEndOfStream(this.playlist_, this.mediaSource_, segmentInfo.mediaIndex); + + if (isEndOfStream) { + this.endOfStream(); + return; + } + + if (segmentInfo.mediaIndex === this.playlist_.segments.length - 1 && this.mediaSource_.readyState === 'ended' && !this.seeking_()) { + return; + } + + // We will need to change timestampOffset of the sourceBuffer if either of + // the following conditions are true: + // - The segment.timeline !== this.currentTimeline + // (we are crossing a discontinuity somehow) + // - The "timestampOffset" for the start of this segment is less than + // the currently set timestampOffset + if (segmentInfo.timeline !== this.currentTimeline_ || segmentInfo.startOfSegment !== null && segmentInfo.startOfSegment < this.sourceUpdater_.timestampOffset()) { + this.syncController_.reset(); + segmentInfo.timestampOffset = segmentInfo.startOfSegment; + } + + this.loadSegment_(segmentInfo); + }; + + /** + * Determines what segment request should be made, given current playback + * state. + * + * @param {TimeRanges} buffered - the state of the buffer + * @param {Object} playlist - the playlist object to fetch segments from + * @param {Number} mediaIndex - the previous mediaIndex fetched or null + * @param {Boolean} hasPlayed - a flag indicating whether we have played or not + * @param {Number} currentTime - the playback position in seconds + * @param {Object} syncPoint - a segment info object that describes the + * @returns {Object} a segment request object that describes the segment to load + */ + + + SegmentLoader.prototype.checkBuffer_ = function checkBuffer_(buffered, playlist, mediaIndex, hasPlayed, currentTime, syncPoint) { + var lastBufferedEnd = 0; + var startOfSegment = void 0; + + if (buffered.length) { + lastBufferedEnd = buffered.end(buffered.length - 1); + } + + var bufferedTime = Math.max(0, lastBufferedEnd - currentTime); + + if (!playlist.segments.length) { + return null; + } + + // if there is plenty of content buffered, and the video has + // been played before relax for awhile + if (bufferedTime >= this.goalBufferLength_()) { + return null; + } + + // if the video has not yet played once, and we already have + // one segment downloaded do nothing + if (!hasPlayed && bufferedTime >= 1) { + return null; + } + + // When the syncPoint is null, there is no way of determining a good + // conservative segment index to fetch from + // The best thing to do here is to get the kind of sync-point data by + // making a request + if (syncPoint === null) { + mediaIndex = this.getSyncSegmentCandidate_(playlist); + return this.generateSegmentInfo_(playlist, mediaIndex, null, true); + } + + // Under normal playback conditions fetching is a simple walk forward + if (mediaIndex !== null) { + var segment = playlist.segments[mediaIndex]; + + if (segment && segment.end) { + startOfSegment = segment.end; + } else { + startOfSegment = lastBufferedEnd; + } + return this.generateSegmentInfo_(playlist, mediaIndex + 1, startOfSegment, false); + } + + // There is a sync-point but the lack of a mediaIndex indicates that + // we need to make a good conservative guess about which segment to + // fetch + if (this.fetchAtBuffer_) { + // Find the segment containing the end of the buffer + var mediaSourceInfo = Playlist.getMediaInfoForTime(playlist, lastBufferedEnd, syncPoint.segmentIndex, syncPoint.time); + + mediaIndex = mediaSourceInfo.mediaIndex; + startOfSegment = mediaSourceInfo.startTime; + } else { + // Find the segment containing currentTime + var _mediaSourceInfo = Playlist.getMediaInfoForTime(playlist, currentTime, syncPoint.segmentIndex, syncPoint.time); + + mediaIndex = _mediaSourceInfo.mediaIndex; + startOfSegment = _mediaSourceInfo.startTime; + } + + return this.generateSegmentInfo_(playlist, mediaIndex, startOfSegment, false); + }; + + /** + * The segment loader has no recourse except to fetch a segment in the + * current playlist and use the internal timestamps in that segment to + * generate a syncPoint. This function returns a good candidate index + * for that process. + * + * @param {Object} playlist - the playlist object to look for a + * @returns {Number} An index of a segment from the playlist to load + */ + + + SegmentLoader.prototype.getSyncSegmentCandidate_ = function getSyncSegmentCandidate_(playlist) { + var _this23 = this; + + if (this.currentTimeline_ === -1) { + return 0; + } + + var segmentIndexArray = playlist.segments.map(function (s, i) { + return { + timeline: s.timeline, + segmentIndex: i + }; + }).filter(function (s) { + return s.timeline === _this23.currentTimeline_; + }); + + if (segmentIndexArray.length) { + return segmentIndexArray[Math.min(segmentIndexArray.length - 1, 1)].segmentIndex; + } + + return Math.max(playlist.segments.length - 1, 0); + }; + + SegmentLoader.prototype.generateSegmentInfo_ = function generateSegmentInfo_(playlist, mediaIndex, startOfSegment, isSyncRequest) { + if (mediaIndex < 0 || mediaIndex >= playlist.segments.length) { + return null; + } + + var segment = playlist.segments[mediaIndex]; + + return { + requestId: 'segment-loader-' + Math.random(), + // resolve the segment URL relative to the playlist + uri: segment.resolvedUri, + // the segment's mediaIndex at the time it was requested + mediaIndex: mediaIndex, + // whether or not to update the SegmentLoader's state with this + // segment's mediaIndex + isSyncRequest: isSyncRequest, + startOfSegment: startOfSegment, + // the segment's playlist + playlist: playlist, + // unencrypted bytes of the segment + bytes: null, + // when a key is defined for this segment, the encrypted bytes + encryptedBytes: null, + // The target timestampOffset for this segment when we append it + // to the source buffer + timestampOffset: null, + // The timeline that the segment is in + timeline: segment.timeline, + // The expected duration of the segment in seconds + duration: segment.duration, + // retain the segment in case the playlist updates while doing an async process + segment: segment + }; + }; + + /** + * Determines if the network has enough bandwidth to complete the current segment + * request in a timely manner. If not, the request will be aborted early and bandwidth + * updated to trigger a playlist switch. + * + * @param {Object} stats + * Object containing stats about the request timing and size + * @return {Boolean} True if the request was aborted, false otherwise + * @private + */ + + + SegmentLoader.prototype.abortRequestEarly_ = function abortRequestEarly_(stats) { + if (this.hls_.tech_.paused() || + // Don't abort if the current playlist is on the lowestEnabledRendition + // TODO: Replace using timeout with a boolean indicating whether this playlist is + // the lowestEnabledRendition. + !this.xhrOptions_.timeout || + // Don't abort if we have no bandwidth information to estimate segment sizes + !this.playlist_.attributes.BANDWIDTH) { + return false; + } + + // Wait at least 1 second since the first byte of data has been received before + // using the calculated bandwidth from the progress event to allow the bitrate + // to stabilize + if (Date.now() - (stats.firstBytesReceivedAt || Date.now()) < 1000) { + return false; + } + + var currentTime = this.currentTime_(); + var measuredBandwidth = stats.bandwidth; + var segmentDuration = this.pendingSegment_.duration; + + var requestTimeRemaining = Playlist.estimateSegmentRequestTime(segmentDuration, measuredBandwidth, this.playlist_, stats.bytesReceived); + + // Subtract 1 from the timeUntilRebuffer so we still consider an early abort + // if we are only left with less than 1 second when the request completes. + // A negative timeUntilRebuffering indicates we are already rebuffering + var timeUntilRebuffer$$1 = timeUntilRebuffer(this.buffered_(), currentTime, this.hls_.tech_.playbackRate()) - 1; + + // Only consider aborting early if the estimated time to finish the download + // is larger than the estimated time until the player runs out of forward buffer + if (requestTimeRemaining <= timeUntilRebuffer$$1) { + return false; + } + + var switchCandidate = minRebufferMaxBandwidthSelector({ + master: this.hls_.playlists.master, + currentTime: currentTime, + bandwidth: measuredBandwidth, + duration: this.duration_(), + segmentDuration: segmentDuration, + timeUntilRebuffer: timeUntilRebuffer$$1, + currentTimeline: this.currentTimeline_, + syncController: this.syncController_ + }); + + if (!switchCandidate) { + return; + } + + var rebufferingImpact = requestTimeRemaining - timeUntilRebuffer$$1; + + var timeSavedBySwitching = rebufferingImpact - switchCandidate.rebufferingImpact; + + var minimumTimeSaving = 0.5; + + // If we are already rebuffering, increase the amount of variance we add to the + // potential round trip time of the new request so that we are not too aggressive + // with switching to a playlist that might save us a fraction of a second. + if (timeUntilRebuffer$$1 <= TIME_FUDGE_FACTOR) { + minimumTimeSaving = 1; + } + + if (!switchCandidate.playlist || switchCandidate.playlist.uri === this.playlist_.uri || timeSavedBySwitching < minimumTimeSaving) { + return false; + } + + // set the bandwidth to that of the desired playlist being sure to scale by + // BANDWIDTH_VARIANCE and add one so the playlist selector does not exclude it + // don't trigger a bandwidthupdate as the bandwidth is artifial + this.bandwidth = switchCandidate.playlist.attributes.BANDWIDTH * Config.BANDWIDTH_VARIANCE + 1; + this.abort(); + this.trigger('earlyabort'); + return true; + }; + + /** + * XHR `progress` event handler + * + * @param {Event} + * The XHR `progress` event + * @param {Object} simpleSegment + * A simplified segment object copy + * @private + */ + + + SegmentLoader.prototype.handleProgress_ = function handleProgress_(event, simpleSegment) { + if (!this.pendingSegment_ || simpleSegment.requestId !== this.pendingSegment_.requestId || this.abortRequestEarly_(simpleSegment.stats)) { + return; + } + + this.trigger('progress'); + }; + + /** + * load a specific segment from a request into the buffer + * + * @private + */ + + + SegmentLoader.prototype.loadSegment_ = function loadSegment_(segmentInfo) { + this.state = 'WAITING'; + this.pendingSegment_ = segmentInfo; + this.trimBackBuffer_(segmentInfo); + + segmentInfo.abortRequests = mediaSegmentRequest(this.hls_.xhr, this.xhrOptions_, this.decrypter_, this.createSimplifiedSegmentObj_(segmentInfo), + // progress callback + this.handleProgress_.bind(this), this.segmentRequestFinished_.bind(this)); + }; + + /** + * trim the back buffer so that we don't have too much data + * in the source buffer + * + * @private + * + * @param {Object} segmentInfo - the current segment + */ + + + SegmentLoader.prototype.trimBackBuffer_ = function trimBackBuffer_(segmentInfo) { + var removeToTime = safeBackBufferTrimTime(this.seekable_(), this.currentTime_(), this.playlist_.targetDuration || 10); + + // Chrome has a hard limit of 150MB of + // buffer and a very conservative "garbage collector" + // We manually clear out the old buffer to ensure + // we don't trigger the QuotaExceeded error + // on the source buffer during subsequent appends + + if (removeToTime > 0) { + this.remove(0, removeToTime); + } + }; + + /** + * created a simplified copy of the segment object with just the + * information necessary to perform the XHR and decryption + * + * @private + * + * @param {Object} segmentInfo - the current segment + * @returns {Object} a simplified segment object copy + */ + + + SegmentLoader.prototype.createSimplifiedSegmentObj_ = function createSimplifiedSegmentObj_(segmentInfo) { + var segment = segmentInfo.segment; + var simpleSegment = { + resolvedUri: segment.resolvedUri, + byterange: segment.byterange, + requestId: segmentInfo.requestId + }; + + if (segment.key) { + // if the media sequence is greater than 2^32, the IV will be incorrect + // assuming 10s segments, that would be about 1300 years + var iv = segment.key.iv || new Uint32Array([0, 0, 0, segmentInfo.mediaIndex + segmentInfo.playlist.mediaSequence]); + + simpleSegment.key = { + resolvedUri: segment.key.resolvedUri, + iv: iv + }; + } + + if (segment.map) { + simpleSegment.map = this.initSegment(segment.map); + } + + return simpleSegment; + }; + + /** + * Handle the callback from the segmentRequest function and set the + * associated SegmentLoader state and errors if necessary + * + * @private + */ + + + SegmentLoader.prototype.segmentRequestFinished_ = function segmentRequestFinished_(error, simpleSegment) { + // every request counts as a media request even if it has been aborted + // or canceled due to a timeout + this.mediaRequests += 1; + + if (simpleSegment.stats) { + this.mediaBytesTransferred += simpleSegment.stats.bytesReceived; + this.mediaTransferDuration += simpleSegment.stats.roundTripTime; + } + + // The request was aborted and the SegmentLoader has already been reset + if (!this.pendingSegment_) { + this.mediaRequestsAborted += 1; + return; + } + + // the request was aborted and the SegmentLoader has already started + // another request. this can happen when the timeout for an aborted + // request triggers due to a limitation in the XHR library + // do not count this as any sort of request or we risk double-counting + if (simpleSegment.requestId !== this.pendingSegment_.requestId) { + return; + } + + // an error occurred from the active pendingSegment_ so reset everything + if (error) { + this.pendingSegment_ = null; + this.state = 'READY'; + + // the requests were aborted just record the aborted stat and exit + // this is not a true error condition and nothing corrective needs + // to be done + if (error.code === REQUEST_ERRORS.ABORTED) { + this.mediaRequestsAborted += 1; + return; + } + + this.pause(); + + // the error is really just that at least one of the requests timed-out + // set the bandwidth to a very low value and trigger an ABR switch to + // take emergency action + if (error.code === REQUEST_ERRORS.TIMEOUT) { + this.mediaRequestsTimedout += 1; + this.bandwidth = 1; + this.roundTrip = NaN; + this.trigger('bandwidthupdate'); + return; + } + + // if control-flow has arrived here, then the error is real + // emit an error event to blacklist the current playlist + this.mediaRequestsErrored += 1; + this.error(error); + this.trigger('error'); + return; + } + + // the response was a success so set any bandwidth stats the request + // generated for ABR purposes + this.bandwidth = simpleSegment.stats.bandwidth; + this.roundTrip = simpleSegment.stats.roundTripTime; + + // if this request included an initialization segment, save that data + // to the initSegment cache + if (simpleSegment.map) { + simpleSegment.map = this.initSegment(simpleSegment.map, true); + } + + this.processSegmentResponse_(simpleSegment); + }; + + /** + * Move any important data from the simplified segment object + * back to the real segment object for future phases + * + * @private + */ + + + SegmentLoader.prototype.processSegmentResponse_ = function processSegmentResponse_(simpleSegment) { + var segmentInfo = this.pendingSegment_; + + segmentInfo.bytes = simpleSegment.bytes; + if (simpleSegment.map) { + segmentInfo.segment.map.bytes = simpleSegment.map.bytes; + } + + segmentInfo.endOfAllRequests = simpleSegment.endOfAllRequests; + this.handleSegment_(); + }; + + /** + * append a decrypted segement to the SourceBuffer through a SourceUpdater + * + * @private + */ + + + SegmentLoader.prototype.handleSegment_ = function handleSegment_() { + var _this24 = this; + + if (!this.pendingSegment_) { + this.state = 'READY'; + return; + } + + var segmentInfo = this.pendingSegment_; + var segment = segmentInfo.segment; + var timingInfo = this.syncController_.probeSegmentInfo(segmentInfo); + + // When we have our first timing info, determine what media types this loader is + // dealing with. Although we're maintaining extra state, it helps to preserve the + // separation of segment loader from the actual source buffers. + if (typeof this.startingMedia_ === 'undefined' && timingInfo && ( + // Guard against cases where we're not getting timing info at all until we are + // certain that all streams will provide it. + timingInfo.containsAudio || timingInfo.containsVideo)) { + this.startingMedia_ = { + containsAudio: timingInfo.containsAudio, + containsVideo: timingInfo.containsVideo + }; + } + + var illegalMediaSwitchError = illegalMediaSwitch(this.loaderType_, this.startingMedia_, timingInfo); + + if (illegalMediaSwitchError) { + this.error({ + message: illegalMediaSwitchError, + blacklistDuration: Infinity + }); + this.trigger('error'); + return; + } + + if (segmentInfo.isSyncRequest) { + this.trigger('syncinfoupdate'); + this.pendingSegment_ = null; + this.state = 'READY'; + return; + } + + if (segmentInfo.timestampOffset !== null && segmentInfo.timestampOffset !== this.sourceUpdater_.timestampOffset()) { + this.sourceUpdater_.timestampOffset(segmentInfo.timestampOffset); + // fired when a timestamp offset is set in HLS (can also identify discontinuities) + this.trigger('timestampoffset'); + } + + var timelineMapping = this.syncController_.mappingForTimeline(segmentInfo.timeline); + + if (timelineMapping !== null) { + this.trigger({ + type: 'segmenttimemapping', + mapping: timelineMapping + }); + } + + this.state = 'APPENDING'; + + // if the media initialization segment is changing, append it + // before the content segment + if (segment.map) { + var initId = initSegmentId(segment.map); + + if (!this.activeInitSegmentId_ || this.activeInitSegmentId_ !== initId) { + var initSegment = this.initSegment(segment.map); + + this.sourceUpdater_.appendBuffer(initSegment.bytes, function () { + _this24.activeInitSegmentId_ = initId; + }); + } + } + + segmentInfo.byteLength = segmentInfo.bytes.byteLength; + if (typeof segment.start === 'number' && typeof segment.end === 'number') { + this.mediaSecondsLoaded += segment.end - segment.start; + } else { + this.mediaSecondsLoaded += segment.duration; + } + + this.logger_(segmentInfoString(segmentInfo)); + + this.sourceUpdater_.appendBuffer(segmentInfo.bytes, this.handleUpdateEnd_.bind(this)); + }; + + /** + * callback to run when appendBuffer is finished. detects if we are + * in a good state to do things with the data we got, or if we need + * to wait for more + * + * @private + */ + + + SegmentLoader.prototype.handleUpdateEnd_ = function handleUpdateEnd_() { + if (!this.pendingSegment_) { + this.state = 'READY'; + if (!this.paused()) { + this.monitorBuffer_(); + } + return; + } + + var segmentInfo = this.pendingSegment_; + var segment = segmentInfo.segment; + var isWalkingForward = this.mediaIndex !== null; + + this.pendingSegment_ = null; + this.recordThroughput_(segmentInfo); + this.addSegmentMetadataCue_(segmentInfo); + + this.state = 'READY'; + + this.mediaIndex = segmentInfo.mediaIndex; + this.fetchAtBuffer_ = true; + this.currentTimeline_ = segmentInfo.timeline; + + // We must update the syncinfo to recalculate the seekable range before + // the following conditional otherwise it may consider this a bad "guess" + // and attempt to resync when the post-update seekable window and live + // point would mean that this was the perfect segment to fetch + this.trigger('syncinfoupdate'); + + // If we previously appended a segment that ends more than 3 targetDurations before + // the currentTime_ that means that our conservative guess was too conservative. + // In that case, reset the loader state so that we try to use any information gained + // from the previous request to create a new, more accurate, sync-point. + if (segment.end && this.currentTime_() - segment.end > segmentInfo.playlist.targetDuration * 3) { + this.resetEverything(); + return; + } + + // Don't do a rendition switch unless we have enough time to get a sync segment + // and conservatively guess + if (isWalkingForward) { + this.trigger('bandwidthupdate'); + } + this.trigger('progress'); + + // any time an update finishes and the last segment is in the + // buffer, end the stream. this ensures the "ended" event will + // fire if playback reaches that point. + var isEndOfStream = detectEndOfStream(segmentInfo.playlist, this.mediaSource_, segmentInfo.mediaIndex + 1); + + if (isEndOfStream) { + this.endOfStream(); + } + + if (!this.paused()) { + this.monitorBuffer_(); + } + }; + + /** + * Records the current throughput of the decrypt, transmux, and append + * portion of the semgment pipeline. `throughput.rate` is a the cumulative + * moving average of the throughput. `throughput.count` is the number of + * data points in the average. + * + * @private + * @param {Object} segmentInfo the object returned by loadSegment + */ + + + SegmentLoader.prototype.recordThroughput_ = function recordThroughput_(segmentInfo) { + var rate = this.throughput.rate; + // Add one to the time to ensure that we don't accidentally attempt to divide + // by zero in the case where the throughput is ridiculously high + var segmentProcessingTime = Date.now() - segmentInfo.endOfAllRequests + 1; + // Multiply by 8000 to convert from bytes/millisecond to bits/second + var segmentProcessingThroughput = Math.floor(segmentInfo.byteLength / segmentProcessingTime * 8 * 1000); + + // This is just a cumulative moving average calculation: + // newAvg = oldAvg + (sample - oldAvg) / (sampleCount + 1) + this.throughput.rate += (segmentProcessingThroughput - rate) / ++this.throughput.count; + }; + + /** + * Adds a cue to the segment-metadata track with some metadata information about the + * segment + * + * @private + * @param {Object} segmentInfo + * the object returned by loadSegment + * @method addSegmentMetadataCue_ + */ + + + SegmentLoader.prototype.addSegmentMetadataCue_ = function addSegmentMetadataCue_(segmentInfo) { + if (!this.segmentMetadataTrack_) { + return; + } + + var segment = segmentInfo.segment; + var start = segment.start; + var end = segment.end; + + // Do not try adding the cue if the start and end times are invalid. + if (!finite(start) || !finite(end)) { + return; + } + + removeCuesFromTrack(start, end, this.segmentMetadataTrack_); + + var Cue = window_1.WebKitDataCue || window_1.VTTCue; + var value = { + bandwidth: segmentInfo.playlist.attributes.BANDWIDTH, + resolution: segmentInfo.playlist.attributes.RESOLUTION, + codecs: segmentInfo.playlist.attributes.CODECS, + byteLength: segmentInfo.byteLength, + uri: segmentInfo.uri, + timeline: segmentInfo.timeline, + playlist: segmentInfo.playlist.uri, + start: start, + end: end + }; + var data = JSON.stringify(value); + var cue = new Cue(start, end, data); + + // Attach the metadata to the value property of the cue to keep consistency between + // the differences of WebKitDataCue in safari and VTTCue in other browsers + cue.value = value; + + this.segmentMetadataTrack_.addCue(cue); + }; + + return SegmentLoader; + }(videojs$1.EventTarget); + + /** + * @file vtt-segment-loader.js + */ + + var VTT_LINE_TERMINATORS = new Uint8Array('\n\n'.split('').map(function (char) { + return char.charCodeAt(0); + })); + + var uintToString = function uintToString(uintArray) { + return String.fromCharCode.apply(null, uintArray); + }; + + /** + * An object that manages segment loading and appending. + * + * @class VTTSegmentLoader + * @param {Object} options required and optional options + * @extends videojs.EventTarget + */ + + var VTTSegmentLoader = function (_SegmentLoader) { + inherits(VTTSegmentLoader, _SegmentLoader); + + function VTTSegmentLoader(settings) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, VTTSegmentLoader); + + // SegmentLoader requires a MediaSource be specified or it will throw an error; + // however, VTTSegmentLoader has no need of a media source, so delete the reference + var _this25 = possibleConstructorReturn(this, _SegmentLoader.call(this, settings, options)); + + _this25.mediaSource_ = null; + + _this25.subtitlesTrack_ = null; + return _this25; + } + + /** + * Indicates which time ranges are buffered + * + * @return {TimeRange} + * TimeRange object representing the current buffered ranges + */ + + + VTTSegmentLoader.prototype.buffered_ = function buffered_() { + if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues.length) { + return videojs$1.createTimeRanges(); + } + + var cues = this.subtitlesTrack_.cues; + var start = cues[0].startTime; + var end = cues[cues.length - 1].startTime; + + return videojs$1.createTimeRanges([[start, end]]); + }; + + /** + * Gets and sets init segment for the provided map + * + * @param {Object} map + * The map object representing the init segment to get or set + * @param {Boolean=} set + * If true, the init segment for the provided map should be saved + * @return {Object} + * map object for desired init segment + */ + + + VTTSegmentLoader.prototype.initSegment = function initSegment(map) { + var set$$1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (!map) { + return null; + } + + var id = initSegmentId(map); + var storedMap = this.initSegments_[id]; + + if (set$$1 && !storedMap && map.bytes) { + // append WebVTT line terminators to the media initialization segment if it exists + // to follow the WebVTT spec (https://w3c.github.io/webvtt/#file-structure) that + // requires two or more WebVTT line terminators between the WebVTT header and the + // rest of the file + var combinedByteLength = VTT_LINE_TERMINATORS.byteLength + map.bytes.byteLength; + var combinedSegment = new Uint8Array(combinedByteLength); + + combinedSegment.set(map.bytes); + combinedSegment.set(VTT_LINE_TERMINATORS, map.bytes.byteLength); + + this.initSegments_[id] = storedMap = { + resolvedUri: map.resolvedUri, + byterange: map.byterange, + bytes: combinedSegment + }; + } + + return storedMap || map; + }; + + /** + * Returns true if all configuration required for loading is present, otherwise false. + * + * @return {Boolean} True if the all configuration is ready for loading + * @private + */ + + + VTTSegmentLoader.prototype.couldBeginLoading_ = function couldBeginLoading_() { + return this.playlist_ && this.subtitlesTrack_ && !this.paused(); + }; + + /** + * Once all the starting parameters have been specified, begin + * operation. This method should only be invoked from the INIT + * state. + * + * @private + */ + + + VTTSegmentLoader.prototype.init_ = function init_() { + this.state = 'READY'; + this.resetEverything(); + return this.monitorBuffer_(); + }; + + /** + * Set a subtitle track on the segment loader to add subtitles to + * + * @param {TextTrack=} track + * The text track to add loaded subtitles to + * @return {TextTrack} + * Returns the subtitles track + */ + + + VTTSegmentLoader.prototype.track = function track(_track) { + if (typeof _track === 'undefined') { + return this.subtitlesTrack_; + } + + this.subtitlesTrack_ = _track; + + // if we were unpaused but waiting for a sourceUpdater, start + // buffering now + if (this.state === 'INIT' && this.couldBeginLoading_()) { + this.init_(); + } + + return this.subtitlesTrack_; + }; + + /** + * Remove any data in the source buffer between start and end times + * @param {Number} start - the start time of the region to remove from the buffer + * @param {Number} end - the end time of the region to remove from the buffer + */ + + + VTTSegmentLoader.prototype.remove = function remove(start, end) { + removeCuesFromTrack(start, end, this.subtitlesTrack_); + }; + + /** + * fill the buffer with segements unless the sourceBuffers are + * currently updating + * + * Note: this function should only ever be called by monitorBuffer_ + * and never directly + * + * @private + */ + + + VTTSegmentLoader.prototype.fillBuffer_ = function fillBuffer_() { + var _this26 = this; + + if (!this.syncPoint_) { + this.syncPoint_ = this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_()); + } + + // see if we need to begin loading immediately + var segmentInfo = this.checkBuffer_(this.buffered_(), this.playlist_, this.mediaIndex, this.hasPlayed_(), this.currentTime_(), this.syncPoint_); + + segmentInfo = this.skipEmptySegments_(segmentInfo); + + if (!segmentInfo) { + return; + } + + if (this.syncController_.timestampOffsetForTimeline(segmentInfo.timeline) === null) { + // We don't have the timestamp offset that we need to sync subtitles. + // Rerun on a timestamp offset or user interaction. + var checkTimestampOffset = function checkTimestampOffset() { + _this26.state = 'READY'; + if (!_this26.paused()) { + // if not paused, queue a buffer check as soon as possible + _this26.monitorBuffer_(); + } + }; + + this.syncController_.one('timestampoffset', checkTimestampOffset); + this.state = 'WAITING_ON_TIMELINE'; + return; + } + + this.loadSegment_(segmentInfo); + }; + + /** + * Prevents the segment loader from requesting segments we know contain no subtitles + * by walking forward until we find the next segment that we don't know whether it is + * empty or not. + * + * @param {Object} segmentInfo + * a segment info object that describes the current segment + * @return {Object} + * a segment info object that describes the current segment + */ + + + VTTSegmentLoader.prototype.skipEmptySegments_ = function skipEmptySegments_(segmentInfo) { + while (segmentInfo && segmentInfo.segment.empty) { + segmentInfo = this.generateSegmentInfo_(segmentInfo.playlist, segmentInfo.mediaIndex + 1, segmentInfo.startOfSegment + segmentInfo.duration, segmentInfo.isSyncRequest); + } + return segmentInfo; + }; + + /** + * append a decrypted segement to the SourceBuffer through a SourceUpdater + * + * @private + */ + + + VTTSegmentLoader.prototype.handleSegment_ = function handleSegment_() { + var _this27 = this; + + if (!this.pendingSegment_ || !this.subtitlesTrack_) { + this.state = 'READY'; + return; + } + + this.state = 'APPENDING'; + + var segmentInfo = this.pendingSegment_; + var segment = segmentInfo.segment; + + // Make sure that vttjs has loaded, otherwise, wait till it finished loading + if (typeof window_1.WebVTT !== 'function' && this.subtitlesTrack_ && this.subtitlesTrack_.tech_) { + + var loadHandler = function loadHandler() { + _this27.handleSegment_(); + }; + + this.state = 'WAITING_ON_VTTJS'; + this.subtitlesTrack_.tech_.one('vttjsloaded', loadHandler); + this.subtitlesTrack_.tech_.one('vttjserror', function () { + _this27.subtitlesTrack_.tech_.off('vttjsloaded', loadHandler); + _this27.error({ + message: 'Error loading vtt.js' + }); + _this27.state = 'READY'; + _this27.pause(); + _this27.trigger('error'); + }); + + return; + } + + segment.requested = true; + + try { + this.parseVTTCues_(segmentInfo); + } catch (e) { + this.error({ + message: e.message + }); + this.state = 'READY'; + this.pause(); + return this.trigger('error'); + } + + this.updateTimeMapping_(segmentInfo, this.syncController_.timelines[segmentInfo.timeline], this.playlist_); + + if (segmentInfo.isSyncRequest) { + this.trigger('syncinfoupdate'); + this.pendingSegment_ = null; + this.state = 'READY'; + return; + } + + segmentInfo.byteLength = segmentInfo.bytes.byteLength; + + this.mediaSecondsLoaded += segment.duration; + + if (segmentInfo.cues.length) { + // remove any overlapping cues to prevent doubling + this.remove(segmentInfo.cues[0].endTime, segmentInfo.cues[segmentInfo.cues.length - 1].endTime); + } + + segmentInfo.cues.forEach(function (cue) { + _this27.subtitlesTrack_.addCue(cue); + }); + + this.handleUpdateEnd_(); + }; + + /** + * Uses the WebVTT parser to parse the segment response + * + * @param {Object} segmentInfo + * a segment info object that describes the current segment + * @private + */ + + + VTTSegmentLoader.prototype.parseVTTCues_ = function parseVTTCues_(segmentInfo) { + var decoder = void 0; + var decodeBytesToString = false; + + if (typeof window_1.TextDecoder === 'function') { + decoder = new window_1.TextDecoder('utf8'); + } else { + decoder = window_1.WebVTT.StringDecoder(); + decodeBytesToString = true; + } + + var parser = new window_1.WebVTT.Parser(window_1, window_1.vttjs, decoder); + + segmentInfo.cues = []; + segmentInfo.timestampmap = {MPEGTS: 0, LOCAL: 0}; + + parser.oncue = segmentInfo.cues.push.bind(segmentInfo.cues); + parser.ontimestampmap = function (map) { + return segmentInfo.timestampmap = map; + }; + parser.onparsingerror = function (error) { + videojs$1.log.warn('Error encountered when parsing cues: ' + error.message); + }; + + if (segmentInfo.segment.map) { + var mapData = segmentInfo.segment.map.bytes; + + if (decodeBytesToString) { + mapData = uintToString(mapData); + } + + parser.parse(mapData); + } + + var segmentData = segmentInfo.bytes; + + if (decodeBytesToString) { + segmentData = uintToString(segmentData); + } + + parser.parse(segmentData); + parser.flush(); + }; + + /** + * Updates the start and end times of any cues parsed by the WebVTT parser using + * the information parsed from the X-TIMESTAMP-MAP header and a TS to media time mapping + * from the SyncController + * + * @param {Object} segmentInfo + * a segment info object that describes the current segment + * @param {Object} mappingObj + * object containing a mapping from TS to media time + * @param {Object} playlist + * the playlist object containing the segment + * @private + */ + + + VTTSegmentLoader.prototype.updateTimeMapping_ = function updateTimeMapping_(segmentInfo, mappingObj, playlist) { + var segment = segmentInfo.segment; + + if (!mappingObj) { + // If the sync controller does not have a mapping of TS to Media Time for the + // timeline, then we don't have enough information to update the cue + // start/end times + return; + } + + if (!segmentInfo.cues.length) { + // If there are no cues, we also do not have enough information to figure out + // segment timing. Mark that the segment contains no cues so we don't re-request + // an empty segment. + segment.empty = true; + return; + } + + var timestampmap = segmentInfo.timestampmap; + var diff = timestampmap.MPEGTS / 90000 - timestampmap.LOCAL + mappingObj.mapping; + + segmentInfo.cues.forEach(function (cue) { + // First convert cue time to TS time using the timestamp-map provided within the vtt + cue.startTime += diff; + cue.endTime += diff; + }); + + if (!playlist.syncInfo) { + var firstStart = segmentInfo.cues[0].startTime; + var lastStart = segmentInfo.cues[segmentInfo.cues.length - 1].startTime; + + playlist.syncInfo = { + mediaSequence: playlist.mediaSequence + segmentInfo.mediaIndex, + time: Math.min(firstStart, lastStart - segment.duration) + }; + } + }; + + return VTTSegmentLoader; + }(SegmentLoader); + + /** + * @file ad-cue-tags.js + */ + + /** + * Searches for an ad cue that overlaps with the given mediaTime + */ + + + var findAdCue = function findAdCue(track, mediaTime) { + var cues = track.cues; + + for (var i = 0; i < cues.length; i++) { + var cue = cues[i]; + + if (mediaTime >= cue.adStartTime && mediaTime <= cue.adEndTime) { + return cue; + } + } + return null; + }; + + var updateAdCues = function updateAdCues(media, track) { + var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + if (!media.segments) { + return; + } + + var mediaTime = offset; + var cue = void 0; + + for (var i = 0; i < media.segments.length; i++) { + var segment = media.segments[i]; + + if (!cue) { + // Since the cues will span for at least the segment duration, adding a fudge + // factor of half segment duration will prevent duplicate cues from being + // created when timing info is not exact (e.g. cue start time initialized + // at 10.006677, but next call mediaTime is 10.003332 ) + cue = findAdCue(track, mediaTime + segment.duration / 2); + } + + if (cue) { + if ('cueIn' in segment) { + // Found a CUE-IN so end the cue + cue.endTime = mediaTime; + cue.adEndTime = mediaTime; + mediaTime += segment.duration; + cue = null; + continue; + } + + if (mediaTime < cue.endTime) { + // Already processed this mediaTime for this cue + mediaTime += segment.duration; + continue; + } + + // otherwise extend cue until a CUE-IN is found + cue.endTime += segment.duration; + } else { + if ('cueOut' in segment) { + cue = new window_1.VTTCue(mediaTime, mediaTime + segment.duration, segment.cueOut); + cue.adStartTime = mediaTime; + // Assumes tag format to be + // #EXT-X-CUE-OUT:30 + cue.adEndTime = mediaTime + parseFloat(segment.cueOut); + track.addCue(cue); + } + + if ('cueOutCont' in segment) { + // Entered into the middle of an ad cue + var adOffset = void 0; + var adTotal = void 0; + + // Assumes tag formate to be + // #EXT-X-CUE-OUT-CONT:10/30 + + var _segment$cueOutCont$s = segment.cueOutCont.split('/').map(parseFloat); + + adOffset = _segment$cueOutCont$s[0]; + adTotal = _segment$cueOutCont$s[1]; + + + cue = new window_1.VTTCue(mediaTime, mediaTime + segment.duration, ''); + cue.adStartTime = mediaTime - adOffset; + cue.adEndTime = cue.adStartTime + adTotal; + track.addCue(cue); + } + } + mediaTime += segment.duration; + } + }; + + /** + * @file sync-controller.js + */ + + var tsprobe = tsInspector.inspect; + + var syncPointStrategies = [ + // Stategy "VOD": Handle the VOD-case where the sync-point is *always* + // the equivalence display-time 0 === segment-index 0 + { + name: 'VOD', + run: function run(syncController, playlist, duration$$1, currentTimeline, currentTime) { + if (duration$$1 !== Infinity) { + var syncPoint = { + time: 0, + segmentIndex: 0 + }; + + return syncPoint; + } + return null; + } + }, + // Stategy "ProgramDateTime": We have a program-date-time tag in this playlist + { + name: 'ProgramDateTime', + run: function run(syncController, playlist, duration$$1, currentTimeline, currentTime) { + if (!syncController.datetimeToDisplayTime) { + return null; + } + + var segments = playlist.segments || []; + var syncPoint = null; + var lastDistance = null; + + currentTime = currentTime || 0; + + for (var i = 0; i < segments.length; i++) { + var segment = segments[i]; + + if (segment.dateTimeObject) { + var segmentTime = segment.dateTimeObject.getTime() / 1000; + var segmentStart = segmentTime + syncController.datetimeToDisplayTime; + var distance = Math.abs(currentTime - segmentStart); + + // Once the distance begins to increase, we have passed + // currentTime and can stop looking for better candidates + if (lastDistance !== null && lastDistance < distance) { + break; + } + + lastDistance = distance; + syncPoint = { + time: segmentStart, + segmentIndex: i + }; + } + } + return syncPoint; + } + }, + // Stategy "Segment": We have a known time mapping for a timeline and a + // segment in the current timeline with timing data + { + name: 'Segment', + run: function run(syncController, playlist, duration$$1, currentTimeline, currentTime) { + var segments = playlist.segments || []; + var syncPoint = null; + var lastDistance = null; + + currentTime = currentTime || 0; + + for (var i = 0; i < segments.length; i++) { + var segment = segments[i]; + + if (segment.timeline === currentTimeline && typeof segment.start !== 'undefined') { + var distance = Math.abs(currentTime - segment.start); + + // Once the distance begins to increase, we have passed + // currentTime and can stop looking for better candidates + if (lastDistance !== null && lastDistance < distance) { + break; + } + + if (!syncPoint || lastDistance === null || lastDistance >= distance) { + lastDistance = distance; + syncPoint = { + time: segment.start, + segmentIndex: i + }; + } + } + } + return syncPoint; + } + }, + // Stategy "Discontinuity": We have a discontinuity with a known + // display-time + { + name: 'Discontinuity', + run: function run(syncController, playlist, duration$$1, currentTimeline, currentTime) { + var syncPoint = null; + + currentTime = currentTime || 0; + + if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) { + var lastDistance = null; + + for (var i = 0; i < playlist.discontinuityStarts.length; i++) { + var segmentIndex = playlist.discontinuityStarts[i]; + var discontinuity = playlist.discontinuitySequence + i + 1; + var discontinuitySync = syncController.discontinuities[discontinuity]; + + if (discontinuitySync) { + var distance = Math.abs(currentTime - discontinuitySync.time); + + // Once the distance begins to increase, we have passed + // currentTime and can stop looking for better candidates + if (lastDistance !== null && lastDistance < distance) { + break; + } + + if (!syncPoint || lastDistance === null || lastDistance >= distance) { + lastDistance = distance; + syncPoint = { + time: discontinuitySync.time, + segmentIndex: segmentIndex + }; + } + } + } + } + return syncPoint; + } + }, + // Stategy "Playlist": We have a playlist with a known mapping of + // segment index to display time + { + name: 'Playlist', + run: function run(syncController, playlist, duration$$1, currentTimeline, currentTime) { + if (playlist.syncInfo) { + var syncPoint = { + time: playlist.syncInfo.time, + segmentIndex: playlist.syncInfo.mediaSequence - playlist.mediaSequence + }; + + return syncPoint; + } + return null; + } + }]; + + var SyncController = function (_videojs$EventTarget4) { + inherits(SyncController, _videojs$EventTarget4); + + function SyncController() { + classCallCheck(this, SyncController); + + // Segment Loader state variables... + // ...for synching across variants + var _this28 = possibleConstructorReturn(this, _videojs$EventTarget4.call(this)); + + _this28.inspectCache_ = undefined; + + // ...for synching across variants + _this28.timelines = []; + _this28.discontinuities = []; + _this28.datetimeToDisplayTime = null; + + _this28.logger_ = logger('SyncController'); + return _this28; + } + + /** + * Find a sync-point for the playlist specified + * + * A sync-point is defined as a known mapping from display-time to + * a segment-index in the current playlist. + * + * @param {Playlist} playlist + * The playlist that needs a sync-point + * @param {Number} duration + * Duration of the MediaSource (Infinite if playing a live source) + * @param {Number} currentTimeline + * The last timeline from which a segment was loaded + * @returns {Object} + * A sync-point object + */ + + + SyncController.prototype.getSyncPoint = function getSyncPoint(playlist, duration$$1, currentTimeline, currentTime) { + var syncPoints = this.runStrategies_(playlist, duration$$1, currentTimeline, currentTime); + + if (!syncPoints.length) { + // Signal that we need to attempt to get a sync-point manually + // by fetching a segment in the playlist and constructing + // a sync-point from that information + return null; + } + + // Now find the sync-point that is closest to the currentTime because + // that should result in the most accurate guess about which segment + // to fetch + return this.selectSyncPoint_(syncPoints, {key: 'time', value: currentTime}); + }; + + /** + * Calculate the amount of time that has expired off the playlist during playback + * + * @param {Playlist} playlist + * Playlist object to calculate expired from + * @param {Number} duration + * Duration of the MediaSource (Infinity if playling a live source) + * @returns {Number|null} + * The amount of time that has expired off the playlist during playback. Null + * if no sync-points for the playlist can be found. + */ + + + SyncController.prototype.getExpiredTime = function getExpiredTime(playlist, duration$$1) { + if (!playlist || !playlist.segments) { + return null; + } + + var syncPoints = this.runStrategies_(playlist, duration$$1, playlist.discontinuitySequence, 0); + + // Without sync-points, there is not enough information to determine the expired time + if (!syncPoints.length) { + return null; + } + + var syncPoint = this.selectSyncPoint_(syncPoints, { + key: 'segmentIndex', + value: 0 + }); + + // If the sync-point is beyond the start of the playlist, we want to subtract the + // duration from index 0 to syncPoint.segmentIndex instead of adding. + if (syncPoint.segmentIndex > 0) { + syncPoint.time *= -1; + } + + return Math.abs(syncPoint.time + sumDurations(playlist, syncPoint.segmentIndex, 0)); + }; + + /** + * Runs each sync-point strategy and returns a list of sync-points returned by the + * strategies + * + * @private + * @param {Playlist} playlist + * The playlist that needs a sync-point + * @param {Number} duration + * Duration of the MediaSource (Infinity if playing a live source) + * @param {Number} currentTimeline + * The last timeline from which a segment was loaded + * @returns {Array} + * A list of sync-point objects + */ + + + SyncController.prototype.runStrategies_ = function runStrategies_(playlist, duration$$1, currentTimeline, currentTime) { + var syncPoints = []; + + // Try to find a sync-point in by utilizing various strategies... + for (var i = 0; i < syncPointStrategies.length; i++) { + var strategy = syncPointStrategies[i]; + var syncPoint = strategy.run(this, playlist, duration$$1, currentTimeline, currentTime); + + if (syncPoint) { + syncPoint.strategy = strategy.name; + syncPoints.push({ + strategy: strategy.name, + syncPoint: syncPoint + }); + } + } + + return syncPoints; + }; + + /** + * Selects the sync-point nearest the specified target + * + * @private + * @param {Array} syncPoints + * List of sync-points to select from + * @param {Object} target + * Object specifying the property and value we are targeting + * @param {String} target.key + * Specifies the property to target. Must be either 'time' or 'segmentIndex' + * @param {Number} target.value + * The value to target for the specified key. + * @returns {Object} + * The sync-point nearest the target + */ + + + SyncController.prototype.selectSyncPoint_ = function selectSyncPoint_(syncPoints, target) { + var bestSyncPoint = syncPoints[0].syncPoint; + var bestDistance = Math.abs(syncPoints[0].syncPoint[target.key] - target.value); + var bestStrategy = syncPoints[0].strategy; + + for (var i = 1; i < syncPoints.length; i++) { + var newDistance = Math.abs(syncPoints[i].syncPoint[target.key] - target.value); + + if (newDistance < bestDistance) { + bestDistance = newDistance; + bestSyncPoint = syncPoints[i].syncPoint; + bestStrategy = syncPoints[i].strategy; + } + } + + this.logger_('syncPoint for [' + target.key + ': ' + target.value + '] chosen with strategy' + (' [' + bestStrategy + ']: [time:' + bestSyncPoint.time + ',') + (' segmentIndex:' + bestSyncPoint.segmentIndex + ']')); + + return bestSyncPoint; + }; + + /** + * Save any meta-data present on the segments when segments leave + * the live window to the playlist to allow for synchronization at the + * playlist level later. + * + * @param {Playlist} oldPlaylist - The previous active playlist + * @param {Playlist} newPlaylist - The updated and most current playlist + */ + + + SyncController.prototype.saveExpiredSegmentInfo = function saveExpiredSegmentInfo(oldPlaylist, newPlaylist) { + var mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence; + + // When a segment expires from the playlist and it has a start time + // save that information as a possible sync-point reference in future + for (var i = mediaSequenceDiff - 1; i >= 0; i--) { + var lastRemovedSegment = oldPlaylist.segments[i]; + + if (lastRemovedSegment && typeof lastRemovedSegment.start !== 'undefined') { + newPlaylist.syncInfo = { + mediaSequence: oldPlaylist.mediaSequence + i, + time: lastRemovedSegment.start + }; + this.logger_('playlist refresh sync: [time:' + newPlaylist.syncInfo.time + ',' + (' mediaSequence: ' + newPlaylist.syncInfo.mediaSequence + ']')); + this.trigger('syncinfoupdate'); + break; + } + } + }; + + /** + * Save the mapping from playlist's ProgramDateTime to display. This should + * only ever happen once at the start of playback. + * + * @param {Playlist} playlist - The currently active playlist + */ + + + SyncController.prototype.setDateTimeMapping = function setDateTimeMapping(playlist) { + if (!this.datetimeToDisplayTime && playlist.segments && playlist.segments.length && playlist.segments[0].dateTimeObject) { + var playlistTimestamp = playlist.segments[0].dateTimeObject.getTime() / 1000; + + this.datetimeToDisplayTime = -playlistTimestamp; + } + }; + + /** + * Reset the state of the inspection cache when we do a rendition + * switch + */ + + + SyncController.prototype.reset = function reset() { + this.inspectCache_ = undefined; + }; + + /** + * Probe or inspect a fmp4 or an mpeg2-ts segment to determine the start + * and end of the segment in it's internal "media time". Used to generate + * mappings from that internal "media time" to the display time that is + * shown on the player. + * + * @param {SegmentInfo} segmentInfo - The current active request information + */ + + + SyncController.prototype.probeSegmentInfo = function probeSegmentInfo(segmentInfo) { + var segment = segmentInfo.segment; + var playlist = segmentInfo.playlist; + var timingInfo = void 0; + + if (segment.map) { + timingInfo = this.probeMp4Segment_(segmentInfo); + } else { + timingInfo = this.probeTsSegment_(segmentInfo); + } + + if (timingInfo) { + if (this.calculateSegmentTimeMapping_(segmentInfo, timingInfo)) { + this.saveDiscontinuitySyncInfo_(segmentInfo); + + // If the playlist does not have sync information yet, record that information + // now with segment timing information + if (!playlist.syncInfo) { + playlist.syncInfo = { + mediaSequence: playlist.mediaSequence + segmentInfo.mediaIndex, + time: segment.start + }; + } + } + } + + return timingInfo; + }; + + /** + * Probe an fmp4 or an mpeg2-ts segment to determine the start of the segment + * in it's internal "media time". + * + * @private + * @param {SegmentInfo} segmentInfo - The current active request information + * @return {object} The start and end time of the current segment in "media time" + */ + + + SyncController.prototype.probeMp4Segment_ = function probeMp4Segment_(segmentInfo) { + var segment = segmentInfo.segment; + var timescales = probe.timescale(segment.map.bytes); + var startTime = probe.startTime(timescales, segmentInfo.bytes); + + if (segmentInfo.timestampOffset !== null) { + segmentInfo.timestampOffset -= startTime; + } + + return { + start: startTime, + end: startTime + segment.duration + }; + }; + + /** + * Probe an mpeg2-ts segment to determine the start and end of the segment + * in it's internal "media time". + * + * @private + * @param {SegmentInfo} segmentInfo - The current active request information + * @return {object} The start and end time of the current segment in "media time" + */ + + + SyncController.prototype.probeTsSegment_ = function probeTsSegment_(segmentInfo) { + var timeInfo = tsprobe(segmentInfo.bytes, this.inspectCache_); + var segmentStartTime = void 0; + var segmentEndTime = void 0; + + if (!timeInfo) { + return null; + } + + if (timeInfo.video && timeInfo.video.length === 2) { + this.inspectCache_ = timeInfo.video[1].dts; + segmentStartTime = timeInfo.video[0].dtsTime; + segmentEndTime = timeInfo.video[1].dtsTime; + } else if (timeInfo.audio && timeInfo.audio.length === 2) { + this.inspectCache_ = timeInfo.audio[1].dts; + segmentStartTime = timeInfo.audio[0].dtsTime; + segmentEndTime = timeInfo.audio[1].dtsTime; + } + + return { + start: segmentStartTime, + end: segmentEndTime, + containsVideo: timeInfo.video && timeInfo.video.length === 2, + containsAudio: timeInfo.audio && timeInfo.audio.length === 2 + }; + }; + + SyncController.prototype.timestampOffsetForTimeline = function timestampOffsetForTimeline(timeline) { + if (typeof this.timelines[timeline] === 'undefined') { + return null; + } + return this.timelines[timeline].time; + }; + + SyncController.prototype.mappingForTimeline = function mappingForTimeline(timeline) { + if (typeof this.timelines[timeline] === 'undefined') { + return null; + } + return this.timelines[timeline].mapping; + }; + + /** + * Use the "media time" for a segment to generate a mapping to "display time" and + * save that display time to the segment. + * + * @private + * @param {SegmentInfo} segmentInfo + * The current active request information + * @param {object} timingInfo + * The start and end time of the current segment in "media time" + * @returns {Boolean} + * Returns false if segment time mapping could not be calculated + */ + + + SyncController.prototype.calculateSegmentTimeMapping_ = function calculateSegmentTimeMapping_(segmentInfo, timingInfo) { + var segment = segmentInfo.segment; + var mappingObj = this.timelines[segmentInfo.timeline]; + + if (segmentInfo.timestampOffset !== null) { + mappingObj = { + time: segmentInfo.startOfSegment, + mapping: segmentInfo.startOfSegment - timingInfo.start + }; + this.timelines[segmentInfo.timeline] = mappingObj; + this.trigger('timestampoffset'); + + this.logger_('time mapping for timeline ' + segmentInfo.timeline + ': ' + ('[time: ' + mappingObj.time + '] [mapping: ' + mappingObj.mapping + ']')); + + segment.start = segmentInfo.startOfSegment; + segment.end = timingInfo.end + mappingObj.mapping; + } else if (mappingObj) { + segment.start = timingInfo.start + mappingObj.mapping; + segment.end = timingInfo.end + mappingObj.mapping; + } else { + return false; + } + + return true; + }; + + /** + * Each time we have discontinuity in the playlist, attempt to calculate the location + * in display of the start of the discontinuity and save that. We also save an accuracy + * value so that we save values with the most accuracy (closest to 0.) + * + * @private + * @param {SegmentInfo} segmentInfo - The current active request information + */ + + + SyncController.prototype.saveDiscontinuitySyncInfo_ = function saveDiscontinuitySyncInfo_(segmentInfo) { + var playlist = segmentInfo.playlist; + var segment = segmentInfo.segment; + + // If the current segment is a discontinuity then we know exactly where + // the start of the range and it's accuracy is 0 (greater accuracy values + // mean more approximation) + if (segment.discontinuity) { + this.discontinuities[segment.timeline] = { + time: segment.start, + accuracy: 0 + }; + } else if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) { + // Search for future discontinuities that we can provide better timing + // information for and save that information for sync purposes + for (var i = 0; i < playlist.discontinuityStarts.length; i++) { + var segmentIndex = playlist.discontinuityStarts[i]; + var discontinuity = playlist.discontinuitySequence + i + 1; + var mediaIndexDiff = segmentIndex - segmentInfo.mediaIndex; + var accuracy = Math.abs(mediaIndexDiff); + + if (!this.discontinuities[discontinuity] || this.discontinuities[discontinuity].accuracy > accuracy) { + var time = void 0; + + if (mediaIndexDiff < 0) { + time = segment.start - sumDurations(playlist, segmentInfo.mediaIndex, segmentIndex); + } else { + time = segment.end + sumDurations(playlist, segmentInfo.mediaIndex + 1, segmentIndex); + } + + this.discontinuities[discontinuity] = { + time: time, + accuracy: accuracy + }; + } + } + } + }; + + return SyncController; + }(videojs$1.EventTarget); + + var Decrypter$1 = new shimWorker("./decrypter-worker.worker.js", function (window, document$$1) { + var self = this; + var decrypterWorker = function () { + + var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + var win; + + if (typeof window !== "undefined") { + win = window; + } else if (typeof commonjsGlobal !== "undefined") { + win = commonjsGlobal; + } else if (typeof self !== "undefined") { + win = self; + } else { + win = {}; + } + + var window_1$$1 = win; + + /* + * pkcs7.pad + * https://github.com/brightcove/pkcs7 + * + * Copyright (c) 2014 Brightcove + * Licensed under the apache2 license. + */ + + /** + * Returns the subarray of a Uint8Array without PKCS#7 padding. + * @param padded {Uint8Array} unencrypted bytes that have been padded + * @return {Uint8Array} the unpadded bytes + * @see http://tools.ietf.org/html/rfc5652 + */ + function unpad(padded) { + return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]); + } + + var classCallCheck$$1 = function classCallCheck$$1(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + var createClass$$1 = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + var inherits$$1 = function inherits$$1(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === 'undefined' ? 'undefined' : _typeof(superClass))); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + }; + + var possibleConstructorReturn$$1 = function possibleConstructorReturn$$1(self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && ((typeof call === 'undefined' ? 'undefined' : _typeof(call)) === "object" || typeof call === "function") ? call : self; + }; + + /** + * @file aes.js + * + * This file contains an adaptation of the AES decryption algorithm + * from the Standford Javascript Cryptography Library. That work is + * covered by the following copyright and permissions notice: + * + * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation + * are those of the authors and should not be interpreted as representing + * official policies, either expressed or implied, of the authors. + */ + + /** + * Expand the S-box tables. + * + * @private + */ + var precompute = function precompute() { + var tables = [[[], [], [], [], []], [[], [], [], [], []]]; + var encTable = tables[0]; + var decTable = tables[1]; + var sbox = encTable[4]; + var sboxInv = decTable[4]; + var i = void 0; + var x = void 0; + var xInv = void 0; + var d = []; + var th = []; + var x2 = void 0; + var x4 = void 0; + var x8 = void 0; + var s = void 0; + var tEnc = void 0; + var tDec = void 0; + + // Compute double and third tables + for (i = 0; i < 256; i++) { + th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i; + } + + for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) { + // Compute sbox + s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4; + s = s >> 8 ^ s & 255 ^ 99; + sbox[x] = s; + sboxInv[s] = x; + + // Compute MixColumns + x8 = d[x4 = d[x2 = d[x]]]; + tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100; + tEnc = d[s] * 0x101 ^ s * 0x1010100; + + for (i = 0; i < 4; i++) { + encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8; + decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8; + } + } + + // Compactify. Considerable speedup on Firefox. + for (i = 0; i < 5; i++) { + encTable[i] = encTable[i].slice(0); + decTable[i] = decTable[i].slice(0); + } + return tables; + }; + var aesTables = null; + + /** + * Schedule out an AES key for both encryption and decryption. This + * is a low-level class. Use a cipher mode to do bulk encryption. + * + * @class AES + * @param key {Array} The key as an array of 4, 6 or 8 words. + */ + + var AES = function () { + function AES(key) { + classCallCheck$$1(this, AES); + + /** + * The expanded S-box and inverse S-box tables. These will be computed + * on the client so that we don't have to send them down the wire. + * + * There are two tables, _tables[0] is for encryption and + * _tables[1] is for decryption. + * + * The first 4 sub-tables are the expanded S-box with MixColumns. The + * last (_tables[01][4]) is the S-box itself. + * + * @private + */ + // if we have yet to precompute the S-box tables + // do so now + if (!aesTables) { + aesTables = precompute(); + } + // then make a copy of that object for use + this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]]; + var i = void 0; + var j = void 0; + var tmp = void 0; + var encKey = void 0; + var decKey = void 0; + var sbox = this._tables[0][4]; + var decTable = this._tables[1]; + var keyLen = key.length; + var rcon = 1; + + if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) { + throw new Error('Invalid aes key size'); + } + + encKey = key.slice(0); + decKey = []; + this._key = [encKey, decKey]; + + // schedule encryption keys + for (i = keyLen; i < 4 * keyLen + 28; i++) { + tmp = encKey[i - 1]; + + // apply sbox + if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) { + tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; + + // shift rows and add rcon + if (i % keyLen === 0) { + tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24; + rcon = rcon << 1 ^ (rcon >> 7) * 283; + } + } + + encKey[i] = encKey[i - keyLen] ^ tmp; + } + + // schedule decryption keys + for (j = 0; i; j++, i--) { + tmp = encKey[j & 3 ? i : i - 4]; + if (i <= 4 || j < 4) { + decKey[j] = tmp; + } else { + decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]]; + } + } + } + + /** + * Decrypt 16 bytes, specified as four 32-bit words. + * + * @param {Number} encrypted0 the first word to decrypt + * @param {Number} encrypted1 the second word to decrypt + * @param {Number} encrypted2 the third word to decrypt + * @param {Number} encrypted3 the fourth word to decrypt + * @param {Int32Array} out the array to write the decrypted words + * into + * @param {Number} offset the offset into the output array to start + * writing results + * @return {Array} The plaintext. + */ + + AES.prototype.decrypt = function decrypt$$1(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) { + var key = this._key[1]; + // state variables a,b,c,d are loaded with pre-whitened data + var a = encrypted0 ^ key[0]; + var b = encrypted3 ^ key[1]; + var c = encrypted2 ^ key[2]; + var d = encrypted1 ^ key[3]; + var a2 = void 0; + var b2 = void 0; + var c2 = void 0; + + // key.length === 2 ? + var nInnerRounds = key.length / 4 - 2; + var i = void 0; + var kIndex = 4; + var table = this._tables[1]; + + // load up the tables + var table0 = table[0]; + var table1 = table[1]; + var table2 = table[2]; + var table3 = table[3]; + var sbox = table[4]; + + // Inner rounds. Cribbed from OpenSSL. + for (i = 0; i < nInnerRounds; i++) { + a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d & 255] ^ key[kIndex]; + b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1]; + c2 = table0[c >>> 24] ^ table1[d >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2]; + d = table0[d >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3]; + kIndex += 4; + a = a2; + b = b2; + c = c2; + } + + // Last round. + for (i = 0; i < 4; i++) { + out[(3 & -i) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++]; + a2 = a; + a = b; + b = c; + c = d; + d = a2; + } + }; + + return AES; + }(); + + /** + * @file stream.js + */ + /** + * A lightweight readable stream implemention that handles event dispatching. + * + * @class Stream + */ + var Stream = function () { + function Stream() { + classCallCheck$$1(this, Stream); + + this.listeners = {}; + } + + /** + * Add a listener for a specified event type. + * + * @param {String} type the event name + * @param {Function} listener the callback to be invoked when an event of + * the specified type occurs + */ + + Stream.prototype.on = function on(type, listener) { + if (!this.listeners[type]) { + this.listeners[type] = []; + } + this.listeners[type].push(listener); + }; + + /** + * Remove a listener for a specified event type. + * + * @param {String} type the event name + * @param {Function} listener a function previously registered for this + * type of event through `on` + * @return {Boolean} if we could turn it off or not + */ + + Stream.prototype.off = function off(type, listener) { + if (!this.listeners[type]) { + return false; + } + + var index = this.listeners[type].indexOf(listener); + + this.listeners[type].splice(index, 1); + return index > -1; + }; + + /** + * Trigger an event of the specified type on this stream. Any additional + * arguments to this function are passed as parameters to event listeners. + * + * @param {String} type the event name + */ + + Stream.prototype.trigger = function trigger(type) { + var callbacks = this.listeners[type]; + + if (!callbacks) { + return; + } + + // Slicing the arguments on every invocation of this method + // can add a significant amount of overhead. Avoid the + // intermediate object creation for the common case of a + // single callback argument + if (arguments.length === 2) { + var length = callbacks.length; + + for (var i = 0; i < length; ++i) { + callbacks[i].call(this, arguments[1]); + } + } else { + var args = Array.prototype.slice.call(arguments, 1); + var _length = callbacks.length; + + for (var _i = 0; _i < _length; ++_i) { + callbacks[_i].apply(this, args); + } + } + }; + + /** + * Destroys the stream and cleans up. + */ + + Stream.prototype.dispose = function dispose() { + this.listeners = {}; + }; + /** + * Forwards all `data` events on this stream to the destination stream. The + * destination stream should provide a method `push` to receive the data + * events as they arrive. + * + * @param {Stream} destination the stream that will receive all `data` events + * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options + */ + + Stream.prototype.pipe = function pipe(destination) { + this.on('data', function (data) { + destination.push(data); + }); + }; + + return Stream; + }(); + + /** + * @file async-stream.js + */ + /** + * A wrapper around the Stream class to use setTiemout + * and run stream "jobs" Asynchronously + * + * @class AsyncStream + * @extends Stream + */ + + var AsyncStream$$1 = function (_Stream) { + inherits$$1(AsyncStream$$1, _Stream); + + function AsyncStream$$1() { + classCallCheck$$1(this, AsyncStream$$1); + + var _this = possibleConstructorReturn$$1(this, _Stream.call(this, Stream)); + + _this.jobs = []; + _this.delay = 1; + _this.timeout_ = null; + return _this; + } + + /** + * process an async job + * + * @private + */ + + AsyncStream$$1.prototype.processJob_ = function processJob_() { + this.jobs.shift()(); + if (this.jobs.length) { + this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay); + } else { + this.timeout_ = null; + } + }; + + /** + * push a job into the stream + * + * @param {Function} job the job to push into the stream + */ + + AsyncStream$$1.prototype.push = function push(job) { + this.jobs.push(job); + if (!this.timeout_) { + this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay); + } + }; + + return AsyncStream$$1; + }(Stream); + + /** + * @file decrypter.js + * + * An asynchronous implementation of AES-128 CBC decryption with + * PKCS#7 padding. + */ + + /** + * Convert network-order (big-endian) bytes into their little-endian + * representation. + */ + var ntoh = function ntoh(word) { + return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24; + }; + + /** + * Decrypt bytes using AES-128 with CBC and PKCS#7 padding. + * + * @param {Uint8Array} encrypted the encrypted bytes + * @param {Uint32Array} key the bytes of the decryption key + * @param {Uint32Array} initVector the initialization vector (IV) to + * use for the first round of CBC. + * @return {Uint8Array} the decrypted bytes + * + * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard + * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29 + * @see https://tools.ietf.org/html/rfc2315 + */ + var decrypt$$1 = function decrypt$$1(encrypted, key, initVector) { + // word-level access to the encrypted bytes + var encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2); + + var decipher = new AES(Array.prototype.slice.call(key)); + + // byte and word-level access for the decrypted output + var decrypted = new Uint8Array(encrypted.byteLength); + var decrypted32 = new Int32Array(decrypted.buffer); + + // temporary variables for working with the IV, encrypted, and + // decrypted data + var init0 = void 0; + var init1 = void 0; + var init2 = void 0; + var init3 = void 0; + var encrypted0 = void 0; + var encrypted1 = void 0; + var encrypted2 = void 0; + var encrypted3 = void 0; + + // iteration variable + var wordIx = void 0; + + // pull out the words of the IV to ensure we don't modify the + // passed-in reference and easier access + init0 = initVector[0]; + init1 = initVector[1]; + init2 = initVector[2]; + init3 = initVector[3]; + + // decrypt four word sequences, applying cipher-block chaining (CBC) + // to each decrypted block + for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) { + // convert big-endian (network order) words into little-endian + // (javascript order) + encrypted0 = ntoh(encrypted32[wordIx]); + encrypted1 = ntoh(encrypted32[wordIx + 1]); + encrypted2 = ntoh(encrypted32[wordIx + 2]); + encrypted3 = ntoh(encrypted32[wordIx + 3]); + + // decrypt the block + decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx); + + // XOR with the IV, and restore network byte-order to obtain the + // plaintext + decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0); + decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1); + decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2); + decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3); + + // setup the IV for the next round + init0 = encrypted0; + init1 = encrypted1; + init2 = encrypted2; + init3 = encrypted3; + } + + return decrypted; + }; + + /** + * The `Decrypter` class that manages decryption of AES + * data through `AsyncStream` objects and the `decrypt` + * function + * + * @param {Uint8Array} encrypted the encrypted bytes + * @param {Uint32Array} key the bytes of the decryption key + * @param {Uint32Array} initVector the initialization vector (IV) to + * @param {Function} done the function to run when done + * @class Decrypter + */ + + var Decrypter$$1 = function () { + function Decrypter$$1(encrypted, key, initVector, done) { + classCallCheck$$1(this, Decrypter$$1); + + var step = Decrypter$$1.STEP; + var encrypted32 = new Int32Array(encrypted.buffer); + var decrypted = new Uint8Array(encrypted.byteLength); + var i = 0; + + this.asyncStream_ = new AsyncStream$$1(); + + // split up the encryption job and do the individual chunks asynchronously + this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted)); + for (i = step; i < encrypted32.length; i += step) { + initVector = new Uint32Array([ntoh(encrypted32[i - 4]), ntoh(encrypted32[i - 3]), ntoh(encrypted32[i - 2]), ntoh(encrypted32[i - 1])]); + this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted)); + } + // invoke the done() callback when everything is finished + this.asyncStream_.push(function () { + // remove pkcs#7 padding from the decrypted bytes + done(null, unpad(decrypted)); + }); + } + + /** + * a getter for step the maximum number of bytes to process at one time + * + * @return {Number} the value of step 32000 + */ + + /** + * @private + */ + Decrypter$$1.prototype.decryptChunk_ = function decryptChunk_(encrypted, key, initVector, decrypted) { + return function () { + var bytes = decrypt$$1(encrypted, key, initVector); + + decrypted.set(bytes, encrypted.byteOffset); + }; + }; + + createClass$$1(Decrypter$$1, null, [{ + key: 'STEP', + get: function get$$1() { + // 4 * 8000; + return 32000; + } + }]); + return Decrypter$$1; + }(); + + /** + * @file bin-utils.js + */ + + /** + * Creates an object for sending to a web worker modifying properties that are TypedArrays + * into a new object with seperated properties for the buffer, byteOffset, and byteLength. + * + * @param {Object} message + * Object of properties and values to send to the web worker + * @return {Object} + * Modified message with TypedArray values expanded + * @function createTransferableMessage + */ + var createTransferableMessage = function createTransferableMessage(message) { + var transferable = {}; + + Object.keys(message).forEach(function (key) { + var value = message[key]; + + if (ArrayBuffer.isView(value)) { + transferable[key] = { + bytes: value.buffer, + byteOffset: value.byteOffset, + byteLength: value.byteLength + }; + } else { + transferable[key] = value; + } + }); + + return transferable; + }; + + /** + * Our web worker interface so that things can talk to aes-decrypter + * that will be running in a web worker. the scope is passed to this by + * webworkify. + * + * @param {Object} self + * the scope for the web worker + */ + var DecrypterWorker = function DecrypterWorker(self) { + self.onmessage = function (event) { + var data = event.data; + var encrypted = new Uint8Array(data.encrypted.bytes, data.encrypted.byteOffset, data.encrypted.byteLength); + var key = new Uint32Array(data.key.bytes, data.key.byteOffset, data.key.byteLength / 4); + var iv = new Uint32Array(data.iv.bytes, data.iv.byteOffset, data.iv.byteLength / 4); + + /* eslint-disable no-new, handle-callback-err */ + new Decrypter$$1(encrypted, key, iv, function (err, bytes) { + window_1$$1.postMessage(createTransferableMessage({ + source: data.source, + decrypted: bytes + }), [bytes.buffer]); + }); + /* eslint-enable */ + }; + }; + + var decrypterWorker = new DecrypterWorker(self); + + return decrypterWorker; + }(); + }); + + /** + * Convert the properties of an HLS track into an audioTrackKind. + * + * @private + */ + var audioTrackKind_ = function audioTrackKind_(properties) { + var kind = properties.default ? 'main' : 'alternative'; + + if (properties.characteristics && properties.characteristics.indexOf('public.accessibility.describes-video') >= 0) { + kind = 'main-desc'; + } + + return kind; + }; + + /** + * Pause provided segment loader and playlist loader if active + * + * @param {SegmentLoader} segmentLoader + * SegmentLoader to pause + * @param {Object} mediaType + * Active media type + * @function stopLoaders + */ + var stopLoaders = function stopLoaders(segmentLoader, mediaType) { + segmentLoader.abort(); + segmentLoader.pause(); + + if (mediaType && mediaType.activePlaylistLoader) { + mediaType.activePlaylistLoader.pause(); + mediaType.activePlaylistLoader = null; + } + }; + + /** + * Start loading provided segment loader and playlist loader + * + * @param {PlaylistLoader} playlistLoader + * PlaylistLoader to start loading + * @param {Object} mediaType + * Active media type + * @function startLoaders + */ + var startLoaders = function startLoaders(playlistLoader, mediaType) { + // Segment loader will be started after `loadedmetadata` or `loadedplaylist` from the + // playlist loader + mediaType.activePlaylistLoader = playlistLoader; + playlistLoader.load(); + }; + + /** + * Returns a function to be called when the media group changes. It performs a + * non-destructive (preserve the buffer) resync of the SegmentLoader. This is because a + * change of group is merely a rendition switch of the same content at another encoding, + * rather than a change of content, such as switching audio from English to Spanish. + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @return {Function} + * Handler for a non-destructive resync of SegmentLoader when the active media + * group changes. + * @function onGroupChanged + */ + var onGroupChanged = function onGroupChanged(type, settings) { + return function () { + var _settings$segmentLoad = settings.segmentLoaders, + segmentLoader = _settings$segmentLoad[type], + mainSegmentLoader = _settings$segmentLoad.main, + mediaType = settings.mediaTypes[type]; + + var activeTrack = mediaType.activeTrack(); + var activeGroup = mediaType.activeGroup(activeTrack); + var previousActiveLoader = mediaType.activePlaylistLoader; + + stopLoaders(segmentLoader, mediaType); + + if (!activeGroup) { + // there is no group active + return; + } + + if (!activeGroup.playlistLoader) { + if (previousActiveLoader) { + // The previous group had a playlist loader but the new active group does not + // this means we are switching from demuxed to muxed audio. In this case we want to + // do a destructive reset of the main segment loader and not restart the audio + // loaders. + mainSegmentLoader.resetEverything(); + } + return; + } + + // Non-destructive resync + segmentLoader.resyncLoader(); + + startLoaders(activeGroup.playlistLoader, mediaType); + }; + }; + + /** + * Returns a function to be called when the media track changes. It performs a + * destructive reset of the SegmentLoader to ensure we start loading as close to + * currentTime as possible. + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @return {Function} + * Handler for a destructive reset of SegmentLoader when the active media + * track changes. + * @function onTrackChanged + */ + var onTrackChanged = function onTrackChanged(type, settings) { + return function () { + var _settings$segmentLoad2 = settings.segmentLoaders, + segmentLoader = _settings$segmentLoad2[type], + mainSegmentLoader = _settings$segmentLoad2.main, + mediaType = settings.mediaTypes[type]; + + var activeTrack = mediaType.activeTrack(); + var activeGroup = mediaType.activeGroup(activeTrack); + var previousActiveLoader = mediaType.activePlaylistLoader; + + stopLoaders(segmentLoader, mediaType); + + if (!activeGroup) { + // there is no group active so we do not want to restart loaders + return; + } + + if (!activeGroup.playlistLoader) { + // when switching from demuxed audio/video to muxed audio/video (noted by no playlist + // loader for the audio group), we want to do a destructive reset of the main segment + // loader and not restart the audio loaders + mainSegmentLoader.resetEverything(); + return; + } + + if (previousActiveLoader === activeGroup.playlistLoader) { + // Nothing has actually changed. This can happen because track change events can fire + // multiple times for a "single" change. One for enabling the new active track, and + // one for disabling the track that was active + startLoaders(activeGroup.playlistLoader, mediaType); + return; + } + + if (segmentLoader.track) { + // For WebVTT, set the new text track in the segmentloader + segmentLoader.track(activeTrack); + } + + // destructive reset + segmentLoader.resetEverything(); + + startLoaders(activeGroup.playlistLoader, mediaType); + }; + }; + + var onError = { + /** + * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters + * an error. + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @return {Function} + * Error handler. Logs warning (or error if the playlist is blacklisted) to + * console and switches back to default audio track. + * @function onError.AUDIO + */ + AUDIO: function AUDIO(type, settings) { + return function () { + var segmentLoader = settings.segmentLoaders[type], + mediaType = settings.mediaTypes[type], + blacklistCurrentPlaylist = settings.blacklistCurrentPlaylist; + + + stopLoaders(segmentLoader, mediaType); + + // switch back to default audio track + var activeTrack = mediaType.activeTrack(); + var activeGroup = mediaType.activeGroup(); + var id = (activeGroup.filter(function (group) { + return group.default; + })[0] || activeGroup[0]).id; + var defaultTrack = mediaType.tracks[id]; + + if (activeTrack === defaultTrack) { + // Default track encountered an error. All we can do now is blacklist the current + // rendition and hope another will switch audio groups + blacklistCurrentPlaylist({ + message: 'Problem encountered loading the default audio track.' + }); + return; + } + + videojs$1.log.warn('Problem encountered loading the alternate audio track.' + 'Switching back to default.'); + + for (var trackId in mediaType.tracks) { + mediaType.tracks[trackId].enabled = mediaType.tracks[trackId] === defaultTrack; + } + + mediaType.onTrackChanged(); + }; + }, + /** + * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters + * an error. + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @return {Function} + * Error handler. Logs warning to console and disables the active subtitle track + * @function onError.SUBTITLES + */ + SUBTITLES: function SUBTITLES(type, settings) { + return function () { + var segmentLoader = settings.segmentLoaders[type], + mediaType = settings.mediaTypes[type]; + + + videojs$1.log.warn('Problem encountered loading the subtitle track.' + 'Disabling subtitle track.'); + + stopLoaders(segmentLoader, mediaType); + + var track = mediaType.activeTrack(); + + if (track) { + track.mode = 'disabled'; + } + + mediaType.onTrackChanged(); + }; + } + }; + + var setupListeners = { + /** + * Setup event listeners for audio playlist loader + * + * @param {String} type + * MediaGroup type + * @param {PlaylistLoader|null} playlistLoader + * PlaylistLoader to register listeners on + * @param {Object} settings + * Object containing required information for media groups + * @function setupListeners.AUDIO + */ + AUDIO: function AUDIO(type, playlistLoader, settings) { + if (!playlistLoader) { + // no playlist loader means audio will be muxed with the video + return; + } + + var tech = settings.tech, + requestOptions = settings.requestOptions, + segmentLoader = settings.segmentLoaders[type]; + + + playlistLoader.on('loadedmetadata', function () { + var media = playlistLoader.media(); + + segmentLoader.playlist(media, requestOptions); + + // if the video is already playing, or if this isn't a live video and preload + // permits, start downloading segments + if (!tech.paused() || media.endList && tech.preload() !== 'none') { + segmentLoader.load(); + } + }); + + playlistLoader.on('loadedplaylist', function () { + segmentLoader.playlist(playlistLoader.media(), requestOptions); + + // If the player isn't paused, ensure that the segment loader is running + if (!tech.paused()) { + segmentLoader.load(); + } + }); + + playlistLoader.on('error', onError[type](type, settings)); + }, + /** + * Setup event listeners for subtitle playlist loader + * + * @param {String} type + * MediaGroup type + * @param {PlaylistLoader|null} playlistLoader + * PlaylistLoader to register listeners on + * @param {Object} settings + * Object containing required information for media groups + * @function setupListeners.SUBTITLES + */ + SUBTITLES: function SUBTITLES(type, playlistLoader, settings) { + var tech = settings.tech, + requestOptions = settings.requestOptions, + segmentLoader = settings.segmentLoaders[type], + mediaType = settings.mediaTypes[type]; + + + playlistLoader.on('loadedmetadata', function () { + var media = playlistLoader.media(); + + segmentLoader.playlist(media, requestOptions); + segmentLoader.track(mediaType.activeTrack()); + + // if the video is already playing, or if this isn't a live video and preload + // permits, start downloading segments + if (!tech.paused() || media.endList && tech.preload() !== 'none') { + segmentLoader.load(); + } + }); + + playlistLoader.on('loadedplaylist', function () { + segmentLoader.playlist(playlistLoader.media(), requestOptions); + + // If the player isn't paused, ensure that the segment loader is running + if (!tech.paused()) { + segmentLoader.load(); + } + }); + + playlistLoader.on('error', onError[type](type, settings)); + } + }; + + var byGroupId = function byGroupId(type, groupId) { + return function (playlist) { + return playlist.attributes[type] === groupId; + }; + }; + + var byResolvedUri = function byResolvedUri(resolvedUri) { + return function (playlist) { + return playlist.resolvedUri === resolvedUri; + }; + }; + + var initialize = { + /** + * Setup PlaylistLoaders and AudioTracks for the audio groups + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @function initialize.AUDIO + */ + 'AUDIO': function AUDIO(type, settings) { + var hls = settings.hls, + sourceType = settings.sourceType, + segmentLoader = settings.segmentLoaders[type], + withCredentials = settings.requestOptions.withCredentials, + _settings$master = settings.master, + mediaGroups = _settings$master.mediaGroups, + playlists = _settings$master.playlists, + _settings$mediaTypes$ = settings.mediaTypes[type], + groups = _settings$mediaTypes$.groups, + tracks = _settings$mediaTypes$.tracks, + masterPlaylistLoader = settings.masterPlaylistLoader; + + // force a default if we have none + + if (!mediaGroups[type] || Object.keys(mediaGroups[type]).length === 0) { + mediaGroups[type] = {main: {default: {default: true}}}; + } + + for (var groupId in mediaGroups[type]) { + if (!groups[groupId]) { + groups[groupId] = []; + } + + // List of playlists that have an AUDIO attribute value matching the current + // group ID + var groupPlaylists = playlists.filter(byGroupId(type, groupId)); + + for (var variantLabel in mediaGroups[type][groupId]) { + var properties = mediaGroups[type][groupId][variantLabel]; + + // List of playlists for the current group ID that have a matching uri with + // this alternate audio variant + var matchingPlaylists = groupPlaylists.filter(byResolvedUri(properties.resolvedUri)); + + if (matchingPlaylists.length) { + // If there is a playlist that has the same uri as this audio variant, assume + // that the playlist is audio only. We delete the resolvedUri property here + // to prevent a playlist loader from being created so that we don't have + // both the main and audio segment loaders loading the same audio segments + // from the same playlist. + delete properties.resolvedUri; + } + + var playlistLoader = void 0; + + if (properties.resolvedUri) { + playlistLoader = new PlaylistLoader(properties.resolvedUri, hls, withCredentials); + } else if (properties.playlists && sourceType === 'dash') { + playlistLoader = new DashPlaylistLoader(properties.playlists[0], hls, withCredentials, masterPlaylistLoader); + } else { + // no resolvedUri means the audio is muxed with the video when using this + // audio track + playlistLoader = null; + } + + properties = videojs$1.mergeOptions({id: variantLabel, playlistLoader: playlistLoader}, properties); + + setupListeners[type](type, properties.playlistLoader, settings); + + groups[groupId].push(properties); + + if (typeof tracks[variantLabel] === 'undefined') { + var track = new videojs$1.AudioTrack({ + id: variantLabel, + kind: audioTrackKind_(properties), + enabled: false, + language: properties.language, + default: properties.default, + label: variantLabel + }); + + tracks[variantLabel] = track; + } + } + } + + // setup single error event handler for the segment loader + segmentLoader.on('error', onError[type](type, settings)); + }, + /** + * Setup PlaylistLoaders and TextTracks for the subtitle groups + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @function initialize.SUBTITLES + */ + 'SUBTITLES': function SUBTITLES(type, settings) { + var tech = settings.tech, + hls = settings.hls, + sourceType = settings.sourceType, + segmentLoader = settings.segmentLoaders[type], + withCredentials = settings.requestOptions.withCredentials, + mediaGroups = settings.master.mediaGroups, + _settings$mediaTypes$2 = settings.mediaTypes[type], + groups = _settings$mediaTypes$2.groups, + tracks = _settings$mediaTypes$2.tracks, + masterPlaylistLoader = settings.masterPlaylistLoader; + + + for (var groupId in mediaGroups[type]) { + if (!groups[groupId]) { + groups[groupId] = []; + } + + for (var variantLabel in mediaGroups[type][groupId]) { + if (mediaGroups[type][groupId][variantLabel].forced) { + // Subtitle playlists with the forced attribute are not selectable in Safari. + // According to Apple's HLS Authoring Specification: + // If content has forced subtitles and regular subtitles in a given language, + // the regular subtitles track in that language MUST contain both the forced + // subtitles and the regular subtitles for that language. + // Because of this requirement and that Safari does not add forced subtitles, + // forced subtitles are skipped here to maintain consistent experience across + // all platforms + continue; + } + + var properties = mediaGroups[type][groupId][variantLabel]; + + var playlistLoader = void 0; + + if (sourceType === 'hls') { + playlistLoader = new PlaylistLoader(properties.resolvedUri, hls, withCredentials); + } else if (sourceType === 'dash') { + playlistLoader = new DashPlaylistLoader(properties.playlists[0], hls, withCredentials, masterPlaylistLoader); + } + + properties = videojs$1.mergeOptions({ + id: variantLabel, + playlistLoader: playlistLoader + }, properties); + + setupListeners[type](type, properties.playlistLoader, settings); + + groups[groupId].push(properties); + + if (typeof tracks[variantLabel] === 'undefined') { + var track = tech.addRemoteTextTrack({ + id: variantLabel, + kind: 'subtitles', + enabled: false, + language: properties.language, + label: variantLabel + }, false).track; + + tracks[variantLabel] = track; + } + } + } + + // setup single error event handler for the segment loader + segmentLoader.on('error', onError[type](type, settings)); + }, + /** + * Setup TextTracks for the closed-caption groups + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @function initialize['CLOSED-CAPTIONS'] + */ + 'CLOSED-CAPTIONS': function CLOSEDCAPTIONS(type, settings) { + var tech = settings.tech, + mediaGroups = settings.master.mediaGroups, + _settings$mediaTypes$3 = settings.mediaTypes[type], + groups = _settings$mediaTypes$3.groups, + tracks = _settings$mediaTypes$3.tracks; + + + for (var groupId in mediaGroups[type]) { + if (!groups[groupId]) { + groups[groupId] = []; + } + + for (var variantLabel in mediaGroups[type][groupId]) { + var properties = mediaGroups[type][groupId][variantLabel]; + + // We only support CEA608 captions for now, so ignore anything that + // doesn't use a CCx INSTREAM-ID + if (!properties.instreamId.match(/CC\d/)) { + continue; + } + + // No PlaylistLoader is required for Closed-Captions because the captions are + // embedded within the video stream + groups[groupId].push(videojs$1.mergeOptions({id: variantLabel}, properties)); + + if (typeof tracks[variantLabel] === 'undefined') { + var track = tech.addRemoteTextTrack({ + id: properties.instreamId, + kind: 'captions', + enabled: false, + language: properties.language, + label: variantLabel + }, false).track; + + tracks[variantLabel] = track; + } + } + } + } + }; + + /** + * Returns a function used to get the active group of the provided type + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @return {Function} + * Function that returns the active media group for the provided type. Takes an + * optional parameter {TextTrack} track. If no track is provided, a list of all + * variants in the group, otherwise the variant corresponding to the provided + * track is returned. + * @function activeGroup + */ + var activeGroup = function activeGroup(type, settings) { + return function (track) { + var masterPlaylistLoader = settings.masterPlaylistLoader, + groups = settings.mediaTypes[type].groups; + + + var media = masterPlaylistLoader.media(); + + if (!media) { + return null; + } + + var variants = null; + + if (media.attributes[type]) { + variants = groups[media.attributes[type]]; + } + + variants = variants || groups.main; + + if (typeof track === 'undefined') { + return variants; + } + + if (track === null) { + // An active track was specified so a corresponding group is expected. track === null + // means no track is currently active so there is no corresponding group + return null; + } + + return variants.filter(function (props) { + return props.id === track.id; + })[0] || null; + }; + }; + + var activeTrack = { + /** + * Returns a function used to get the active track of type provided + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @return {Function} + * Function that returns the active media track for the provided type. Returns + * null if no track is active + * @function activeTrack.AUDIO + */ + AUDIO: function AUDIO(type, settings) { + return function () { + var tracks = settings.mediaTypes[type].tracks; + + + for (var id in tracks) { + if (tracks[id].enabled) { + return tracks[id]; + } + } + + return null; + }; + }, + /** + * Returns a function used to get the active track of type provided + * + * @param {String} type + * MediaGroup type + * @param {Object} settings + * Object containing required information for media groups + * @return {Function} + * Function that returns the active media track for the provided type. Returns + * null if no track is active + * @function activeTrack.SUBTITLES + */ + SUBTITLES: function SUBTITLES(type, settings) { + return function () { + var tracks = settings.mediaTypes[type].tracks; + + + for (var id in tracks) { + if (tracks[id].mode === 'showing') { + return tracks[id]; + } + } + + return null; + }; + } + }; + + /** + * Setup PlaylistLoaders and Tracks for media groups (Audio, Subtitles, + * Closed-Captions) specified in the master manifest. + * + * @param {Object} settings + * Object containing required information for setting up the media groups + * @param {SegmentLoader} settings.segmentLoaders.AUDIO + * Audio segment loader + * @param {SegmentLoader} settings.segmentLoaders.SUBTITLES + * Subtitle segment loader + * @param {SegmentLoader} settings.segmentLoaders.main + * Main segment loader + * @param {Tech} settings.tech + * The tech of the player + * @param {Object} settings.requestOptions + * XHR request options used by the segment loaders + * @param {PlaylistLoader} settings.masterPlaylistLoader + * PlaylistLoader for the master source + * @param {HlsHandler} settings.hls + * HLS SourceHandler + * @param {Object} settings.master + * The parsed master manifest + * @param {Object} settings.mediaTypes + * Object to store the loaders, tracks, and utility methods for each media type + * @param {Function} settings.blacklistCurrentPlaylist + * Blacklists the current rendition and forces a rendition switch. + * @function setupMediaGroups + */ + var setupMediaGroups = function setupMediaGroups(settings) { + ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(function (type) { + initialize[type](type, settings); + }); + + var mediaTypes = settings.mediaTypes, + masterPlaylistLoader = settings.masterPlaylistLoader, + tech = settings.tech, + hls = settings.hls; + + // setup active group and track getters and change event handlers + + ['AUDIO', 'SUBTITLES'].forEach(function (type) { + mediaTypes[type].activeGroup = activeGroup(type, settings); + mediaTypes[type].activeTrack = activeTrack[type](type, settings); + mediaTypes[type].onGroupChanged = onGroupChanged(type, settings); + mediaTypes[type].onTrackChanged = onTrackChanged(type, settings); + }); + + // DO NOT enable the default subtitle or caption track. + // DO enable the default audio track + var audioGroup = mediaTypes.AUDIO.activeGroup(); + var groupId = (audioGroup.filter(function (group) { + return group.default; + })[0] || audioGroup[0]).id; + + mediaTypes.AUDIO.tracks[groupId].enabled = true; + mediaTypes.AUDIO.onTrackChanged(); + + masterPlaylistLoader.on('mediachange', function () { + ['AUDIO', 'SUBTITLES'].forEach(function (type) { + return mediaTypes[type].onGroupChanged(); + }); + }); + + // custom audio track change event handler for usage event + var onAudioTrackChanged = function onAudioTrackChanged() { + mediaTypes.AUDIO.onTrackChanged(); + tech.trigger({type: 'usage', name: 'hls-audio-change'}); + }; + + tech.audioTracks().addEventListener('change', onAudioTrackChanged); + tech.remoteTextTracks().addEventListener('change', mediaTypes.SUBTITLES.onTrackChanged); + + hls.on('dispose', function () { + tech.audioTracks().removeEventListener('change', onAudioTrackChanged); + tech.remoteTextTracks().removeEventListener('change', mediaTypes.SUBTITLES.onTrackChanged); + }); + + // clear existing audio tracks and add the ones we just created + tech.clearTracks('audio'); + + for (var id in mediaTypes.AUDIO.tracks) { + tech.audioTracks().addTrack(mediaTypes.AUDIO.tracks[id]); + } + }; + + /** + * Creates skeleton object used to store the loaders, tracks, and utility methods for each + * media type + * + * @return {Object} + * Object to store the loaders, tracks, and utility methods for each media type + * @function createMediaTypes + */ + var createMediaTypes = function createMediaTypes() { + var mediaTypes = {}; + + ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(function (type) { + mediaTypes[type] = { + groups: {}, + tracks: {}, + activePlaylistLoader: null, + activeGroup: noop$1, + activeTrack: noop$1, + onGroupChanged: noop$1, + onTrackChanged: noop$1 + }; + }); + + return mediaTypes; + }; + + /** + * @file master-playlist-controller.js + */ + + var ABORT_EARLY_BLACKLIST_SECONDS = 60 * 2; + + var Hls = void 0; + + // SegmentLoader stats that need to have each loader's + // values summed to calculate the final value + var loaderStats = ['mediaRequests', 'mediaRequestsAborted', 'mediaRequestsTimedout', 'mediaRequestsErrored', 'mediaTransferDuration', 'mediaBytesTransferred']; + var sumLoaderStat = function sumLoaderStat(stat) { + return this.audioSegmentLoader_[stat] + this.mainSegmentLoader_[stat]; + }; + + /** + * the master playlist controller controller all interactons + * between playlists and segmentloaders. At this time this mainly + * involves a master playlist and a series of audio playlists + * if they are available + * + * @class MasterPlaylistController + * @extends videojs.EventTarget + */ + + var MasterPlaylistController = function (_videojs$EventTarget5) { + inherits(MasterPlaylistController, _videojs$EventTarget5); + + function MasterPlaylistController(options) { + classCallCheck(this, MasterPlaylistController); + + var _this29 = possibleConstructorReturn(this, _videojs$EventTarget5.call(this)); + + var url = options.url, + withCredentials = options.withCredentials, + tech = options.tech, + bandwidth = options.bandwidth, + externHls = options.externHls, + useCueTags = options.useCueTags, + blacklistDuration = options.blacklistDuration, + enableLowInitialPlaylist = options.enableLowInitialPlaylist, + sourceType = options.sourceType; + + + if (!url) { + throw new Error('A non-empty playlist URL is required'); + } + + Hls = externHls; + + _this29.withCredentials = withCredentials; + _this29.tech_ = tech; + _this29.hls_ = tech.hls; + _this29.sourceType_ = sourceType; + _this29.useCueTags_ = useCueTags; + _this29.blacklistDuration = blacklistDuration; + _this29.enableLowInitialPlaylist = enableLowInitialPlaylist; + if (_this29.useCueTags_) { + _this29.cueTagsTrack_ = _this29.tech_.addTextTrack('metadata', 'ad-cues'); + _this29.cueTagsTrack_.inBandMetadataTrackDispatchType = ''; + } + + _this29.requestOptions_ = { + withCredentials: _this29.withCredentials, + timeout: null + }; + + _this29.mediaTypes_ = createMediaTypes(); + + _this29.mediaSource = new videojs$1.MediaSource(); + + // load the media source into the player + _this29.mediaSource.addEventListener('sourceopen', _this29.handleSourceOpen_.bind(_this29)); + + _this29.seekable_ = videojs$1.createTimeRanges(); + _this29.hasPlayed_ = function () { + return false; + }; + + _this29.syncController_ = new SyncController(options); + _this29.segmentMetadataTrack_ = tech.addRemoteTextTrack({ + kind: 'metadata', + label: 'segment-metadata' + }, false).track; + + _this29.decrypter_ = new Decrypter$1(); + + var segmentLoaderSettings = { + hls: _this29.hls_, + mediaSource: _this29.mediaSource, + currentTime: _this29.tech_.currentTime.bind(_this29.tech_), + seekable: function seekable() { + return _this29.seekable(); + }, + seeking: function seeking() { + return _this29.tech_.seeking(); + }, + duration: function duration() { + return _this29.mediaSource.duration; + }, + hasPlayed: function hasPlayed() { + return _this29.hasPlayed_(); + }, + goalBufferLength: function goalBufferLength() { + return _this29.goalBufferLength(); + }, + bandwidth: bandwidth, + syncController: _this29.syncController_, + decrypter: _this29.decrypter_, + sourceType: _this29.sourceType_ + }; + + _this29.masterPlaylistLoader_ = _this29.sourceType_ === 'dash' ? new DashPlaylistLoader(url, _this29.hls_, _this29.withCredentials) : new PlaylistLoader(url, _this29.hls_, _this29.withCredentials); + _this29.setupMasterPlaylistLoaderListeners_(); + + // setup segment loaders + // combined audio/video or just video when alternate audio track is selected + _this29.mainSegmentLoader_ = new SegmentLoader(videojs$1.mergeOptions(segmentLoaderSettings, { + segmentMetadataTrack: _this29.segmentMetadataTrack_, + loaderType: 'main' + }), options); + + // alternate audio track + _this29.audioSegmentLoader_ = new SegmentLoader(videojs$1.mergeOptions(segmentLoaderSettings, { + loaderType: 'audio' + }), options); + + _this29.subtitleSegmentLoader_ = new VTTSegmentLoader(videojs$1.mergeOptions(segmentLoaderSettings, { + loaderType: 'vtt' + }), options); + + _this29.setupSegmentLoaderListeners_(); + + // Create SegmentLoader stat-getters + loaderStats.forEach(function (stat) { + _this29[stat + '_'] = sumLoaderStat.bind(_this29, stat); + }); + + _this29.logger_ = logger('MPC'); + + _this29.masterPlaylistLoader_.load(); + return _this29; + } + + /** + * Register event handlers on the master playlist loader. A helper + * function for construction time. + * + * @private + */ + + + MasterPlaylistController.prototype.setupMasterPlaylistLoaderListeners_ = function setupMasterPlaylistLoaderListeners_() { + var _this30 = this; + + this.masterPlaylistLoader_.on('loadedmetadata', function () { + var media = _this30.masterPlaylistLoader_.media(); + var requestTimeout = _this30.masterPlaylistLoader_.targetDuration * 1.5 * 1000; + + // If we don't have any more available playlists, we don't want to + // timeout the request. + if (isLowestEnabledRendition(_this30.masterPlaylistLoader_.master, _this30.masterPlaylistLoader_.media())) { + _this30.requestOptions_.timeout = 0; + } else { + _this30.requestOptions_.timeout = requestTimeout; + } + + // if this isn't a live video and preload permits, start + // downloading segments + if (media.endList && _this30.tech_.preload() !== 'none') { + _this30.mainSegmentLoader_.playlist(media, _this30.requestOptions_); + _this30.mainSegmentLoader_.load(); + } + + setupMediaGroups({ + sourceType: _this30.sourceType_, + segmentLoaders: { + AUDIO: _this30.audioSegmentLoader_, + SUBTITLES: _this30.subtitleSegmentLoader_, + main: _this30.mainSegmentLoader_ + }, + tech: _this30.tech_, + requestOptions: _this30.requestOptions_, + masterPlaylistLoader: _this30.masterPlaylistLoader_, + hls: _this30.hls_, + master: _this30.master(), + mediaTypes: _this30.mediaTypes_, + blacklistCurrentPlaylist: _this30.blacklistCurrentPlaylist.bind(_this30) + }); + + _this30.triggerPresenceUsage_(_this30.master(), media); + + try { + _this30.setupSourceBuffers_(); + } catch (e) { + videojs$1.log.warn('Failed to create SourceBuffers', e); + return _this30.mediaSource.endOfStream('decode'); + } + _this30.setupFirstPlay(); + + _this30.trigger('selectedinitialmedia'); + }); + + this.masterPlaylistLoader_.on('loadedplaylist', function () { + var updatedPlaylist = _this30.masterPlaylistLoader_.media(); + + if (!updatedPlaylist) { + // blacklist any variants that are not supported by the browser before selecting + // an initial media as the playlist selectors do not consider browser support + _this30.excludeUnsupportedVariants_(); + + var selectedMedia = void 0; + + if (_this30.enableLowInitialPlaylist) { + selectedMedia = _this30.selectInitialPlaylist(); + } + + if (!selectedMedia) { + selectedMedia = _this30.selectPlaylist(); + } + + _this30.initialMedia_ = selectedMedia; + _this30.masterPlaylistLoader_.media(_this30.initialMedia_); + return; + } + + if (_this30.useCueTags_) { + _this30.updateAdCues_(updatedPlaylist); + } + + // TODO: Create a new event on the PlaylistLoader that signals + // that the segments have changed in some way and use that to + // update the SegmentLoader instead of doing it twice here and + // on `mediachange` + _this30.mainSegmentLoader_.playlist(updatedPlaylist, _this30.requestOptions_); + _this30.updateDuration(); + + // If the player isn't paused, ensure that the segment loader is running, + // as it is possible that it was temporarily stopped while waiting for + // a playlist (e.g., in case the playlist errored and we re-requested it). + if (!_this30.tech_.paused()) { + _this30.mainSegmentLoader_.load(); + } + + if (!updatedPlaylist.endList) { + var addSeekableRange = function addSeekableRange() { + var seekable$$1 = _this30.seekable(); + + if (seekable$$1.length !== 0) { + _this30.mediaSource.addSeekableRange_(seekable$$1.start(0), seekable$$1.end(0)); + } + }; + + if (_this30.duration() !== Infinity) { + var onDurationchange = function onDurationchange() { + if (_this30.duration() === Infinity) { + addSeekableRange(); + } else { + _this30.tech_.one('durationchange', onDurationchange); + } + }; + + _this30.tech_.one('durationchange', onDurationchange); + } else { + addSeekableRange(); + } + } + }); + + this.masterPlaylistLoader_.on('error', function () { + _this30.blacklistCurrentPlaylist(_this30.masterPlaylistLoader_.error); + }); + + this.masterPlaylistLoader_.on('mediachanging', function () { + _this30.mainSegmentLoader_.abort(); + _this30.mainSegmentLoader_.pause(); + }); + + this.masterPlaylistLoader_.on('mediachange', function () { + var media = _this30.masterPlaylistLoader_.media(); + var requestTimeout = _this30.masterPlaylistLoader_.targetDuration * 1.5 * 1000; + + // If we don't have any more available playlists, we don't want to + // timeout the request. + if (isLowestEnabledRendition(_this30.masterPlaylistLoader_.master, _this30.masterPlaylistLoader_.media())) { + _this30.requestOptions_.timeout = 0; + } else { + _this30.requestOptions_.timeout = requestTimeout; + } + + // TODO: Create a new event on the PlaylistLoader that signals + // that the segments have changed in some way and use that to + // update the SegmentLoader instead of doing it twice here and + // on `loadedplaylist` + _this30.mainSegmentLoader_.playlist(media, _this30.requestOptions_); + _this30.mainSegmentLoader_.load(); + + _this30.tech_.trigger({ + type: 'mediachange', + bubbles: true + }); + }); + + this.masterPlaylistLoader_.on('playlistunchanged', function () { + var updatedPlaylist = _this30.masterPlaylistLoader_.media(); + var playlistOutdated = _this30.stuckAtPlaylistEnd_(updatedPlaylist); + + if (playlistOutdated) { + // Playlist has stopped updating and we're stuck at its end. Try to + // blacklist it and switch to another playlist in the hope that that + // one is updating (and give the player a chance to re-adjust to the + // safe live point). + _this30.blacklistCurrentPlaylist({ + message: 'Playlist no longer updating.' + }); + // useful for monitoring QoS + _this30.tech_.trigger('playliststuck'); + } + }); + + this.masterPlaylistLoader_.on('renditiondisabled', function () { + _this30.tech_.trigger({type: 'usage', name: 'hls-rendition-disabled'}); + }); + this.masterPlaylistLoader_.on('renditionenabled', function () { + _this30.tech_.trigger({type: 'usage', name: 'hls-rendition-enabled'}); + }); + }; + + /** + * A helper function for triggerring presence usage events once per source + * + * @private + */ + + + MasterPlaylistController.prototype.triggerPresenceUsage_ = function triggerPresenceUsage_(master, media) { + var mediaGroups = master.mediaGroups || {}; + var defaultDemuxed = true; + var audioGroupKeys = Object.keys(mediaGroups.AUDIO); + + for (var mediaGroup in mediaGroups.AUDIO) { + for (var label in mediaGroups.AUDIO[mediaGroup]) { + var properties = mediaGroups.AUDIO[mediaGroup][label]; + + if (!properties.uri) { + defaultDemuxed = false; + } + } + } + + if (defaultDemuxed) { + this.tech_.trigger({type: 'usage', name: 'hls-demuxed'}); + } + + if (Object.keys(mediaGroups.SUBTITLES).length) { + this.tech_.trigger({type: 'usage', name: 'hls-webvtt'}); + } + + if (Hls.Playlist.isAes(media)) { + this.tech_.trigger({type: 'usage', name: 'hls-aes'}); + } + + if (Hls.Playlist.isFmp4(media)) { + this.tech_.trigger({type: 'usage', name: 'hls-fmp4'}); + } + + if (audioGroupKeys.length && Object.keys(mediaGroups.AUDIO[audioGroupKeys[0]]).length > 1) { + this.tech_.trigger({type: 'usage', name: 'hls-alternate-audio'}); + } + + if (this.useCueTags_) { + this.tech_.trigger({type: 'usage', name: 'hls-playlist-cue-tags'}); + } + }; + /** + * Register event handlers on the segment loaders. A helper function + * for construction time. + * + * @private + */ + + + MasterPlaylistController.prototype.setupSegmentLoaderListeners_ = function setupSegmentLoaderListeners_() { + var _this31 = this; + + this.mainSegmentLoader_.on('bandwidthupdate', function () { + var nextPlaylist = _this31.selectPlaylist(); + var currentPlaylist = _this31.masterPlaylistLoader_.media(); + var buffered = _this31.tech_.buffered(); + var forwardBuffer = buffered.length ? buffered.end(buffered.length - 1) - _this31.tech_.currentTime() : 0; + + var bufferLowWaterLine = _this31.bufferLowWaterLine(); + + // If the playlist is live, then we want to not take low water line into account. + // This is because in LIVE, the player plays 3 segments from the end of the + // playlist, and if `BUFFER_LOW_WATER_LINE` is greater than the duration availble + // in those segments, a viewer will never experience a rendition upswitch. + if (!currentPlaylist.endList || + // For the same reason as LIVE, we ignore the low water line when the VOD + // duration is below the max potential low water line + _this31.duration() < Config.MAX_BUFFER_LOW_WATER_LINE || + // we want to switch down to lower resolutions quickly to continue playback, but + nextPlaylist.attributes.BANDWIDTH < currentPlaylist.attributes.BANDWIDTH || + // ensure we have some buffer before we switch up to prevent us running out of + // buffer while loading a higher rendition. + forwardBuffer >= bufferLowWaterLine) { + _this31.masterPlaylistLoader_.media(nextPlaylist); + } + + _this31.tech_.trigger('bandwidthupdate'); + }); + this.mainSegmentLoader_.on('progress', function () { + _this31.trigger('progress'); + }); + + this.mainSegmentLoader_.on('error', function () { + _this31.blacklistCurrentPlaylist(_this31.mainSegmentLoader_.error()); + }); + + this.mainSegmentLoader_.on('syncinfoupdate', function () { + _this31.onSyncInfoUpdate_(); + }); + + this.mainSegmentLoader_.on('timestampoffset', function () { + _this31.tech_.trigger({type: 'usage', name: 'hls-timestamp-offset'}); + }); + this.audioSegmentLoader_.on('syncinfoupdate', function () { + _this31.onSyncInfoUpdate_(); + }); + + this.mainSegmentLoader_.on('ended', function () { + _this31.onEndOfStream(); + }); + + this.mainSegmentLoader_.on('earlyabort', function () { + _this31.blacklistCurrentPlaylist({ + message: 'Aborted early because there isn\'t enough bandwidth to complete the ' + 'request without rebuffering.' + }, ABORT_EARLY_BLACKLIST_SECONDS); + }); + + this.mainSegmentLoader_.on('reseteverything', function () { + // If playing an MTS stream, a videojs.MediaSource is listening for + // hls-reset to reset caption parsing state in the transmuxer + _this31.tech_.trigger('hls-reset'); + }); + + this.mainSegmentLoader_.on('segmenttimemapping', function (event) { + // If playing an MTS stream in html, a videojs.MediaSource is listening for + // hls-segment-time-mapping update its internal mapping of stream to display time + _this31.tech_.trigger({ + type: 'hls-segment-time-mapping', + mapping: event.mapping + }); + }); + + this.audioSegmentLoader_.on('ended', function () { + _this31.onEndOfStream(); + }); + }; + + MasterPlaylistController.prototype.mediaSecondsLoaded_ = function mediaSecondsLoaded_() { + return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded + this.mainSegmentLoader_.mediaSecondsLoaded); + }; + + /** + * Call load on our SegmentLoaders + */ + + + MasterPlaylistController.prototype.load = function load() { + this.mainSegmentLoader_.load(); + if (this.mediaTypes_.AUDIO.activePlaylistLoader) { + this.audioSegmentLoader_.load(); + } + if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) { + this.subtitleSegmentLoader_.load(); + } + }; + + /** + * Re-tune playback quality level for the current player + * conditions. This method may perform destructive actions, like + * removing already buffered content, to readjust the currently + * active playlist quickly. + * + * @private + */ + + + MasterPlaylistController.prototype.fastQualityChange_ = function fastQualityChange_() { + var media = this.selectPlaylist(); + + if (media !== this.masterPlaylistLoader_.media()) { + this.masterPlaylistLoader_.media(media); + + this.mainSegmentLoader_.resetLoader(); + // don't need to reset audio as it is reset when media changes + } + }; + + /** + * Begin playback. + */ + + + MasterPlaylistController.prototype.play = function play() { + if (this.setupFirstPlay()) { + return; + } + + if (this.tech_.ended()) { + this.tech_.setCurrentTime(0); + } + + if (this.hasPlayed_()) { + this.load(); + } + + var seekable$$1 = this.tech_.seekable(); + + // if the viewer has paused and we fell out of the live window, + // seek forward to the live point + if (this.tech_.duration() === Infinity) { + if (this.tech_.currentTime() < seekable$$1.start(0)) { + return this.tech_.setCurrentTime(seekable$$1.end(seekable$$1.length - 1)); + } + } + }; + + /** + * Seek to the latest media position if this is a live video and the + * player and video are loaded and initialized. + */ + + + MasterPlaylistController.prototype.setupFirstPlay = function setupFirstPlay() { + var _this32 = this; + + var media = this.masterPlaylistLoader_.media(); + + // Check that everything is ready to begin buffering for the first call to play + // If 1) there is no active media + // 2) the player is paused + // 3) the first play has already been setup + // then exit early + if (!media || this.tech_.paused() || this.hasPlayed_()) { + return false; + } + + // when the video is a live stream + if (!media.endList) { + var seekable$$1 = this.seekable(); + + if (!seekable$$1.length) { + // without a seekable range, the player cannot seek to begin buffering at the live + // point + return false; + } + + if (videojs$1.browser.IE_VERSION && this.tech_.readyState() === 0) { + // IE11 throws an InvalidStateError if you try to set currentTime while the + // readyState is 0, so it must be delayed until the tech fires loadedmetadata. + this.tech_.one('loadedmetadata', function () { + _this32.trigger('firstplay'); + _this32.tech_.setCurrentTime(seekable$$1.end(0)); + _this32.hasPlayed_ = function () { + return true; + }; + }); + + return false; + } + + // trigger firstplay to inform the source handler to ignore the next seek event + this.trigger('firstplay'); + // seek to the live point + this.tech_.setCurrentTime(seekable$$1.end(0)); + } + + this.hasPlayed_ = function () { + return true; + }; + // we can begin loading now that everything is ready + this.load(); + return true; + }; + + /** + * handle the sourceopen event on the MediaSource + * + * @private + */ + + + MasterPlaylistController.prototype.handleSourceOpen_ = function handleSourceOpen_() { + // Only attempt to create the source buffer if none already exist. + // handleSourceOpen is also called when we are "re-opening" a source buffer + // after `endOfStream` has been called (in response to a seek for instance) + try { + this.setupSourceBuffers_(); + } catch (e) { + videojs$1.log.warn('Failed to create Source Buffers', e); + return this.mediaSource.endOfStream('decode'); + } + + // if autoplay is enabled, begin playback. This is duplicative of + // code in video.js but is required because play() must be invoked + // *after* the media source has opened. + if (this.tech_.autoplay()) { + var playPromise = this.tech_.play(); + + // Catch/silence error when a pause interrupts a play request + // on browsers which return a promise + if (typeof playPromise !== 'undefined' && typeof playPromise.then === 'function') { + playPromise.then(null, function (e) { + }); + } + } + + this.trigger('sourceopen'); + }; + + /** + * Calls endOfStream on the media source when all active stream types have called + * endOfStream + * + * @param {string} streamType + * Stream type of the segment loader that called endOfStream + * @private + */ + + + MasterPlaylistController.prototype.onEndOfStream = function onEndOfStream() { + var isEndOfStream = this.mainSegmentLoader_.ended_; + + if (this.mediaTypes_.AUDIO.activePlaylistLoader) { + // if the audio playlist loader exists, then alternate audio is active + if (!this.mainSegmentLoader_.startingMedia_ || this.mainSegmentLoader_.startingMedia_.containsVideo) { + // if we do not know if the main segment loader contains video yet or if we + // definitively know the main segment loader contains video, then we need to wait + // for both main and audio segment loaders to call endOfStream + isEndOfStream = isEndOfStream && this.audioSegmentLoader_.ended_; + } else { + // otherwise just rely on the audio loader + isEndOfStream = this.audioSegmentLoader_.ended_; + } + } + + if (isEndOfStream) { + this.mediaSource.endOfStream(); + } + }; + + /** + * Check if a playlist has stopped being updated + * @param {Object} playlist the media playlist object + * @return {boolean} whether the playlist has stopped being updated or not + */ + + + MasterPlaylistController.prototype.stuckAtPlaylistEnd_ = function stuckAtPlaylistEnd_(playlist) { + var seekable$$1 = this.seekable(); + + if (!seekable$$1.length) { + // playlist doesn't have enough information to determine whether we are stuck + return false; + } + + var expired = this.syncController_.getExpiredTime(playlist, this.mediaSource.duration); + + if (expired === null) { + return false; + } + + // does not use the safe live end to calculate playlist end, since we + // don't want to say we are stuck while there is still content + var absolutePlaylistEnd = Hls.Playlist.playlistEnd(playlist, expired); + var currentTime = this.tech_.currentTime(); + var buffered = this.tech_.buffered(); + + if (!buffered.length) { + // return true if the playhead reached the absolute end of the playlist + return absolutePlaylistEnd - currentTime <= SAFE_TIME_DELTA; + } + var bufferedEnd = buffered.end(buffered.length - 1); + + // return true if there is too little buffer left and buffer has reached absolute + // end of playlist + return bufferedEnd - currentTime <= SAFE_TIME_DELTA && absolutePlaylistEnd - bufferedEnd <= SAFE_TIME_DELTA; + }; + + /** + * Blacklists a playlist when an error occurs for a set amount of time + * making it unavailable for selection by the rendition selection algorithm + * and then forces a new playlist (rendition) selection. + * + * @param {Object=} error an optional error that may include the playlist + * to blacklist + * @param {Number=} blacklistDuration an optional number of seconds to blacklist the + * playlist + */ + + + MasterPlaylistController.prototype.blacklistCurrentPlaylist = function blacklistCurrentPlaylist() { + var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var blacklistDuration = arguments[1]; + + var currentPlaylist = void 0; + var nextPlaylist = void 0; + + // If the `error` was generated by the playlist loader, it will contain + // the playlist we were trying to load (but failed) and that should be + // blacklisted instead of the currently selected playlist which is likely + // out-of-date in this scenario + currentPlaylist = error.playlist || this.masterPlaylistLoader_.media(); + + blacklistDuration = blacklistDuration || error.blacklistDuration || this.blacklistDuration; + + // If there is no current playlist, then an error occurred while we were + // trying to load the master OR while we were disposing of the tech + if (!currentPlaylist) { + this.error = error; + + try { + return this.mediaSource.endOfStream('network'); + } catch (e) { + return this.trigger('error'); + } + } + + var isFinalRendition = this.masterPlaylistLoader_.master.playlists.filter(isEnabled).length === 1; + + if (isFinalRendition) { + // Never blacklisting this playlist because it's final rendition + videojs$1.log.warn('Problem encountered with the current ' + 'HLS playlist. Trying again since it is the final playlist.'); + + this.tech_.trigger('retryplaylist'); + return this.masterPlaylistLoader_.load(isFinalRendition); + } + // Blacklist this playlist + currentPlaylist.excludeUntil = Date.now() + blacklistDuration * 1000; + this.tech_.trigger('blacklistplaylist'); + this.tech_.trigger({type: 'usage', name: 'hls-rendition-blacklisted'}); + + // Select a new playlist + nextPlaylist = this.selectPlaylist(); + videojs$1.log.warn('Problem encountered with the current HLS playlist.' + (error.message ? ' ' + error.message : '') + ' Switching to another playlist.'); + + return this.masterPlaylistLoader_.media(nextPlaylist); + }; + + /** + * Pause all segment loaders + */ + + + MasterPlaylistController.prototype.pauseLoading = function pauseLoading() { + this.mainSegmentLoader_.pause(); + if (this.mediaTypes_.AUDIO.activePlaylistLoader) { + this.audioSegmentLoader_.pause(); + } + if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) { + this.subtitleSegmentLoader_.pause(); + } + }; + + /** + * set the current time on all segment loaders + * + * @param {TimeRange} currentTime the current time to set + * @return {TimeRange} the current time + */ + + + MasterPlaylistController.prototype.setCurrentTime = function setCurrentTime(currentTime) { + var buffered = findRange(this.tech_.buffered(), currentTime); + + if (!(this.masterPlaylistLoader_ && this.masterPlaylistLoader_.media())) { + // return immediately if the metadata is not ready yet + return 0; + } + + // it's clearly an edge-case but don't thrown an error if asked to + // seek within an empty playlist + if (!this.masterPlaylistLoader_.media().segments) { + return 0; + } + + // In flash playback, the segment loaders should be reset on every seek, even + // in buffer seeks. If the seek location is already buffered, continue buffering as + // usual + // TODO: redo this comment + if (buffered && buffered.length) { + return currentTime; + } + + // cancel outstanding requests so we begin buffering at the new + // location + this.mainSegmentLoader_.resetEverything(); + this.mainSegmentLoader_.abort(); + if (this.mediaTypes_.AUDIO.activePlaylistLoader) { + this.audioSegmentLoader_.resetEverything(); + this.audioSegmentLoader_.abort(); + } + if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) { + this.subtitleSegmentLoader_.resetEverything(); + this.subtitleSegmentLoader_.abort(); + } + + // start segment loader loading in case they are paused + this.load(); + }; + + /** + * get the current duration + * + * @return {TimeRange} the duration + */ + + + MasterPlaylistController.prototype.duration = function duration() { + if (!this.masterPlaylistLoader_) { + return 0; + } + + if (this.mediaSource) { + return this.mediaSource.duration; + } + + return Hls.Playlist.duration(this.masterPlaylistLoader_.media()); + }; + + /** + * check the seekable range + * + * @return {TimeRange} the seekable range + */ + + + MasterPlaylistController.prototype.seekable = function seekable() { + return this.seekable_; + }; + + MasterPlaylistController.prototype.onSyncInfoUpdate_ = function onSyncInfoUpdate_() { + var mainSeekable = void 0; + var audioSeekable = void 0; + + if (!this.masterPlaylistLoader_) { + return; + } + + var media = this.masterPlaylistLoader_.media(); + + if (!media) { + return; + } + + var expired = this.syncController_.getExpiredTime(media, this.mediaSource.duration); + + if (expired === null) { + // not enough information to update seekable + return; + } + + mainSeekable = Hls.Playlist.seekable(media, expired); + + if (mainSeekable.length === 0) { + return; + } + + if (this.mediaTypes_.AUDIO.activePlaylistLoader) { + media = this.mediaTypes_.AUDIO.activePlaylistLoader.media(); + expired = this.syncController_.getExpiredTime(media, this.mediaSource.duration); + + if (expired === null) { + return; + } + + audioSeekable = Hls.Playlist.seekable(media, expired); + + if (audioSeekable.length === 0) { + return; + } + } + + if (!audioSeekable) { + // seekable has been calculated based on buffering video data so it + // can be returned directly + this.seekable_ = mainSeekable; + } else if (audioSeekable.start(0) > mainSeekable.end(0) || mainSeekable.start(0) > audioSeekable.end(0)) { + // seekables are pretty far off, rely on main + this.seekable_ = mainSeekable; + } else { + this.seekable_ = videojs$1.createTimeRanges([[audioSeekable.start(0) > mainSeekable.start(0) ? audioSeekable.start(0) : mainSeekable.start(0), audioSeekable.end(0) < mainSeekable.end(0) ? audioSeekable.end(0) : mainSeekable.end(0)]]); + } + + this.logger_('seekable updated [' + printableRange(this.seekable_) + ']'); + + this.tech_.trigger('seekablechanged'); + }; + + /** + * Update the player duration + */ + + + MasterPlaylistController.prototype.updateDuration = function updateDuration() { + var _this33 = this; + + var oldDuration = this.mediaSource.duration; + var newDuration = Hls.Playlist.duration(this.masterPlaylistLoader_.media()); + var buffered = this.tech_.buffered(); + var setDuration = function setDuration() { + _this33.mediaSource.duration = newDuration; + _this33.tech_.trigger('durationchange'); + + _this33.mediaSource.removeEventListener('sourceopen', setDuration); + }; + + if (buffered.length > 0) { + newDuration = Math.max(newDuration, buffered.end(buffered.length - 1)); + } + + // if the duration has changed, invalidate the cached value + if (oldDuration !== newDuration) { + // update the duration + if (this.mediaSource.readyState !== 'open') { + this.mediaSource.addEventListener('sourceopen', setDuration); + } else { + setDuration(); + } + } + }; + + /** + * dispose of the MasterPlaylistController and everything + * that it controls + */ + + + MasterPlaylistController.prototype.dispose = function dispose() { + var _this34 = this; + + this.decrypter_.terminate(); + this.masterPlaylistLoader_.dispose(); + this.mainSegmentLoader_.dispose(); + + ['AUDIO', 'SUBTITLES'].forEach(function (type) { + var groups = _this34.mediaTypes_[type].groups; + + for (var id in groups) { + groups[id].forEach(function (group) { + if (group.playlistLoader) { + group.playlistLoader.dispose(); + } + }); + } + }); + + this.audioSegmentLoader_.dispose(); + this.subtitleSegmentLoader_.dispose(); + }; + + /** + * return the master playlist object if we have one + * + * @return {Object} the master playlist object that we parsed + */ + + + MasterPlaylistController.prototype.master = function master() { + return this.masterPlaylistLoader_.master; + }; + + /** + * return the currently selected playlist + * + * @return {Object} the currently selected playlist object that we parsed + */ + + + MasterPlaylistController.prototype.media = function media() { + // playlist loader will not return media if it has not been fully loaded + return this.masterPlaylistLoader_.media() || this.initialMedia_; + }; + + /** + * setup our internal source buffers on our segment Loaders + * + * @private + */ + + + MasterPlaylistController.prototype.setupSourceBuffers_ = function setupSourceBuffers_() { + var media = this.masterPlaylistLoader_.media(); + var mimeTypes = void 0; + + // wait until a media playlist is available and the Media Source is + // attached + if (!media || this.mediaSource.readyState !== 'open') { + return; + } + + mimeTypes = mimeTypesForPlaylist(this.masterPlaylistLoader_.master, media); + if (mimeTypes.length < 1) { + this.error = 'No compatible SourceBuffer configuration for the variant stream:' + media.resolvedUri; + return this.mediaSource.endOfStream('decode'); + } + + this.configureLoaderMimeTypes_(mimeTypes); + // exclude any incompatible variant streams from future playlist + // selection + this.excludeIncompatibleVariants_(media); + }; + + MasterPlaylistController.prototype.configureLoaderMimeTypes_ = function configureLoaderMimeTypes_(mimeTypes) { + // If the content is demuxed, we can't start appending segments to a source buffer + // until both source buffers are set up, or else the browser may not let us add the + // second source buffer (it will assume we are playing either audio only or video + // only). + var sourceBufferEmitter = + // If there is more than one mime type + mimeTypes.length > 1 && + // and the first mime type does not have muxed video and audio + mimeTypes[0].indexOf(',') === -1 && + // and the two mime types are different (they can be the same in the case of audio + // only with alternate audio) + mimeTypes[0] !== mimeTypes[1] ? + // then we want to wait on the second source buffer + new videojs$1.EventTarget() : + // otherwise there is no need to wait as the content is either audio only, + // video only, or muxed content. + null; + + this.mainSegmentLoader_.mimeType(mimeTypes[0], sourceBufferEmitter); + if (mimeTypes[1]) { + this.audioSegmentLoader_.mimeType(mimeTypes[1], sourceBufferEmitter); + } + }; + + /** + * Blacklists playlists with codecs that are unsupported by the browser. + */ + + + MasterPlaylistController.prototype.excludeUnsupportedVariants_ = function excludeUnsupportedVariants_() { + this.master().playlists.forEach(function (variant) { + if (variant.attributes.CODECS && window_1.MediaSource && window_1.MediaSource.isTypeSupported && !window_1.MediaSource.isTypeSupported('video/mp4; codecs="' + mapLegacyAvcCodecs(variant.attributes.CODECS) + '"')) { + variant.excludeUntil = Infinity; + } + }); + }; + + /** + * Blacklist playlists that are known to be codec or + * stream-incompatible with the SourceBuffer configuration. For + * instance, Media Source Extensions would cause the video element to + * stall waiting for video data if you switched from a variant with + * video and audio to an audio-only one. + * + * @param {Object} media a media playlist compatible with the current + * set of SourceBuffers. Variants in the current master playlist that + * do not appear to have compatible codec or stream configurations + * will be excluded from the default playlist selection algorithm + * indefinitely. + * @private + */ + + + MasterPlaylistController.prototype.excludeIncompatibleVariants_ = function excludeIncompatibleVariants_(media) { + var codecCount = 2; + var videoCodec = null; + var codecs = void 0; + + if (media.attributes.CODECS) { + codecs = parseCodecs(media.attributes.CODECS); + videoCodec = codecs.videoCodec; + codecCount = codecs.codecCount; + } + + this.master().playlists.forEach(function (variant) { + var variantCodecs = { + codecCount: 2, + videoCodec: null + }; + + if (variant.attributes.CODECS) { + variantCodecs = parseCodecs(variant.attributes.CODECS); + } + + // if the streams differ in the presence or absence of audio or + // video, they are incompatible + if (variantCodecs.codecCount !== codecCount) { + variant.excludeUntil = Infinity; + } + + // if h.264 is specified on the current playlist, some flavor of + // it must be specified on all compatible variants + if (variantCodecs.videoCodec !== videoCodec) { + variant.excludeUntil = Infinity; + } + }); + }; + + MasterPlaylistController.prototype.updateAdCues_ = function updateAdCues_(media) { + var offset = 0; + var seekable$$1 = this.seekable(); + + if (seekable$$1.length) { + offset = seekable$$1.start(0); + } + + updateAdCues(media, this.cueTagsTrack_, offset); + }; + + /** + * Calculates the desired forward buffer length based on current time + * + * @return {Number} Desired forward buffer length in seconds + */ + + + MasterPlaylistController.prototype.goalBufferLength = function goalBufferLength() { + var currentTime = this.tech_.currentTime(); + var initial = Config.GOAL_BUFFER_LENGTH; + var rate = Config.GOAL_BUFFER_LENGTH_RATE; + var max = Math.max(initial, Config.MAX_GOAL_BUFFER_LENGTH); + + return Math.min(initial + currentTime * rate, max); + }; + + /** + * Calculates the desired buffer low water line based on current time + * + * @return {Number} Desired buffer low water line in seconds + */ + + + MasterPlaylistController.prototype.bufferLowWaterLine = function bufferLowWaterLine() { + var currentTime = this.tech_.currentTime(); + var initial = Config.BUFFER_LOW_WATER_LINE; + var rate = Config.BUFFER_LOW_WATER_LINE_RATE; + var max = Math.max(initial, Config.MAX_BUFFER_LOW_WATER_LINE); + + return Math.min(initial + currentTime * rate, max); + }; + + return MasterPlaylistController; + }(videojs$1.EventTarget); + + /** + * Returns a function that acts as the Enable/disable playlist function. + * + * @param {PlaylistLoader} loader - The master playlist loader + * @param {String} playlistUri - uri of the playlist + * @param {Function} changePlaylistFn - A function to be called after a + * playlist's enabled-state has been changed. Will NOT be called if a + * playlist's enabled-state is unchanged + * @param {Boolean=} enable - Value to set the playlist enabled-state to + * or if undefined returns the current enabled-state for the playlist + * @return {Function} Function for setting/getting enabled + */ + + + var enableFunction = function enableFunction(loader, playlistUri, changePlaylistFn) { + return function (enable) { + var playlist = loader.master.playlists[playlistUri]; + var incompatible = isIncompatible(playlist); + var currentlyEnabled = isEnabled(playlist); + + if (typeof enable === 'undefined') { + return currentlyEnabled; + } + + if (enable) { + delete playlist.disabled; + } else { + playlist.disabled = true; + } + + if (enable !== currentlyEnabled && !incompatible) { + // Ensure the outside world knows about our changes + changePlaylistFn(); + if (enable) { + loader.trigger('renditionenabled'); + } else { + loader.trigger('renditiondisabled'); + } + } + return enable; + }; + }; + + /** + * The representation object encapsulates the publicly visible information + * in a media playlist along with a setter/getter-type function (enabled) + * for changing the enabled-state of a particular playlist entry + * + * @class Representation + */ + + var Representation = function Representation(hlsHandler, playlist, id) { + classCallCheck(this, Representation); + + // Get a reference to a bound version of fastQualityChange_ + var fastChangeFunction = hlsHandler.masterPlaylistController_.fastQualityChange_.bind(hlsHandler.masterPlaylistController_); + + // some playlist attributes are optional + if (playlist.attributes.RESOLUTION) { + var resolution = playlist.attributes.RESOLUTION; + + this.width = resolution.width; + this.height = resolution.height; + } + + this.bandwidth = playlist.attributes.BANDWIDTH; + + // The id is simply the ordinality of the media playlist + // within the master playlist + this.id = id; + + // Partially-apply the enableFunction to create a playlist- + // specific variant + this.enabled = enableFunction(hlsHandler.playlists, playlist.uri, fastChangeFunction); + }; + + /** + * A mixin function that adds the `representations` api to an instance + * of the HlsHandler class + * @param {HlsHandler} hlsHandler - An instance of HlsHandler to add the + * representation API into + */ + + + var renditionSelectionMixin = function renditionSelectionMixin(hlsHandler) { + var playlists = hlsHandler.playlists; + + // Add a single API-specific function to the HlsHandler instance + hlsHandler.representations = function () { + return playlists.master.playlists.filter(function (media) { + return !isIncompatible(media); + }).map(function (e, i) { + return new Representation(hlsHandler, e, e.uri); + }); + }; + }; + + /** + * @file playback-watcher.js + * + * Playback starts, and now my watch begins. It shall not end until my death. I shall + * take no wait, hold no uncleared timeouts, father no bad seeks. I shall wear no crowns + * and win no glory. I shall live and die at my post. I am the corrector of the underflow. + * I am the watcher of gaps. I am the shield that guards the realms of seekable. I pledge + * my life and honor to the Playback Watch, for this Player and all the Players to come. + */ + + // Set of events that reset the playback-watcher time check logic and clear the timeout + var timerCancelEvents = ['seeking', 'seeked', 'pause', 'playing', 'error']; + + /** + * @class PlaybackWatcher + */ + + var PlaybackWatcher = function () { + /** + * Represents an PlaybackWatcher object. + * @constructor + * @param {object} options an object that includes the tech and settings + */ + function PlaybackWatcher(options) { + var _this35 = this; + + classCallCheck(this, PlaybackWatcher); + + this.tech_ = options.tech; + this.seekable = options.seekable; + + this.consecutiveUpdates = 0; + this.lastRecordedTime = null; + this.timer_ = null; + this.checkCurrentTimeTimeout_ = null; + this.logger_ = logger('PlaybackWatcher'); + + this.logger_('initialize'); + + var canPlayHandler = function canPlayHandler() { + return _this35.monitorCurrentTime_(); + }; + var waitingHandler = function waitingHandler() { + return _this35.techWaiting_(); + }; + var cancelTimerHandler = function cancelTimerHandler() { + return _this35.cancelTimer_(); + }; + var fixesBadSeeksHandler = function fixesBadSeeksHandler() { + return _this35.fixesBadSeeks_(); + }; + + this.tech_.on('seekablechanged', fixesBadSeeksHandler); + this.tech_.on('waiting', waitingHandler); + this.tech_.on(timerCancelEvents, cancelTimerHandler); + this.tech_.on('canplay', canPlayHandler); + + // Define the dispose function to clean up our events + this.dispose = function () { + _this35.logger_('dispose'); + _this35.tech_.off('seekablechanged', fixesBadSeeksHandler); + _this35.tech_.off('waiting', waitingHandler); + _this35.tech_.off(timerCancelEvents, cancelTimerHandler); + _this35.tech_.off('canplay', canPlayHandler); + if (_this35.checkCurrentTimeTimeout_) { + window_1.clearTimeout(_this35.checkCurrentTimeTimeout_); + } + _this35.cancelTimer_(); + }; + } + + /** + * Periodically check current time to see if playback stopped + * + * @private + */ + + + PlaybackWatcher.prototype.monitorCurrentTime_ = function monitorCurrentTime_() { + this.checkCurrentTime_(); + + if (this.checkCurrentTimeTimeout_) { + window_1.clearTimeout(this.checkCurrentTimeTimeout_); + } + + // 42 = 24 fps // 250 is what Webkit uses // FF uses 15 + this.checkCurrentTimeTimeout_ = window_1.setTimeout(this.monitorCurrentTime_.bind(this), 250); + }; + + /** + * The purpose of this function is to emulate the "waiting" event on + * browsers that do not emit it when they are waiting for more + * data to continue playback + * + * @private + */ + + + PlaybackWatcher.prototype.checkCurrentTime_ = function checkCurrentTime_() { + if (this.tech_.seeking() && this.fixesBadSeeks_()) { + this.consecutiveUpdates = 0; + this.lastRecordedTime = this.tech_.currentTime(); + return; + } + + if (this.tech_.paused() || this.tech_.seeking()) { + return; + } + + var currentTime = this.tech_.currentTime(); + var buffered = this.tech_.buffered(); + + if (this.lastRecordedTime === currentTime && (!buffered.length || currentTime + SAFE_TIME_DELTA >= buffered.end(buffered.length - 1))) { + // If current time is at the end of the final buffered region, then any playback + // stall is most likely caused by buffering in a low bandwidth environment. The tech + // should fire a `waiting` event in this scenario, but due to browser and tech + // inconsistencies. Calling `techWaiting_` here allows us to simulate + // responding to a native `waiting` event when the tech fails to emit one. + return this.techWaiting_(); + } + + if (this.consecutiveUpdates >= 5 && currentTime === this.lastRecordedTime) { + this.consecutiveUpdates++; + this.waiting_(); + } else if (currentTime === this.lastRecordedTime) { + this.consecutiveUpdates++; + } else { + this.consecutiveUpdates = 0; + this.lastRecordedTime = currentTime; + } + }; + + /** + * Cancels any pending timers and resets the 'timeupdate' mechanism + * designed to detect that we are stalled + * + * @private + */ + + + PlaybackWatcher.prototype.cancelTimer_ = function cancelTimer_() { + this.consecutiveUpdates = 0; + + if (this.timer_) { + this.logger_('cancelTimer_'); + clearTimeout(this.timer_); + } + + this.timer_ = null; + }; + + /** + * Fixes situations where there's a bad seek + * + * @return {Boolean} whether an action was taken to fix the seek + * @private + */ + + + PlaybackWatcher.prototype.fixesBadSeeks_ = function fixesBadSeeks_() { + var seeking = this.tech_.seeking(); + var seekable = this.seekable(); + var currentTime = this.tech_.currentTime(); + var seekTo = void 0; + + if (seeking && this.afterSeekableWindow_(seekable, currentTime)) { + var seekableEnd = seekable.end(seekable.length - 1); + + // sync to live point (if VOD, our seekable was updated and we're simply adjusting) + seekTo = seekableEnd; + } + + if (seeking && this.beforeSeekableWindow_(seekable, currentTime)) { + var seekableStart = seekable.start(0); + + // sync to the beginning of the live window + // provide a buffer of .1 seconds to handle rounding/imprecise numbers + seekTo = seekableStart + SAFE_TIME_DELTA; + } + + if (typeof seekTo !== 'undefined') { + this.logger_('Trying to seek outside of seekable at time ' + currentTime + ' with ' + ('seekable range ' + printableRange(seekable) + '. Seeking to ') + (seekTo + '.')); + + this.tech_.setCurrentTime(seekTo); + return true; + } + + return false; + }; + + /** + * Handler for situations when we determine the player is waiting. + * + * @private + */ + + + PlaybackWatcher.prototype.waiting_ = function waiting_() { + if (this.techWaiting_()) { + return; + } + + // All tech waiting checks failed. Use last resort correction + var currentTime = this.tech_.currentTime(); + var buffered = this.tech_.buffered(); + var currentRange = findRange(buffered, currentTime); + + // Sometimes the player can stall for unknown reasons within a contiguous buffered + // region with no indication that anything is amiss (seen in Firefox). Seeking to + // currentTime is usually enough to kickstart the player. This checks that the player + // is currently within a buffered region before attempting a corrective seek. + // Chrome does not appear to continue `timeupdate` events after a `waiting` event + // until there is ~ 3 seconds of forward buffer available. PlaybackWatcher should also + // make sure there is ~3 seconds of forward buffer before taking any corrective action + // to avoid triggering an `unknownwaiting` event when the network is slow. + if (currentRange.length && currentTime + 3 <= currentRange.end(0)) { + this.cancelTimer_(); + this.tech_.setCurrentTime(currentTime); + + this.logger_('Stopped at ' + currentTime + ' while inside a buffered region ' + ('[' + currentRange.start(0) + ' -> ' + currentRange.end(0) + ']. Attempting to resume ') + 'playback by seeking to the current time.'); + + // unknown waiting corrections may be useful for monitoring QoS + this.tech_.trigger({type: 'usage', name: 'hls-unknown-waiting'}); + return; + } + }; + + /** + * Handler for situations when the tech fires a `waiting` event + * + * @return {Boolean} + * True if an action (or none) was needed to correct the waiting. False if no + * checks passed + * @private + */ + + + PlaybackWatcher.prototype.techWaiting_ = function techWaiting_() { + var seekable = this.seekable(); + var currentTime = this.tech_.currentTime(); + + if (this.tech_.seeking() && this.fixesBadSeeks_()) { + // Tech is seeking or bad seek fixed, no action needed + return true; + } + + if (this.tech_.seeking() || this.timer_ !== null) { + // Tech is seeking or already waiting on another action, no action needed + return true; + } + + if (this.beforeSeekableWindow_(seekable, currentTime)) { + var livePoint = seekable.end(seekable.length - 1); + + this.logger_('Fell out of live window at time ' + currentTime + '. Seeking to ' + ('live point (seekable end) ' + livePoint)); + this.cancelTimer_(); + this.tech_.setCurrentTime(livePoint); + + // live window resyncs may be useful for monitoring QoS + this.tech_.trigger({type: 'usage', name: 'hls-live-resync'}); + return true; + } + + var buffered = this.tech_.buffered(); + var nextRange = findNextRange(buffered, currentTime); + + if (this.videoUnderflow_(nextRange, buffered, currentTime)) { + // Even though the video underflowed and was stuck in a gap, the audio overplayed + // the gap, leading currentTime into a buffered range. Seeking to currentTime + // allows the video to catch up to the audio position without losing any audio + // (only suffering ~3 seconds of frozen video and a pause in audio playback). + this.cancelTimer_(); + this.tech_.setCurrentTime(currentTime); + + // video underflow may be useful for monitoring QoS + this.tech_.trigger({type: 'usage', name: 'hls-video-underflow'}); + return true; + } + + // check for gap + if (nextRange.length > 0) { + var difference = nextRange.start(0) - currentTime; + + this.logger_('Stopped at ' + currentTime + ', setting timer for ' + difference + ', seeking ' + ('to ' + nextRange.start(0))); + + this.timer_ = setTimeout(this.skipTheGap_.bind(this), difference * 1000, currentTime); + return true; + } + + // All checks failed. Returning false to indicate failure to correct waiting + return false; + }; + + PlaybackWatcher.prototype.afterSeekableWindow_ = function afterSeekableWindow_(seekable, currentTime) { + if (!seekable.length) { + // we can't make a solid case if there's no seekable, default to false + return false; + } + + if (currentTime > seekable.end(seekable.length - 1) + SAFE_TIME_DELTA) { + return true; + } + + return false; + }; + + PlaybackWatcher.prototype.beforeSeekableWindow_ = function beforeSeekableWindow_(seekable, currentTime) { + if (seekable.length && + // can't fall before 0 and 0 seekable start identifies VOD stream + seekable.start(0) > 0 && currentTime < seekable.start(0) - SAFE_TIME_DELTA) { + return true; + } + + return false; + }; + + PlaybackWatcher.prototype.videoUnderflow_ = function videoUnderflow_(nextRange, buffered, currentTime) { + if (nextRange.length === 0) { + // Even if there is no available next range, there is still a possibility we are + // stuck in a gap due to video underflow. + var gap = this.gapFromVideoUnderflow_(buffered, currentTime); + + if (gap) { + this.logger_('Encountered a gap in video from ' + gap.start + ' to ' + gap.end + '. ' + ('Seeking to current time ' + currentTime)); + + return true; + } + } + + return false; + }; + + /** + * Timer callback. If playback still has not proceeded, then we seek + * to the start of the next buffered region. + * + * @private + */ + + + PlaybackWatcher.prototype.skipTheGap_ = function skipTheGap_(scheduledCurrentTime) { + var buffered = this.tech_.buffered(); + var currentTime = this.tech_.currentTime(); + var nextRange = findNextRange(buffered, currentTime); + + this.cancelTimer_(); + + if (nextRange.length === 0 || currentTime !== scheduledCurrentTime) { + return; + } + + this.logger_('skipTheGap_:', 'currentTime:', currentTime, 'scheduled currentTime:', scheduledCurrentTime, 'nextRange start:', nextRange.start(0)); + + // only seek if we still have not played + this.tech_.setCurrentTime(nextRange.start(0) + TIME_FUDGE_FACTOR); + + this.tech_.trigger({type: 'usage', name: 'hls-gap-skip'}); + }; + + PlaybackWatcher.prototype.gapFromVideoUnderflow_ = function gapFromVideoUnderflow_(buffered, currentTime) { + // At least in Chrome, if there is a gap in the video buffer, the audio will continue + // playing for ~3 seconds after the video gap starts. This is done to account for + // video buffer underflow/underrun (note that this is not done when there is audio + // buffer underflow/underrun -- in that case the video will stop as soon as it + // encounters the gap, as audio stalls are more noticeable/jarring to a user than + // video stalls). The player's time will reflect the playthrough of audio, so the + // time will appear as if we are in a buffered region, even if we are stuck in a + // "gap." + // + // Example: + // video buffer: 0 => 10.1, 10.2 => 20 + // audio buffer: 0 => 20 + // overall buffer: 0 => 10.1, 10.2 => 20 + // current time: 13 + // + // Chrome's video froze at 10 seconds, where the video buffer encountered the gap, + // however, the audio continued playing until it reached ~3 seconds past the gap + // (13 seconds), at which point it stops as well. Since current time is past the + // gap, findNextRange will return no ranges. + // + // To check for this issue, we see if there is a gap that starts somewhere within + // a 3 second range (3 seconds +/- 1 second) back from our current time. + var gaps = findGaps(buffered); + + for (var i = 0; i < gaps.length; i++) { + var start = gaps.start(i); + var end = gaps.end(i); + + // gap is starts no more than 4 seconds back + if (currentTime - start < 4 && currentTime - start > 2) { + return { + start: start, + end: end + }; + } + } + + return null; + }; + + return PlaybackWatcher; + }(); + + var defaultOptions = { + errorInterval: 30, + getSource: function getSource(next) { + var tech = this.tech({IWillNotUseThisInPlugins: true}); + var sourceObj = tech.currentSource_; + + return next(sourceObj); + } + }; + + /** + * Main entry point for the plugin + * + * @param {Player} player a reference to a videojs Player instance + * @param {Object} [options] an object with plugin options + * @private + */ + var initPlugin = function initPlugin(player, options) { + var lastCalled = 0; + var seekTo = 0; + var localOptions = videojs$1.mergeOptions(defaultOptions, options); + + player.ready(function () { + player.trigger({type: 'usage', name: 'hls-error-reload-initialized'}); + }); + + /** + * Player modifications to perform that must wait until `loadedmetadata` + * has been triggered + * + * @private + */ + var loadedMetadataHandler = function loadedMetadataHandler() { + if (seekTo) { + player.currentTime(seekTo); + } + }; + + /** + * Set the source on the player element, play, and seek if necessary + * + * @param {Object} sourceObj An object specifying the source url and mime-type to play + * @private + */ + var setSource = function setSource(sourceObj) { + if (sourceObj === null || sourceObj === undefined) { + return; + } + seekTo = player.duration() !== Infinity && player.currentTime() || 0; + + player.one('loadedmetadata', loadedMetadataHandler); + + player.src(sourceObj); + player.trigger({type: 'usage', name: 'hls-error-reload'}); + player.play(); + }; + + /** + * Attempt to get a source from either the built-in getSource function + * or a custom function provided via the options + * + * @private + */ + var errorHandler = function errorHandler() { + // Do not attempt to reload the source if a source-reload occurred before + // 'errorInterval' time has elapsed since the last source-reload + if (Date.now() - lastCalled < localOptions.errorInterval * 1000) { + player.trigger({type: 'usage', name: 'hls-error-reload-canceled'}); + return; + } + + if (!localOptions.getSource || typeof localOptions.getSource !== 'function') { + videojs$1.log.error('ERROR: reloadSourceOnError - The option getSource must be a function!'); + return; + } + lastCalled = Date.now(); + + return localOptions.getSource.call(player, setSource); + }; + + /** + * Unbind any event handlers that were bound by the plugin + * + * @private + */ + var cleanupEvents = function cleanupEvents() { + player.off('loadedmetadata', loadedMetadataHandler); + player.off('error', errorHandler); + player.off('dispose', cleanupEvents); + }; + + /** + * Cleanup before re-initializing the plugin + * + * @param {Object} [newOptions] an object with plugin options + * @private + */ + var reinitPlugin = function reinitPlugin(newOptions) { + cleanupEvents(); + initPlugin(player, newOptions); + }; + + player.on('error', errorHandler); + player.on('dispose', cleanupEvents); + + // Overwrite the plugin function so that we can correctly cleanup before + // initializing the plugin + player.reloadSourceOnError = reinitPlugin; + }; + + /** + * Reload the source when an error is detected as long as there + * wasn't an error previously within the last 30 seconds + * + * @param {Object} [options] an object with plugin options + */ + var reloadSourceOnError = function reloadSourceOnError(options) { + initPlugin(this, options); + }; + + var version$3 = "1.0.0"; + + /** + * @file videojs-http-streaming.js + * + * The main file for the HLS project. + * License: https://github.com/videojs/videojs-http-streaming/blob/master/LICENSE + */ + + var Hls$1 = { + PlaylistLoader: PlaylistLoader, + Playlist: Playlist, + Decrypter: Decrypter, + AsyncStream: AsyncStream, + decrypt: decrypt, + utils: utils, + + STANDARD_PLAYLIST_SELECTOR: lastBandwidthSelector, + INITIAL_PLAYLIST_SELECTOR: lowestBitrateCompatibleVariantSelector, + comparePlaylistBandwidth: comparePlaylistBandwidth, + comparePlaylistResolution: comparePlaylistResolution, + + xhr: xhrFactory() + }; + + // 0.5 MB/s + var INITIAL_BANDWIDTH = 4194304; + + // Define getter/setters for config properites + ['GOAL_BUFFER_LENGTH', 'MAX_GOAL_BUFFER_LENGTH', 'GOAL_BUFFER_LENGTH_RATE', 'BUFFER_LOW_WATER_LINE', 'MAX_BUFFER_LOW_WATER_LINE', 'BUFFER_LOW_WATER_LINE_RATE', 'BANDWIDTH_VARIANCE'].forEach(function (prop) { + Object.defineProperty(Hls$1, prop, { + get: function get$$1() { + videojs$1.log.warn('using Hls.' + prop + ' is UNSAFE be sure you know what you are doing'); + return Config[prop]; + }, + set: function set$$1(value) { + videojs$1.log.warn('using Hls.' + prop + ' is UNSAFE be sure you know what you are doing'); + + if (typeof value !== 'number' || value < 0) { + videojs$1.log.warn('value of Hls.' + prop + ' must be greater than or equal to 0'); + return; + } + + Config[prop] = value; + } + }); + }); + + var simpleTypeFromSourceType = function simpleTypeFromSourceType(type) { + var mpegurlRE = /^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i; + + if (mpegurlRE.test(type)) { + return 'hls'; + } + + var dashRE = /^application\/dash\+xml/i; + + if (dashRE.test(type)) { + return 'dash'; + } + + return null; + }; + + /** + * Updates the selectedIndex of the QualityLevelList when a mediachange happens in hls. + * + * @param {QualityLevelList} qualityLevels The QualityLevelList to update. + * @param {PlaylistLoader} playlistLoader PlaylistLoader containing the new media info. + * @function handleHlsMediaChange + */ + var handleHlsMediaChange = function handleHlsMediaChange(qualityLevels, playlistLoader) { + var newPlaylist = playlistLoader.media(); + var selectedIndex = -1; + + for (var i = 0; i < qualityLevels.length; i++) { + if (qualityLevels[i].id === newPlaylist.uri) { + selectedIndex = i; + break; + } + } + + qualityLevels.selectedIndex_ = selectedIndex; + qualityLevels.trigger({ + selectedIndex: selectedIndex, + type: 'change' + }); + }; + + /** + * Adds quality levels to list once playlist metadata is available + * + * @param {QualityLevelList} qualityLevels The QualityLevelList to attach events to. + * @param {Object} hls Hls object to listen to for media events. + * @function handleHlsLoadedMetadata + */ + var handleHlsLoadedMetadata = function handleHlsLoadedMetadata(qualityLevels, hls) { + hls.representations().forEach(function (rep) { + qualityLevels.addQualityLevel(rep); + }); + handleHlsMediaChange(qualityLevels, hls.playlists); + }; + + // HLS is a source handler, not a tech. Make sure attempts to use it + // as one do not cause exceptions. + Hls$1.canPlaySource = function () { + return videojs$1.log.warn('HLS is no longer a tech. Please remove it from ' + 'your player\'s techOrder.'); + }; + + var emeKeySystems = function emeKeySystems(keySystemOptions, videoPlaylist, audioPlaylist) { + if (!keySystemOptions) { + return keySystemOptions; + } + + // upsert the content types based on the selected playlist + var keySystemContentTypes = {}; + + for (var keySystem in keySystemOptions) { + keySystemContentTypes[keySystem] = { + audioContentType: 'audio/mp4; codecs="' + audioPlaylist.attributes.CODECS + '"', + videoContentType: 'video/mp4; codecs="' + videoPlaylist.attributes.CODECS + '"' + }; + + if (videoPlaylist.contentProtection && videoPlaylist.contentProtection[keySystem] && videoPlaylist.contentProtection[keySystem].pssh) { + keySystemContentTypes[keySystem].pssh = videoPlaylist.contentProtection[keySystem].pssh; + } + + // videojs-contrib-eme accepts the option of specifying: 'com.some.cdm': 'url' + // so we need to prevent overwriting the URL entirely + if (typeof keySystemOptions[keySystem] === 'string') { + keySystemContentTypes[keySystem].url = keySystemOptions[keySystem]; + } + } + + return videojs$1.mergeOptions(keySystemOptions, keySystemContentTypes); + }; + + var setupEmeOptions = function setupEmeOptions(hlsHandler) { + if (hlsHandler.options_.sourceType !== 'dash') { + return; + } + var player = videojs$1.players[hlsHandler.tech_.options_.playerId]; + + if (player.eme) { + var sourceOptions = emeKeySystems(hlsHandler.source_.keySystems, hlsHandler.playlists.media(), hlsHandler.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader.media()); + + if (sourceOptions) { + player.currentSource().keySystems = sourceOptions; + } + } + }; + + /** + * Whether the browser has built-in HLS support. + */ + Hls$1.supportsNativeHls = function () { + var video = document_1.createElement('video'); + + // native HLS is definitely not supported if HTML5 video isn't + if (!videojs$1.getTech('Html5').isSupported()) { + return false; + } + + // HLS manifests can go by many mime-types + var canPlay = [ + // Apple santioned + 'application/vnd.apple.mpegurl', + // Apple sanctioned for backwards compatibility + 'audio/mpegurl', + // Very common + 'audio/x-mpegurl', + // Very common + 'application/x-mpegurl', + // Included for completeness + 'video/x-mpegurl', 'video/mpegurl', 'application/mpegurl']; + + return canPlay.some(function (canItPlay) { + return (/maybe|probably/i.test(video.canPlayType(canItPlay)) + ); + }); + }(); + + Hls$1.supportsNativeDash = function () { + if (!videojs$1.getTech('Html5').isSupported()) { + return false; + } + + return (/maybe|probably/i.test(document_1.createElement('video').canPlayType('application/dash+xml')) + ); + }(); + + Hls$1.supportsTypeNatively = function (type) { + if (type === 'hls') { + return Hls$1.supportsNativeHls; + } + + if (type === 'dash') { + return Hls$1.supportsNativeDash; + } + + return false; + }; + + /** + * HLS is a source handler, not a tech. Make sure attempts to use it + * as one do not cause exceptions. + */ + Hls$1.isSupported = function () { + return videojs$1.log.warn('HLS is no longer a tech. Please remove it from ' + 'your player\'s techOrder.'); + }; + + var Component$1 = videojs$1.getComponent('Component'); + + /** + * The Hls Handler object, where we orchestrate all of the parts + * of HLS to interact with video.js + * + * @class HlsHandler + * @extends videojs.Component + * @param {Object} source the soruce object + * @param {Tech} tech the parent tech object + * @param {Object} options optional and required options + */ + + var HlsHandler = function (_Component) { + inherits(HlsHandler, _Component); + + function HlsHandler(source, tech, options) { + classCallCheck(this, HlsHandler); + + // tech.player() is deprecated but setup a reference to HLS for + // backwards-compatibility + var _this36 = possibleConstructorReturn(this, _Component.call(this, tech, options.hls)); + + if (tech.options_ && tech.options_.playerId) { + var _player = videojs$1(tech.options_.playerId); + + if (!_player.hasOwnProperty('hls')) { + Object.defineProperty(_player, 'hls', { + get: function get$$1() { + videojs$1.log.warn('player.hls is deprecated. Use player.tech_.hls instead.'); + tech.trigger({type: 'usage', name: 'hls-player-access'}); + return _this36; + } + }); + } + + // Set up a reference to the HlsHandler from player.vhs. This allows users to start + // migrating from player.tech_.hls... to player.vhs... for API access. Although this + // isn't the most appropriate form of reference for video.js (since all APIs should + // be provided through core video.js), it is a common pattern for plugins, and vhs + // will act accordingly. + _player.vhs = _this36; + // deprecated, for backwards compatibility + _player.dash = _this36; + } + + _this36.tech_ = tech; + _this36.source_ = source; + _this36.stats = {}; + _this36.ignoreNextSeekingEvent_ = false; + _this36.setOptions_(); + + // overriding native HLS only works if audio tracks have been emulated + // error early if we're misconfigured: + if (_this36.options_.overrideNative && (tech.featuresNativeVideoTracks || tech.featuresNativeAudioTracks)) { + throw new Error('Overriding native HLS requires emulated tracks. ' + 'See https://git.io/vMpjB'); + } + + // listen for fullscreenchange events for this player so that we + // can adjust our quality selection quickly + _this36.on(document_1, ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'], function (event) { + var fullscreenElement = document_1.fullscreenElement || document_1.webkitFullscreenElement || document_1.mozFullScreenElement || document_1.msFullscreenElement; + + if (fullscreenElement && fullscreenElement.contains(_this36.tech_.el())) { + _this36.masterPlaylistController_.fastQualityChange_(); + } + }); + + _this36.on(_this36.tech_, 'seeking', function () { + if (this.ignoreNextSeekingEvent_) { + this.ignoreNextSeekingEvent_ = false; + return; + } + + this.setCurrentTime(this.tech_.currentTime()); + }); + _this36.on(_this36.tech_, 'error', function () { + if (this.masterPlaylistController_) { + this.masterPlaylistController_.pauseLoading(); + } + }); + + _this36.on(_this36.tech_, 'play', _this36.play); + return _this36; + } + + HlsHandler.prototype.setOptions_ = function setOptions_() { + var _this37 = this; + + // defaults + this.options_.withCredentials = this.options_.withCredentials || false; + + if (typeof this.options_.blacklistDuration !== 'number') { + this.options_.blacklistDuration = 5 * 60; + } + + // start playlist selection at a reasonable bandwidth for + // broadband internet (0.5 MB/s) or mobile (0.0625 MB/s) + if (typeof this.options_.bandwidth !== 'number') { + this.options_.bandwidth = INITIAL_BANDWIDTH; + } + + // If the bandwidth number is unchanged from the initial setting + // then this takes precedence over the enableLowInitialPlaylist option + this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === INITIAL_BANDWIDTH; + + // grab options passed to player.src + ['withCredentials', 'bandwidth'].forEach(function (option) { + if (typeof _this37.source_[option] !== 'undefined') { + _this37.options_[option] = _this37.source_[option]; + } + }); + + this.bandwidth = this.options_.bandwidth; + }; + /** + * called when player.src gets called, handle a new source + * + * @param {Object} src the source object to handle + */ + + + HlsHandler.prototype.src = function src(_src, type) { + var _this38 = this; + + // do nothing if the src is falsey + if (!_src) { + return; + } + this.setOptions_(); + // add master playlist controller options + this.options_.url = this.source_.src; + this.options_.tech = this.tech_; + this.options_.externHls = Hls$1; + this.options_.sourceType = simpleTypeFromSourceType(type); + + this.masterPlaylistController_ = new MasterPlaylistController(this.options_); + this.playbackWatcher_ = new PlaybackWatcher(videojs$1.mergeOptions(this.options_, { + seekable: function seekable() { + return _this38.seekable(); + } + })); + + this.masterPlaylistController_.on('error', function () { + var player = videojs$1.players[_this38.tech_.options_.playerId]; + + player.error(_this38.masterPlaylistController_.error); + }); + + // `this` in selectPlaylist should be the HlsHandler for backwards + // compatibility with < v2 + this.masterPlaylistController_.selectPlaylist = this.selectPlaylist ? this.selectPlaylist.bind(this) : Hls$1.STANDARD_PLAYLIST_SELECTOR.bind(this); + + this.masterPlaylistController_.selectInitialPlaylist = Hls$1.INITIAL_PLAYLIST_SELECTOR.bind(this); + + // re-expose some internal objects for backwards compatibility with < v2 + this.playlists = this.masterPlaylistController_.masterPlaylistLoader_; + this.mediaSource = this.masterPlaylistController_.mediaSource; + + // Proxy assignment of some properties to the master playlist + // controller. Using a custom property for backwards compatibility + // with < v2 + Object.defineProperties(this, { + selectPlaylist: { + get: function get$$1() { + return this.masterPlaylistController_.selectPlaylist; + }, + set: function set$$1(selectPlaylist) { + this.masterPlaylistController_.selectPlaylist = selectPlaylist.bind(this); + } + }, + throughput: { + get: function get$$1() { + return this.masterPlaylistController_.mainSegmentLoader_.throughput.rate; + }, + set: function set$$1(throughput) { + this.masterPlaylistController_.mainSegmentLoader_.throughput.rate = throughput; + // By setting `count` to 1 the throughput value becomes the starting value + // for the cumulative average + this.masterPlaylistController_.mainSegmentLoader_.throughput.count = 1; + } + }, + bandwidth: { + get: function get$$1() { + return this.masterPlaylistController_.mainSegmentLoader_.bandwidth; + }, + set: function set$$1(bandwidth) { + this.masterPlaylistController_.mainSegmentLoader_.bandwidth = bandwidth; + // setting the bandwidth manually resets the throughput counter + // `count` is set to zero that current value of `rate` isn't included + // in the cumulative average + this.masterPlaylistController_.mainSegmentLoader_.throughput = { + rate: 0, + count: 0 + }; + } + }, + /** + * `systemBandwidth` is a combination of two serial processes bit-rates. The first + * is the network bitrate provided by `bandwidth` and the second is the bitrate of + * the entire process after that - decryption, transmuxing, and appending - provided + * by `throughput`. + * + * Since the two process are serial, the overall system bandwidth is given by: + * sysBandwidth = 1 / (1 / bandwidth + 1 / throughput) + */ + systemBandwidth: { + get: function get$$1() { + var invBandwidth = 1 / (this.bandwidth || 1); + var invThroughput = void 0; + + if (this.throughput > 0) { + invThroughput = 1 / this.throughput; + } else { + invThroughput = 0; + } + + var systemBitrate = Math.floor(1 / (invBandwidth + invThroughput)); + + return systemBitrate; + }, + set: function set$$1() { + videojs$1.log.error('The "systemBandwidth" property is read-only'); + } + } + }); + + Object.defineProperties(this.stats, { + bandwidth: { + get: function get$$1() { + return _this38.bandwidth || 0; + }, + enumerable: true + }, + mediaRequests: { + get: function get$$1() { + return _this38.masterPlaylistController_.mediaRequests_() || 0; + }, + enumerable: true + }, + mediaRequestsAborted: { + get: function get$$1() { + return _this38.masterPlaylistController_.mediaRequestsAborted_() || 0; + }, + enumerable: true + }, + mediaRequestsTimedout: { + get: function get$$1() { + return _this38.masterPlaylistController_.mediaRequestsTimedout_() || 0; + }, + enumerable: true + }, + mediaRequestsErrored: { + get: function get$$1() { + return _this38.masterPlaylistController_.mediaRequestsErrored_() || 0; + }, + enumerable: true + }, + mediaTransferDuration: { + get: function get$$1() { + return _this38.masterPlaylistController_.mediaTransferDuration_() || 0; + }, + enumerable: true + }, + mediaBytesTransferred: { + get: function get$$1() { + return _this38.masterPlaylistController_.mediaBytesTransferred_() || 0; + }, + enumerable: true + }, + mediaSecondsLoaded: { + get: function get$$1() { + return _this38.masterPlaylistController_.mediaSecondsLoaded_() || 0; + }, + enumerable: true + }, + buffered: { + get: function get$$1() { + return timeRangesToArray(_this38.tech_.buffered()); + }, + enumerable: true + }, + currentTime: { + get: function get$$1() { + return _this38.tech_.currentTime(); + }, + enumerable: true + }, + currentSource: { + get: function get$$1() { + return _this38.tech_.currentSource_; + }, + enumerable: true + }, + currentTech: { + get: function get$$1() { + return _this38.tech_.name_; + }, + enumerable: true + }, + duration: { + get: function get$$1() { + return _this38.tech_.duration(); + }, + enumerable: true + }, + master: { + get: function get$$1() { + return _this38.playlists.master; + }, + enumerable: true + }, + playerDimensions: { + get: function get$$1() { + return _this38.tech_.currentDimensions(); + }, + enumerable: true + }, + seekable: { + get: function get$$1() { + return timeRangesToArray(_this38.tech_.seekable()); + }, + enumerable: true + }, + timestamp: { + get: function get$$1() { + return Date.now(); + }, + enumerable: true + }, + videoPlaybackQuality: { + get: function get$$1() { + return _this38.tech_.getVideoPlaybackQuality(); + }, + enumerable: true + } + }); + + this.tech_.one('canplay', this.masterPlaylistController_.setupFirstPlay.bind(this.masterPlaylistController_)); + + this.masterPlaylistController_.on('selectedinitialmedia', function () { + // Add the manual rendition mix-in to HlsHandler + renditionSelectionMixin(_this38); + setupEmeOptions(_this38); + }); + + // the bandwidth of the primary segment loader is our best + // estimate of overall bandwidth + this.on(this.masterPlaylistController_, 'progress', function () { + this.tech_.trigger('progress'); + }); + + // In the live case, we need to ignore the very first `seeking` event since + // that will be the result of the seek-to-live behavior + this.on(this.masterPlaylistController_, 'firstplay', function () { + this.ignoreNextSeekingEvent_ = true; + }); + + this.tech_.ready(function () { + return _this38.setupQualityLevels_(); + }); + + // do nothing if the tech has been disposed already + // this can occur if someone sets the src in player.ready(), for instance + if (!this.tech_.el()) { + return; + } + + this.tech_.src(videojs$1.URL.createObjectURL(this.masterPlaylistController_.mediaSource)); + }; + + /** + * Initializes the quality levels and sets listeners to update them. + * + * @method setupQualityLevels_ + * @private + */ + + + HlsHandler.prototype.setupQualityLevels_ = function setupQualityLevels_() { + var _this39 = this; + + var player = videojs$1.players[this.tech_.options_.playerId]; + + if (player && player.qualityLevels) { + this.qualityLevels_ = player.qualityLevels(); + + this.masterPlaylistController_.on('selectedinitialmedia', function () { + handleHlsLoadedMetadata(_this39.qualityLevels_, _this39); + }); + + this.playlists.on('mediachange', function () { + handleHlsMediaChange(_this39.qualityLevels_, _this39.playlists); + }); + } + }; + + /** + * Begin playing the video. + */ + + + HlsHandler.prototype.play = function play() { + this.masterPlaylistController_.play(); + }; + + /** + * a wrapper around the function in MasterPlaylistController + */ + + + HlsHandler.prototype.setCurrentTime = function setCurrentTime(currentTime) { + this.masterPlaylistController_.setCurrentTime(currentTime); + }; + + /** + * a wrapper around the function in MasterPlaylistController + */ + + + HlsHandler.prototype.duration = function duration() { + return this.masterPlaylistController_.duration(); + }; + + /** + * a wrapper around the function in MasterPlaylistController + */ + + + HlsHandler.prototype.seekable = function seekable() { + return this.masterPlaylistController_.seekable(); + }; + + /** + * Abort all outstanding work and cleanup. + */ + + + HlsHandler.prototype.dispose = function dispose() { + if (this.playbackWatcher_) { + this.playbackWatcher_.dispose(); + } + if (this.masterPlaylistController_) { + this.masterPlaylistController_.dispose(); + } + if (this.qualityLevels_) { + this.qualityLevels_.dispose(); + } + _Component.prototype.dispose.call(this); + }; + + return HlsHandler; + }(Component$1); + + /** + * The Source Handler object, which informs video.js what additional + * MIME types are supported and sets up playback. It is registered + * automatically to the appropriate tech based on the capabilities of + * the browser it is running in. It is not necessary to use or modify + * this object in normal usage. + */ + + + var HlsSourceHandler = { + name: 'videojs-http-streaming', + VERSION: version$3, + canHandleSource: function canHandleSource(srcObj) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var localOptions = videojs$1.mergeOptions(videojs$1.options, options); + + return HlsSourceHandler.canPlayType(srcObj.type, localOptions); + }, + handleSource: function handleSource(source, tech) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var localOptions = videojs$1.mergeOptions(videojs$1.options, options); + + tech.hls = new HlsHandler(source, tech, localOptions); + tech.hls.xhr = xhrFactory(); + + tech.hls.src(source.src, source.type); + return tech.hls; + }, + canPlayType: function canPlayType(type) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var _videojs$mergeOptions = videojs$1.mergeOptions(videojs$1.options, options), + overrideNative = _videojs$mergeOptions.hls.overrideNative; + + var supportedType = simpleTypeFromSourceType(type); + var canUseMsePlayback = supportedType && (!Hls$1.supportsTypeNatively(supportedType) || overrideNative); + + return canUseMsePlayback ? 'maybe' : ''; + } + }; + + if (typeof videojs$1.MediaSource === 'undefined' || typeof videojs$1.URL === 'undefined') { + videojs$1.MediaSource = MediaSource; + videojs$1.URL = URL$1; + } + + // register source handlers with the appropriate techs + if (MediaSource.supportsNativeMediaSources()) { + videojs$1.getTech('Html5').registerSourceHandler(HlsSourceHandler, 0); + } + + videojs$1.HlsHandler = HlsHandler; + videojs$1.HlsSourceHandler = HlsSourceHandler; + videojs$1.Hls = Hls$1; + if (!videojs$1.use) { + videojs$1.registerComponent('Hls', Hls$1); + } + videojs$1.options.hls = videojs$1.options.hls || {}; + + if (videojs$1.registerPlugin) { + videojs$1.registerPlugin('reloadSourceOnError', reloadSourceOnError); + } else { + videojs$1.plugin('reloadSourceOnError', reloadSourceOnError); + } + + return videojs$1; + +}))); diff --git a/src/assets/libs/video-js-7.0.0/video.min.js b/src/assets/libs/video-js-7.0.0/video.min.js new file mode 100644 index 0000000..6fb4314 --- /dev/null +++ b/src/assets/libs/video-js-7.0.0/video.min.js @@ -0,0 +1,12 @@ +/** + * @license + * Video.js 7.0.0 <http://videojs.com/> + * Copyright Brightcove, Inc. <https://www.brightcove.com/> + * Available under Apache License Version 2.0 + * <https://github.com/videojs/video.js/blob/master/LICENSE> + * + * Includes vtt.js <https://github.com/mozilla/vtt.js> + * Available under Apache License Version 2.0 + * <https://github.com/mozilla/vtt.js/blob/master/LICENSE> + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.videojs=e()}(this,function(){var d="7.0.0",t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t,e){return t(e={exports:{}},e.exports),e.exports}var i,g="undefined"!=typeof window?window:"undefined"!=typeof t?t:"undefined"!=typeof self?self:{},r={},n=Object.freeze({default:r}),s=n&&r||n,a="undefined"!=typeof t?t:"undefined"!=typeof window?window:{};"undefined"!=typeof document?i=document:(i=a["__GLOBAL_DOCUMENT_CACHE@4"])||(i=a["__GLOBAL_DOCUMENT_CACHE@4"]=s);var p=i,o=void 0,u="info",l=[],c=function(t,e){var i=o.levels[u],r=new RegExp("^("+i+")$");if("log"!==t&&e.unshift(t.toUpperCase()+":"),l&&l.push([].concat(e)),e.unshift("VIDEOJS:"),g.console){var n=g.console[t];n||"debug"!==t||(n=g.console.info||g.console.log),n&&i&&r.test(t)&&n[Array.isArray(e)?"apply":"call"](g.console,e)}};(o=function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];c("log",e)}).levels={all:"debug|log|warn|error",off:"",debug:"debug|log|warn|error",info:"log|warn|error",warn:"warn|error",error:"error",DEFAULT:u},o.level=function(t){if("string"==typeof t){if(!o.levels.hasOwnProperty(t))throw new Error('"'+t+'" in not a valid log level');u=t}return u},o.history=function(){return l?[].concat(l):[]},o.history.clear=function(){l&&(l.length=0)},o.history.disable=function(){null!==l&&(l.length=0,l=null)},o.history.enable=function(){null===l&&(l=[])},o.error=function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];return c("error",e)},o.warn=function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];return c("warn",e)},o.debug=function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];return c("debug",e)};var f=o;var m=function(t){for(var e="",i=0;i<arguments.length;i++)e+=t[i].replace(/\n\r?\s*/g,"")+(arguments[i+1]||"");return e},v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},y=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},_=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)},b=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},h=function(t,e){return t.raw=e,t},T=Object.prototype.toString,S=function(t){return E(t)?Object.keys(t):[]};function k(e,i){S(e).forEach(function(t){return i(e[t],t)})}function C(i){for(var t=arguments.length,e=Array(1<t?t-1:0),r=1;r<t;r++)e[r-1]=arguments[r];return Object.assign?Object.assign.apply(Object,[i].concat(e)):(e.forEach(function(t){t&&k(t,function(t,e){i[e]=t})}),i)}function E(t){return!!t&&"object"===("undefined"==typeof t?"undefined":v(t))}function w(t){return E(t)&&"[object Object]"===T.call(t)&&t.constructor===Object}function A(t,e){if(!t||!e)return"";if("function"==typeof g.getComputedStyle){var i=g.getComputedStyle(t);return i?i[e]:""}return""}var L=h(["Setting attributes in the second argument of createEl()\n has been deprecated. Use the third argument instead.\n createEl(type, properties, attributes). Attempting to set "," to ","."],["Setting attributes in the second argument of createEl()\n has been deprecated. Use the third argument instead.\n createEl(type, properties, attributes). Attempting to set "," to ","."]);function P(t){return"string"==typeof t&&/\S/.test(t)}function O(t){if(/\s/.test(t))throw new Error("class has illegal whitespace characters")}function x(){return p===g.document}function I(t){return E(t)&&1===t.nodeType}function D(){try{return g.parent!==g.self}catch(t){return!0}}function R(r){return function(t,e){if(!P(t))return p[r](null);P(e)&&(e=p.querySelector(e));var i=I(e)?e:p;return i[r]&&i[r](t)}}function M(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"div",i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},e=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},r=arguments[3],n=p.createElement(t);return Object.getOwnPropertyNames(i).forEach(function(t){var e=i[t];-1!==t.indexOf("aria-")||"role"===t||"type"===t?(f.warn(m(L,t,e)),n.setAttribute(t,e)):"textContent"===t?U(n,e):n[t]=e}),Object.getOwnPropertyNames(e).forEach(function(t){n.setAttribute(t,e[t])}),r&&et(n,r),n}function U(t,e){return"undefined"==typeof t.textContent?t.innerText=e:t.textContent=e,t}function N(t,e){e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t)}function B(t,e){return O(e),t.classList?t.classList.contains(e):(i=e,new RegExp("(^|\\s)"+i+"($|\\s)")).test(t.className);var i}function j(t,e){return t.classList?t.classList.add(e):B(t,e)||(t.className=(t.className+" "+e).trim()),t}function F(t,e){return t.classList?t.classList.remove(e):(O(e),t.className=t.className.split(/\s+/).filter(function(t){return t!==e}).join(" ")),t}function H(t,e,i){var r=B(t,e);if("function"==typeof i&&(i=i(t,e)),"boolean"!=typeof i&&(i=!r),i!==r)return i?j(t,e):F(t,e),t}function V(i,r){Object.getOwnPropertyNames(r).forEach(function(t){var e=r[t];null===e||"undefined"==typeof e||!1===e?i.removeAttribute(t):i.setAttribute(t,!0===e?"":e)})}function q(t){var e={},i=",autoplay,controls,playsinline,loop,muted,default,defaultMuted,";if(t&&t.attributes&&0<t.attributes.length)for(var r=t.attributes,n=r.length-1;0<=n;n--){var s=r[n].name,a=r[n].value;"boolean"!=typeof t[s]&&-1===i.indexOf(","+s+",")||(a=null!==a),e[s]=a}return e}function W(t,e){return t.getAttribute(e)}function z(t,e,i){t.setAttribute(e,i)}function G(t,e){t.removeAttribute(e)}function X(){p.body.focus(),p.onselectstart=function(){return!1}}function Y(){p.onselectstart=function(){return!0}}function $(t){if(t&&t.getBoundingClientRect&&t.parentNode){var e=t.getBoundingClientRect(),i={};return["bottom","height","left","right","top","width"].forEach(function(t){void 0!==e[t]&&(i[t]=e[t])}),i.height||(i.height=parseFloat(A(t,"height"))),i.width||(i.width=parseFloat(A(t,"width"))),i}}function K(t){var e=void 0;if(t.getBoundingClientRect&&t.parentNode&&(e=t.getBoundingClientRect()),!e)return{left:0,top:0};var i=p.documentElement,r=p.body,n=i.clientLeft||r.clientLeft||0,s=g.pageXOffset||r.scrollLeft,a=e.left+s-n,o=i.clientTop||r.clientTop||0,u=g.pageYOffset||r.scrollTop,l=e.top+u-o;return{left:Math.round(a),top:Math.round(l)}}function Q(t,e){var i={},r=K(t),n=t.offsetWidth,s=t.offsetHeight,a=r.top,o=r.left,u=e.pageY,l=e.pageX;return e.changedTouches&&(l=e.changedTouches[0].pageX,u=e.changedTouches[0].pageY),i.y=Math.max(0,Math.min(1,(a-u+s)/s)),i.x=Math.max(0,Math.min(1,(l-o)/n)),i}function J(t){return E(t)&&3===t.nodeType}function Z(t){for(;t.firstChild;)t.removeChild(t.firstChild);return t}function tt(t){return"function"==typeof t&&(t=t()),(Array.isArray(t)?t:[t]).map(function(t){return"function"==typeof t&&(t=t()),I(t)||J(t)?t:"string"==typeof t&&/\S/.test(t)?p.createTextNode(t):void 0}).filter(function(t){return t})}function et(e,t){return tt(t).forEach(function(t){return e.appendChild(t)}),e}function it(t,e){return et(Z(t),e)}function rt(t){return void 0===t.button&&void 0===t.buttons||(0===t.button&&void 0===t.buttons||0===t.button&&1===t.buttons)}var nt=R("querySelector"),st=R("querySelectorAll"),at=Object.freeze({isReal:x,isEl:I,isInFrame:D,createEl:M,textContent:U,prependTo:N,hasClass:B,addClass:j,removeClass:F,toggleClass:H,setAttributes:V,getAttributes:q,getAttribute:W,setAttribute:z,removeAttribute:G,blockTextSelection:X,unblockTextSelection:Y,getBoundingClientRect:$,findPosition:K,getPointerPosition:Q,isTextNode:J,emptyEl:Z,normalizeContent:tt,appendContent:et,insertContent:it,isSingleLeftClick:rt,$:nt,$$:st}),ot=1;function ut(){return ot++}var lt={},ct="vdata"+(new Date).getTime();function ht(t){var e=t[ct];return e||(e=t[ct]=ut()),lt[e]||(lt[e]={}),lt[e]}function dt(t){var e=t[ct];return!!e&&!!Object.getOwnPropertyNames(lt[e]).length}function pt(e){var t=e[ct];if(t){delete lt[t];try{delete e[ct]}catch(t){e.removeAttribute?e.removeAttribute(ct):e[ct]=null}}}function ft(t,e){var i=ht(t);0===i.handlers[e].length&&(delete i.handlers[e],t.removeEventListener?t.removeEventListener(e,i.dispatcher,!1):t.detachEvent&&t.detachEvent("on"+e,i.dispatcher)),Object.getOwnPropertyNames(i.handlers).length<=0&&(delete i.handlers,delete i.dispatcher,delete i.disabled),0===Object.getOwnPropertyNames(i).length&&pt(t)}function mt(e,i,t,r){t.forEach(function(t){e(i,t,r)})}function gt(t){function e(){return!0}function i(){return!1}if(!t||!t.isPropagationStopped){var r=t||g.event;for(var n in t={},r)"layerX"!==n&&"layerY"!==n&&"keyLocation"!==n&&"webkitMovementX"!==n&&"webkitMovementY"!==n&&("returnValue"===n&&r.preventDefault||(t[n]=r[n]));if(t.target||(t.target=t.srcElement||p),t.relatedTarget||(t.relatedTarget=t.fromElement===t.target?t.toElement:t.fromElement),t.preventDefault=function(){r.preventDefault&&r.preventDefault(),t.returnValue=!1,r.returnValue=!1,t.defaultPrevented=!0},t.defaultPrevented=!1,t.stopPropagation=function(){r.stopPropagation&&r.stopPropagation(),t.cancelBubble=!0,r.cancelBubble=!0,t.isPropagationStopped=e},t.isPropagationStopped=i,t.stopImmediatePropagation=function(){r.stopImmediatePropagation&&r.stopImmediatePropagation(),t.isImmediatePropagationStopped=e,t.stopPropagation()},t.isImmediatePropagationStopped=i,null!==t.clientX&&void 0!==t.clientX){var s=p.documentElement,a=p.body;t.pageX=t.clientX+(s&&s.scrollLeft||a&&a.scrollLeft||0)-(s&&s.clientLeft||a&&a.clientLeft||0),t.pageY=t.clientY+(s&&s.scrollTop||a&&a.scrollTop||0)-(s&&s.clientTop||a&&a.clientTop||0)}t.which=t.charCode||t.keyCode,null!==t.button&&void 0!==t.button&&(t.button=1&t.button?0:4&t.button?1:2&t.button?2:0)}return t}var yt=!1;!function(){try{var t=Object.defineProperty({},"passive",{get:function(){yt=!0}});g.addEventListener("test",null,t),g.removeEventListener("test",null,t)}catch(t){}}();var vt=["touchstart","touchmove"];function _t(a,t,e){if(Array.isArray(t))return mt(_t,a,t,e);var o=ht(a);if(o.handlers||(o.handlers={}),o.handlers[t]||(o.handlers[t]=[]),e.guid||(e.guid=ut()),o.handlers[t].push(e),o.dispatcher||(o.disabled=!1,o.dispatcher=function(t,e){if(!o.disabled){t=gt(t);var i=o.handlers[t.type];if(i)for(var r=i.slice(0),n=0,s=r.length;n<s&&!t.isImmediatePropagationStopped();n++)try{r[n].call(a,t,e)}catch(t){f.error(t)}}}),1===o.handlers[t].length)if(a.addEventListener){var i=!1;yt&&-1<vt.indexOf(t)&&(i={passive:!0}),a.addEventListener(t,o.dispatcher,i)}else a.attachEvent&&a.attachEvent("on"+t,o.dispatcher)}function bt(t,e,i){if(dt(t)){var r=ht(t);if(r.handlers){if(Array.isArray(e))return mt(bt,t,e,i);var n=function(t,e){r.handlers[e]=[],ft(t,e)};if(void 0!==e){var s=r.handlers[e];if(s)if(i){if(i.guid)for(var a=0;a<s.length;a++)s[a].guid===i.guid&&s.splice(a--,1);ft(t,e)}else n(t,e)}else for(var o in r.handlers)Object.prototype.hasOwnProperty.call(r.handlers||{},o)&&n(t,o)}}}function Tt(t,e,i){var r=dt(t)?ht(t):{},n=t.parentNode||t.ownerDocument;if("string"==typeof e?e={type:e,target:t}:e.target||(e.target=t),e=gt(e),r.dispatcher&&r.dispatcher.call(t,e,i),n&&!e.isPropagationStopped()&&!0===e.bubbles)Tt.call(null,n,e,i);else if(!n&&!e.defaultPrevented){var s=ht(e.target);e.target[e.type]&&(s.disabled=!0,"function"==typeof e.target[e.type]&&e.target[e.type](),s.disabled=!1)}return!e.defaultPrevented}function St(e,i,r){if(Array.isArray(i))return mt(St,e,i,r);var t=function t(){bt(e,i,t),r.apply(this,arguments)};t.guid=r.guid=r.guid||ut(),_t(e,i,t)}var kt=Object.freeze({fixEvent:gt,on:_t,off:bt,trigger:Tt,one:St}),Ct=!1,Et=void 0,wt=function(){if(x()&&!1!==Et.options.autoSetup){var t=Array.prototype.slice.call(p.getElementsByTagName("video")),e=Array.prototype.slice.call(p.getElementsByTagName("audio")),i=Array.prototype.slice.call(p.getElementsByTagName("video-js")),r=t.concat(e,i);if(r&&0<r.length)for(var n=0,s=r.length;n<s;n++){var a=r[n];if(!a||!a.getAttribute){At(1);break}void 0===a.player&&null!==a.getAttribute("data-setup")&&Et(a)}else Ct||At(1)}};function At(t,e){e&&(Et=e),g.setTimeout(wt,t)}x()&&"complete"===p.readyState?Ct=!0:St(g,"load",function(){Ct=!0});var Lt=function(t){var e=p.createElement("style");return e.className=t,e},Pt=function(t,e){t.styleSheet?t.styleSheet.cssText=e:t.textContent=e},Ot=function(t,e,i){e.guid||(e.guid=ut());var r=function(){return e.apply(t,arguments)};return r.guid=i?i+"_"+e.guid:e.guid,r},xt=function(e,i){var r=Date.now();return function(){var t=Date.now();i<=t-r&&(e.apply(void 0,arguments),r=t)}},It=function(r,n,s){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:g,o=void 0;return function(){var t=this,e=arguments,i=function(){i=o=null,s||r.apply(t,e)};!o&&s&&r.apply(t,e),a.clearTimeout(o),o=a.setTimeout(i,n)}},Dt=function(){};Dt.prototype.allowedEvents_={},Dt.prototype.addEventListener=Dt.prototype.on=function(t,e){var i=this.addEventListener;this.addEventListener=function(){},_t(this,t,e),this.addEventListener=i},Dt.prototype.removeEventListener=Dt.prototype.off=function(t,e){bt(this,t,e)},Dt.prototype.one=function(t,e){var i=this.addEventListener;this.addEventListener=function(){},St(this,t,e),this.addEventListener=i},Dt.prototype.dispatchEvent=Dt.prototype.trigger=function(t){var e=t.type||t;"string"==typeof t&&(t={type:e}),t=gt(t),this.allowedEvents_[e]&&this["on"+e]&&this["on"+e](t),Tt(this,t)};var Rt=function(e){return e instanceof Dt||!!e.eventBusEl_&&["on","one","off","trigger"].every(function(t){return"function"==typeof e[t]})},Mt=function(t){return"string"==typeof t&&/\S/.test(t)||Array.isArray(t)&&!!t.length},Ut=function(t){if(!t.nodeName&&!Rt(t))throw new Error("Invalid target; must be a DOM node or evented object.")},Nt=function(t){if(!Mt(t))throw new Error("Invalid event type; must be a non-empty string or array.")},Bt=function(t){if("function"!=typeof t)throw new Error("Invalid listener; must be a function.")},jt=function(t,e){var i=e.length<3||e[0]===t||e[0]===t.eventBusEl_,r=void 0,n=void 0,s=void 0;return i?(r=t.eventBusEl_,3<=e.length&&e.shift(),n=e[0],s=e[1]):(r=e[0],n=e[1],s=e[2]),Ut(r),Nt(n),Bt(s),{isTargetingSelf:i,target:r,type:n,listener:s=Ot(t,s)}},Ft=function(t,e,i,r){Ut(t),t.nodeName?kt[e](t,i,r):t[e](i,r)},Ht={on:function(){for(var t=this,e=arguments.length,i=Array(e),r=0;r<e;r++)i[r]=arguments[r];var n=jt(this,i),s=n.isTargetingSelf,a=n.target,o=n.type,u=n.listener;if(Ft(a,"on",o,u),!s){var l=function(){return t.off(a,o,u)};l.guid=u.guid;var c=function(){return t.off("dispose",l)};c.guid=u.guid,Ft(this,"on","dispose",l),Ft(a,"on","dispose",c)}},one:function(){for(var n=this,t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];var r=jt(this,e),s=r.isTargetingSelf,a=r.target,o=r.type,u=r.listener;if(s)Ft(a,"one",o,u);else{var l=function t(){for(var e=arguments.length,i=Array(e),r=0;r<e;r++)i[r]=arguments[r];n.off(a,o,t),u.apply(null,i)};l.guid=u.guid,Ft(a,"one",o,l)}},off:function(t,e,i){if(!t||Mt(t))bt(this.eventBusEl_,t,e);else{var r=t,n=e;Ut(r),Nt(n),Bt(i),i=Ot(this,i),this.off("dispose",i),r.nodeName?(bt(r,n,i),bt(r,"dispose",i)):Rt(r)&&(r.off(n,i),r.off("dispose",i))}},trigger:function(t,e){return Tt(this.eventBusEl_,t,e)}};function Vt(t){var e=(1<arguments.length&&void 0!==arguments[1]?arguments[1]:{}).eventBusKey;if(e){if(!t[e].nodeName)throw new Error('The eventBusKey "'+e+'" does not refer to an element.');t.eventBusEl_=t[e]}else t.eventBusEl_=M("span",{className:"vjs-event-bus"});return C(t,Ht),t.on("dispose",function(){t.off(),g.setTimeout(function(){t.eventBusEl_=null},0)}),t}var qt={state:{},setState:function(t){var i=this;"function"==typeof t&&(t=t());var r=void 0;return k(t,function(t,e){i.state[e]!==t&&((r=r||{})[e]={from:i.state[e],to:t}),i.state[e]=t}),r&&Rt(this)&&this.trigger({changes:r,type:"statechanged"}),r}};function Wt(t,e){return C(t,qt),t.state=C({},t.state,e),"function"==typeof t.handleStateChanged&&Rt(t)&&t.on("statechanged",t.handleStateChanged),t}function zt(t){return"string"!=typeof t?t:t.charAt(0).toUpperCase()+t.slice(1)}function Gt(){for(var i={},t=arguments.length,e=Array(t),r=0;r<t;r++)e[r]=arguments[r];return e.forEach(function(t){t&&k(t,function(t,e){w(t)?(w(i[e])||(i[e]={}),i[e]=Gt(i[e],t)):i[e]=t})}),i}var Xt=function(){function l(t,e,i){if(y(this,l),!t&&this.play?this.player_=t=this:this.player_=t,this.options_=Gt({},this.options_),e=this.options_=Gt(this.options_,e),this.id_=e.id||e.el&&e.el.id,!this.id_){var r=t&&t.id&&t.id()||"no_player";this.id_=r+"_component_"+ut()}this.name_=e.name||null,e.el?this.el_=e.el:!1!==e.createEl&&(this.el_=this.createEl()),!1!==e.evented&&Vt(this,{eventBusKey:this.el_?"el_":null}),Wt(this,this.constructor.defaultState),this.children_=[],this.childIndex_={},!(this.childNameIndex_={})!==e.initChildren&&this.initChildren(),this.ready(i),!1!==e.reportTouchActivity&&this.enableTouchActivity()}return l.prototype.dispose=function(){if(this.trigger({type:"dispose",bubbles:!1}),this.children_)for(var t=this.children_.length-1;0<=t;t--)this.children_[t].dispose&&this.children_[t].dispose();this.children_=null,this.childIndex_=null,this.childNameIndex_=null,this.el_&&(this.el_.parentNode&&this.el_.parentNode.removeChild(this.el_),pt(this.el_),this.el_=null),this.player_=null},l.prototype.player=function(){return this.player_},l.prototype.options=function(t){return f.warn("this.options() has been deprecated and will be moved to the constructor in 6.0"),t&&(this.options_=Gt(this.options_,t)),this.options_},l.prototype.el=function(){return this.el_},l.prototype.createEl=function(t,e,i){return M(t,e,i)},l.prototype.localize=function(t,n){var e=2<arguments.length&&void 0!==arguments[2]?arguments[2]:t,i=this.player_.language&&this.player_.language(),r=this.player_.languages&&this.player_.languages(),s=r&&r[i],a=i&&i.split("-")[0],o=r&&r[a],u=e;return s&&s[t]?u=s[t]:o&&o[t]&&(u=o[t]),n&&(u=u.replace(/\{(\d+)\}/g,function(t,e){var i=n[e-1],r=i;return"undefined"==typeof i&&(r=t),r})),u},l.prototype.contentEl=function(){return this.contentEl_||this.el_},l.prototype.id=function(){return this.id_},l.prototype.name=function(){return this.name_},l.prototype.children=function(){return this.children_},l.prototype.getChildById=function(t){return this.childIndex_[t]},l.prototype.getChild=function(t){if(t)return t=zt(t),this.childNameIndex_[t]},l.prototype.addChild=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:this.children_.length,r=void 0,n=void 0;if("string"==typeof t){n=zt(t);var s=e.componentClass||n;e.name=n;var a=l.getComponent(s);if(!a)throw new Error("Component "+s+" does not exist");if("function"!=typeof a)return null;r=new a(this.player_||this,e)}else r=t;if(this.children_.splice(i,0,r),"function"==typeof r.id&&(this.childIndex_[r.id()]=r),(n=n||r.name&&zt(r.name()))&&(this.childNameIndex_[n]=r),"function"==typeof r.el&&r.el()){var o=this.contentEl().children[i]||null;this.contentEl().insertBefore(r.el(),o)}return r},l.prototype.removeChild=function(t){if("string"==typeof t&&(t=this.getChild(t)),t&&this.children_){for(var e=!1,i=this.children_.length-1;0<=i;i--)if(this.children_[i]===t){e=!0,this.children_.splice(i,1);break}if(e){this.childIndex_[t.id()]=null,this.childNameIndex_[t.name()]=null;var r=t.el();r&&r.parentNode===this.contentEl()&&this.contentEl().removeChild(t.el())}}},l.prototype.initChildren=function(){var n=this,r=this.options_.children;if(r){var s=this.options_,t=void 0,i=l.getComponent("Tech");(t=Array.isArray(r)?r:Object.keys(r)).concat(Object.keys(this.options_).filter(function(e){return!t.some(function(t){return"string"==typeof t?e===t:e===t.name})})).map(function(t){var e=void 0,i=void 0;return"string"==typeof t?i=r[e=t]||n.options_[e]||{}:(e=t.name,i=t),{name:e,opts:i}}).filter(function(t){var e=l.getComponent(t.opts.componentClass||zt(t.name));return e&&!i.isTech(e)}).forEach(function(t){var e=t.name,i=t.opts;if(void 0!==s[e]&&(i=s[e]),!1!==i){!0===i&&(i={}),i.playerOptions=n.options_.playerOptions;var r=n.addChild(e,i);r&&(n[e]=r)}})}},l.prototype.buildCSSClass=function(){return""},l.prototype.ready=function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1];if(t)return this.isReady_?void(e?t.call(this):this.setTimeout(t,1)):(this.readyQueue_=this.readyQueue_||[],void this.readyQueue_.push(t))},l.prototype.triggerReady=function(){this.isReady_=!0,this.setTimeout(function(){var t=this.readyQueue_;this.readyQueue_=[],t&&0<t.length&&t.forEach(function(t){t.call(this)},this),this.trigger("ready")},1)},l.prototype.$=function(t,e){return nt(t,e||this.contentEl())},l.prototype.$$=function(t,e){return st(t,e||this.contentEl())},l.prototype.hasClass=function(t){return B(this.el_,t)},l.prototype.addClass=function(t){j(this.el_,t)},l.prototype.removeClass=function(t){F(this.el_,t)},l.prototype.toggleClass=function(t,e){H(this.el_,t,e)},l.prototype.show=function(){this.removeClass("vjs-hidden")},l.prototype.hide=function(){this.addClass("vjs-hidden")},l.prototype.lockShowing=function(){this.addClass("vjs-lock-showing")},l.prototype.unlockShowing=function(){this.removeClass("vjs-lock-showing")},l.prototype.getAttribute=function(t){return W(this.el_,t)},l.prototype.setAttribute=function(t,e){z(this.el_,t,e)},l.prototype.removeAttribute=function(t){G(this.el_,t)},l.prototype.width=function(t,e){return this.dimension("width",t,e)},l.prototype.height=function(t,e){return this.dimension("height",t,e)},l.prototype.dimensions=function(t,e){this.width(t,!0),this.height(e)},l.prototype.dimension=function(t,e,i){if(void 0!==e)return null!==e&&e==e||(e=0),-1!==(""+e).indexOf("%")||-1!==(""+e).indexOf("px")?this.el_.style[t]=e:this.el_.style[t]="auto"===e?"":e+"px",void(i||this.trigger("componentresize"));if(!this.el_)return 0;var r=this.el_.style[t],n=r.indexOf("px");return-1!==n?parseInt(r.slice(0,n),10):parseInt(this.el_["offset"+zt(t)],10)},l.prototype.currentDimension=function(t){var e=0;if("width"!==t&&"height"!==t)throw new Error("currentDimension only accepts width or height value");if("function"==typeof g.getComputedStyle){var i=g.getComputedStyle(this.el_);e=i.getPropertyValue(t)||i[t]}if(0===(e=parseFloat(e))){var r="offset"+zt(t);e=this.el_[r]}return e},l.prototype.currentDimensions=function(){return{width:this.currentDimension("width"),height:this.currentDimension("height")}},l.prototype.currentWidth=function(){return this.currentDimension("width")},l.prototype.currentHeight=function(){return this.currentDimension("height")},l.prototype.focus=function(){this.el_.focus()},l.prototype.blur=function(){this.el_.blur()},l.prototype.emitTapEvents=function(){var e=0,r=null,n=void 0;this.on("touchstart",function(t){1===t.touches.length&&(r={pageX:t.touches[0].pageX,pageY:t.touches[0].pageY},e=(new Date).getTime(),n=!0)}),this.on("touchmove",function(t){if(1<t.touches.length)n=!1;else if(r){var e=t.touches[0].pageX-r.pageX,i=t.touches[0].pageY-r.pageY;10<Math.sqrt(e*e+i*i)&&(n=!1)}});var t=function(){n=!1};this.on("touchleave",t),this.on("touchcancel",t),this.on("touchend",function(t){!(r=null)===n&&((new Date).getTime()-e<200&&(t.preventDefault(),this.trigger("tap")))})},l.prototype.enableTouchActivity=function(){if(this.player()&&this.player().reportUserActivity){var e=Ot(this.player(),this.player().reportUserActivity),i=void 0;this.on("touchstart",function(){e(),this.clearInterval(i),i=this.setInterval(e,250)});var t=function(t){e(),this.clearInterval(i)};this.on("touchmove",e),this.on("touchend",t),this.on("touchcancel",t)}},l.prototype.setTimeout=function(t,e){var i=this;t=Ot(this,t);var r=g.setTimeout(t,e),n=function(){return i.clearTimeout(r)};return n.guid="vjs-timeout-"+r,this.on("dispose",n),r},l.prototype.clearTimeout=function(t){g.clearTimeout(t);var e=function(){};return e.guid="vjs-timeout-"+t,this.off("dispose",e),t},l.prototype.setInterval=function(t,e){var i=this;t=Ot(this,t);var r=g.setInterval(t,e),n=function(){return i.clearInterval(r)};return n.guid="vjs-interval-"+r,this.on("dispose",n),r},l.prototype.clearInterval=function(t){g.clearInterval(t);var e=function(){};return e.guid="vjs-interval-"+t,this.off("dispose",e),t},l.prototype.requestAnimationFrame=function(t){var e=this;if(this.supportsRaf_){t=Ot(this,t);var i=g.requestAnimationFrame(t),r=function(){return e.cancelAnimationFrame(i)};return r.guid="vjs-raf-"+i,this.on("dispose",r),i}return this.setTimeout(t,1e3/60)},l.prototype.cancelAnimationFrame=function(t){if(this.supportsRaf_){g.cancelAnimationFrame(t);var e=function(){};return e.guid="vjs-raf-"+t,this.off("dispose",e),t}return this.clearTimeout(t)},l.registerComponent=function(t,e){if("string"!=typeof t||!t)throw new Error('Illegal component name, "'+t+'"; must be a non-empty string.');var i=l.getComponent("Tech"),r=i&&i.isTech(e),n=l===e||l.prototype.isPrototypeOf(e.prototype);if(r||!n){var s=void 0;throw s=r?"techs must be registered using Tech.registerTech()":"must be a Component subclass",new Error('Illegal component, "'+t+'"; '+s+".")}t=zt(t),l.components_||(l.components_={});var a=l.getComponent("Player");if("Player"===t&&a&&a.players){var o=a.players,u=Object.keys(o);if(o&&0<u.length&&u.map(function(t){return o[t]}).every(Boolean))throw new Error("Can not register Player component after player has been created.")}return l.components_[t]=e},l.getComponent=function(t){if(t)return t=zt(t),l.components_&&l.components_[t]?l.components_[t]:void 0},l}();Xt.prototype.supportsRaf_="function"==typeof g.requestAnimationFrame&&"function"==typeof g.cancelAnimationFrame,Xt.registerComponent("Component",Xt);var Yt,$t,Kt,Qt,Jt=g.navigator&&g.navigator.userAgent||"",Zt=/AppleWebKit\/([\d.]+)/i.exec(Jt),te=Zt?parseFloat(Zt.pop()):null,ee=/iPad/i.test(Jt),ie=/iPhone/i.test(Jt)&&!ee,re=/iPod/i.test(Jt),ne=ie||ee||re,se=(Yt=Jt.match(/OS (\d+)_/i))&&Yt[1]?Yt[1]:null,ae=/Android/i.test(Jt),oe=function(){var t=Jt.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(!t)return null;var e=t[1]&&parseFloat(t[1]),i=t[2]&&parseFloat(t[2]);return e&&i?parseFloat(t[1]+"."+t[2]):e||null}(),ue=ae&&oe<5&&te<537,le=/Firefox/i.test(Jt),ce=/Edge/i.test(Jt),he=!ce&&/Chrome/i.test(Jt),de=($t=Jt.match(/Chrome\/(\d+)/))&&$t[1]?parseFloat($t[1]):null,pe=(Kt=/MSIE\s(\d+)\.\d/.exec(Jt),!(Qt=Kt&&parseFloat(Kt[1]))&&/Trident\/7.0/i.test(Jt)&&/rv:11.0/.test(Jt)&&(Qt=11),Qt),fe=/Safari/i.test(Jt)&&!he&&!ae&&!ce,me=fe||ne,ge=x()&&("ontouchstart"in g||g.DocumentTouch&&g.document instanceof g.DocumentTouch),ye=Object.freeze({IS_IPAD:ee,IS_IPHONE:ie,IS_IPOD:re,IS_IOS:ne,IOS_VERSION:se,IS_ANDROID:ae,ANDROID_VERSION:oe,IS_NATIVE_ANDROID:ue,IS_FIREFOX:le,IS_EDGE:ce,IS_CHROME:he,CHROME_VERSION:de,IE_VERSION:pe,IS_SAFARI:fe,IS_ANY_SAFARI:me,TOUCH_ENABLED:ge});function ve(t,e,i,r){return function(t,e,i){if("number"!=typeof e||e<0||i<e)throw new Error("Failed to execute '"+t+"' on 'TimeRanges': The index provided ("+e+") is non-numeric or out of bounds (0-"+i+").")}(t,r,i.length-1),i[r][e]}function _e(t){return void 0===t||0===t.length?{length:0,start:function(){throw new Error("This TimeRanges object is empty")},end:function(){throw new Error("This TimeRanges object is empty")}}:{length:t.length,start:ve.bind(null,"start",0,t),end:ve.bind(null,"end",1,t)}}function be(t,e){return Array.isArray(t)?_e(t):void 0===t||void 0===e?_e():_e([[t,e]])}function Te(t,e){var i=0,r=void 0,n=void 0;if(!e)return 0;t&&t.length||(t=be(0,0));for(var s=0;s<t.length;s++)r=t.start(s),e<(n=t.end(s))&&(n=e),i+=n-r;return i/e}for(var Se={},ke=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],Ce=ke[0],Ee=void 0,we=0;we<ke.length;we++)if(ke[we][1]in p){Ee=ke[we];break}if(Ee)for(var Ae=0;Ae<Ee.length;Ae++)Se[Ce[Ae]]=Ee[Ae];function Le(t){if(t instanceof Le)return t;"number"==typeof t?this.code=t:"string"==typeof t?this.message=t:E(t)&&("number"==typeof t.code&&(this.code=t.code),C(this,t)),this.message||(this.message=Le.defaultMessages[this.code]||"")}Le.prototype.code=0,Le.prototype.message="",Le.prototype.status=null,Le.errorTypes=["MEDIA_ERR_CUSTOM","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","MEDIA_ERR_ENCRYPTED"],Le.defaultMessages={1:"You aborted the media playback",2:"A network error caused the media download to fail part-way.",3:"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.",4:"The media could not be loaded, either because the server or network failed or because the format is not supported.",5:"The media is encrypted and we do not have the keys to decrypt it."};for(var Pe=0;Pe<Le.errorTypes.length;Pe++)Le[Le.errorTypes[Pe]]=Pe,Le.prototype[Le.errorTypes[Pe]]=Pe;var Oe=function(t,e){var i,r=null;try{i=JSON.parse(t,e)}catch(t){r=t}return[r,i]};function xe(t){return null!=t&&"function"==typeof t.then}function Ie(t){xe(t)&&t.then(null,function(t){})}var De=function(r){return["kind","label","language","id","inBandMetadataTrackDispatchType","mode","src"].reduce(function(t,e,i){return r[e]&&(t[e]=r[e]),t},{cues:r.cues&&Array.prototype.map.call(r.cues,function(t){return{startTime:t.startTime,endTime:t.endTime,text:t.text,id:t.id}})})},Re=function(t){var e=t.$$("track"),i=Array.prototype.map.call(e,function(t){return t.track});return Array.prototype.map.call(e,function(t){var e=De(t.track);return t.src&&(e.src=t.src),e}).concat(Array.prototype.filter.call(t.textTracks(),function(t){return-1===i.indexOf(t)}).map(De))},Me=function(t,i){return t.forEach(function(t){var e=i.addRemoteTextTrack(t).track;!t.src&&t.cues&&t.cues.forEach(function(t){return e.addCue(t)})}),i.textTracks()},Ue="vjs-modal-dialog",Ne=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.opened_=i.hasBeenOpened_=i.hasBeenFilled_=!1,i.closeable(!i.options_.uncloseable),i.content(i.options_.content),i.contentEl_=M("div",{className:Ue+"-content"},{role:"document"}),i.descEl_=M("p",{className:Ue+"-description vjs-control-text",id:i.el().getAttribute("aria-describedby")}),U(i.descEl_,i.description()),i.el_.appendChild(i.descEl_),i.el_.appendChild(i.contentEl_),i}return _(n,r),n.prototype.createEl=function(){return r.prototype.createEl.call(this,"div",{className:this.buildCSSClass(),tabIndex:-1},{"aria-describedby":this.id()+"_description","aria-hidden":"true","aria-label":this.label(),role:"dialog"})},n.prototype.dispose=function(){this.contentEl_=null,this.descEl_=null,this.previouslyActiveEl_=null,r.prototype.dispose.call(this)},n.prototype.buildCSSClass=function(){return Ue+" vjs-hidden "+r.prototype.buildCSSClass.call(this)},n.prototype.handleKeyPress=function(t){27===t.which&&this.closeable()&&this.close()},n.prototype.label=function(){return this.localize(this.options_.label||"Modal Window")},n.prototype.description=function(){var t=this.options_.description||this.localize("This is a modal window.");return this.closeable()&&(t+=" "+this.localize("This modal can be closed by pressing the Escape key or activating the close button.")),t},n.prototype.open=function(){if(!this.opened_){var t=this.player();this.trigger("beforemodalopen"),this.opened_=!0,(this.options_.fillAlways||!this.hasBeenOpened_&&!this.hasBeenFilled_)&&this.fill(),this.wasPlaying_=!t.paused(),this.options_.pauseOnOpen&&this.wasPlaying_&&t.pause(),this.closeable()&&this.on(this.el_.ownerDocument,"keydown",Ot(this,this.handleKeyPress)),this.hadControls_=t.controls(),t.controls(!1),this.show(),this.conditionalFocus_(),this.el().setAttribute("aria-hidden","false"),this.trigger("modalopen"),this.hasBeenOpened_=!0}},n.prototype.opened=function(t){return"boolean"==typeof t&&this[t?"open":"close"](),this.opened_},n.prototype.close=function(){if(this.opened_){var t=this.player();this.trigger("beforemodalclose"),this.opened_=!1,this.wasPlaying_&&this.options_.pauseOnOpen&&t.play(),this.closeable()&&this.off(this.el_.ownerDocument,"keydown",Ot(this,this.handleKeyPress)),this.hadControls_&&t.controls(!0),this.hide(),this.el().setAttribute("aria-hidden","true"),this.trigger("modalclose"),this.conditionalBlur_(),this.options_.temporary&&this.dispose()}},n.prototype.closeable=function(t){if("boolean"==typeof t){var e=this.closeable_=!!t,i=this.getChild("closeButton");if(e&&!i){var r=this.contentEl_;this.contentEl_=this.el_,i=this.addChild("closeButton",{controlText:"Close Modal Dialog"}),this.contentEl_=r,this.on(i,"close",this.close)}!e&&i&&(this.off(i,"close",this.close),this.removeChild(i),i.dispose())}return this.closeable_},n.prototype.fill=function(){this.fillWith(this.content())},n.prototype.fillWith=function(t){var e=this.contentEl(),i=e.parentNode,r=e.nextSibling;this.trigger("beforemodalfill"),this.hasBeenFilled_=!0,i.removeChild(e),this.empty(),it(e,t),this.trigger("modalfill"),r?i.insertBefore(e,r):i.appendChild(e);var n=this.getChild("closeButton");n&&i.appendChild(n.el_)},n.prototype.empty=function(){this.trigger("beforemodalempty"),Z(this.contentEl()),this.trigger("modalempty")},n.prototype.content=function(t){return"undefined"!=typeof t&&(this.content_=t),this.content_},n.prototype.conditionalFocus_=function(){var t=p.activeElement,e=this.player_.el_;this.previouslyActiveEl_=null,(e.contains(t)||e===t)&&(this.previouslyActiveEl_=t,this.focus(),this.on(p,"keydown",this.handleKeyDown))},n.prototype.conditionalBlur_=function(){this.previouslyActiveEl_&&(this.previouslyActiveEl_.focus(),this.previouslyActiveEl_=null),this.off(p,"keydown",this.handleKeyDown)},n.prototype.handleKeyDown=function(t){if(9===t.which){for(var e=this.focusableEls_(),i=this.el_.querySelector(":focus"),r=void 0,n=0;n<e.length;n++)if(i===e[n]){r=n;break}p.activeElement===this.el_&&(r=0),t.shiftKey&&0===r?(e[e.length-1].focus(),t.preventDefault()):t.shiftKey||r!==e.length-1||(e[0].focus(),t.preventDefault())}},n.prototype.focusableEls_=function(){var t=this.el_.querySelectorAll("*");return Array.prototype.filter.call(t,function(t){return(t instanceof g.HTMLAnchorElement||t instanceof g.HTMLAreaElement)&&t.hasAttribute("href")||(t instanceof g.HTMLInputElement||t instanceof g.HTMLSelectElement||t instanceof g.HTMLTextAreaElement||t instanceof g.HTMLButtonElement)&&!t.hasAttribute("disabled")||t instanceof g.HTMLIFrameElement||t instanceof g.HTMLObjectElement||t instanceof g.HTMLEmbedElement||t.hasAttribute("tabindex")&&-1!==t.getAttribute("tabindex")||t.hasAttribute("contenteditable")})},n}(Xt);Ne.prototype.options_={pauseOnOpen:!0,temporary:!0},Xt.registerComponent("ModalDialog",Ne);var Be=function(r){function n(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];y(this,n);var e=b(this,r.call(this));e.tracks_=[],Object.defineProperty(e,"length",{get:function(){return this.tracks_.length}});for(var i=0;i<t.length;i++)e.addTrack(t[i]);return e}return _(n,r),n.prototype.addTrack=function(t){var e=this.tracks_.length;""+e in this||Object.defineProperty(this,e,{get:function(){return this.tracks_[e]}}),-1===this.tracks_.indexOf(t)&&(this.tracks_.push(t),this.trigger({track:t,type:"addtrack"}))},n.prototype.removeTrack=function(t){for(var e=void 0,i=0,r=this.length;i<r;i++)if(this[i]===t){(e=this[i]).off&&e.off(),this.tracks_.splice(i,1);break}e&&this.trigger({track:e,type:"removetrack"})},n.prototype.getTrackById=function(t){for(var e=null,i=0,r=this.length;i<r;i++){var n=this[i];if(n.id===t){e=n;break}}return e},n}(Dt);for(var je in Be.prototype.allowedEvents_={change:"change",addtrack:"addtrack",removetrack:"removetrack"},Be.prototype.allowedEvents_)Be.prototype["on"+je]=null;var Fe=function(t,e){for(var i=0;i<t.length;i++)Object.keys(t[i]).length&&e.id!==t[i].id&&(t[i].enabled=!1)},He=function(r){function n(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];y(this,n);for(var e=t.length-1;0<=e;e--)if(t[e].enabled){Fe(t,t[e]);break}var i=b(this,r.call(this,t));return i.changing_=!1,i}return _(n,r),n.prototype.addTrack=function(t){var e=this;t.enabled&&Fe(this,t),r.prototype.addTrack.call(this,t),t.addEventListener&&t.addEventListener("enabledchange",function(){e.changing_||(e.changing_=!0,Fe(e,t),e.changing_=!1,e.trigger("change"))})},n}(Be),Ve=function(t,e){for(var i=0;i<t.length;i++)Object.keys(t[i]).length&&e.id!==t[i].id&&(t[i].selected=!1)},qe=function(r){function n(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];y(this,n);for(var e=t.length-1;0<=e;e--)if(t[e].selected){Ve(t,t[e]);break}var i=b(this,r.call(this,t));return i.changing_=!1,Object.defineProperty(i,"selectedIndex",{get:function(){for(var t=0;t<this.length;t++)if(this[t].selected)return t;return-1},set:function(){}}),i}return _(n,r),n.prototype.addTrack=function(t){var e=this;t.selected&&Ve(this,t),r.prototype.addTrack.call(this,t),t.addEventListener&&t.addEventListener("selectedchange",function(){e.changing_||(e.changing_=!0,Ve(e,t),e.changing_=!1,e.trigger("change"))})},n}(Be),We=function(e){function t(){return y(this,t),b(this,e.apply(this,arguments))}return _(t,e),t.prototype.addTrack=function(t){e.prototype.addTrack.call(this,t),t.addEventListener("modechange",Ot(this,function(){this.trigger("change")}));-1===["metadata","chapters"].indexOf(t.kind)&&t.addEventListener("modechange",Ot(this,function(){this.trigger("selectedlanguagechange")}))},t}(Be),ze=function(){function r(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];y(this,r),this.trackElements_=[],Object.defineProperty(this,"length",{get:function(){return this.trackElements_.length}});for(var e=0,i=t.length;e<i;e++)this.addTrackElement_(t[e])}return r.prototype.addTrackElement_=function(t){var e=this.trackElements_.length;""+e in this||Object.defineProperty(this,e,{get:function(){return this.trackElements_[e]}}),-1===this.trackElements_.indexOf(t)&&this.trackElements_.push(t)},r.prototype.getTrackElementByTrack_=function(t){for(var e=void 0,i=0,r=this.trackElements_.length;i<r;i++)if(t===this.trackElements_[i].track){e=this.trackElements_[i];break}return e},r.prototype.removeTrackElement_=function(t){for(var e=0,i=this.trackElements_.length;e<i;e++)if(t===this.trackElements_[e]){this.trackElements_.splice(e,1);break}},r}(),Ge=function(){function e(t){y(this,e),e.prototype.setCues_.call(this,t),Object.defineProperty(this,"length",{get:function(){return this.length_}})}return e.prototype.setCues_=function(t){var e=this.length||0,i=0,r=t.length;this.cues_=t,this.length_=t.length;var n=function(t){""+t in this||Object.defineProperty(this,""+t,{get:function(){return this.cues_[t]}})};if(e<r)for(i=e;i<r;i++)n.call(this,i)},e.prototype.getCueById=function(t){for(var e=null,i=0,r=this.length;i<r;i++){var n=this[i];if(n.id===t){e=n;break}}return e},e}(),Xe={alternative:"alternative",captions:"captions",main:"main",sign:"sign",subtitles:"subtitles",commentary:"commentary"},Ye={alternative:"alternative",descriptions:"descriptions",main:"main","main-desc":"main-desc",translation:"translation",commentary:"commentary"},$e={subtitles:"subtitles",captions:"captions",descriptions:"descriptions",chapters:"chapters",metadata:"metadata"},Ke={disabled:"disabled",hidden:"hidden",showing:"showing"},Qe=function(s){function a(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};y(this,a);var e=b(this,s.call(this)),i={id:t.id||"vjs_track_"+ut(),kind:t.kind||"",label:t.label||"",language:t.language||""},r=function(t){Object.defineProperty(e,t,{get:function(){return i[t]},set:function(){}})};for(var n in i)r(n);return e}return _(a,s),a}(Dt),Je=function(t){var e=["protocol","hostname","port","pathname","search","hash","host"],i=p.createElement("a");i.href=t;var r=""===i.host&&"file:"!==i.protocol,n=void 0;r&&((n=p.createElement("div")).innerHTML='<a href="'+t+'"></a>',i=n.firstChild,n.setAttribute("style","display:none; position:absolute;"),p.body.appendChild(n));for(var s={},a=0;a<e.length;a++)s[e[a]]=i[e[a]];return"http:"===s.protocol&&(s.host=s.host.replace(/:80$/,"")),"https:"===s.protocol&&(s.host=s.host.replace(/:443$/,"")),s.protocol||(s.protocol=g.location.protocol),r&&p.body.removeChild(n),s},Ze=function(t){if(!t.match(/^https?:\/\//)){var e=p.createElement("div");e.innerHTML='<a href="'+t+'">x</a>',t=e.firstChild.href}return t},ti=function(t){if("string"==typeof t){var e=/^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/i.exec(t);if(e)return e.pop().toLowerCase()}return""},ei=function(t){var e=g.location,i=Je(t);return(":"===i.protocol?e.protocol:i.protocol)+i.host!==e.protocol+e.host},ii=Object.freeze({parseUrl:Je,getAbsoluteURL:Ze,getFileExtension:ti,isCrossOrigin:ei}),ri=function(t){var e=ni.call(t);return"[object Function]"===e||"function"==typeof t&&"[object RegExp]"!==e||"undefined"!=typeof window&&(t===window.setTimeout||t===window.alert||t===window.confirm||t===window.prompt)},ni=Object.prototype.toString;var si=Object.freeze({default:ri,__moduleExports:ri}),ai=e(function(t,e){(e=t.exports=function(t){return t.replace(/^\s*|\s*$/g,"")}).left=function(t){return t.replace(/^\s*/,"")},e.right=function(t){return t.replace(/\s*$/,"")}}),oi=ai.left,ui=ai.right,li=Object.freeze({default:ai,__moduleExports:ai,left:oi,right:ui}),ci=si&&ri||si,hi=function(t,e,i){if(!ci(e))throw new TypeError("iterator must be a function");arguments.length<3&&(i=this);"[object Array]"===di.call(t)?function(t,e,i){for(var r=0,n=t.length;r<n;r++)pi.call(t,r)&&e.call(i,t[r],r,t)}(t,e,i):"string"==typeof t?function(t,e,i){for(var r=0,n=t.length;r<n;r++)e.call(i,t.charAt(r),r,t)}(t,e,i):function(t,e,i){for(var r in t)pi.call(t,r)&&e.call(i,t[r],r,t)}(t,e,i)},di=Object.prototype.toString,pi=Object.prototype.hasOwnProperty;var fi=Object.freeze({default:hi,__moduleExports:hi}),mi=li&&ai||li,gi=fi&&hi||fi,yi=function(t){if(!t)return{};var s={};return gi(mi(t).split("\n"),function(t){var e,i=t.indexOf(":"),r=mi(t.slice(0,i)).toLowerCase(),n=mi(t.slice(i+1));"undefined"==typeof s[r]?s[r]=n:(e=s[r],"[object Array]"===Object.prototype.toString.call(e)?s[r].push(n):s[r]=[s[r],n])}),s},vi=Object.freeze({default:yi,__moduleExports:yi}),_i=function(){for(var t={},e=0;e<arguments.length;e++){var i=arguments[e];for(var r in i)bi.call(i,r)&&(t[r]=i[r])}return t},bi=Object.prototype.hasOwnProperty;var Ti=Object.freeze({default:_i,__moduleExports:_i}),Si=vi&&yi||vi,ki=Ti&&_i||Ti,Ci=wi;function Ei(t,e,i){var r=t;return ci(e)?(i=e,"string"==typeof t&&(r={uri:t})):r=ki(e,{uri:t}),r.callback=i,r}function wi(t,e,i){return Ai(e=Ei(t,e,i))}function Ai(r){if("undefined"==typeof r.callback)throw new Error("callback argument missing");var n=!1,s=function(t,e,i){n||(n=!0,r.callback(t,e,i))};function e(t){return clearTimeout(u),t instanceof Error||(t=new Error(""+(t||"Unknown XMLHttpRequest Error"))),t.statusCode=0,s(t,m)}function t(){if(!a){var t;clearTimeout(u),t=r.useXDR&&void 0===o.status?200:1223===o.status?204:o.status;var e=m,i=null;return 0!==t?(e={body:function(){var t=void 0;if(t=o.response?o.response:o.responseText||function(t){if("document"===t.responseType)return t.responseXML;var e=t.responseXML&&"parsererror"===t.responseXML.documentElement.nodeName;return""!==t.responseType||e?null:t.responseXML}(o),f)try{t=JSON.parse(t)}catch(t){}return t}(),statusCode:t,method:c,headers:{},url:l,rawRequest:o},o.getAllResponseHeaders&&(e.headers=Si(o.getAllResponseHeaders()))):i=new Error("Internal XMLHttpRequest Error"),s(i,e,e.body)}}var i,a,o=r.xhr||null;o||(o=r.cors||r.useXDR?new wi.XDomainRequest:new wi.XMLHttpRequest);var u,l=o.url=r.uri||r.url,c=o.method=r.method||"GET",h=r.body||r.data,d=o.headers=r.headers||{},p=!!r.sync,f=!1,m={body:void 0,headers:{},statusCode:0,method:c,url:l,rawRequest:o};if("json"in r&&!1!==r.json&&(f=!0,d.accept||d.Accept||(d.Accept="application/json"),"GET"!==c&&"HEAD"!==c&&(d["content-type"]||d["Content-Type"]||(d["Content-Type"]="application/json"),h=JSON.stringify(!0===r.json?h:r.json))),o.onreadystatechange=function(){4===o.readyState&&setTimeout(t,0)},o.onload=t,o.onerror=e,o.onprogress=function(){},o.onabort=function(){a=!0},o.ontimeout=e,o.open(c,l,!p,r.username,r.password),p||(o.withCredentials=!!r.withCredentials),!p&&0<r.timeout&&(u=setTimeout(function(){if(!a){a=!0,o.abort("timeout");var t=new Error("XMLHttpRequest timeout");t.code="ETIMEDOUT",e(t)}},r.timeout)),o.setRequestHeader)for(i in d)d.hasOwnProperty(i)&&o.setRequestHeader(i,d[i]);else if(r.headers&&!function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}(r.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in r&&(o.responseType=r.responseType),"beforeSend"in r&&"function"==typeof r.beforeSend&&r.beforeSend(o),o.send(h||null),o}wi.XMLHttpRequest=g.XMLHttpRequest||function(){},wi.XDomainRequest="withCredentials"in new wi.XMLHttpRequest?wi.XMLHttpRequest:g.XDomainRequest,function(t,e){for(var i=0;i<t.length;i++)e(t[i])}(["get","put","post","patch","head","delete"],function(r){wi["delete"===r?"del":r]=function(t,e,i){return(e=Ei(t,e,i)).method=r.toUpperCase(),Ai(e)}});var Li=function(t,e){var i=new g.WebVTT.Parser(g,g.vttjs,g.WebVTT.StringDecoder()),r=[];i.oncue=function(t){e.addCue(t)},i.onparsingerror=function(t){r.push(t)},i.onflush=function(){e.trigger({type:"loadeddata",target:e})},i.parse(t),0<r.length&&(g.console&&g.console.groupCollapsed&&g.console.groupCollapsed("Text Track parsing errors for "+e.src),r.forEach(function(t){return f.error(t)}),g.console&&g.console.groupEnd&&g.console.groupEnd()),i.flush()},Pi=function(t,n){var e={uri:t},i=ei(t);i&&(e.cors=i),Ci(e,Ot(this,function(t,e,i){if(t)return f.error(t,e);if(n.loaded_=!0,"function"!=typeof g.WebVTT){if(n.tech_){var r=function(){return Li(i,n)};n.tech_.on("vttjsloaded",r),n.tech_.on("vttjserror",function(){f.error("vttjs failed to load, stopping trying to process "+n.src),n.tech_.off("vttjsloaded",r)})}}else Li(i,n)}))},Oi=function(l){function c(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(y(this,c),!t.tech)throw new Error("A tech was not provided.");var e=Gt(t,{kind:$e[t.kind]||"subtitles",language:t.language||t.srclang||""}),i=Ke[e.mode]||"disabled",r=e.default;"metadata"!==e.kind&&"chapters"!==e.kind||(i="hidden");var n=b(this,l.call(this,e));n.tech_=e.tech,n.cues_=[],n.activeCues_=[];var s=new Ge(n.cues_),a=new Ge(n.activeCues_),o=!1,u=Ot(n,function(){this.activeCues,o&&(this.trigger("cuechange"),o=!1)});return"disabled"!==i&&n.tech_.ready(function(){n.tech_.on("timeupdate",u)},!0),Object.defineProperties(n,{default:{get:function(){return r},set:function(){}},mode:{get:function(){return i},set:function(t){var e=this;Ke[t]&&("showing"===(i=t)&&this.tech_.ready(function(){e.tech_.on("timeupdate",u)},!0),this.trigger("modechange"))}},cues:{get:function(){return this.loaded_?s:null},set:function(){}},activeCues:{get:function(){if(!this.loaded_)return null;if(0===this.cues.length)return a;for(var t=this.tech_.currentTime(),e=[],i=0,r=this.cues.length;i<r;i++){var n=this.cues[i];n.startTime<=t&&n.endTime>=t?e.push(n):n.startTime===n.endTime&&n.startTime<=t&&n.startTime+.5>=t&&e.push(n)}if(o=!1,e.length!==this.activeCues_.length)o=!0;else for(var s=0;s<e.length;s++)-1===this.activeCues_.indexOf(e[s])&&(o=!0);return this.activeCues_=e,a.setCues_(this.activeCues_),a},set:function(){}}}),e.src?(n.src=e.src,Pi(e.src,n)):n.loaded_=!0,n}return _(c,l),c.prototype.addCue=function(t){var e=t;if(g.vttjs&&!(t instanceof g.vttjs.VTTCue)){for(var i in e=new g.vttjs.VTTCue(t.startTime,t.endTime,t.text),t)i in e||(e[i]=t[i]);e.id=t.id,e.originalCue_=t}for(var r=this.tech_.textTracks(),n=0;n<r.length;n++)r[n]!==this&&r[n].removeCue(e);this.cues_.push(e),this.cues.setCues_(this.cues_)},c.prototype.removeCue=function(t){for(var e=this.cues_.length;e--;){var i=this.cues_[e];if(i===t||i.originalCue_&&i.originalCue_===t){this.cues_.splice(e,1),this.cues.setCues_(this.cues_);break}}},c}(Qe);Oi.prototype.allowedEvents_={cuechange:"cuechange"};var xi=function(n){function s(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};y(this,s);var e=Gt(t,{kind:Ye[t.kind]||""}),i=b(this,n.call(this,e)),r=!1;return Object.defineProperty(i,"enabled",{get:function(){return r},set:function(t){"boolean"==typeof t&&t!==r&&(r=t,this.trigger("enabledchange"))}}),e.enabled&&(i.enabled=e.enabled),i.loaded_=!0,i}return _(s,n),s}(Qe),Ii=function(n){function s(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};y(this,s);var e=Gt(t,{kind:Xe[t.kind]||""}),i=b(this,n.call(this,e)),r=!1;return Object.defineProperty(i,"selected",{get:function(){return r},set:function(t){"boolean"==typeof t&&t!==r&&(r=t,this.trigger("selectedchange"))}}),e.selected&&(i.selected=e.selected),i}return _(s,n),s}(Qe),Di=0,Ri=2,Mi=function(n){function s(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};y(this,s);var e=b(this,n.call(this)),i=void 0,r=new Oi(t);return e.kind=r.kind,e.src=r.src,e.srclang=r.language,e.label=r.label,e.default=r.default,Object.defineProperties(e,{readyState:{get:function(){return i}},track:{get:function(){return r}}}),i=Di,r.addEventListener("loadeddata",function(){i=Ri,e.trigger({type:"load",target:e})}),e}return _(s,n),s}(Dt);Mi.prototype.allowedEvents_={load:"load"},Mi.NONE=Di,Mi.LOADING=1,Mi.LOADED=Ri,Mi.ERROR=3;var Ui={audio:{ListClass:He,TrackClass:xi,capitalName:"Audio"},video:{ListClass:qe,TrackClass:Ii,capitalName:"Video"},text:{ListClass:We,TrackClass:Oi,capitalName:"Text"}};Object.keys(Ui).forEach(function(t){Ui[t].getterName=t+"Tracks",Ui[t].privateName=t+"Tracks_"});var Ni={remoteText:{ListClass:We,TrackClass:Oi,capitalName:"RemoteText",getterName:"remoteTextTracks",privateName:"remoteTextTracks_"},remoteTextEl:{ListClass:ze,TrackClass:Mi,capitalName:"RemoteTextTrackEls",getterName:"remoteTextTrackEls",privateName:"remoteTextTrackEls_"}},Bi=Gt(Ui,Ni);Ni.names=Object.keys(Ni),Ui.names=Object.keys(Ui),Bi.names=[].concat(Ni.names).concat(Ui.names);var ji=Object.create||function(){function e(){}return function(t){if(1!==arguments.length)throw new Error("Object.create shim only accepts one parameter.");return e.prototype=t,new e}}();function Fi(t,e){this.name="ParsingError",this.code=t.code,this.message=e||t.message}function Hi(t){function e(t,e,i,r){return 3600*(0|t)+60*(0|e)+(0|i)+(0|r)/1e3}var i=t.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return i?i[3]?e(i[1],i[2],i[3].replace(":",""),i[4]):59<i[1]?e(i[1],i[2],0,i[4]):e(0,i[1],i[2],i[4]):null}function Vi(){this.values=ji(null)}function qi(t,e,i,r){var n=r?t.split(r):[t];for(var s in n)if("string"==typeof n[s]){var a=n[s].split(i);if(2===a.length)e(a[0],a[1])}}function Wi(e,t,s){var i,r,a,n=e;function o(){var t=Hi(e);if(null===t)throw new Fi(Fi.Errors.BadTimeStamp,"Malformed timestamp: "+n);return e=e.replace(/^[^\sa-zA-Z-]+/,""),t}function u(){e=e.replace(/^\s+/,"")}if(u(),t.startTime=o(),u(),"--\x3e"!==e.substr(0,3))throw new Fi(Fi.Errors.BadTimeStamp,"Malformed time stamp (time stamps must be separated by '--\x3e'): "+n);e=e.substr(3),u(),t.endTime=o(),u(),i=e,r=t,a=new Vi,qi(i,function(t,e){switch(t){case"region":for(var i=s.length-1;0<=i;i--)if(s[i].id===e){a.set(t,s[i].region);break}break;case"vertical":a.alt(t,e,["rl","lr"]);break;case"line":var r=e.split(","),n=r[0];a.integer(t,n),a.percent(t,n)&&a.set("snapToLines",!1),a.alt(t,n,["auto"]),2===r.length&&a.alt("lineAlign",r[1],["start","middle","end"]);break;case"position":r=e.split(","),a.percent(t,r[0]),2===r.length&&a.alt("positionAlign",r[1],["start","middle","end"]);break;case"size":a.percent(t,e);break;case"align":a.alt(t,e,["start","middle","end","left","right"])}},/:/,/\s/),r.region=a.get("region",null),r.vertical=a.get("vertical",""),r.line=a.get("line","auto"),r.lineAlign=a.get("lineAlign","start"),r.snapToLines=a.get("snapToLines",!0),r.size=a.get("size",100),r.align=a.get("align","middle"),r.position=a.get("position",{start:0,left:0,middle:50,end:100,right:100},r.align),r.positionAlign=a.get("positionAlign",{start:"start",left:"start",middle:"middle",end:"end",right:"end"},r.align)}((Fi.prototype=ji(Error.prototype)).constructor=Fi).Errors={BadSignature:{code:0,message:"Malformed WebVTT signature."},BadTimeStamp:{code:1,message:"Malformed time stamp."}},Vi.prototype={set:function(t,e){this.get(t)||""===e||(this.values[t]=e)},get:function(t,e,i){return i?this.has(t)?this.values[t]:e[i]:this.has(t)?this.values[t]:e},has:function(t){return t in this.values},alt:function(t,e,i){for(var r=0;r<i.length;++r)if(e===i[r]){this.set(t,e);break}},integer:function(t,e){/^-?\d+$/.test(e)&&this.set(t,parseInt(e,10))},percent:function(t,e){return!!(e.match(/^([\d]{1,3})(\.[\d]*)?%$/)&&0<=(e=parseFloat(e))&&e<=100)&&(this.set(t,e),!0)}};var zi={"&":"&","<":"<",">":">","‎":"‎","‏":"â€"," ":" "},Gi={c:"span",i:"i",b:"b",u:"u",ruby:"ruby",rt:"rt",v:"span",lang:"span"},Xi={v:"title",lang:"lang"},Yi={rt:"ruby"};function $i(s,i){function t(){if(!i)return null;var t,e=i.match(/^([^<]*)(<[^>]*>?)?/);return t=e[1]?e[1]:e[2],i=i.substr(t.length),t}function e(t){return zi[t]}function r(t){for(;f=t.match(/&(amp|lt|gt|lrm|rlm|nbsp);/);)t=t.replace(f[0],e);return t}function n(t,e){var i=Gi[t];if(!i)return null;var r=s.document.createElement(i);r.localName=i;var n=Xi[t];return n&&e&&(r[n]=e.trim()),r}for(var a,o,u,l=s.document.createElement("div"),c=l,h=[];null!==(a=t());)if("<"!==a[0])c.appendChild(s.document.createTextNode(r(a)));else{if("/"===a[1]){h.length&&h[h.length-1]===a.substr(2).replace(">","")&&(h.pop(),c=c.parentNode);continue}var d,p=Hi(a.substr(1,a.length-2));if(p){d=s.document.createProcessingInstruction("timestamp",p),c.appendChild(d);continue}var f=a.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/);if(!f)continue;if(!(d=n(f[1],f[3])))continue;if(o=c,Yi[(u=d).localName]&&Yi[u.localName]!==o.localName)continue;f[2]&&(d.className=f[2].substr(1).replace("."," ")),h.push(f[1]),c.appendChild(d),c=d}return l}var Ki=[[1470,1470],[1472,1472],[1475,1475],[1478,1478],[1488,1514],[1520,1524],[1544,1544],[1547,1547],[1549,1549],[1563,1563],[1566,1610],[1645,1647],[1649,1749],[1765,1766],[1774,1775],[1786,1805],[1807,1808],[1810,1839],[1869,1957],[1969,1969],[1984,2026],[2036,2037],[2042,2042],[2048,2069],[2074,2074],[2084,2084],[2088,2088],[2096,2110],[2112,2136],[2142,2142],[2208,2208],[2210,2220],[8207,8207],[64285,64285],[64287,64296],[64298,64310],[64312,64316],[64318,64318],[64320,64321],[64323,64324],[64326,64449],[64467,64829],[64848,64911],[64914,64967],[65008,65020],[65136,65140],[65142,65276],[67584,67589],[67592,67592],[67594,67637],[67639,67640],[67644,67644],[67647,67669],[67671,67679],[67840,67867],[67872,67897],[67903,67903],[67968,68023],[68030,68031],[68096,68096],[68112,68115],[68117,68119],[68121,68147],[68160,68167],[68176,68184],[68192,68223],[68352,68405],[68416,68437],[68440,68466],[68472,68479],[68608,68680],[126464,126467],[126469,126495],[126497,126498],[126500,126500],[126503,126503],[126505,126514],[126516,126519],[126521,126521],[126523,126523],[126530,126530],[126535,126535],[126537,126537],[126539,126539],[126541,126543],[126545,126546],[126548,126548],[126551,126551],[126553,126553],[126555,126555],[126557,126557],[126559,126559],[126561,126562],[126564,126564],[126567,126570],[126572,126578],[126580,126583],[126585,126588],[126590,126590],[126592,126601],[126603,126619],[126625,126627],[126629,126633],[126635,126651],[1114109,1114109]];function Qi(t){for(var e=0;e<Ki.length;e++){var i=Ki[e];if(t>=i[0]&&t<=i[1])return!0}return!1}function Ji(){}function Zi(t,e,i){Ji.call(this),this.cue=e,this.cueDiv=$i(t,e.text);var r={color:"rgba(255, 255, 255, 1)",backgroundColor:"rgba(0, 0, 0, 0.8)",position:"relative",left:0,right:0,top:0,bottom:0,display:"inline",writingMode:""===e.vertical?"horizontal-tb":"lr"===e.vertical?"vertical-lr":"vertical-rl",unicodeBidi:"plaintext"};this.applyStyles(r,this.cueDiv),this.div=t.document.createElement("div"),r={direction:function(t){var e=[],i="";if(!t||!t.childNodes)return"ltr";function n(t,e){for(var i=e.childNodes.length-1;0<=i;i--)t.push(e.childNodes[i])}function s(t){if(!t||!t.length)return null;var e=t.pop(),i=e.textContent||e.innerText;if(i){var r=i.match(/^.*(\n|\r)/);return r?r[t.length=0]:i}return"ruby"===e.tagName?s(t):e.childNodes?(n(t,e),s(t)):void 0}for(n(e,t);i=s(e);)for(var r=0;r<i.length;r++)if(Qi(i.charCodeAt(r)))return"rtl";return"ltr"}(this.cueDiv),writingMode:""===e.vertical?"horizontal-tb":"lr"===e.vertical?"vertical-lr":"vertical-rl",unicodeBidi:"plaintext",textAlign:"middle"===e.align?"center":e.align,font:i.font,whiteSpace:"pre-line",position:"absolute"},this.applyStyles(r),this.div.appendChild(this.cueDiv);var n=0;switch(e.positionAlign){case"start":n=e.position;break;case"middle":n=e.position-e.size/2;break;case"end":n=e.position-e.size}""===e.vertical?this.applyStyles({left:this.formatStyle(n,"%"),width:this.formatStyle(e.size,"%")}):this.applyStyles({top:this.formatStyle(n,"%"),height:this.formatStyle(e.size,"%")}),this.move=function(t){this.applyStyles({top:this.formatStyle(t.top,"px"),bottom:this.formatStyle(t.bottom,"px"),left:this.formatStyle(t.left,"px"),right:this.formatStyle(t.right,"px"),height:this.formatStyle(t.height,"px"),width:this.formatStyle(t.width,"px")})}}function tr(t){var e,i,r,n;if(t.div){i=t.div.offsetHeight,r=t.div.offsetWidth,n=t.div.offsetTop;var s=(s=t.div.childNodes)&&(s=s[0])&&s.getClientRects&&s.getClientRects();t=t.div.getBoundingClientRect(),e=s?Math.max(s[0]&&s[0].height||0,t.height/s.length):0}this.left=t.left,this.right=t.right,this.top=t.top||n,this.height=t.height||i,this.bottom=t.bottom||n+(t.height||i),this.width=t.width||r,this.lineHeight=void 0!==e?e:t.lineHeight}function er(t,e,o,u){var i=new tr(e),r=e.cue,n=function(t){if("number"==typeof t.line&&(t.snapToLines||0<=t.line&&t.line<=100))return t.line;if(!t.track||!t.track.textTrackList||!t.track.textTrackList.mediaElement)return-1;for(var e=t.track,i=e.textTrackList,r=0,n=0;n<i.length&&i[n]!==e;n++)"showing"===i[n].mode&&r++;return-1*++r}(r),s=[];if(r.snapToLines){var a;switch(r.vertical){case"":s=["+y","-y"],a="height";break;case"rl":s=["+x","-x"],a="width";break;case"lr":s=["-x","+x"],a="width"}var l=i.lineHeight,c=l*Math.round(n),h=o[a]+l,d=s[0];Math.abs(c)>h&&(c=c<0?-1:1,c*=Math.ceil(h/l)*l),n<0&&(c+=""===r.vertical?o.height:o.width,s=s.reverse()),i.move(d,c)}else{var p=i.lineHeight/o.height*100;switch(r.lineAlign){case"middle":n-=p/2;break;case"end":n-=p}switch(r.vertical){case"":e.applyStyles({top:e.formatStyle(n,"%")});break;case"rl":e.applyStyles({left:e.formatStyle(n,"%")});break;case"lr":e.applyStyles({right:e.formatStyle(n,"%")})}s=["+y","-x","+x","-y"],i=new tr(e)}var f=function(t,e){for(var i,r=new tr(t),n=1,s=0;s<e.length;s++){for(;t.overlapsOppositeAxis(o,e[s])||t.within(o)&&t.overlapsAny(u);)t.move(e[s]);if(t.within(o))return t;var a=t.intersectPercentage(o);a<n&&(i=new tr(t),n=a),t=new tr(r)}return i||r}(i,s);e.move(f.toCSSCompatValues(o))}function ir(){}Ji.prototype.applyStyles=function(t,e){for(var i in e=e||this.div,t)t.hasOwnProperty(i)&&(e.style[i]=t[i])},Ji.prototype.formatStyle=function(t,e){return 0===t?0:t+e},(Zi.prototype=ji(Ji.prototype)).constructor=Zi,tr.prototype.move=function(t,e){switch(e=void 0!==e?e:this.lineHeight,t){case"+x":this.left+=e,this.right+=e;break;case"-x":this.left-=e,this.right-=e;break;case"+y":this.top+=e,this.bottom+=e;break;case"-y":this.top-=e,this.bottom-=e}},tr.prototype.overlaps=function(t){return this.left<t.right&&this.right>t.left&&this.top<t.bottom&&this.bottom>t.top},tr.prototype.overlapsAny=function(t){for(var e=0;e<t.length;e++)if(this.overlaps(t[e]))return!0;return!1},tr.prototype.within=function(t){return this.top>=t.top&&this.bottom<=t.bottom&&this.left>=t.left&&this.right<=t.right},tr.prototype.overlapsOppositeAxis=function(t,e){switch(e){case"+x":return this.left<t.left;case"-x":return this.right>t.right;case"+y":return this.top<t.top;case"-y":return this.bottom>t.bottom}},tr.prototype.intersectPercentage=function(t){return Math.max(0,Math.min(this.right,t.right)-Math.max(this.left,t.left))*Math.max(0,Math.min(this.bottom,t.bottom)-Math.max(this.top,t.top))/(this.height*this.width)},tr.prototype.toCSSCompatValues=function(t){return{top:this.top-t.top,bottom:t.bottom-this.bottom,left:this.left-t.left,right:t.right-this.right,height:this.height,width:this.width}},tr.getSimpleBoxPosition=function(t){var e=t.div?t.div.offsetHeight:t.tagName?t.offsetHeight:0,i=t.div?t.div.offsetWidth:t.tagName?t.offsetWidth:0,r=t.div?t.div.offsetTop:t.tagName?t.offsetTop:0;return{left:(t=t.div?t.div.getBoundingClientRect():t.tagName?t.getBoundingClientRect():t).left,right:t.right,top:t.top||r,height:t.height||e,bottom:t.bottom||r+(t.height||e),width:t.width||i}},ir.StringDecoder=function(){return{decode:function(t){if(!t)return"";if("string"!=typeof t)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(t))}}},ir.convertCueToDOMTree=function(t,e){return t&&e?$i(t,e):null};ir.processCues=function(r,n,t){if(!r||!n||!t)return null;for(;t.firstChild;)t.removeChild(t.firstChild);var s=r.document.createElement("div");if(s.style.position="absolute",s.style.left="0",s.style.right="0",s.style.top="0",s.style.bottom="0",s.style.margin="1.5%",t.appendChild(s),function(t){for(var e=0;e<t.length;e++)if(t[e].hasBeenReset||!t[e].displayState)return!0;return!1}(n)){var a=[],o=tr.getSimpleBoxPosition(s),u={font:Math.round(.05*o.height*100)/100+"px sans-serif"};!function(){for(var t,e,i=0;i<n.length;i++)e=n[i],t=new Zi(r,e,u),s.appendChild(t.div),er(0,t,o,a),e.displayState=t.div,a.push(tr.getSimpleBoxPosition(t))}()}else for(var e=0;e<n.length;e++)s.appendChild(n[e].displayState)},(ir.Parser=function(t,e,i){i||(i=e,e={}),e||(e={}),this.window=t,this.vttjs=e,this.state="INITIAL",this.buffer="",this.decoder=i||new TextDecoder("utf8"),this.regionList=[]}).prototype={reportOrThrowError:function(t){if(!(t instanceof Fi))throw t;this.onparsingerror&&this.onparsingerror(t)},parse:function(t){var s=this;function e(){for(var t=s.buffer,e=0;e<t.length&&"\r"!==t[e]&&"\n"!==t[e];)++e;var i=t.substr(0,e);return"\r"===t[e]&&++e,"\n"===t[e]&&++e,s.buffer=t.substr(e),i}function i(t){t.match(/X-TIMESTAMP-MAP/)?qi(t,function(t,e){switch(t){case"X-TIMESTAMP-MAP":i=e,r=new Vi,qi(i,function(t,e){switch(t){case"MPEGT":r.integer(t+"S",e);break;case"LOCA":r.set(t+"L",Hi(e))}},/[^\d]:/,/,/),s.ontimestampmap&&s.ontimestampmap({MPEGTS:r.get("MPEGTS"),LOCAL:r.get("LOCAL")})}var i,r},/=/):qi(t,function(t,e){switch(t){case"Region":!function(t){var n=new Vi;if(qi(t,function(t,e){switch(t){case"id":n.set(t,e);break;case"width":n.percent(t,e);break;case"lines":n.integer(t,e);break;case"regionanchor":case"viewportanchor":var i=e.split(",");if(2!==i.length)break;var r=new Vi;if(r.percent("x",i[0]),r.percent("y",i[1]),!r.has("x")||!r.has("y"))break;n.set(t+"X",r.get("x")),n.set(t+"Y",r.get("y"));break;case"scroll":n.alt(t,e,["up"])}},/=/,/\s/),n.has("id")){var e=new(s.vttjs.VTTRegion||s.window.VTTRegion);e.width=n.get("width",100),e.lines=n.get("lines",3),e.regionAnchorX=n.get("regionanchorX",0),e.regionAnchorY=n.get("regionanchorY",100),e.viewportAnchorX=n.get("viewportanchorX",0),e.viewportAnchorY=n.get("viewportanchorY",100),e.scroll=n.get("scroll",""),s.onregion&&s.onregion(e),s.regionList.push({id:n.get("id"),region:e})}}(e)}},/:/)}t&&(s.buffer+=s.decoder.decode(t,{stream:!0}));try{var r;if("INITIAL"===s.state){if(!/\r\n|\n/.test(s.buffer))return this;var n=(r=e()).match(/^WEBVTT([ \t].*)?$/);if(!n||!n[0])throw new Fi(Fi.Errors.BadSignature);s.state="HEADER"}for(var a=!1;s.buffer;){if(!/\r\n|\n/.test(s.buffer))return this;switch(a?a=!1:r=e(),s.state){case"HEADER":/:/.test(r)?i(r):r||(s.state="ID");continue;case"NOTE":r||(s.state="ID");continue;case"ID":if(/^NOTE($|[ \t])/.test(r)){s.state="NOTE";break}if(!r)continue;if(s.cue=new(s.vttjs.VTTCue||s.window.VTTCue)(0,0,""),s.state="CUE",-1===r.indexOf("--\x3e")){s.cue.id=r;continue}case"CUE":try{Wi(r,s.cue,s.regionList)}catch(t){s.reportOrThrowError(t),s.cue=null,s.state="BADCUE";continue}s.state="CUETEXT";continue;case"CUETEXT":var o=-1!==r.indexOf("--\x3e");if(!r||o&&(a=!0)){s.oncue&&s.oncue(s.cue),s.cue=null,s.state="ID";continue}s.cue.text&&(s.cue.text+="\n"),s.cue.text+=r;continue;case"BADCUE":r||(s.state="ID");continue}}}catch(t){s.reportOrThrowError(t),"CUETEXT"===s.state&&s.cue&&s.oncue&&s.oncue(s.cue),s.cue=null,s.state="INITIAL"===s.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var e=this;try{if(e.buffer+=e.decoder.decode(),(e.cue||"HEADER"===e.state)&&(e.buffer+="\n\n",e.parse()),"INITIAL"===e.state)throw new Fi(Fi.Errors.BadSignature)}catch(t){e.reportOrThrowError(t)}return e.onflush&&e.onflush(),this}};var rr=ir,nr=Object.freeze({default:rr,__moduleExports:rr}),sr="auto",ar={"":1,lr:1,rl:1},or={start:1,middle:1,end:1,left:1,right:1};function ur(t){return"string"==typeof t&&(!!or[t.toLowerCase()]&&t.toLowerCase())}function lr(t,e,i){this.hasBeenReset=!1;var r="",n=!1,s=t,a=e,o=i,u=null,l="",c=!0,h="auto",d="start",p=50,f="middle",m=50,g="middle";Object.defineProperties(this,{id:{enumerable:!0,get:function(){return r},set:function(t){r=""+t}},pauseOnExit:{enumerable:!0,get:function(){return n},set:function(t){n=!!t}},startTime:{enumerable:!0,get:function(){return s},set:function(t){if("number"!=typeof t)throw new TypeError("Start time must be set to a number.");s=t,this.hasBeenReset=!0}},endTime:{enumerable:!0,get:function(){return a},set:function(t){if("number"!=typeof t)throw new TypeError("End time must be set to a number.");a=t,this.hasBeenReset=!0}},text:{enumerable:!0,get:function(){return o},set:function(t){o=""+t,this.hasBeenReset=!0}},region:{enumerable:!0,get:function(){return u},set:function(t){u=t,this.hasBeenReset=!0}},vertical:{enumerable:!0,get:function(){return l},set:function(t){var e,i="string"==typeof(e=t)&&!!ar[e.toLowerCase()]&&e.toLowerCase();if(!1===i)throw new SyntaxError("An invalid or illegal string was specified.");l=i,this.hasBeenReset=!0}},snapToLines:{enumerable:!0,get:function(){return c},set:function(t){c=!!t,this.hasBeenReset=!0}},line:{enumerable:!0,get:function(){return h},set:function(t){if("number"!=typeof t&&t!==sr)throw new SyntaxError("An invalid number or illegal string was specified.");h=t,this.hasBeenReset=!0}},lineAlign:{enumerable:!0,get:function(){return d},set:function(t){var e=ur(t);if(!e)throw new SyntaxError("An invalid or illegal string was specified.");d=e,this.hasBeenReset=!0}},position:{enumerable:!0,get:function(){return p},set:function(t){if(t<0||100<t)throw new Error("Position must be between 0 and 100.");p=t,this.hasBeenReset=!0}},positionAlign:{enumerable:!0,get:function(){return f},set:function(t){var e=ur(t);if(!e)throw new SyntaxError("An invalid or illegal string was specified.");f=e,this.hasBeenReset=!0}},size:{enumerable:!0,get:function(){return m},set:function(t){if(t<0||100<t)throw new Error("Size must be between 0 and 100.");m=t,this.hasBeenReset=!0}},align:{enumerable:!0,get:function(){return g},set:function(t){var e=ur(t);if(!e)throw new SyntaxError("An invalid or illegal string was specified.");g=e,this.hasBeenReset=!0}}}),this.displayState=void 0}lr.prototype.getCueAsHTML=function(){return WebVTT.convertCueToDOMTree(window,this.text)};var cr=lr,hr=Object.freeze({default:cr,__moduleExports:cr}),dr={"":!0,up:!0};function pr(t){return"number"==typeof t&&0<=t&&t<=100}var fr=function(){var e=100,i=3,r=0,n=100,s=0,a=100,o="";Object.defineProperties(this,{width:{enumerable:!0,get:function(){return e},set:function(t){if(!pr(t))throw new Error("Width must be between 0 and 100.");e=t}},lines:{enumerable:!0,get:function(){return i},set:function(t){if("number"!=typeof t)throw new TypeError("Lines must be set to a number.");i=t}},regionAnchorY:{enumerable:!0,get:function(){return n},set:function(t){if(!pr(t))throw new Error("RegionAnchorX must be between 0 and 100.");n=t}},regionAnchorX:{enumerable:!0,get:function(){return r},set:function(t){if(!pr(t))throw new Error("RegionAnchorY must be between 0 and 100.");r=t}},viewportAnchorY:{enumerable:!0,get:function(){return a},set:function(t){if(!pr(t))throw new Error("ViewportAnchorY must be between 0 and 100.");a=t}},viewportAnchorX:{enumerable:!0,get:function(){return s},set:function(t){if(!pr(t))throw new Error("ViewportAnchorX must be between 0 and 100.");s=t}},scroll:{enumerable:!0,get:function(){return o},set:function(t){var e,i="string"==typeof(e=t)&&!!dr[e.toLowerCase()]&&e.toLowerCase();if(!1===i)throw new SyntaxError("An invalid or illegal string was specified.");o=i}}})},mr=Object.freeze({default:fr,__moduleExports:fr}),gr=nr&&rr||nr,yr=hr&&cr||hr,vr=mr&&fr||mr,_r=e(function(t){var e=t.exports={WebVTT:gr,VTTCue:yr,VTTRegion:vr};g.vttjs=e,g.WebVTT=e.WebVTT;var i=e.VTTCue,r=e.VTTRegion,n=g.VTTCue,s=g.VTTRegion;e.shim=function(){g.VTTCue=i,g.VTTRegion=r},e.restore=function(){g.VTTCue=n,g.VTTRegion=s},g.VTTCue||e.shim()});_r.WebVTT,_r.VTTCue,_r.VTTRegion;var br=function(e){function n(){var i=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:function(){};y(this,n),i.reportTouchActivity=!1;var r=b(this,e.call(this,null,i,t));return r.hasStarted_=!1,r.on("playing",function(){this.hasStarted_=!0}),r.on("loadstart",function(){this.hasStarted_=!1}),Bi.names.forEach(function(t){var e=Bi[t];i&&i[e.getterName]&&(r[e.privateName]=i[e.getterName])}),r.featuresProgressEvents||r.manualProgressOn(),r.featuresTimeupdateEvents||r.manualTimeUpdatesOn(),["Text","Audio","Video"].forEach(function(t){!1===i["native"+t+"Tracks"]&&(r["featuresNative"+t+"Tracks"]=!1)}),!1===i.nativeCaptions||!1===i.nativeTextTracks?r.featuresNativeTextTracks=!1:!0!==i.nativeCaptions&&!0!==i.nativeTextTracks||(r.featuresNativeTextTracks=!0),r.featuresNativeTextTracks||r.emulateTextTracks(),r.autoRemoteTextTracks_=new Bi.text.ListClass,r.initTrackListeners(),i.nativeControlsForTouch||r.emitTapEvents(),r.constructor&&(r.name_=r.constructor.name||"Unknown Tech"),r}return _(n,e),n.prototype.triggerSourceset=function(t){var e=this;this.isReady_||this.one("ready",function(){return e.setTimeout(function(){return e.triggerSourceset(t)},1)}),this.trigger({src:t,type:"sourceset"})},n.prototype.manualProgressOn=function(){this.on("durationchange",this.onDurationChange),this.manualProgress=!0,this.one("ready",this.trackProgress)},n.prototype.manualProgressOff=function(){this.manualProgress=!1,this.stopTrackingProgress(),this.off("durationchange",this.onDurationChange)},n.prototype.trackProgress=function(t){this.stopTrackingProgress(),this.progressInterval=this.setInterval(Ot(this,function(){var t=this.bufferedPercent();this.bufferedPercent_!==t&&this.trigger("progress"),1===(this.bufferedPercent_=t)&&this.stopTrackingProgress()}),500)},n.prototype.onDurationChange=function(t){this.duration_=this.duration()},n.prototype.buffered=function(){return be(0,0)},n.prototype.bufferedPercent=function(){return Te(this.buffered(),this.duration_)},n.prototype.stopTrackingProgress=function(){this.clearInterval(this.progressInterval)},n.prototype.manualTimeUpdatesOn=function(){this.manualTimeUpdates=!0,this.on("play",this.trackCurrentTime),this.on("pause",this.stopTrackingCurrentTime)},n.prototype.manualTimeUpdatesOff=function(){this.manualTimeUpdates=!1,this.stopTrackingCurrentTime(),this.off("play",this.trackCurrentTime),this.off("pause",this.stopTrackingCurrentTime)},n.prototype.trackCurrentTime=function(){this.currentTimeInterval&&this.stopTrackingCurrentTime(),this.currentTimeInterval=this.setInterval(function(){this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},250)},n.prototype.stopTrackingCurrentTime=function(){this.clearInterval(this.currentTimeInterval),this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},n.prototype.dispose=function(){this.clearTracks(Ui.names),this.manualProgress&&this.manualProgressOff(),this.manualTimeUpdates&&this.manualTimeUpdatesOff(),e.prototype.dispose.call(this)},n.prototype.clearTracks=function(t){var n=this;(t=[].concat(t)).forEach(function(t){for(var e=n[t+"Tracks"]()||[],i=e.length;i--;){var r=e[i];"text"===t&&n.removeRemoteTextTrack(r),e.removeTrack(r)}})},n.prototype.cleanupAutoTextTracks=function(){for(var t=this.autoRemoteTextTracks_||[],e=t.length;e--;){var i=t[e];this.removeRemoteTextTrack(i)}},n.prototype.reset=function(){},n.prototype.error=function(t){return void 0!==t&&(this.error_=new Le(t),this.trigger("error")),this.error_},n.prototype.played=function(){return this.hasStarted_?be(0,0):be()},n.prototype.setCurrentTime=function(){this.manualTimeUpdates&&this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},n.prototype.initTrackListeners=function(){var n=this;Ui.names.forEach(function(t){var e=Ui[t],i=function(){n.trigger(t+"trackchange")},r=n[e.getterName]();r.addEventListener("removetrack",i),r.addEventListener("addtrack",i),n.on("dispose",function(){r.removeEventListener("removetrack",i),r.removeEventListener("addtrack",i)})})},n.prototype.addWebVttScript_=function(){var t=this;if(!g.WebVTT)if(p.body.contains(this.el())){if(!this.options_["vtt.js"]&&w(_r)&&0<Object.keys(_r).length)return void this.trigger("vttjsloaded");var e=p.createElement("script");e.src=this.options_["vtt.js"]||"https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js",e.onload=function(){t.trigger("vttjsloaded")},e.onerror=function(){t.trigger("vttjserror")},this.on("dispose",function(){e.onload=null,e.onerror=null}),g.WebVTT=!0,this.el().parentNode.appendChild(e)}else this.ready(this.addWebVttScript_)},n.prototype.emulateTextTracks=function(){var t=this,i=this.textTracks(),e=this.remoteTextTracks(),r=function(t){return i.addTrack(t.track)},n=function(t){return i.removeTrack(t.track)};e.on("addtrack",r),e.on("removetrack",n),this.addWebVttScript_();var s=function(){return t.trigger("texttrackchange")},a=function(){s();for(var t=0;t<i.length;t++){var e=i[t];e.removeEventListener("cuechange",s),"showing"===e.mode&&e.addEventListener("cuechange",s)}};a(),i.addEventListener("change",a),i.addEventListener("addtrack",a),i.addEventListener("removetrack",a),this.on("dispose",function(){e.off("addtrack",r),e.off("removetrack",n),i.removeEventListener("change",a),i.removeEventListener("addtrack",a),i.removeEventListener("removetrack",a);for(var t=0;t<i.length;t++){i[t].removeEventListener("cuechange",s)}})},n.prototype.addTextTrack=function(t,e,i){if(!t)throw new Error("TextTrack kind is required but was not provided");return function(t,e,i,r){var n=4<arguments.length&&void 0!==arguments[4]?arguments[4]:{},s=t.textTracks();n.kind=e,i&&(n.label=i),r&&(n.language=r),n.tech=t;var a=new Bi.text.TrackClass(n);return s.addTrack(a),a}(this,t,e,i)},n.prototype.createRemoteTextTrack=function(t){var e=Gt(t,{tech:this});return new Ni.remoteTextEl.TrackClass(e)},n.prototype.addRemoteTextTrack=function(){var t=this,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},i=arguments[1],r=this.createRemoteTextTrack(e);return!0!==i&&!1!==i&&(f.warn('Calling addRemoteTextTrack without explicitly setting the "manualCleanup" parameter to `true` is deprecated and default to `false` in future version of video.js'),i=!0),this.remoteTextTrackEls().addTrackElement_(r),this.remoteTextTracks().addTrack(r.track),!0!==i&&this.ready(function(){return t.autoRemoteTextTracks_.addTrack(r.track)}),r},n.prototype.removeRemoteTextTrack=function(t){var e=this.remoteTextTrackEls().getTrackElementByTrack_(t);this.remoteTextTrackEls().removeTrackElement_(e),this.remoteTextTracks().removeTrack(t),this.autoRemoteTextTracks_.removeTrack(t)},n.prototype.getVideoPlaybackQuality=function(){return{}},n.prototype.setPoster=function(){},n.prototype.playsinline=function(){},n.prototype.setPlaysinline=function(){},n.prototype.overrideNativeAudioTracks=function(){},n.prototype.overrideNativeVideoTracks=function(){},n.prototype.canPlayType=function(){return""},n.canPlayType=function(){return""},n.canPlaySource=function(t,e){return n.canPlayType(t.type)},n.isTech=function(t){return t.prototype instanceof n||t instanceof n||t===n},n.registerTech=function(t,e){if(n.techs_||(n.techs_={}),!n.isTech(e))throw new Error("Tech "+t+" must be a Tech");if(!n.canPlayType)throw new Error("Techs must have a static canPlayType method on them");if(!n.canPlaySource)throw new Error("Techs must have a static canPlaySource method on them");return t=zt(t),n.techs_[t]=e,"Tech"!==t&&n.defaultTechOrder_.push(t),e},n.getTech=function(t){if(t)return t=zt(t),n.techs_&&n.techs_[t]?n.techs_[t]:g&&g.videojs&&g.videojs[t]?(f.warn("The "+t+" tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)"),g.videojs[t]):void 0},n}(Xt);Bi.names.forEach(function(t){var e=Bi[t];br.prototype[e.getterName]=function(){return this[e.privateName]=this[e.privateName]||new e.ListClass,this[e.privateName]}}),br.prototype.featuresVolumeControl=!0,br.prototype.featuresFullscreenResize=!1,br.prototype.featuresPlaybackRate=!1,br.prototype.featuresProgressEvents=!1,br.prototype.featuresSourceset=!1,br.prototype.featuresTimeupdateEvents=!1,br.prototype.featuresNativeTextTracks=!1,br.withSourceHandlers=function(n){n.registerSourceHandler=function(t,e){var i=n.sourceHandlers;i||(i=n.sourceHandlers=[]),void 0===e&&(e=i.length),i.splice(e,0,t)},n.canPlayType=function(t){for(var e=n.sourceHandlers||[],i=void 0,r=0;r<e.length;r++)if(i=e[r].canPlayType(t))return i;return""},n.selectSourceHandler=function(t,e){for(var i=n.sourceHandlers||[],r=0;r<i.length;r++)if(i[r].canHandleSource(t,e))return i[r];return null},n.canPlaySource=function(t,e){var i=n.selectSourceHandler(t,e);return i?i.canHandleSource(t,e):""};["seekable","seeking","duration"].forEach(function(t){var e=this[t];"function"==typeof e&&(this[t]=function(){return this.sourceHandler_&&this.sourceHandler_[t]?this.sourceHandler_[t].apply(this.sourceHandler_,arguments):e.apply(this,arguments)})},n.prototype),n.prototype.setSource=function(t){var e=n.selectSourceHandler(t,this.options_);e||(n.nativeSourceHandler?e=n.nativeSourceHandler:f.error("No source handler found for the current source.")),this.disposeSourceHandler(),this.off("dispose",this.disposeSourceHandler),e!==n.nativeSourceHandler&&(this.currentSource_=t),this.sourceHandler_=e.handleSource(t,this,this.options_),this.on("dispose",this.disposeSourceHandler)},n.prototype.disposeSourceHandler=function(){this.currentSource_&&(this.clearTracks(["audio","video"]),this.currentSource_=null),this.cleanupAutoTextTracks(),this.sourceHandler_&&(this.sourceHandler_.dispose&&this.sourceHandler_.dispose(),this.sourceHandler_=null)}},Xt.registerComponent("Tech",br),br.registerTech("Tech",br),br.defaultTechOrder_=[];var Tr={},Sr={},kr={};function Cr(t,e,i){t.setTimeout(function(){return function i(){var r=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[];var n=arguments[2];var s=arguments[3];var a=4<arguments.length&&void 0!==arguments[4]?arguments[4]:[];var o=5<arguments.length&&void 0!==arguments[5]&&arguments[5];var e=t[0],u=t.slice(1);if("string"==typeof e)i(r,Tr[e],n,s,a,o);else if(e){var l=function(t,e){var i=Sr[t.id()],r=null;if(null==i)return r=e(t),Sr[t.id()]=[[e,r]],r;for(var n=0;n<i.length;n++){var s=i[n],a=s[0],o=s[1];a===e&&(r=o)}null===r&&(r=e(t),i.push([e,r]));return r}(s,e);l.setSource(C({},r),function(t,e){if(t)return i(r,u,n,s,a,o);a.push(l),i(e,r.type===e.type?u:Tr[e.type],n,s,a,o)})}else u.length?i(r,u,n,s,a,o):o?n(r,a):i(r,Tr["*"],n,s,a,!0)}(e,Tr[e.type],i,t)},1)}function Er(t,e,i){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,n="call"+zt(i),s=t.reduce(Pr(n),r),a=s===kr,o=a?null:e[i](s);return function(t,e,i,r){for(var n=t.length-1;0<=n;n--){var s=t[n];s[e]&&s[e](r,i)}}(t,i,o,a),o}var wr={buffered:1,currentTime:1,duration:1,seekable:1,played:1,paused:1},Ar={setCurrentTime:1},Lr={play:1,pause:1};function Pr(i){return function(t,e){return t===kr?kr:e[i]?e[i](t):t}}var Or={opus:"video/ogg",ogv:"video/ogg",mp4:"video/mp4",mov:"video/mp4",m4v:"video/mp4",mkv:"video/x-matroska",mp3:"audio/mpeg",aac:"audio/aac",oga:"audio/ogg",m3u8:"application/x-mpegURL"},xr=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"",e=ti(t);return Or[e.toLowerCase()]||""};function Ir(t){var e=xr(t.src);return!t.type&&e&&(t.type=e),t}var Dr=function(l){function c(t,e,i){y(this,c);var r=Gt({createEl:!1},e),n=b(this,l.call(this,t,r,i));if(e.playerOptions.sources&&0!==e.playerOptions.sources.length)t.src(e.playerOptions.sources);else for(var s=0,a=e.playerOptions.techOrder;s<a.length;s++){var o=zt(a[s]),u=br.getTech(o);if(o||(u=Xt.getComponent(o)),u&&u.isSupported()){t.loadTech_(o);break}}return n}return _(c,l),c}(Xt);Xt.registerComponent("MediaLoader",Dr);var Rr=function(n){function r(t,e){y(this,r);var i=b(this,n.call(this,t,e));return i.emitTapEvents(),i.enable(),i}return _(r,n),r.prototype.createEl=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"div",e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};e=C({innerHTML:'<span aria-hidden="true" class="vjs-icon-placeholder"></span>',className:this.buildCSSClass(),tabIndex:0},e),"button"===t&&f.error("Creating a ClickableComponent with an HTML element of "+t+" is not supported; use a Button instead."),i=C({role:"button"},i),this.tabIndex_=e.tabIndex;var r=n.prototype.createEl.call(this,t,e,i);return this.createControlTextEl(r),r},r.prototype.dispose=function(){this.controlTextEl_=null,n.prototype.dispose.call(this)},r.prototype.createControlTextEl=function(t){return this.controlTextEl_=M("span",{className:"vjs-control-text"},{"aria-live":"polite"}),t&&t.appendChild(this.controlTextEl_),this.controlText(this.controlText_,t),this.controlTextEl_},r.prototype.controlText=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.el();if(void 0===t)return this.controlText_||"Need Text";var i=this.localize(t);this.controlText_=t,U(this.controlTextEl_,i),this.nonIconControl||e.setAttribute("title",i)},r.prototype.buildCSSClass=function(){return"vjs-control vjs-button "+n.prototype.buildCSSClass.call(this)},r.prototype.enable=function(){this.enabled_||(this.enabled_=!0,this.removeClass("vjs-disabled"),this.el_.setAttribute("aria-disabled","false"),"undefined"!=typeof this.tabIndex_&&this.el_.setAttribute("tabIndex",this.tabIndex_),this.on(["tap","click"],this.handleClick),this.on("focus",this.handleFocus),this.on("blur",this.handleBlur))},r.prototype.disable=function(){this.enabled_=!1,this.addClass("vjs-disabled"),this.el_.setAttribute("aria-disabled","true"),"undefined"!=typeof this.tabIndex_&&this.el_.removeAttribute("tabIndex"),this.off(["tap","click"],this.handleClick),this.off("focus",this.handleFocus),this.off("blur",this.handleBlur)},r.prototype.handleClick=function(t){},r.prototype.handleFocus=function(t){_t(p,"keydown",Ot(this,this.handleKeyPress))},r.prototype.handleKeyPress=function(t){32===t.which||13===t.which?(t.preventDefault(),this.trigger("click")):n.prototype.handleKeyPress&&n.prototype.handleKeyPress.call(this,t)},r.prototype.handleBlur=function(t){bt(p,"keydown",Ot(this,this.handleKeyPress))},r}(Xt);Xt.registerComponent("ClickableComponent",Rr);var Mr=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.update(),t.on("posterchange",Ot(i,i.update)),i}return _(n,r),n.prototype.dispose=function(){this.player().off("posterchange",this.update),r.prototype.dispose.call(this)},n.prototype.createEl=function(){return M("div",{className:"vjs-poster",tabIndex:-1})},n.prototype.update=function(t){var e=this.player().poster();this.setSrc(e),e?this.show():this.hide()},n.prototype.setSrc=function(t){var e="";t&&(e='url("'+t+'")'),this.el_.style.backgroundImage=e},n.prototype.handleClick=function(t){this.player_.controls()&&(this.player_.paused()?this.player_.play():this.player_.pause())},n}(Rr);Xt.registerComponent("PosterImage",Mr);var Ur="#222",Nr={monospace:"monospace",sansSerif:"sans-serif",serif:"serif",monospaceSansSerif:'"Andale Mono", "Lucida Console", monospace',monospaceSerif:'"Courier New", monospace',proportionalSansSerif:"sans-serif",proportionalSerif:"serif",casual:'"Comic Sans MS", Impact, fantasy',script:'"Monotype Corsiva", cursive',smallcaps:'"Andale Mono", "Lucida Console", monospace, sans-serif'};function Br(t,e){return"rgba("+parseInt(t[1]+t[1],16)+","+parseInt(t[2]+t[2],16)+","+parseInt(t[3]+t[3],16)+","+e+")"}function jr(t,e,i){try{t.style[e]=i}catch(t){return}}var Fr=function(n){function s(i,t,e){y(this,s);var r=b(this,n.call(this,i,t,e));return i.on("loadstart",Ot(r,r.toggleDisplay)),i.on("texttrackchange",Ot(r,r.updateDisplay)),i.on("loadstart",Ot(r,r.preselectTrack)),i.ready(Ot(r,function(){if(i.tech_&&i.tech_.featuresNativeTextTracks)this.hide();else{i.on("fullscreenchange",Ot(this,this.updateDisplay));for(var t=this.options_.playerOptions.tracks||[],e=0;e<t.length;e++)this.player_.addRemoteTextTrack(t[e],!0);this.preselectTrack()}})),r}return _(s,n),s.prototype.preselectTrack=function(){for(var t={captions:1,subtitles:1},e=this.player_.textTracks(),i=this.player_.cache_.selectedLanguage,r=void 0,n=void 0,s=void 0,a=0;a<e.length;a++){var o=e[a];i&&i.enabled&&i.language===o.language?o.kind===i.kind?s=o:s||(s=o):i&&!i.enabled?n=r=s=null:o.default&&("descriptions"!==o.kind||r?o.kind in t&&!n&&(n=o):r=o)}s?s.mode="showing":n?n.mode="showing":r&&(r.mode="showing")},s.prototype.toggleDisplay=function(){this.player_.tech_&&this.player_.tech_.featuresNativeTextTracks?this.hide():this.show()},s.prototype.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-text-track-display"},{"aria-live":"off","aria-atomic":"true"})},s.prototype.clearDisplay=function(){"function"==typeof g.WebVTT&&g.WebVTT.processCues(g,[],this.el_)},s.prototype.updateDisplay=function(){var t=this.player_.textTracks();this.clearDisplay();for(var e=null,i=null,r=t.length;r--;){var n=t[r];"showing"===n.mode&&("descriptions"===n.kind?e=n:i=n)}i?("off"!==this.getAttribute("aria-live")&&this.setAttribute("aria-live","off"),this.updateForTrack(i)):e&&("assertive"!==this.getAttribute("aria-live")&&this.setAttribute("aria-live","assertive"),this.updateForTrack(e))},s.prototype.updateForTrack=function(t){if("function"==typeof g.WebVTT&&t.activeCues){for(var e=[],i=0;i<t.activeCues.length;i++)e.push(t.activeCues[i]);if(g.WebVTT.processCues(g,e,this.el_),this.player_.textTrackSettings)for(var r=this.player_.textTrackSettings.getValues(),n=e.length;n--;){var s=e[n];if(s){var a=s.displayState;if(r.color&&(a.firstChild.style.color=r.color),r.textOpacity&&jr(a.firstChild,"color",Br(r.color||"#fff",r.textOpacity)),r.backgroundColor&&(a.firstChild.style.backgroundColor=r.backgroundColor),r.backgroundOpacity&&jr(a.firstChild,"backgroundColor",Br(r.backgroundColor||"#000",r.backgroundOpacity)),r.windowColor&&(r.windowOpacity?jr(a,"backgroundColor",Br(r.windowColor,r.windowOpacity)):a.style.backgroundColor=r.windowColor),r.edgeStyle&&("dropshadow"===r.edgeStyle?a.firstChild.style.textShadow="2px 2px 3px #222, 2px 2px 4px #222, 2px 2px 5px "+Ur:"raised"===r.edgeStyle?a.firstChild.style.textShadow="1px 1px #222, 2px 2px #222, 3px 3px "+Ur:"depressed"===r.edgeStyle?a.firstChild.style.textShadow="1px 1px #ccc, 0 1px #ccc, -1px -1px #222, 0 -1px "+Ur:"uniform"===r.edgeStyle&&(a.firstChild.style.textShadow="0 0 4px #222, 0 0 4px #222, 0 0 4px #222, 0 0 4px "+Ur)),r.fontPercent&&1!==r.fontPercent){var o=g.parseFloat(a.style.fontSize);a.style.fontSize=o*r.fontPercent+"px",a.style.height="auto",a.style.top="auto",a.style.bottom="2px"}r.fontFamily&&"default"!==r.fontFamily&&("small-caps"===r.fontFamily?a.firstChild.style.fontVariant="small-caps":a.firstChild.style.fontFamily=Nr[r.fontFamily])}}}},s}(Xt);Xt.registerComponent("TextTrackDisplay",Fr);var Hr=function(n){function t(){return y(this,t),b(this,n.apply(this,arguments))}return _(t,n),t.prototype.createEl=function(){var t=this.player_.isAudio(),e=this.localize(t?"Audio Player":"Video Player"),i=M("span",{className:"vjs-control-text",innerHTML:this.localize("{1} is loading.",[e])}),r=n.prototype.createEl.call(this,"div",{className:"vjs-loading-spinner",dir:"ltr"});return r.appendChild(i),r},t}(Xt);Xt.registerComponent("LoadingSpinner",Hr);var Vr=function(e){function t(){return y(this,t),b(this,e.apply(this,arguments))}return _(t,e),t.prototype.createEl=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};e=C({innerHTML:'<span aria-hidden="true" class="vjs-icon-placeholder"></span>',className:this.buildCSSClass()},e),i=C({type:"button"},i);var r=Xt.prototype.createEl.call(this,"button",e,i);return this.createControlTextEl(r),r},t.prototype.addChild=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=this.constructor.name;return f.warn("Adding an actionable (user controllable) child to a Button ("+i+") is not supported; use a ClickableComponent instead."),Xt.prototype.addChild.call(this,t,e)},t.prototype.enable=function(){e.prototype.enable.call(this),this.el_.removeAttribute("disabled")},t.prototype.disable=function(){e.prototype.disable.call(this),this.el_.setAttribute("disabled","disabled")},t.prototype.handleKeyPress=function(t){32!==t.which&&13!==t.which&&e.prototype.handleKeyPress.call(this,t)},t}(Rr);Xt.registerComponent("Button",Vr);var qr=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.mouseused_=!1,i.on("mousedown",i.handleMouseDown),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-big-play-button"},n.prototype.handleClick=function(t){var e=this.player_.play();if(!(this.mouseused_&&t.clientX&&t.clientY)){var i=this.player_.getChild("controlBar"),r=i&&i.getChild("playToggle");if(r){var n=function(){return r.focus()};xe(e)?e.then(n,function(){}):this.setTimeout(n,1)}else this.player_.focus()}},n.prototype.handleKeyPress=function(t){this.mouseused_=!1,r.prototype.handleKeyPress.call(this,t)},n.prototype.handleMouseDown=function(t){this.mouseused_=!0},n}(Vr);qr.prototype.controlText_="Play Video",Xt.registerComponent("BigPlayButton",qr);var Wr=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.controlText(e&&e.controlText||i.localize("Close")),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-close-button "+r.prototype.buildCSSClass.call(this)},n.prototype.handleClick=function(t){this.trigger({type:"close",bubbles:!1})},n}(Vr);Xt.registerComponent("CloseButton",Wr);var zr=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.on(t,"play",i.handlePlay),i.on(t,"pause",i.handlePause),i.on(t,"ended",i.handleEnded),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-play-control "+r.prototype.buildCSSClass.call(this)},n.prototype.handleClick=function(t){this.player_.paused()?this.player_.play():this.player_.pause()},n.prototype.handleSeeked=function(t){this.removeClass("vjs-ended"),this.player_.paused()?this.handlePause(t):this.handlePlay(t)},n.prototype.handlePlay=function(t){this.removeClass("vjs-ended"),this.removeClass("vjs-paused"),this.addClass("vjs-playing"),this.controlText("Pause")},n.prototype.handlePause=function(t){this.removeClass("vjs-playing"),this.addClass("vjs-paused"),this.controlText("Play")},n.prototype.handleEnded=function(t){this.removeClass("vjs-playing"),this.addClass("vjs-ended"),this.controlText("Replay"),this.one(this.player_,"seeked",this.handleSeeked)},n}(Vr);zr.prototype.controlText_="Play",Xt.registerComponent("PlayToggle",zr);var Gr=function(t,e){t=t<0?0:t;var i=Math.floor(t%60),r=Math.floor(t/60%60),n=Math.floor(t/3600),s=Math.floor(e/60%60),a=Math.floor(e/3600);return(isNaN(t)||t===1/0)&&(n=r=i="-"),(n=0<n||0<a?n+":":"")+(r=((n||10<=s)&&r<10?"0"+r:r)+":")+(i=i<10?"0"+i:i)},Xr=Gr;function Yr(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:t;return Xr(t,e)}var $r=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.throttledUpdateContent=xt(Ot(i,i.updateContent),25),i.on(t,"timeupdate",i.throttledUpdateContent),i}return _(n,r),n.prototype.createEl=function(t){var e=this.buildCSSClass(),i=r.prototype.createEl.call(this,"div",{className:e+" vjs-time-control vjs-control",innerHTML:'<span class="vjs-control-text">'+this.localize(this.labelText_)+" </span>"});return this.contentEl_=M("span",{className:e+"-display"},{"aria-live":"off"}),this.updateTextNode_(),i.appendChild(this.contentEl_),i},n.prototype.dispose=function(){this.contentEl_=null,this.textNode_=null,r.prototype.dispose.call(this)},n.prototype.updateTextNode_=function(){if(this.contentEl_){for(;this.contentEl_.firstChild;)this.contentEl_.removeChild(this.contentEl_.firstChild);this.textNode_=p.createTextNode(this.formattedTime_||this.formatTime_(0)),this.contentEl_.appendChild(this.textNode_)}},n.prototype.formatTime_=function(t){return Yr(t)},n.prototype.updateFormattedTime_=function(t){var e=this.formatTime_(t);e!==this.formattedTime_&&(this.formattedTime_=e,this.requestAnimationFrame(this.updateTextNode_))},n.prototype.updateContent=function(t){},n}(Xt);$r.prototype.labelText_="Time",$r.prototype.controlText_="Time",Xt.registerComponent("TimeDisplay",$r);var Kr=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.on(t,"ended",i.handleEnded),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-current-time"},n.prototype.updateContent=function(t){var e=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.updateFormattedTime_(e)},n.prototype.handleEnded=function(t){this.player_.duration()&&this.updateFormattedTime_(this.player_.duration())},n}($r);Kr.prototype.labelText_="Current Time",Kr.prototype.controlText_="Current Time",Xt.registerComponent("CurrentTimeDisplay",Kr);var Qr=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.on(t,"durationchange",i.updateContent),i.on(t,"loadedmetadata",i.throttledUpdateContent),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-duration"},n.prototype.updateContent=function(t){var e=this.player_.duration();e&&this.duration_!==e&&(this.duration_=e,this.updateFormattedTime_(e))},n}($r);Qr.prototype.labelText_="Duration",Qr.prototype.controlText_="Duration",Xt.registerComponent("DurationDisplay",Qr);var Jr=function(t){function e(){return y(this,e),b(this,t.apply(this,arguments))}return _(e,t),e.prototype.createEl=function(){return t.prototype.createEl.call(this,"div",{className:"vjs-time-control vjs-time-divider",innerHTML:"<div><span>/</span></div>"})},e}(Xt);Xt.registerComponent("TimeDivider",Jr);var Zr=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.on(t,"durationchange",i.throttledUpdateContent),i.on(t,"ended",i.handleEnded),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-remaining-time"},n.prototype.formatTime_=function(t){return"-"+r.prototype.formatTime_.call(this,t)},n.prototype.updateContent=function(t){this.player_.duration()&&(this.player_.remainingTimeDisplay?this.updateFormattedTime_(this.player_.remainingTimeDisplay()):this.updateFormattedTime_(this.player_.remainingTime()))},n.prototype.handleEnded=function(t){this.player_.duration()&&this.updateFormattedTime_(0)},n}($r);Zr.prototype.labelText_="Remaining Time",Zr.prototype.controlText_="Remaining Time",Xt.registerComponent("RemainingTimeDisplay",Zr);var tn=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.updateShowing(),i.on(i.player(),"durationchange",i.updateShowing),i}return _(n,r),n.prototype.createEl=function(){var t=r.prototype.createEl.call(this,"div",{className:"vjs-live-control vjs-control"});return this.contentEl_=M("div",{className:"vjs-live-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Stream Type")+" </span>"+this.localize("LIVE")},{"aria-live":"off"}),t.appendChild(this.contentEl_),t},n.prototype.dispose=function(){this.contentEl_=null,r.prototype.dispose.call(this)},n.prototype.updateShowing=function(t){this.player().duration()===1/0?this.show():this.hide()},n}(Xt);Xt.registerComponent("LiveDisplay",tn);var en=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.bar=i.getChild(i.options_.barName),i.vertical(!!i.options_.vertical),i.enable(),i}return _(n,r),n.prototype.enabled=function(){return this.enabled_},n.prototype.enable=function(){this.enabled()||(this.on("mousedown",this.handleMouseDown),this.on("touchstart",this.handleMouseDown),this.on("focus",this.handleFocus),this.on("blur",this.handleBlur),this.on("click",this.handleClick),this.on(this.player_,"controlsvisible",this.update),this.playerEvent&&this.on(this.player_,this.playerEvent,this.update),this.removeClass("disabled"),this.setAttribute("tabindex",0),this.enabled_=!0)},n.prototype.disable=function(){if(this.enabled()){var t=this.bar.el_.ownerDocument;this.off("mousedown",this.handleMouseDown),this.off("touchstart",this.handleMouseDown),this.off("focus",this.handleFocus),this.off("blur",this.handleBlur),this.off("click",this.handleClick),this.off(this.player_,"controlsvisible",this.update),this.off(t,"mousemove",this.handleMouseMove),this.off(t,"mouseup",this.handleMouseUp),this.off(t,"touchmove",this.handleMouseMove),this.off(t,"touchend",this.handleMouseUp),this.removeAttribute("tabindex"),this.addClass("disabled"),this.playerEvent&&this.off(this.player_,this.playerEvent,this.update),this.enabled_=!1}},n.prototype.createEl=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return e.className=e.className+" vjs-slider",e=C({tabIndex:0},e),i=C({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},i),r.prototype.createEl.call(this,t,e,i)},n.prototype.handleMouseDown=function(t){var e=this.bar.el_.ownerDocument;t.preventDefault(),X(),this.addClass("vjs-sliding"),this.trigger("slideractive"),this.on(e,"mousemove",this.handleMouseMove),this.on(e,"mouseup",this.handleMouseUp),this.on(e,"touchmove",this.handleMouseMove),this.on(e,"touchend",this.handleMouseUp),this.handleMouseMove(t)},n.prototype.handleMouseMove=function(t){},n.prototype.handleMouseUp=function(){var t=this.bar.el_.ownerDocument;Y(),this.removeClass("vjs-sliding"),this.trigger("sliderinactive"),this.off(t,"mousemove",this.handleMouseMove),this.off(t,"mouseup",this.handleMouseUp),this.off(t,"touchmove",this.handleMouseMove),this.off(t,"touchend",this.handleMouseUp),this.update()},n.prototype.update=function(){if(this.el_){var t=this.getPercent(),e=this.bar;if(e){("number"!=typeof t||t!=t||t<0||t===1/0)&&(t=0);var i=(100*t).toFixed(2)+"%",r=e.el().style;return this.vertical()?r.height=i:r.width=i,t}}},n.prototype.calculateDistance=function(t){var e=Q(this.el_,t);return this.vertical()?e.y:e.x},n.prototype.handleFocus=function(){this.on(this.bar.el_.ownerDocument,"keydown",this.handleKeyPress)},n.prototype.handleKeyPress=function(t){37===t.which||40===t.which?(t.preventDefault(),this.stepBack()):38!==t.which&&39!==t.which||(t.preventDefault(),this.stepForward())},n.prototype.handleBlur=function(){this.off(this.bar.el_.ownerDocument,"keydown",this.handleKeyPress)},n.prototype.handleClick=function(t){t.stopImmediatePropagation(),t.preventDefault()},n.prototype.vertical=function(t){if(void 0===t)return this.vertical_||!1;this.vertical_=!!t,this.vertical_?this.addClass("vjs-slider-vertical"):this.addClass("vjs-slider-horizontal")},n}(Xt);Xt.registerComponent("Slider",en);var rn=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.partEls_=[],i.on(t,"progress",i.update),i}return _(n,r),n.prototype.createEl=function(){return r.prototype.createEl.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text"><span>'+this.localize("Loaded")+"</span>: 0%</span>"})},n.prototype.dispose=function(){this.partEls_=null,r.prototype.dispose.call(this)},n.prototype.update=function(t){var e=this.player_.buffered(),i=this.player_.duration(),r=this.player_.bufferedEnd(),n=this.partEls_,s=function(t,e){var i=t/e||0;return 100*(1<=i?1:i)+"%"};this.el_.style.width=s(r,i);for(var a=0;a<e.length;a++){var o=e.start(a),u=e.end(a),l=n[a];l||(l=this.el_.appendChild(M()),n[a]=l),l.style.left=s(o,r),l.style.width=s(u-o,r)}for(var c=n.length;c>e.length;c--)this.el_.removeChild(n[c-1]);n.length=e.length},n}(Xt);Xt.registerComponent("LoadProgressBar",rn);var nn=function(t){function e(){return y(this,e),b(this,t.apply(this,arguments))}return _(e,t),e.prototype.createEl=function(){return t.prototype.createEl.call(this,"div",{className:"vjs-time-tooltip"})},e.prototype.update=function(t,e,i){var r=$(this.el_),n=$(this.player_.el()),s=t.width*e;if(n&&r){var a=t.left-n.left+s,o=t.width-s+(n.right-t.right),u=r.width/2;a<u?u+=u-a:o<u&&(u=o),u<0?u=0:u>r.width&&(u=r.width),this.el_.style.right="-"+u+"px",U(this.el_,i)}},e}(Xt);Xt.registerComponent("TimeTooltip",nn);var sn=function(t){function e(){return y(this,e),b(this,t.apply(this,arguments))}return _(e,t),e.prototype.createEl=function(){return t.prototype.createEl.call(this,"div",{className:"vjs-play-progress vjs-slider-bar",innerHTML:'<span class="vjs-control-text"><span>'+this.localize("Progress")+"</span>: 0%</span>"})},e.prototype.update=function(i,r){var n=this;this.rafId_&&this.cancelAnimationFrame(this.rafId_),this.rafId_=this.requestAnimationFrame(function(){var t=Yr(n.player_.scrubbing()?n.player_.getCache().currentTime:n.player_.currentTime(),n.player_.duration()),e=n.getChild("timeTooltip");e&&e.update(i,r,t)})},e}(Xt);sn.prototype.options_={children:[]},ne||ae||sn.prototype.options_.children.push("timeTooltip"),Xt.registerComponent("PlayProgressBar",sn);var an=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.update=xt(Ot(i,i.update),25),i}return _(n,r),n.prototype.createEl=function(){return r.prototype.createEl.call(this,"div",{className:"vjs-mouse-display"})},n.prototype.update=function(i,r){var n=this;this.rafId_&&this.cancelAnimationFrame(this.rafId_),this.rafId_=this.requestAnimationFrame(function(){var t=n.player_.duration(),e=Yr(r*t,t);n.el_.style.left=i.width*r+"px",n.getChild("timeTooltip").update(i,r,e)})},n}(Xt);an.prototype.options_={children:["timeTooltip"]},Xt.registerComponent("MouseTimeDisplay",an);var on=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.setEventHandlers_(),i}return _(n,r),n.prototype.setEventHandlers_=function(){var t=this;this.update=xt(Ot(this,this.update),30),this.on(this.player_,"timeupdate",this.update),this.on(this.player_,"ended",this.handleEnded),this.updateInterval=null,this.on(this.player_,["playing"],function(){t.clearInterval(t.updateInterval),t.updateInterval=t.setInterval(function(){t.requestAnimationFrame(function(){t.update()})},30)}),this.on(this.player_,["ended","pause","waiting"],function(){t.clearInterval(t.updateInterval)}),this.on(this.player_,["timeupdate","ended"],this.update)},n.prototype.createEl=function(){return r.prototype.createEl.call(this,"div",{className:"vjs-progress-holder"},{"aria-label":this.localize("Progress Bar")})},n.prototype.update_=function(t,e){var i=this.player_.duration();this.el_.setAttribute("aria-valuenow",(100*e).toFixed(2)),this.el_.setAttribute("aria-valuetext",this.localize("progress bar timing: currentTime={1} duration={2}",[Yr(t,i),Yr(i,i)],"{1} of {2}")),this.bar.update($(this.el_),e)},n.prototype.update=function(t){var e=r.prototype.update.call(this);return this.update_(this.getCurrentTime_(),e),e},n.prototype.getCurrentTime_=function(){return this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime()},n.prototype.handleEnded=function(t){this.update_(this.player_.duration(),1)},n.prototype.getPercent=function(){var t=this.getCurrentTime_()/this.player_.duration();return 1<=t?1:t||0},n.prototype.handleMouseDown=function(t){rt(t)&&(t.stopPropagation(),this.player_.scrubbing(!0),this.videoWasPlaying=!this.player_.paused(),this.player_.pause(),r.prototype.handleMouseDown.call(this,t))},n.prototype.handleMouseMove=function(t){if(rt(t)){var e=this.calculateDistance(t)*this.player_.duration();e===this.player_.duration()&&(e-=.1),this.player_.currentTime(e)}},n.prototype.enable=function(){r.prototype.enable.call(this);var t=this.getChild("mouseTimeDisplay");t&&t.show()},n.prototype.disable=function(){r.prototype.disable.call(this);var t=this.getChild("mouseTimeDisplay");t&&t.hide()},n.prototype.handleMouseUp=function(t){r.prototype.handleMouseUp.call(this,t),t&&t.stopPropagation(),this.player_.scrubbing(!1),this.player_.trigger({type:"timeupdate",target:this,manuallyTriggered:!0}),this.videoWasPlaying&&Ie(this.player_.play())},n.prototype.stepForward=function(){this.player_.currentTime(this.player_.currentTime()+5)},n.prototype.stepBack=function(){this.player_.currentTime(this.player_.currentTime()-5)},n.prototype.handleAction=function(t){this.player_.paused()?this.player_.play():this.player_.pause()},n.prototype.handleKeyPress=function(t){32===t.which||13===t.which?(t.preventDefault(),this.handleAction(t)):r.prototype.handleKeyPress&&r.prototype.handleKeyPress.call(this,t)},n}(en);on.prototype.options_={children:["loadProgressBar","playProgressBar"],barName:"playProgressBar"},ne||ae||on.prototype.options_.children.splice(1,0,"mouseTimeDisplay"),on.prototype.playerEvent="timeupdate",Xt.registerComponent("SeekBar",on);var un=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.handleMouseMove=xt(Ot(i,i.handleMouseMove),25),i.throttledHandleMouseSeek=xt(Ot(i,i.handleMouseSeek),25),i.enable(),i}return _(n,r),n.prototype.createEl=function(){return r.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},n.prototype.handleMouseMove=function(t){var e=this.getChild("seekBar");if(e){var i=e.getChild("mouseTimeDisplay"),r=e.el(),n=$(r),s=Q(r,t).x;1<s?s=1:s<0&&(s=0),i&&i.update(n,s)}},n.prototype.handleMouseSeek=function(t){var e=this.getChild("seekBar");e&&e.handleMouseMove(t)},n.prototype.enabled=function(){return this.enabled_},n.prototype.disable=function(){this.children().forEach(function(t){return t.disable&&t.disable()}),this.enabled()&&(this.off(["mousedown","touchstart"],this.handleMouseDown),this.off(this.el_,"mousemove",this.handleMouseMove),this.handleMouseUp(),this.addClass("disabled"),this.enabled_=!1)},n.prototype.enable=function(){this.children().forEach(function(t){return t.enable&&t.enable()}),this.enabled()||(this.on(["mousedown","touchstart"],this.handleMouseDown),this.on(this.el_,"mousemove",this.handleMouseMove),this.removeClass("disabled"),this.enabled_=!0)},n.prototype.handleMouseDown=function(t){var e=this.el_.ownerDocument,i=this.getChild("seekBar");i&&i.handleMouseDown(t),this.on(e,"mousemove",this.throttledHandleMouseSeek),this.on(e,"touchmove",this.throttledHandleMouseSeek),this.on(e,"mouseup",this.handleMouseUp),this.on(e,"touchend",this.handleMouseUp)},n.prototype.handleMouseUp=function(t){var e=this.el_.ownerDocument,i=this.getChild("seekBar");i&&i.handleMouseUp(t),this.off(e,"mousemove",this.throttledHandleMouseSeek),this.off(e,"touchmove",this.throttledHandleMouseSeek),this.off(e,"mouseup",this.handleMouseUp),this.off(e,"touchend",this.handleMouseUp)},n}(Xt);un.prototype.options_={children:["seekBar"]},Xt.registerComponent("ProgressControl",un);var ln=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.on(t,"fullscreenchange",i.handleFullscreenChange),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-fullscreen-control "+r.prototype.buildCSSClass.call(this)},n.prototype.handleFullscreenChange=function(t){this.player_.isFullscreen()?this.controlText("Non-Fullscreen"):this.controlText("Fullscreen")},n.prototype.handleClick=function(t){this.player_.isFullscreen()?this.player_.exitFullscreen():this.player_.requestFullscreen()},n}(Vr);ln.prototype.controlText_="Fullscreen",Xt.registerComponent("FullscreenToggle",ln);var cn=function(t,e){e.tech_&&!e.tech_.featuresVolumeControl&&t.addClass("vjs-hidden"),t.on(e,"loadstart",function(){e.tech_.featuresVolumeControl?t.removeClass("vjs-hidden"):t.addClass("vjs-hidden")})},hn=function(t){function e(){return y(this,e),b(this,t.apply(this,arguments))}return _(e,t),e.prototype.createEl=function(){return t.prototype.createEl.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})},e}(Xt);Xt.registerComponent("VolumeLevel",hn);var dn=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.on("slideractive",i.updateLastVolume_),i.on(t,"volumechange",i.updateARIAAttributes),t.ready(function(){return i.updateARIAAttributes()}),i}return _(n,r),n.prototype.createEl=function(){return r.prototype.createEl.call(this,"div",{className:"vjs-volume-bar vjs-slider-bar"},{"aria-label":this.localize("Volume Level"),"aria-live":"polite"})},n.prototype.handleMouseDown=function(t){rt(t)&&r.prototype.handleMouseDown.call(this,t)},n.prototype.handleMouseMove=function(t){rt(t)&&(this.checkMuted(),this.player_.volume(this.calculateDistance(t)))},n.prototype.checkMuted=function(){this.player_.muted()&&this.player_.muted(!1)},n.prototype.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},n.prototype.stepForward=function(){this.checkMuted(),this.player_.volume(this.player_.volume()+.1)},n.prototype.stepBack=function(){this.checkMuted(),this.player_.volume(this.player_.volume()-.1)},n.prototype.updateARIAAttributes=function(t){var e=this.player_.muted()?0:this.volumeAsPercentage_();this.el_.setAttribute("aria-valuenow",e),this.el_.setAttribute("aria-valuetext",e+"%")},n.prototype.volumeAsPercentage_=function(){return Math.round(100*this.player_.volume())},n.prototype.updateLastVolume_=function(){var t=this,e=this.player_.volume();this.one("sliderinactive",function(){0===t.player_.volume()&&t.player_.lastVolume_(e)})},n}(en);dn.prototype.options_={children:["volumeLevel"],barName:"volumeLevel"},dn.prototype.playerEvent="volumechange",Xt.registerComponent("VolumeBar",dn);var pn=function(r){function n(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};y(this,n),e.vertical=e.vertical||!1,("undefined"==typeof e.volumeBar||w(e.volumeBar))&&(e.volumeBar=e.volumeBar||{},e.volumeBar.vertical=e.vertical);var i=b(this,r.call(this,t,e));return cn(i,t),i.throttledHandleMouseMove=xt(Ot(i,i.handleMouseMove),25),i.on("mousedown",i.handleMouseDown),i.on("touchstart",i.handleMouseDown),i.on(i.volumeBar,["focus","slideractive"],function(){i.volumeBar.addClass("vjs-slider-active"),i.addClass("vjs-slider-active"),i.trigger("slideractive")}),i.on(i.volumeBar,["blur","sliderinactive"],function(){i.volumeBar.removeClass("vjs-slider-active"),i.removeClass("vjs-slider-active"),i.trigger("sliderinactive")}),i}return _(n,r),n.prototype.createEl=function(){var t="vjs-volume-horizontal";return this.options_.vertical&&(t="vjs-volume-vertical"),r.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control "+t})},n.prototype.handleMouseDown=function(t){var e=this.el_.ownerDocument;this.on(e,"mousemove",this.throttledHandleMouseMove),this.on(e,"touchmove",this.throttledHandleMouseMove),this.on(e,"mouseup",this.handleMouseUp),this.on(e,"touchend",this.handleMouseUp)},n.prototype.handleMouseUp=function(t){var e=this.el_.ownerDocument;this.off(e,"mousemove",this.throttledHandleMouseMove),this.off(e,"touchmove",this.throttledHandleMouseMove),this.off(e,"mouseup",this.handleMouseUp),this.off(e,"touchend",this.handleMouseUp)},n.prototype.handleMouseMove=function(t){this.volumeBar.handleMouseMove(t)},n}(Xt);pn.prototype.options_={children:["volumeBar"]},Xt.registerComponent("VolumeControl",pn);var fn=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return cn(i,t),i.on(t,["loadstart","volumechange"],i.update),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-mute-control "+r.prototype.buildCSSClass.call(this)},n.prototype.handleClick=function(t){var e=this.player_.volume(),i=this.player_.lastVolume_();if(0===e){var r=i<.1?.1:i;this.player_.volume(r),this.player_.muted(!1)}else this.player_.muted(!this.player_.muted())},n.prototype.update=function(t){this.updateIcon_(),this.updateControlText_()},n.prototype.updateIcon_=function(){var t=this.player_.volume(),e=3;0===t||this.player_.muted()?e=0:t<.33?e=1:t<.67&&(e=2);for(var i=0;i<4;i++)F(this.el_,"vjs-vol-"+i);j(this.el_,"vjs-vol-"+e)},n.prototype.updateControlText_=function(){var t=this.player_.muted()||0===this.player_.volume()?"Unmute":"Mute";this.controlText()!==t&&this.controlText(t)},n}(Vr);fn.prototype.controlText_="Mute",Xt.registerComponent("MuteToggle",fn);var mn=function(r){function n(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};y(this,n),"undefined"!=typeof e.inline?e.inline=e.inline:e.inline=!0,("undefined"==typeof e.volumeControl||w(e.volumeControl))&&(e.volumeControl=e.volumeControl||{},e.volumeControl.vertical=!e.inline);var i=b(this,r.call(this,t,e));return cn(i,t),i.on(i.volumeControl,["slideractive"],i.sliderActive_),i.on(i.volumeControl,["sliderinactive"],i.sliderInactive_),i}return _(n,r),n.prototype.sliderActive_=function(){this.addClass("vjs-slider-active")},n.prototype.sliderInactive_=function(){this.removeClass("vjs-slider-active")},n.prototype.createEl=function(){var t="vjs-volume-panel-horizontal";return this.options_.inline||(t="vjs-volume-panel-vertical"),r.prototype.createEl.call(this,"div",{className:"vjs-volume-panel vjs-control "+t})},n}(Xt);mn.prototype.options_={children:["muteToggle","volumeControl"]},Xt.registerComponent("VolumePanel",mn);var gn=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return e&&(i.menuButton_=e.menuButton),i.focusedChild_=-1,i.on("keydown",i.handleKeyPress),i}return _(n,r),n.prototype.addItem=function(e){this.addChild(e),e.on("click",Ot(this,function(t){this.menuButton_&&(this.menuButton_.unpressButton(),"CaptionSettingsMenuItem"!==e.name()&&this.menuButton_.focus())}))},n.prototype.createEl=function(){var t=this.options_.contentElType||"ul";this.contentEl_=M(t,{className:"vjs-menu-content"}),this.contentEl_.setAttribute("role","menu");var e=r.prototype.createEl.call(this,"div",{append:this.contentEl_,className:"vjs-menu"});return e.appendChild(this.contentEl_),_t(e,"click",function(t){t.preventDefault(),t.stopImmediatePropagation()}),e},n.prototype.dispose=function(){this.contentEl_=null,r.prototype.dispose.call(this)},n.prototype.handleKeyPress=function(t){37===t.which||40===t.which?(t.preventDefault(),this.stepForward()):38!==t.which&&39!==t.which||(t.preventDefault(),this.stepBack())},n.prototype.stepForward=function(){var t=0;void 0!==this.focusedChild_&&(t=this.focusedChild_+1),this.focus(t)},n.prototype.stepBack=function(){var t=0;void 0!==this.focusedChild_&&(t=this.focusedChild_-1),this.focus(t)},n.prototype.focus=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,e=this.children().slice();e.length&&e[0].className&&/vjs-menu-title/.test(e[0].className)&&e.shift(),0<e.length&&(t<0?t=0:t>=e.length&&(t=e.length-1),e[this.focusedChild_=t].el_.focus())},n}(Xt);Xt.registerComponent("Menu",gn);var yn=function(n){function s(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};y(this,s);var i=b(this,n.call(this,t,e));i.menuButton_=new Vr(t,e),i.menuButton_.controlText(i.controlText_),i.menuButton_.el_.setAttribute("aria-haspopup","true");var r=Vr.prototype.buildCSSClass();return i.menuButton_.el_.className=i.buildCSSClass()+" "+r,i.menuButton_.removeClass("vjs-control"),i.addChild(i.menuButton_),i.update(),i.enabled_=!0,i.on(i.menuButton_,"tap",i.handleClick),i.on(i.menuButton_,"click",i.handleClick),i.on(i.menuButton_,"focus",i.handleFocus),i.on(i.menuButton_,"blur",i.handleBlur),i.on("keydown",i.handleSubmenuKeyPress),i}return _(s,n),s.prototype.update=function(){var t=this.createMenu();this.menu&&(this.menu.dispose(),this.removeChild(this.menu)),this.menu=t,this.addChild(t),this.buttonPressed_=!1,this.menuButton_.el_.setAttribute("aria-expanded","false"),this.items&&this.items.length<=this.hideThreshold_?this.hide():this.show()},s.prototype.createMenu=function(){var t=new gn(this.player_,{menuButton:this});if(this.hideThreshold_=0,this.options_.title){var e=M("li",{className:"vjs-menu-title",innerHTML:zt(this.options_.title),tabIndex:-1});this.hideThreshold_+=1,t.children_.unshift(e),N(e,t.contentEl())}if(this.items=this.createItems(),this.items)for(var i=0;i<this.items.length;i++)t.addItem(this.items[i]);return t},s.prototype.createItems=function(){},s.prototype.createEl=function(){return n.prototype.createEl.call(this,"div",{className:this.buildWrapperCSSClass()},{})},s.prototype.buildWrapperCSSClass=function(){var t="vjs-menu-button";return!0===this.options_.inline?t+="-inline":t+="-popup","vjs-menu-button "+t+" "+Vr.prototype.buildCSSClass()+" "+n.prototype.buildCSSClass.call(this)},s.prototype.buildCSSClass=function(){var t="vjs-menu-button";return!0===this.options_.inline?t+="-inline":t+="-popup","vjs-menu-button "+t+" "+n.prototype.buildCSSClass.call(this)},s.prototype.controlText=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.menuButton_.el();return this.menuButton_.controlText(t,e)},s.prototype.handleClick=function(t){this.one(this.menu.contentEl(),"mouseleave",Ot(this,function(t){this.unpressButton(),this.el_.blur()})),this.buttonPressed_?this.unpressButton():this.pressButton()},s.prototype.focus=function(){this.menuButton_.focus()},s.prototype.blur=function(){this.menuButton_.blur()},s.prototype.handleFocus=function(){_t(p,"keydown",Ot(this,this.handleKeyPress))},s.prototype.handleBlur=function(){bt(p,"keydown",Ot(this,this.handleKeyPress))},s.prototype.handleKeyPress=function(t){27===t.which||9===t.which?(this.buttonPressed_&&this.unpressButton(),9!==t.which&&(t.preventDefault(),this.menuButton_.el_.focus())):38!==t.which&&40!==t.which||this.buttonPressed_||(this.pressButton(),t.preventDefault())},s.prototype.handleSubmenuKeyPress=function(t){27!==t.which&&9!==t.which||(this.buttonPressed_&&this.unpressButton(),9!==t.which&&(t.preventDefault(),this.menuButton_.el_.focus()))},s.prototype.pressButton=function(){if(this.enabled_){if(this.buttonPressed_=!0,this.menu.lockShowing(),this.menuButton_.el_.setAttribute("aria-expanded","true"),ne&&D())return;this.menu.focus()}},s.prototype.unpressButton=function(){this.enabled_&&(this.buttonPressed_=!1,this.menu.unlockShowing(),this.menuButton_.el_.setAttribute("aria-expanded","false"))},s.prototype.disable=function(){this.unpressButton(),this.enabled_=!1,this.addClass("vjs-disabled"),this.menuButton_.disable()},s.prototype.enable=function(){this.enabled_=!0,this.removeClass("vjs-disabled"),this.menuButton_.enable()},s}(Xt);Xt.registerComponent("MenuButton",yn);var vn=function(s){function a(t,e){y(this,a);var i=e.tracks,r=b(this,s.call(this,t,e));if(r.items.length<=1&&r.hide(),!i)return b(r);var n=Ot(r,r.update);return i.addEventListener("removetrack",n),i.addEventListener("addtrack",n),r.player_.on("ready",n),r.player_.on("dispose",function(){i.removeEventListener("removetrack",n),i.removeEventListener("addtrack",n)}),r}return _(a,s),a}(yn);Xt.registerComponent("TrackButton",vn);var _n=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.selectable=e.selectable,i.isSelected_=e.selected||!1,i.selected(i.isSelected_),i.selectable?i.el_.setAttribute("role","menuitemcheckbox"):i.el_.setAttribute("role","menuitem"),i}return _(n,r),n.prototype.createEl=function(t,e,i){return this.nonIconControl=!0,r.prototype.createEl.call(this,"li",C({className:"vjs-menu-item",innerHTML:'<span class="vjs-menu-item-text">'+this.localize(this.options_.label)+"</span>",tabIndex:-1},e),i)},n.prototype.handleClick=function(t){this.selected(!0)},n.prototype.selected=function(t){this.selectable&&(t?(this.addClass("vjs-selected"),this.el_.setAttribute("aria-checked","true"),this.controlText(", selected"),this.isSelected_=!0):(this.removeClass("vjs-selected"),this.el_.setAttribute("aria-checked","false"),this.controlText(""),this.isSelected_=!1))},n}(Rr);Xt.registerComponent("MenuItem",_n);var bn=function(u){function l(t,e){y(this,l);var i=e.track,r=t.textTracks();e.label=i.label||i.language||"Unknown",e.selected="showing"===i.mode;var n=b(this,u.call(this,t,e));n.track=i;var s=function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];n.handleTracksChange.apply(n,e)},a=function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];n.handleSelectedLanguageChange.apply(n,e)};if(t.on(["loadstart","texttrackchange"],s),r.addEventListener("change",s),r.addEventListener("selectedlanguagechange",a),n.on("dispose",function(){t.off(["loadstart","texttrackchange"],s),r.removeEventListener("change",s),r.removeEventListener("selectedlanguagechange",a)}),void 0===r.onchange){var o=void 0;n.on(["tap","click"],function(){if("object"!==v(g.Event))try{o=new g.Event("change")}catch(t){}o||(o=p.createEvent("Event")).initEvent("change",!0,!0),r.dispatchEvent(o)})}return n.handleTracksChange(),n}return _(l,u),l.prototype.handleClick=function(t){var e=this.track.kind,i=this.track.kinds,r=this.player_.textTracks();if(i||(i=[e]),u.prototype.handleClick.call(this,t),r)for(var n=0;n<r.length;n++){var s=r[n];s===this.track&&-1<i.indexOf(s.kind)?"showing"!==s.mode&&(s.mode="showing"):"disabled"!==s.mode&&(s.mode="disabled")}},l.prototype.handleTracksChange=function(t){var e="showing"===this.track.mode;e!==this.isSelected_&&this.selected(e)},l.prototype.handleSelectedLanguageChange=function(t){if("showing"===this.track.mode){var e=this.player_.cache_.selectedLanguage;if(e&&e.enabled&&e.language===this.track.language&&e.kind!==this.track.kind)return;this.player_.cache_.selectedLanguage={enabled:!0,language:this.track.language,kind:this.track.kind}}},l.prototype.dispose=function(){this.track=null,u.prototype.dispose.call(this)},l}(_n);Xt.registerComponent("TextTrackMenuItem",bn);var Tn=function(i){function r(t,e){return y(this,r),e.track={player:t,kind:e.kind,kinds:e.kinds,default:!1,mode:"disabled"},e.kinds||(e.kinds=[e.kind]),e.label?e.track.label=e.label:e.track.label=e.kinds.join(" and ")+" off",e.selectable=!0,b(this,i.call(this,t,e))}return _(r,i),r.prototype.handleTracksChange=function(t){for(var e=this.player().textTracks(),i=!0,r=0,n=e.length;r<n;r++){var s=e[r];if(-1<this.options_.kinds.indexOf(s.kind)&&"showing"===s.mode){i=!1;break}}i!==this.isSelected_&&this.selected(i)},r.prototype.handleSelectedLanguageChange=function(t){for(var e=this.player().textTracks(),i=!0,r=0,n=e.length;r<n;r++){var s=e[r];if(-1<["captions","descriptions","subtitles"].indexOf(s.kind)&&"showing"===s.mode){i=!1;break}}i&&(this.player_.cache_.selectedLanguage={enabled:!1})},r}(bn);Xt.registerComponent("OffTextTrackMenuItem",Tn);var Sn=function(i){function r(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return y(this,r),e.tracks=t.textTracks(),b(this,i.call(this,t,e))}return _(r,i),r.prototype.createItems=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:bn,i=void 0;this.label_&&(i=this.label_+" off"),t.push(new Tn(this.player_,{kinds:this.kinds_,kind:this.kind_,label:i})),this.hideThreshold_+=1;var r=this.player_.textTracks();Array.isArray(this.kinds_)||(this.kinds_=[this.kind_]);for(var n=0;n<r.length;n++){var s=r[n];if(-1<this.kinds_.indexOf(s.kind)){var a=new e(this.player_,{track:s,selectable:!0});a.addClass("vjs-"+s.kind+"-menu-item"),t.push(a)}}return t},r}(vn);Xt.registerComponent("TextTrackButton",Sn);var kn=function(a){function o(t,e){y(this,o);var i=e.track,r=e.cue,n=t.currentTime();e.selectable=!0,e.label=r.text,e.selected=r.startTime<=n&&n<r.endTime;var s=b(this,a.call(this,t,e));return s.track=i,s.cue=r,i.addEventListener("cuechange",Ot(s,s.update)),s}return _(o,a),o.prototype.handleClick=function(t){a.prototype.handleClick.call(this),this.player_.currentTime(this.cue.startTime),this.update(this.cue.startTime)},o.prototype.update=function(t){var e=this.cue,i=this.player_.currentTime();this.selected(e.startTime<=i&&i<e.endTime)},o}(_n);Xt.registerComponent("ChaptersTrackMenuItem",kn);var Cn=function(r){function n(t,e,i){return y(this,n),b(this,r.call(this,t,e,i))}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-chapters-button "+r.prototype.buildCSSClass.call(this)},n.prototype.buildWrapperCSSClass=function(){return"vjs-chapters-button "+r.prototype.buildWrapperCSSClass.call(this)},n.prototype.update=function(t){this.track_&&(!t||"addtrack"!==t.type&&"removetrack"!==t.type)||this.setTrack(this.findChaptersTrack()),r.prototype.update.call(this)},n.prototype.setTrack=function(t){if(this.track_!==t){if(this.updateHandler_||(this.updateHandler_=this.update.bind(this)),this.track_){var e=this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);e&&e.removeEventListener("load",this.updateHandler_),this.track_=null}if(this.track_=t,this.track_){this.track_.mode="hidden";var i=this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);i&&i.addEventListener("load",this.updateHandler_)}}},n.prototype.findChaptersTrack=function(){for(var t=this.player_.textTracks()||[],e=t.length-1;0<=e;e--){var i=t[e];if(i.kind===this.kind_)return i}},n.prototype.getMenuCaption=function(){return this.track_&&this.track_.label?this.track_.label:this.localize(zt(this.kind_))},n.prototype.createMenu=function(){return this.options_.title=this.getMenuCaption(),r.prototype.createMenu.call(this)},n.prototype.createItems=function(){var t=[];if(!this.track_)return t;var e=this.track_.cues;if(!e)return t;for(var i=0,r=e.length;i<r;i++){var n=e[i],s=new kn(this.player_,{track:this.track_,cue:n});t.push(s)}return t},n}(Sn);Cn.prototype.kind_="chapters",Cn.prototype.controlText_="Chapters",Xt.registerComponent("ChaptersButton",Cn);var En=function(a){function o(t,e,i){y(this,o);var r=b(this,a.call(this,t,e,i)),n=t.textTracks(),s=Ot(r,r.handleTracksChange);return n.addEventListener("change",s),r.on("dispose",function(){n.removeEventListener("change",s)}),r}return _(o,a),o.prototype.handleTracksChange=function(t){for(var e=this.player().textTracks(),i=!1,r=0,n=e.length;r<n;r++){var s=e[r];if(s.kind!==this.kind_&&"showing"===s.mode){i=!0;break}}i?this.disable():this.enable()},o.prototype.buildCSSClass=function(){return"vjs-descriptions-button "+a.prototype.buildCSSClass.call(this)},o.prototype.buildWrapperCSSClass=function(){return"vjs-descriptions-button "+a.prototype.buildWrapperCSSClass.call(this)},o}(Sn);En.prototype.kind_="descriptions",En.prototype.controlText_="Descriptions",Xt.registerComponent("DescriptionsButton",En);var wn=function(r){function n(t,e,i){return y(this,n),b(this,r.call(this,t,e,i))}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-subtitles-button "+r.prototype.buildCSSClass.call(this)},n.prototype.buildWrapperCSSClass=function(){return"vjs-subtitles-button "+r.prototype.buildWrapperCSSClass.call(this)},n}(Sn);wn.prototype.kind_="subtitles",wn.prototype.controlText_="Subtitles",Xt.registerComponent("SubtitlesButton",wn);var An=function(r){function n(t,e){y(this,n),e.track={player:t,kind:e.kind,label:e.kind+" settings",selectable:!1,default:!1,mode:"disabled"},e.selectable=!1,e.name="CaptionSettingsMenuItem";var i=b(this,r.call(this,t,e));return i.addClass("vjs-texttrack-settings"),i.controlText(", opens "+e.kind+" settings dialog"),i}return _(n,r),n.prototype.handleClick=function(t){this.player().getChild("textTrackSettings").open()},n}(bn);Xt.registerComponent("CaptionSettingsMenuItem",An);var Ln=function(r){function n(t,e,i){return y(this,n),b(this,r.call(this,t,e,i))}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-captions-button "+r.prototype.buildCSSClass.call(this)},n.prototype.buildWrapperCSSClass=function(){return"vjs-captions-button "+r.prototype.buildWrapperCSSClass.call(this)},n.prototype.createItems=function(){var t=[];return this.player().tech_&&this.player().tech_.featuresNativeTextTracks||!this.player().getChild("textTrackSettings")||(t.push(new An(this.player_,{kind:this.kind_})),this.hideThreshold_+=1),r.prototype.createItems.call(this,t)},n}(Sn);Ln.prototype.kind_="captions",Ln.prototype.controlText_="Captions",Xt.registerComponent("CaptionsButton",Ln);var Pn=function(n){function t(){return y(this,t),b(this,n.apply(this,arguments))}return _(t,n),t.prototype.createEl=function(t,e,i){var r='<span class="vjs-menu-item-text">'+this.localize(this.options_.label);return"captions"===this.options_.track.kind&&(r+='\n <span aria-hidden="true" class="vjs-icon-placeholder"></span>\n <span class="vjs-control-text"> '+this.localize("Captions")+"</span>\n "),r+="</span>",n.prototype.createEl.call(this,t,C({innerHTML:r},e),i)},t}(bn);Xt.registerComponent("SubsCapsMenuItem",Pn);var On=function(r){function n(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};y(this,n);var i=b(this,r.call(this,t,e));return i.label_="subtitles",-1<["en","en-us","en-ca","fr-ca"].indexOf(i.player_.language_)&&(i.label_="captions"),i.menuButton_.controlText(zt(i.label_)),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-subs-caps-button "+r.prototype.buildCSSClass.call(this)},n.prototype.buildWrapperCSSClass=function(){return"vjs-subs-caps-button "+r.prototype.buildWrapperCSSClass.call(this)},n.prototype.createItems=function(){var t=[];return this.player().tech_&&this.player().tech_.featuresNativeTextTracks||!this.player().getChild("textTrackSettings")||(t.push(new An(this.player_,{kind:this.label_})),this.hideThreshold_+=1),t=r.prototype.createItems.call(this,t,Pn)},n}(Sn);On.prototype.kinds_=["captions","subtitles"],On.prototype.controlText_="Subtitles",Xt.registerComponent("SubsCapsButton",On);var xn=function(a){function o(t,e){y(this,o);var i=e.track,r=t.audioTracks();e.label=i.label||i.language||"Unknown",e.selected=i.enabled;var n=b(this,a.call(this,t,e));n.track=i;var s=function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];n.handleTracksChange.apply(n,e)};return r.addEventListener("change",s),n.on("dispose",function(){r.removeEventListener("change",s)}),n}return _(o,a),o.prototype.handleClick=function(t){var e=this.player_.audioTracks();a.prototype.handleClick.call(this,t);for(var i=0;i<e.length;i++){var r=e[i];r.enabled=r===this.track}},o.prototype.handleTracksChange=function(t){this.selected(this.track.enabled)},o}(_n);Xt.registerComponent("AudioTrackMenuItem",xn);var In=function(i){function r(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return y(this,r),e.tracks=t.audioTracks(),b(this,i.call(this,t,e))}return _(r,i),r.prototype.buildCSSClass=function(){return"vjs-audio-button "+i.prototype.buildCSSClass.call(this)},r.prototype.buildWrapperCSSClass=function(){return"vjs-audio-button "+i.prototype.buildWrapperCSSClass.call(this)},r.prototype.createItems=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];this.hideThreshold_=1;for(var e=this.player_.audioTracks(),i=0;i<e.length;i++){var r=e[i];t.push(new xn(this.player_,{track:r,selectable:!0}))}return t},r}(vn);In.prototype.controlText_="Audio Track",Xt.registerComponent("AudioTrackButton",In);var Dn=function(s){function a(t,e){y(this,a);var i=e.rate,r=parseFloat(i,10);e.label=i,e.selected=1===r,e.selectable=!0;var n=b(this,s.call(this,t,e));return n.label=i,n.rate=r,n.on(t,"ratechange",n.update),n}return _(a,s),a.prototype.handleClick=function(t){s.prototype.handleClick.call(this),this.player().playbackRate(this.rate)},a.prototype.update=function(t){this.selected(this.player().playbackRate()===this.rate)},a}(_n);Dn.prototype.contentElType="button",Xt.registerComponent("PlaybackRateMenuItem",Dn);var Rn=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.updateVisibility(),i.updateLabel(),i.on(t,"loadstart",i.updateVisibility),i.on(t,"ratechange",i.updateLabel),i}return _(n,r),n.prototype.createEl=function(){var t=r.prototype.createEl.call(this);return this.labelEl_=M("div",{className:"vjs-playback-rate-value",innerHTML:"1x"}),t.appendChild(this.labelEl_),t},n.prototype.dispose=function(){this.labelEl_=null,r.prototype.dispose.call(this)},n.prototype.buildCSSClass=function(){return"vjs-playback-rate "+r.prototype.buildCSSClass.call(this)},n.prototype.buildWrapperCSSClass=function(){return"vjs-playback-rate "+r.prototype.buildWrapperCSSClass.call(this)},n.prototype.createMenu=function(){var t=new gn(this.player()),e=this.playbackRates();if(e)for(var i=e.length-1;0<=i;i--)t.addChild(new Dn(this.player(),{rate:e[i]+"x"}));return t},n.prototype.updateARIAAttributes=function(){this.el().setAttribute("aria-valuenow",this.player().playbackRate())},n.prototype.handleClick=function(t){for(var e=this.player().playbackRate(),i=this.playbackRates(),r=i[0],n=0;n<i.length;n++)if(i[n]>e){r=i[n];break}this.player().playbackRate(r)},n.prototype.playbackRates=function(){return this.options_.playbackRates||this.options_.playerOptions&&this.options_.playerOptions.playbackRates},n.prototype.playbackRateSupported=function(){return this.player().tech_&&this.player().tech_.featuresPlaybackRate&&this.playbackRates()&&0<this.playbackRates().length},n.prototype.updateVisibility=function(t){this.playbackRateSupported()?this.removeClass("vjs-hidden"):this.addClass("vjs-hidden")},n.prototype.updateLabel=function(t){this.playbackRateSupported()&&(this.labelEl_.innerHTML=this.player().playbackRate()+"x")},n}(yn);Rn.prototype.controlText_="Playback Rate",Xt.registerComponent("PlaybackRateMenuButton",Rn);var Mn=function(t){function e(){return y(this,e),b(this,t.apply(this,arguments))}return _(e,t),e.prototype.buildCSSClass=function(){return"vjs-spacer "+t.prototype.buildCSSClass.call(this)},e.prototype.createEl=function(){return t.prototype.createEl.call(this,"div",{className:this.buildCSSClass()})},e}(Xt);Xt.registerComponent("Spacer",Mn);var Un=function(e){function t(){return y(this,t),b(this,e.apply(this,arguments))}return _(t,e),t.prototype.buildCSSClass=function(){return"vjs-custom-control-spacer "+e.prototype.buildCSSClass.call(this)},t.prototype.createEl=function(){var t=e.prototype.createEl.call(this,{className:this.buildCSSClass()});return t.innerHTML="Â ",t},t}(Mn);Xt.registerComponent("CustomControlSpacer",Un);var Nn=function(t){function e(){return y(this,e),b(this,t.apply(this,arguments))}return _(e,t),e.prototype.createEl=function(){return t.prototype.createEl.call(this,"div",{className:"vjs-control-bar",dir:"ltr"})},e}(Xt);Nn.prototype.options_={children:["playToggle","volumePanel","currentTimeDisplay","timeDivider","durationDisplay","progressControl","liveDisplay","remainingTimeDisplay","customControlSpacer","playbackRateMenuButton","chaptersButton","descriptionsButton","subsCapsButton","audioTrackButton","fullscreenToggle"]},Xt.registerComponent("ControlBar",Nn);var Bn=function(r){function n(t,e){y(this,n);var i=b(this,r.call(this,t,e));return i.on(t,"error",i.open),i}return _(n,r),n.prototype.buildCSSClass=function(){return"vjs-error-display "+r.prototype.buildCSSClass.call(this)},n.prototype.content=function(){var t=this.player().error();return t?this.localize(t.message):""},n}(Ne);Bn.prototype.options_=Gt(Ne.prototype.options_,{pauseOnOpen:!1,fillAlways:!0,temporary:!1,uncloseable:!0}),Xt.registerComponent("ErrorDisplay",Bn);var jn="vjs-text-track-settings",Fn=["#000","Black"],Hn=["#00F","Blue"],Vn=["#0FF","Cyan"],qn=["#0F0","Green"],Wn=["#F0F","Magenta"],zn=["#F00","Red"],Gn=["#FFF","White"],Xn=["#FF0","Yellow"],Yn=["1","Opaque"],$n=["0.5","Semi-Transparent"],Kn=["0","Transparent"],Qn={backgroundColor:{selector:".vjs-bg-color > select",id:"captions-background-color-%s",label:"Color",options:[Fn,Gn,zn,qn,Hn,Xn,Wn,Vn]},backgroundOpacity:{selector:".vjs-bg-opacity > select",id:"captions-background-opacity-%s",label:"Transparency",options:[Yn,$n,Kn]},color:{selector:".vjs-fg-color > select",id:"captions-foreground-color-%s",label:"Color",options:[Gn,Fn,zn,qn,Hn,Xn,Wn,Vn]},edgeStyle:{selector:".vjs-edge-style > select",id:"%s",label:"Text Edge Style",options:[["none","None"],["raised","Raised"],["depressed","Depressed"],["uniform","Uniform"],["dropshadow","Dropshadow"]]},fontFamily:{selector:".vjs-font-family > select",id:"captions-font-family-%s",label:"Font Family",options:[["proportionalSansSerif","Proportional Sans-Serif"],["monospaceSansSerif","Monospace Sans-Serif"],["proportionalSerif","Proportional Serif"],["monospaceSerif","Monospace Serif"],["casual","Casual"],["script","Script"],["small-caps","Small Caps"]]},fontPercent:{selector:".vjs-font-percent > select",id:"captions-font-size-%s",label:"Font Size",options:[["0.50","50%"],["0.75","75%"],["1.00","100%"],["1.25","125%"],["1.50","150%"],["1.75","175%"],["2.00","200%"],["3.00","300%"],["4.00","400%"]],default:2,parser:function(t){return"1.00"===t?null:Number(t)}},textOpacity:{selector:".vjs-text-opacity > select",id:"captions-foreground-opacity-%s",label:"Transparency",options:[Yn,$n]},windowColor:{selector:".vjs-window-color > select",id:"captions-window-color-%s",label:"Color"},windowOpacity:{selector:".vjs-window-opacity > select",id:"captions-window-opacity-%s",label:"Transparency",options:[Kn,$n,Yn]}};function Jn(t,e){if(e&&(t=e(t)),t&&"none"!==t)return t}Qn.windowColor.options=Qn.backgroundColor.options;var Zn=function(r){function n(t,e){y(this,n),e.temporary=!1;var i=b(this,r.call(this,t,e));return i.updateDisplay=Ot(i,i.updateDisplay),i.fill(),i.hasBeenOpened_=i.hasBeenFilled_=!0,i.endDialog=M("p",{className:"vjs-control-text",textContent:i.localize("End of dialog window.")}),i.el().appendChild(i.endDialog),i.setDefaults(),void 0===e.persistTextTrackSettings&&(i.options_.persistTextTrackSettings=i.options_.playerOptions.persistTextTrackSettings),i.on(i.$(".vjs-done-button"),"click",function(){i.saveSettings(),i.close()}),i.on(i.$(".vjs-default-button"),"click",function(){i.setDefaults(),i.updateDisplay()}),k(Qn,function(t){i.on(i.$(t.selector),"change",i.updateDisplay)}),i.options_.persistTextTrackSettings&&i.restoreSettings(),i}return _(n,r),n.prototype.dispose=function(){this.endDialog=null,r.prototype.dispose.call(this)},n.prototype.createElSelect_=function(t){var i=this,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"",r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"label",n=Qn[t],s=n.id.replace("%s",this.id_),a=[e,s].join(" ").trim();return["<"+r+' id="'+s+'" class="'+("label"===r?"vjs-label":"")+'">',this.localize(n.label),"</"+r+">",'<select aria-labelledby="'+a+'">'].concat(n.options.map(function(t){var e=s+"-"+t[1].replace(/\W+/g,"");return['<option id="'+e+'" value="'+t[0]+'" ','aria-labelledby="'+a+" "+e+'">',i.localize(t[1]),"</option>"].join("")})).concat("</select>").join("")},n.prototype.createElFgColor_=function(){var t="captions-text-legend-"+this.id_;return['<fieldset class="vjs-fg-color vjs-track-setting">','<legend id="'+t+'">',this.localize("Text"),"</legend>",this.createElSelect_("color",t),'<span class="vjs-text-opacity vjs-opacity">',this.createElSelect_("textOpacity",t),"</span>","</fieldset>"].join("")},n.prototype.createElBgColor_=function(){var t="captions-background-"+this.id_;return['<fieldset class="vjs-bg-color vjs-track-setting">','<legend id="'+t+'">',this.localize("Background"),"</legend>",this.createElSelect_("backgroundColor",t),'<span class="vjs-bg-opacity vjs-opacity">',this.createElSelect_("backgroundOpacity",t),"</span>","</fieldset>"].join("")},n.prototype.createElWinColor_=function(){var t="captions-window-"+this.id_;return['<fieldset class="vjs-window-color vjs-track-setting">','<legend id="'+t+'">',this.localize("Window"),"</legend>",this.createElSelect_("windowColor",t),'<span class="vjs-window-opacity vjs-opacity">',this.createElSelect_("windowOpacity",t),"</span>","</fieldset>"].join("")},n.prototype.createElColors_=function(){return M("div",{className:"vjs-track-settings-colors",innerHTML:[this.createElFgColor_(),this.createElBgColor_(),this.createElWinColor_()].join("")})},n.prototype.createElFont_=function(){return M("div",{className:"vjs-track-settings-font",innerHTML:['<fieldset class="vjs-font-percent vjs-track-setting">',this.createElSelect_("fontPercent","","legend"),"</fieldset>",'<fieldset class="vjs-edge-style vjs-track-setting">',this.createElSelect_("edgeStyle","","legend"),"</fieldset>",'<fieldset class="vjs-font-family vjs-track-setting">',this.createElSelect_("fontFamily","","legend"),"</fieldset>"].join("")})},n.prototype.createElControls_=function(){var t=this.localize("restore all settings to the default values");return M("div",{className:"vjs-track-settings-controls",innerHTML:['<button class="vjs-default-button" title="'+t+'">',this.localize("Reset"),'<span class="vjs-control-text"> '+t+"</span>","</button>",'<button class="vjs-done-button">'+this.localize("Done")+"</button>"].join("")})},n.prototype.content=function(){return[this.createElColors_(),this.createElFont_(),this.createElControls_()]},n.prototype.label=function(){return this.localize("Caption Settings Dialog")},n.prototype.description=function(){return this.localize("Beginning of dialog window. Escape will cancel and close the window.")},n.prototype.buildCSSClass=function(){return r.prototype.buildCSSClass.call(this)+" vjs-text-track-settings"},n.prototype.getValues=function(){var a=this;return function(i,r){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0;return S(i).reduce(function(t,e){return r(t,i[e],e)},t)}(Qn,function(t,e,i){var r,n,s=(r=a.$(e.selector),n=e.parser,Jn(r.options[r.options.selectedIndex].value,n));return void 0!==s&&(t[i]=s),t},{})},n.prototype.setValues=function(i){var r=this;k(Qn,function(t,e){!function(t,e,i){if(e)for(var r=0;r<t.options.length;r++)if(Jn(t.options[r].value,i)===e){t.selectedIndex=r;break}}(r.$(t.selector),i[e],t.parser)})},n.prototype.setDefaults=function(){var i=this;k(Qn,function(t){var e=t.hasOwnProperty("default")?t.default:0;i.$(t.selector).selectedIndex=e})},n.prototype.restoreSettings=function(){var t=void 0;try{t=JSON.parse(g.localStorage.getItem(jn))}catch(t){f.warn(t)}t&&this.setValues(t)},n.prototype.saveSettings=function(){if(this.options_.persistTextTrackSettings){var t=this.getValues();try{Object.keys(t).length?g.localStorage.setItem(jn,JSON.stringify(t)):g.localStorage.removeItem(jn)}catch(t){f.warn(t)}}},n.prototype.updateDisplay=function(){var t=this.player_.getChild("textTrackDisplay");t&&t.updateDisplay()},n.prototype.conditionalBlur_=function(){this.previouslyActiveEl_=null,this.off(p,"keydown",this.handleKeyDown);var t=this.player_.controlBar,e=t&&t.subsCapsButton,i=t&&t.captionsButton;e?e.focus():i&&i.focus()},n}(Ne);Xt.registerComponent("TextTrackSettings",Zn);var ts=function(s){function a(t,e){y(this,a);var i=e.ResizeObserver||g.ResizeObserver;null===e.ResizeObserver&&(i=!1);var r=Gt({createEl:!i},e),n=b(this,s.call(this,t,r));return n.ResizeObserver=e.ResizeObserver||g.ResizeObserver,n.loadListener_=null,n.resizeObserver_=null,n.debouncedHandler_=It(function(){n.resizeHandler()},100,!1,t),i?(n.resizeObserver_=new n.ResizeObserver(n.debouncedHandler_),n.resizeObserver_.observe(t.el())):(n.loadListener_=function(){n.el_.contentWindow&&_t(n.el_.contentWindow,"resize",n.debouncedHandler_),n.off("load",n.loadListener_)},n.on("load",n.loadListener_)),n}return _(a,s),a.prototype.createEl=function(){return s.prototype.createEl.call(this,"iframe",{className:"vjs-resize-manager"})},a.prototype.resizeHandler=function(){this.player_.trigger("playerresize")},a.prototype.dispose=function(){this.resizeObserver_&&(this.resizeObserver_.unobserve(this.player_.el()),this.resizeObserver_.disconnect()),this.el_&&this.el_.contentWindow&&bt(this.el_.contentWindow,"resize",this.debouncedHandler_),this.loadListener_&&this.off("load",this.loadListener_),this.ResizeObserver=null,this.resizeObserver=null,this.debouncedHandler_=null,this.loadListener_=null},a}(Xt);Xt.registerComponent("ResizeManager",ts);var es=function(t){var e=t.el();if(e.hasAttribute("src"))return t.triggerSourceset(e.src),!0;var i=t.$$("source"),r=[],n="";if(!i.length)return!1;for(var s=0;s<i.length;s++){var a=i[s].src;a&&-1===r.indexOf(a)&&r.push(a)}return!!r.length&&(1===r.length&&(n=r[0]),t.triggerSourceset(n),!0)},is=Object.defineProperty({},"innerHTML",{get:function(){return this.cloneNode(!0).innerHTML},set:function(t){var e=p.createElement(this.nodeName.toLowerCase());e.innerHTML=t;for(var i=p.createDocumentFragment();e.childNodes.length;)i.appendChild(e.childNodes[0]);return this.innerText="",g.Element.prototype.appendChild.call(this,i),this.innerHTML}}),rs=function(t,e){for(var i={},r=0;r<t.length&&!((i=Object.getOwnPropertyDescriptor(t[r],e))&&i.set&&i.get);r++);return i.enumerable=!0,i.configurable=!0,i},ns=function(s){var a=s.el();if(!a.resetSourceWatch_){var e={},t=rs([s.el(),g.HTMLMediaElement.prototype,g.Element.prototype,is],"innerHTML"),i=function(n){return function(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];var r=n.apply(a,e);return es(s),r}};["append","appendChild","insertAdjacentHTML"].forEach(function(t){a[t]&&(e[t]=a[t],a[t]=i(e[t]))}),Object.defineProperty(a,"innerHTML",Gt(t,{set:i(t.set)})),a.resetSourceWatch_=function(){a.resetSourceWatch_=null,Object.keys(e).forEach(function(t){a[t]=e[t]}),Object.defineProperty(a,"innerHTML",t)},s.one("sourceset",a.resetSourceWatch_)}},ss=Object.defineProperty({},"src",{get:function(){return this.hasAttribute("src")?Ze(g.Element.prototype.getAttribute.call(this,"src")):""},set:function(t){return g.Element.prototype.setAttribute.call(this,"src",t),t}}),as=function(r){if(r.featuresSourceset){var n=r.el();if(!n.resetSourceset_){var i=rs([r.el(),g.HTMLMediaElement.prototype,ss],"src"),s=n.setAttribute,e=n.load;Object.defineProperty(n,"src",Gt(i,{set:function(t){var e=i.set.call(n,t);return r.triggerSourceset(n.src),e}})),n.setAttribute=function(t,e){var i=s.call(n,t,e);return/src/i.test(t)&&r.triggerSourceset(n.src),i},n.load=function(){var t=e.call(n);return es(r)||(r.triggerSourceset(""),ns(r)),t},n.currentSrc?r.triggerSourceset(n.currentSrc):es(r)||ns(r),n.resetSourceset_=function(){n.resetSourceset_=null,n.load=e,n.setAttribute=s,Object.defineProperty(n,"src",i),n.resetSourceWatch_&&n.resetSourceWatch_()}}}},os=h(["Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\n This may prevent text tracks from loading."],["Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\n This may prevent text tracks from loading."]),us=function(c){function h(t,e){y(this,h);var i=b(this,c.call(this,t,e)),r=t.source,n=!1;if(r&&(i.el_.currentSrc!==r.src||t.tag&&3===t.tag.initNetworkState_)?i.setSource(r):i.handleLateInit_(i.el_),t.enableSourceset&&i.setupSourcesetHandling_(),i.el_.hasChildNodes()){for(var s=i.el_.childNodes,a=s.length,o=[];a--;){var u=s[a];"track"===u.nodeName.toLowerCase()&&(i.featuresNativeTextTracks?(i.remoteTextTrackEls().addTrackElement_(u),i.remoteTextTracks().addTrack(u.track),i.textTracks().addTrack(u.track),n||i.el_.hasAttribute("crossorigin")||!ei(u.src)||(n=!0)):o.push(u))}for(var l=0;l<o.length;l++)i.el_.removeChild(o[l])}return i.proxyNativeTracks_(),i.featuresNativeTextTracks&&n&&f.warn(m(os)),i.restoreMetadataTracksInIOSNativePlayer_(),(ge||ie||ue)&&!0===t.nativeControlsForTouch&&i.setControls(!0),i.proxyWebkitFullscreen_(),i.triggerReady(),i}return _(h,c),h.prototype.dispose=function(){this.el_.resetSourceset_&&this.el_.resetSourceset_(),h.disposeMediaElement(this.el_),this.options_=null,c.prototype.dispose.call(this)},h.prototype.setupSourcesetHandling_=function(){as(this)},h.prototype.restoreMetadataTracksInIOSNativePlayer_=function(){var r=this.textTracks(),n=void 0,t=function(){n=[];for(var t=0;t<r.length;t++){var e=r[t];"metadata"===e.kind&&n.push({track:e,storedMode:e.mode})}};t(),r.addEventListener("change",t),this.on("dispose",function(){return r.removeEventListener("change",t)});var e=function t(){for(var e=0;e<n.length;e++){var i=n[e];"disabled"===i.track.mode&&i.track.mode!==i.storedMode&&(i.track.mode=i.storedMode)}r.removeEventListener("change",t)};this.on("webkitbeginfullscreen",function(){r.removeEventListener("change",t),r.removeEventListener("change",e),r.addEventListener("change",e)}),this.on("webkitendfullscreen",function(){r.removeEventListener("change",t),r.addEventListener("change",t),r.removeEventListener("change",e)})},h.prototype.overrideNative_=function(t,e){var i=this;if(e===this["featuresNative"+t+"Tracks"]){var r=t.toLowerCase();this[r+"TracksListeners_"]&&Object.keys(this[r+"TracksListeners_"]).forEach(function(t){i.el()[r+"Tracks"].removeEventListener(t,i[r+"TracksListeners_"][t])}),this["featuresNative"+t+"Tracks"]=!e,this[r+"TracksListeners_"]=null,this.proxyNativeTracksForType_(r)}},h.prototype.overrideNativeAudioTracks=function(t){this.overrideNative_("Audio",t)},h.prototype.overrideNativeVideoTracks=function(t){this.overrideNative_("Video",t)},h.prototype.proxyNativeTracksForType_=function(t){var r=this,e=Ui[t],n=this.el()[e.getterName],s=this[e.getterName]();if(this["featuresNative"+e.capitalName+"Tracks"]&&n&&n.addEventListener){var a={change:function(t){s.trigger({type:"change",target:s,currentTarget:s,srcElement:s})},addtrack:function(t){s.addTrack(t.track)},removetrack:function(t){s.removeTrack(t.track)}},i=function(){for(var t=[],e=0;e<s.length;e++){for(var i=!1,r=0;r<n.length;r++)if(n[r]===s[e]){i=!0;break}i||t.push(s[e])}for(;t.length;)s.removeTrack(t.shift())};this[e.getterName+"Listeners_"]=a,Object.keys(a).forEach(function(e){var i=a[e];n.addEventListener(e,i),r.on("dispose",function(t){return n.removeEventListener(e,i)})}),this.on("loadstart",i),this.on("dispose",function(t){return r.off("loadstart",i)})}},h.prototype.proxyNativeTracks_=function(){var e=this;Ui.names.forEach(function(t){e.proxyNativeTracksForType_(t)})},h.prototype.createEl=function(){var t=this.options_.tag;if(!t||!this.options_.playerElIngest&&!this.movingMediaElementInDOM){if(t){var e=t.cloneNode(!0);t.parentNode&&t.parentNode.insertBefore(e,t),h.disposeMediaElement(t),t=e}else{t=p.createElement("video");var i=Gt({},this.options_.tag&&q(this.options_.tag));ge&&!0===this.options_.nativeControlsForTouch||delete i.controls,V(t,C(i,{id:this.options_.techId,class:"vjs-tech"}))}t.playerId=this.options_.playerId}"undefined"!=typeof this.options_.preload&&z(t,"preload",this.options_.preload);for(var r=["loop","muted","playsinline","autoplay"],n=0;n<r.length;n++){var s=r[n],a=this.options_[s];"undefined"!=typeof a&&(a?z(t,s,s):G(t,s),t[s]=a)}return t},h.prototype.handleLateInit_=function(t){if(0!==t.networkState&&3!==t.networkState){if(0===t.readyState){var e=!1,i=function(){e=!0};this.on("loadstart",i);var r=function(){e||this.trigger("loadstart")};return this.on("loadedmetadata",r),void this.ready(function(){this.off("loadstart",i),this.off("loadedmetadata",r),e||this.trigger("loadstart")})}var n=["loadstart"];n.push("loadedmetadata"),2<=t.readyState&&n.push("loadeddata"),3<=t.readyState&&n.push("canplay"),4<=t.readyState&&n.push("canplaythrough"),this.ready(function(){n.forEach(function(t){this.trigger(t)},this)})}},h.prototype.setCurrentTime=function(t){try{this.el_.currentTime=t}catch(t){f(t,"Video is not ready. (Video.js)")}},h.prototype.duration=function(){var e=this;if(this.el_.duration===1/0&&ae&&he&&0===this.el_.currentTime){return this.on("timeupdate",function t(){0<e.el_.currentTime&&(e.el_.duration===1/0&&e.trigger("durationchange"),e.off("timeupdate",t))}),NaN}return this.el_.duration||NaN},h.prototype.width=function(){return this.el_.offsetWidth},h.prototype.height=function(){return this.el_.offsetHeight},h.prototype.proxyWebkitFullscreen_=function(){var t=this;if("webkitDisplayingFullscreen"in this.el_){var e=function(){this.trigger("fullscreenchange",{isFullscreen:!1})},i=function(){"webkitPresentationMode"in this.el_&&"picture-in-picture"!==this.el_.webkitPresentationMode&&(this.one("webkitendfullscreen",e),this.trigger("fullscreenchange",{isFullscreen:!0}))};this.on("webkitbeginfullscreen",i),this.on("dispose",function(){t.off("webkitbeginfullscreen",i),t.off("webkitendfullscreen",e)})}},h.prototype.supportsFullScreen=function(){if("function"==typeof this.el_.webkitEnterFullScreen){var t=g.navigator&&g.navigator.userAgent||"";if(/Android/.test(t)||!/Chrome|Mac OS X 10.5/.test(t))return!0}return!1},h.prototype.enterFullScreen=function(){var t=this.el_;t.paused&&t.networkState<=t.HAVE_METADATA?(this.el_.play(),this.setTimeout(function(){t.pause(),t.webkitEnterFullScreen()},0)):t.webkitEnterFullScreen()},h.prototype.exitFullScreen=function(){this.el_.webkitExitFullScreen()},h.prototype.src=function(t){if(void 0===t)return this.el_.src;this.setSrc(t)},h.prototype.reset=function(){h.resetMediaElement(this.el_)},h.prototype.currentSrc=function(){return this.currentSource_?this.currentSource_.src:this.el_.currentSrc},h.prototype.setControls=function(t){this.el_.controls=!!t},h.prototype.addTextTrack=function(t,e,i){return this.featuresNativeTextTracks?this.el_.addTextTrack(t,e,i):c.prototype.addTextTrack.call(this,t,e,i)},h.prototype.createRemoteTextTrack=function(t){if(!this.featuresNativeTextTracks)return c.prototype.createRemoteTextTrack.call(this,t);var e=p.createElement("track");return t.kind&&(e.kind=t.kind),t.label&&(e.label=t.label),(t.language||t.srclang)&&(e.srclang=t.language||t.srclang),t.default&&(e.default=t.default),t.id&&(e.id=t.id),t.src&&(e.src=t.src),e},h.prototype.addRemoteTextTrack=function(t,e){var i=c.prototype.addRemoteTextTrack.call(this,t,e);return this.featuresNativeTextTracks&&this.el().appendChild(i),i},h.prototype.removeRemoteTextTrack=function(t){if(c.prototype.removeRemoteTextTrack.call(this,t),this.featuresNativeTextTracks)for(var e=this.$$("track"),i=e.length;i--;)t!==e[i]&&t!==e[i].track||this.el().removeChild(e[i])},h.prototype.getVideoPlaybackQuality=function(){if("function"==typeof this.el().getVideoPlaybackQuality)return this.el().getVideoPlaybackQuality();var t={};return"undefined"!=typeof this.el().webkitDroppedFrameCount&&"undefined"!=typeof this.el().webkitDecodedFrameCount&&(t.droppedVideoFrames=this.el().webkitDroppedFrameCount,t.totalVideoFrames=this.el().webkitDecodedFrameCount),g.performance&&"function"==typeof g.performance.now?t.creationTime=g.performance.now():g.performance&&g.performance.timing&&"number"==typeof g.performance.timing.navigationStart&&(t.creationTime=g.Date.now()-g.performance.timing.navigationStart),t},h}(br);if(x()){us.TEST_VID=p.createElement("video");var ls=p.createElement("track");ls.kind="captions",ls.srclang="en",ls.label="English",us.TEST_VID.appendChild(ls)}us.isSupported=function(){try{us.TEST_VID.volume=.5}catch(t){return!1}return!(!us.TEST_VID||!us.TEST_VID.canPlayType)},us.canPlayType=function(t){return us.TEST_VID.canPlayType(t)},us.canPlaySource=function(t,e){return us.canPlayType(t.type)},us.canControlVolume=function(){try{var t=us.TEST_VID.volume;return us.TEST_VID.volume=t/2+.1,t!==us.TEST_VID.volume}catch(t){return!1}},us.canControlPlaybackRate=function(){if(ae&&he&&de<58)return!1;try{var t=us.TEST_VID.playbackRate;return us.TEST_VID.playbackRate=t/2+.1,t!==us.TEST_VID.playbackRate}catch(t){return!1}},us.canOverrideAttributes=function(){try{var t=function(){};Object.defineProperty(p.createElement("video"),"src",{get:t,set:t}),Object.defineProperty(p.createElement("audio"),"src",{get:t,set:t}),Object.defineProperty(p.createElement("video"),"innerHTML",{get:t,set:t}),Object.defineProperty(p.createElement("audio"),"innerHTML",{get:t,set:t})}catch(t){return!1}return!0},us.supportsNativeTextTracks=function(){return me},us.supportsNativeVideoTracks=function(){return!(!us.TEST_VID||!us.TEST_VID.videoTracks)},us.supportsNativeAudioTracks=function(){return!(!us.TEST_VID||!us.TEST_VID.audioTracks)},us.Events=["loadstart","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","canplay","canplaythrough","playing","waiting","seeking","seeked","ended","durationchange","timeupdate","progress","play","pause","ratechange","resize","volumechange"],us.prototype.featuresVolumeControl=us.canControlVolume(),us.prototype.featuresPlaybackRate=us.canControlPlaybackRate(),us.prototype.featuresSourceset=us.canOverrideAttributes(),us.prototype.movingMediaElementInDOM=!ne,us.prototype.featuresFullscreenResize=!0,us.prototype.featuresProgressEvents=!0,us.prototype.featuresTimeupdateEvents=!0,us.prototype.featuresNativeTextTracks=us.supportsNativeTextTracks(),us.prototype.featuresNativeVideoTracks=us.supportsNativeVideoTracks(),us.prototype.featuresNativeAudioTracks=us.supportsNativeAudioTracks();var cs=us.TEST_VID&&us.TEST_VID.constructor.prototype.canPlayType,hs=/^application\/(?:x-|vnd\.apple\.)mpegurl/i;us.patchCanPlayType=function(){4<=oe&&!le&&!he&&(us.TEST_VID.constructor.prototype.canPlayType=function(t){return t&&hs.test(t)?"maybe":cs.call(this,t)})},us.unpatchCanPlayType=function(){var t=us.TEST_VID.constructor.prototype.canPlayType;return us.TEST_VID.constructor.prototype.canPlayType=cs,t},us.patchCanPlayType(),us.disposeMediaElement=function(t){if(t){for(t.parentNode&&t.parentNode.removeChild(t);t.hasChildNodes();)t.removeChild(t.firstChild);t.removeAttribute("src"),"function"==typeof t.load&&function(){try{t.load()}catch(t){}}()}},us.resetMediaElement=function(t){if(t){for(var e=t.querySelectorAll("source"),i=e.length;i--;)t.removeChild(e[i]);t.removeAttribute("src"),"function"==typeof t.load&&function(){try{t.load()}catch(t){}}()}},["muted","defaultMuted","autoplay","controls","loop","playsinline"].forEach(function(t){us.prototype[t]=function(){return this.el_[t]||this.el_.hasAttribute(t)}}),["muted","defaultMuted","autoplay","loop","playsinline"].forEach(function(e){us.prototype["set"+zt(e)]=function(t){(this.el_[e]=t)?this.el_.setAttribute(e,e):this.el_.removeAttribute(e)}}),["paused","currentTime","buffered","volume","poster","preload","error","seeking","seekable","ended","playbackRate","defaultPlaybackRate","played","networkState","readyState","videoWidth","videoHeight"].forEach(function(t){us.prototype[t]=function(){return this.el_[t]}}),["volume","src","poster","preload","playbackRate","defaultPlaybackRate"].forEach(function(e){us.prototype["set"+zt(e)]=function(t){this.el_[e]=t}}),["pause","load","play"].forEach(function(t){us.prototype[t]=function(){return this.el_[t]()}}),br.withSourceHandlers(us),us.nativeSourceHandler={},us.nativeSourceHandler.canPlayType=function(t){try{return us.TEST_VID.canPlayType(t)}catch(t){return""}},us.nativeSourceHandler.canHandleSource=function(t,e){if(t.type)return us.nativeSourceHandler.canPlayType(t.type);if(t.src){var i=ti(t.src);return us.nativeSourceHandler.canPlayType("video/"+i)}return""},us.nativeSourceHandler.handleSource=function(t,e,i){e.setSrc(t.src)},us.nativeSourceHandler.dispose=function(){},us.registerSourceHandler(us.nativeSourceHandler),br.registerTech("Html5",us);var ds=h(["\n Using the tech directly can be dangerous. I hope you know what you're doing.\n See https://github.com/videojs/video.js/issues/2617 for more info.\n "],["\n Using the tech directly can be dangerous. I hope you know what you're doing.\n See https://github.com/videojs/video.js/issues/2617 for more info.\n "]),ps=["progress","abort","suspend","emptied","stalled","loadedmetadata","loadeddata","timeupdate","resize","volumechange","texttrackchange"],fs={canplay:"CanPlay",canplaythrough:"CanPlayThrough",playing:"Playing",seeked:"Seeked"},ms=function(c){function h(t,e,i){if(y(this,h),t.id=t.id||e.id||"vjs_video_"+ut(),(e=C(h.getTagSettings(t),e)).initChildren=!1,e.createEl=!1,e.evented=!1,e.reportTouchActivity=!1,!e.language)if("function"==typeof t.closest){var r=t.closest("[lang]");r&&r.getAttribute&&(e.language=r.getAttribute("lang"))}else for(var n=t;n&&1===n.nodeType;){if(q(n).hasOwnProperty("lang")){e.language=n.getAttribute("lang");break}n=n.parentNode}var s=b(this,c.call(this,null,e,i));if(s.isPosterFromTech_=!1,s.queuedCallbacks_=[],s.isReady_=!1,s.hasStarted_=!1,s.userActive_=!1,!s.options_||!s.options_.techOrder||!s.options_.techOrder.length)throw new Error("No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?");if(s.tag=t,s.tagAttributes=t&&q(t),s.language(s.options_.language),e.languages){var a={};Object.getOwnPropertyNames(e.languages).forEach(function(t){a[t.toLowerCase()]=e.languages[t]}),s.languages_=a}else s.languages_=h.prototype.options_.languages;s.cache_={},s.poster_=e.poster||"",s.controls_=!!e.controls,s.cache_.lastVolume=1,t.controls=!1,t.removeAttribute("controls"),s.scrubbing_=!1,s.el_=s.createEl(),s.cache_.lastPlaybackRate=s.defaultPlaybackRate(),Vt(s,{eventBusKey:"el_"});var o=Gt(s.options_);if(e.plugins){var u=e.plugins;Object.keys(u).forEach(function(t){if("function"!=typeof this[t])throw new Error('plugin "'+t+'" does not exist');this[t](u[t])},s)}s.options_.playerOptions=o,s.middleware_=[],s.initChildren(),s.isAudio("audio"===t.nodeName.toLowerCase()),s.controls()?s.addClass("vjs-controls-enabled"):s.addClass("vjs-controls-disabled"),s.el_.setAttribute("role","region"),s.isAudio()?s.el_.setAttribute("aria-label",s.localize("Audio Player")):s.el_.setAttribute("aria-label",s.localize("Video Player")),s.isAudio()&&s.addClass("vjs-audio"),s.flexNotSupported_()&&s.addClass("vjs-no-flex"),ne||s.addClass("vjs-workinghover"),h.players[s.id_]=s;var l=d.split(".")[0];return s.addClass("vjs-v"+l),s.userActive(!0),s.reportUserActivity(),s.one("play",s.listenForUserActivity_),s.on("fullscreenchange",s.handleFullscreenChange_),s.on("stageclick",s.handleStageClick_),s.changingSrc_=!1,s.playWaitingForReady_=!1,s.playOnLoadstart_=null,s}return _(h,c),h.prototype.dispose=function(){this.trigger("dispose"),this.off("dispose"),this.styleEl_&&this.styleEl_.parentNode&&(this.styleEl_.parentNode.removeChild(this.styleEl_),this.styleEl_=null),h.players[this.id_]=null,this.tag&&this.tag.player&&(this.tag.player=null),this.el_&&this.el_.player&&(this.el_.player=null),this.tech_&&(this.tech_.dispose(),this.isPosterFromTech_=!1,this.poster_=""),this.playerElIngest_&&(this.playerElIngest_=null),this.tag&&(this.tag=null),Sr[this.id()]=null,c.prototype.dispose.call(this)},h.prototype.createEl=function(){var e=this.tag,i=void 0,t=this.playerElIngest_=e.parentNode&&e.parentNode.hasAttribute&&e.parentNode.hasAttribute("data-vjs-player"),r="video-js"===this.tag.tagName.toLowerCase();t?i=this.el_=e.parentNode:r||(i=this.el_=c.prototype.createEl.call(this,"div"));var n=q(e);if(r){for(i=this.el_=e,e=this.tag=p.createElement("video");i.children.length;)e.appendChild(i.firstChild);B(i,"video-js")||j(i,"video-js"),i.appendChild(e),t=this.playerElIngest_=i,Object.keys(i).forEach(function(t){e[t]=i[t]})}if(e.setAttribute("tabindex","-1"),e.removeAttribute("width"),e.removeAttribute("height"),Object.getOwnPropertyNames(n).forEach(function(t){i.setAttribute(t,n[t]),r&&e.setAttribute(t,n[t])}),e.playerId=e.id,e.id+="_html5_api",e.className="vjs-tech",e.player=i.player=this,this.addClass("vjs-paused"),!0!==g.VIDEOJS_NO_DYNAMIC_STYLE){this.styleEl_=Lt("vjs-styles-dimensions");var s=nt(".vjs-styles-defaults"),a=nt("head");a.insertBefore(this.styleEl_,s?s.nextSibling:a.firstChild)}this.width(this.options_.width),this.height(this.options_.height),this.fluid(this.options_.fluid),this.aspectRatio(this.options_.aspectRatio);for(var o=e.getElementsByTagName("a"),u=0;u<o.length;u++){var l=o.item(u);j(l,"vjs-hidden"),l.setAttribute("hidden","hidden")}return e.initNetworkState_=e.networkState,e.parentNode&&!t&&e.parentNode.insertBefore(i,e),N(e,i),this.children_.unshift(e),this.el_.setAttribute("lang",this.language_),this.el_=i},h.prototype.width=function(t){return this.dimension("width",t)},h.prototype.height=function(t){return this.dimension("height",t)},h.prototype.dimension=function(t,e){var i=t+"_";if(void 0===e)return this[i]||0;if(""===e)return this[i]=void 0,void this.updateStyleEl_();var r=parseFloat(e);isNaN(r)?f.error('Improper value "'+e+'" supplied for for '+t):(this[i]=r,this.updateStyleEl_())},h.prototype.fluid=function(t){if(void 0===t)return!!this.fluid_;this.fluid_=!!t,t?this.addClass("vjs-fluid"):this.removeClass("vjs-fluid"),this.updateStyleEl_()},h.prototype.aspectRatio=function(t){if(void 0===t)return this.aspectRatio_;if(!/^\d+\:\d+$/.test(t))throw new Error("Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.");this.aspectRatio_=t,this.fluid(!0),this.updateStyleEl_()},h.prototype.updateStyleEl_=function(){if(!0!==g.VIDEOJS_NO_DYNAMIC_STYLE){var t=void 0,e=void 0,i=void 0,r=(void 0!==this.aspectRatio_&&"auto"!==this.aspectRatio_?this.aspectRatio_:0<this.videoWidth()?this.videoWidth()+":"+this.videoHeight():"16:9").split(":"),n=r[1]/r[0];t=void 0!==this.width_?this.width_:void 0!==this.height_?this.height_/n:this.videoWidth()||300,e=void 0!==this.height_?this.height_:t*n,i=/^[^a-zA-Z]/.test(this.id())?"dimensions-"+this.id():this.id()+"-dimensions",this.addClass(i),Pt(this.styleEl_,"\n ."+i+" {\n width: "+t+"px;\n height: "+e+"px;\n }\n\n ."+i+".vjs-fluid {\n padding-top: "+100*n+"%;\n }\n ")}else{var s="number"==typeof this.width_?this.width_:this.options_.width,a="number"==typeof this.height_?this.height_:this.options_.height,o=this.tech_&&this.tech_.el();o&&(0<=s&&(o.width=s),0<=a&&(o.height=a))}},h.prototype.loadTech_=function(t,e){var i=this;this.tech_&&this.unloadTech_();var r=zt(t),n=t.charAt(0).toLowerCase()+t.slice(1);"Html5"!==r&&this.tag&&(br.getTech("Html5").disposeMediaElement(this.tag),this.tag.player=null,this.tag=null),this.techName_=r,this.isReady_=!1;var s={source:e,nativeControlsForTouch:this.options_.nativeControlsForTouch,playerId:this.id(),techId:this.id()+"_"+r+"_api",autoplay:this.options_.autoplay,playsinline:this.options_.playsinline,preload:this.options_.preload,loop:this.options_.loop,muted:this.options_.muted,poster:this.poster(),language:this.language(),playerElIngest:this.playerElIngest_||!1,"vtt.js":this.options_["vtt.js"],canOverridePoster:!!this.options_.techCanOverridePoster,enableSourceset:this.options_.enableSourceset};Bi.names.forEach(function(t){var e=Bi[t];s[e.getterName]=i[e.privateName]}),C(s,this.options_[r]),C(s,this.options_[n]),C(s,this.options_[t.toLowerCase()]),this.tag&&(s.tag=this.tag),e&&e.src===this.cache_.src&&0<this.cache_.currentTime&&(s.startTime=this.cache_.currentTime);var a=br.getTech(t);if(!a)throw new Error("No Tech named '"+r+"' exists! '"+r+"' should be registered using videojs.registerTech()'");this.tech_=new a(s),this.tech_.ready(Ot(this,this.handleTechReady_),!0),Me(this.textTracksJson_||[],this.tech_),ps.forEach(function(t){i.on(i.tech_,t,i["handleTech"+zt(t)+"_"])}),Object.keys(fs).forEach(function(e){i.on(i.tech_,e,function(t){0===i.tech_.playbackRate()&&i.tech_.seeking()?i.queuedCallbacks_.push({callback:i["handleTech"+fs[e]+"_"].bind(i),event:t}):i["handleTech"+fs[e]+"_"](t)})}),this.on(this.tech_,"loadstart",this.handleTechLoadStart_),this.on(this.tech_,"sourceset",this.handleTechSourceset_),this.on(this.tech_,"waiting",this.handleTechWaiting_),this.on(this.tech_,"ended",this.handleTechEnded_),this.on(this.tech_,"seeking",this.handleTechSeeking_),this.on(this.tech_,"play",this.handleTechPlay_),this.on(this.tech_,"firstplay",this.handleTechFirstPlay_),this.on(this.tech_,"pause",this.handleTechPause_),this.on(this.tech_,"durationchange",this.handleTechDurationChange_),this.on(this.tech_,"fullscreenchange",this.handleTechFullscreenChange_),this.on(this.tech_,"error",this.handleTechError_),this.on(this.tech_,"loadedmetadata",this.updateStyleEl_),this.on(this.tech_,"posterchange",this.handleTechPosterChange_),this.on(this.tech_,"textdata",this.handleTechTextData_),this.on(this.tech_,"ratechange",this.handleTechRateChange_),this.usingNativeControls(this.techGet_("controls")),this.controls()&&!this.usingNativeControls()&&this.addTechControlsListeners_(),this.tech_.el().parentNode===this.el()||"Html5"===r&&this.tag||N(this.tech_.el(),this.el()),this.tag&&(this.tag.player=null,this.tag=null)},h.prototype.unloadTech_=function(){var i=this;Bi.names.forEach(function(t){var e=Bi[t];i[e.privateName]=i[e.getterName]()}),this.textTracksJson_=Re(this.tech_),this.isReady_=!1,this.tech_.dispose(),this.tech_=!1,this.isPosterFromTech_&&(this.poster_="",this.trigger("posterchange")),this.isPosterFromTech_=!1},h.prototype.tech=function(t){return void 0===t&&f.warn(m(ds)),this.tech_},h.prototype.addTechControlsListeners_=function(){this.removeTechControlsListeners_(),this.on(this.tech_,"mousedown",this.handleTechClick_),this.on(this.tech_,"touchstart",this.handleTechTouchStart_),this.on(this.tech_,"touchmove",this.handleTechTouchMove_),this.on(this.tech_,"touchend",this.handleTechTouchEnd_),this.on(this.tech_,"tap",this.handleTechTap_)},h.prototype.removeTechControlsListeners_=function(){this.off(this.tech_,"tap",this.handleTechTap_),this.off(this.tech_,"touchstart",this.handleTechTouchStart_),this.off(this.tech_,"touchmove",this.handleTechTouchMove_),this.off(this.tech_,"touchend",this.handleTechTouchEnd_),this.off(this.tech_,"mousedown",this.handleTechClick_)},h.prototype.handleTechReady_=function(){if(this.triggerReady(),this.cache_.volume&&this.techCall_("setVolume",this.cache_.volume),this.handleTechPosterChange_(),this.handleTechDurationChange_(),(this.src()||this.currentSrc())&&this.tag&&this.options_.autoplay&&this.paused())try{delete this.tag.poster}catch(t){f("deleting tag.poster throws in some browsers",t)}},h.prototype.handleTechLoadStart_=function(){this.removeClass("vjs-ended"),this.removeClass("vjs-seeking"),this.error(null),this.paused()?(this.hasStarted(!1),this.trigger("loadstart")):(this.trigger("loadstart"),this.trigger("firstplay"))},h.prototype.updateSourceCaches_=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"",e=t,i="";"string"!=typeof e&&(e=t.src,i=t.type),this.cache_.source=this.cache_.source||{},this.cache_.sources=this.cache_.sources||[],e&&!i&&(i=function(t,e){if(!e)return"";if(t.cache_.source.src===e&&t.cache_.source.type)return t.cache_.source.type;var i=t.cache_.sources.filter(function(t){return t.src===e});if(i.length)return i[0].type;for(var r=t.$$("source"),n=0;n<r.length;n++){var s=r[n];if(s.type&&s.src&&s.src===e)return s.type}return xr(e)}(this,e)),this.cache_.source={src:e,type:i};for(var r=this.cache_.sources.filter(function(t){return t.src&&t.src===e}),n=[],s=this.$$("source"),a=[],o=0;o<s.length;o++){var u=q(s[o]);n.push(u),u.src&&u.src===e&&a.push(u.src)}a.length&&!r.length?this.cache_.sources=n:r.length||(this.cache_.sources=[this.cache_.source]),this.cache_.src=e},h.prototype.handleTechSourceset_=function(t){var i=this;if(!this.changingSrc_&&(this.updateSourceCaches_(t.src),!t.src)){this.tech_.one(["sourceset","loadstart"],function t(e){"sourceset"!==e.type&&i.updateSourceCaches_(i.techGet_("currentSrc")),i.tech_.off(["sourceset","loadstart"],t)})}this.trigger({src:t.src,type:"sourceset"})},h.prototype.hasStarted=function(t){if(void 0===t)return this.hasStarted_;t!==this.hasStarted_&&(this.hasStarted_=t,this.hasStarted_?(this.addClass("vjs-has-started"),this.trigger("firstplay")):this.removeClass("vjs-has-started"))},h.prototype.handleTechPlay_=function(){this.removeClass("vjs-ended"),this.removeClass("vjs-paused"),this.addClass("vjs-playing"),this.hasStarted(!0),this.trigger("play")},h.prototype.handleTechRateChange_=function(){0<this.tech_.playbackRate()&&0===this.cache_.lastPlaybackRate&&(this.queuedCallbacks_.forEach(function(t){return t.callback(t.event)}),this.queuedCallbacks_=[]),this.cache_.lastPlaybackRate=this.tech_.playbackRate(),this.trigger("ratechange")},h.prototype.handleTechWaiting_=function(){var t=this;this.addClass("vjs-waiting"),this.trigger("waiting"),this.one("timeupdate",function(){return t.removeClass("vjs-waiting")})},h.prototype.handleTechCanPlay_=function(){this.removeClass("vjs-waiting"),this.trigger("canplay")},h.prototype.handleTechCanPlayThrough_=function(){this.removeClass("vjs-waiting"),this.trigger("canplaythrough")},h.prototype.handleTechPlaying_=function(){this.removeClass("vjs-waiting"),this.trigger("playing")},h.prototype.handleTechSeeking_=function(){this.addClass("vjs-seeking"),this.trigger("seeking")},h.prototype.handleTechSeeked_=function(){this.removeClass("vjs-seeking"),this.trigger("seeked")},h.prototype.handleTechFirstPlay_=function(){this.options_.starttime&&(f.warn("Passing the `starttime` option to the player will be deprecated in 6.0"),this.currentTime(this.options_.starttime)),this.addClass("vjs-has-started"),this.trigger("firstplay")},h.prototype.handleTechPause_=function(){this.removeClass("vjs-playing"),this.addClass("vjs-paused"),this.trigger("pause")},h.prototype.handleTechEnded_=function(){this.addClass("vjs-ended"),this.options_.loop?(this.currentTime(0),this.play()):this.paused()||this.pause(),this.trigger("ended")},h.prototype.handleTechDurationChange_=function(){this.duration(this.techGet_("duration"))},h.prototype.handleTechClick_=function(t){rt(t)&&this.controls_&&(this.paused()?this.play():this.pause())},h.prototype.handleTechTap_=function(){this.userActive(!this.userActive())},h.prototype.handleTechTouchStart_=function(){this.userWasActive=this.userActive()},h.prototype.handleTechTouchMove_=function(){this.userWasActive&&this.reportUserActivity()},h.prototype.handleTechTouchEnd_=function(t){t.preventDefault()},h.prototype.handleFullscreenChange_=function(){this.isFullscreen()?this.addClass("vjs-fullscreen"):this.removeClass("vjs-fullscreen")},h.prototype.handleStageClick_=function(){this.reportUserActivity()},h.prototype.handleTechFullscreenChange_=function(t,e){e&&this.isFullscreen(e.isFullscreen),this.trigger("fullscreenchange")},h.prototype.handleTechError_=function(){var t=this.tech_.error();this.error(t)},h.prototype.handleTechTextData_=function(){var t=null;1<arguments.length&&(t=arguments[1]),this.trigger("textdata",t)},h.prototype.getCache=function(){return this.cache_},h.prototype.techCall_=function(n,s){this.ready(function(){if(n in Ar)return t=this.middleware_,e=this.tech_,r=s,e[i=n](t.reduce(Pr(i),r));if(n in Lr)return Er(this.middleware_,this.tech_,n,s);var t,e,i,r;try{this.tech_&&this.tech_[n](s)}catch(t){throw f(t),t}},!0)},h.prototype.techGet_=function(e){if(this.tech_&&this.tech_.isReady_){if(e in wr)return t=this.middleware_,i=this.tech_,r=e,t.reduceRight(Pr(r),i[r]());if(e in Lr)return Er(this.middleware_,this.tech_,e);var t,i,r;try{return this.tech_[e]()}catch(t){if(void 0===this.tech_[e])throw f("Video.js: "+e+" method not defined for "+this.techName_+" playback technology.",t),t;if("TypeError"===t.name)throw f("Video.js: "+e+" unavailable on "+this.techName_+" playback technology element.",t),this.tech_.isReady_=!1,t;throw f(t),t}}},h.prototype.play=function(){var t=this;if(this.playOnLoadstart_&&this.off("loadstart",this.playOnLoadstart_),this.isReady_){if(!this.changingSrc_&&(this.src()||this.currentSrc()))return this.techGet_("play");this.playOnLoadstart_=function(){t.playOnLoadstart_=null,Ie(t.play())},this.one("loadstart",this.playOnLoadstart_)}else{if(this.playWaitingForReady_)return;this.playWaitingForReady_=!0,this.ready(function(){t.playWaitingForReady_=!1,Ie(t.play())})}},h.prototype.pause=function(){this.techCall_("pause")},h.prototype.paused=function(){return!1!==this.techGet_("paused")},h.prototype.played=function(){return this.techGet_("played")||be(0,0)},h.prototype.scrubbing=function(t){if("undefined"==typeof t)return this.scrubbing_;this.scrubbing_=!!t,t?this.addClass("vjs-scrubbing"):this.removeClass("vjs-scrubbing")},h.prototype.currentTime=function(t){return"undefined"!=typeof t?(t<0&&(t=0),void this.techCall_("setCurrentTime",t)):(this.cache_.currentTime=this.techGet_("currentTime")||0,this.cache_.currentTime)},h.prototype.duration=function(t){if(void 0===t)return void 0!==this.cache_.duration?this.cache_.duration:NaN;(t=parseFloat(t))<0&&(t=1/0),t!==this.cache_.duration&&((this.cache_.duration=t)===1/0?this.addClass("vjs-live"):this.removeClass("vjs-live"),this.trigger("durationchange"))},h.prototype.remainingTime=function(){return this.duration()-this.currentTime()},h.prototype.remainingTimeDisplay=function(){return Math.floor(this.duration())-Math.floor(this.currentTime())},h.prototype.buffered=function(){var t=this.techGet_("buffered");return t&&t.length||(t=be(0,0)),t},h.prototype.bufferedPercent=function(){return Te(this.buffered(),this.duration())},h.prototype.bufferedEnd=function(){var t=this.buffered(),e=this.duration(),i=t.end(t.length-1);return e<i&&(i=e),i},h.prototype.volume=function(t){var e=void 0;return void 0!==t?(e=Math.max(0,Math.min(1,parseFloat(t))),this.cache_.volume=e,this.techCall_("setVolume",e),void(0<e&&this.lastVolume_(e))):(e=parseFloat(this.techGet_("volume")),isNaN(e)?1:e)},h.prototype.muted=function(t){if(void 0===t)return this.techGet_("muted")||!1;this.techCall_("setMuted",t)},h.prototype.defaultMuted=function(t){return void 0!==t?this.techCall_("setDefaultMuted",t):this.techGet_("defaultMuted")||!1},h.prototype.lastVolume_=function(t){if(void 0===t||0===t)return this.cache_.lastVolume;this.cache_.lastVolume=t},h.prototype.supportsFullScreen=function(){return this.techGet_("supportsFullScreen")||!1},h.prototype.isFullscreen=function(t){if(void 0===t)return!!this.isFullscreen_;this.isFullscreen_=!!t},h.prototype.requestFullscreen=function(){var i=Se;this.isFullscreen(!0),i.requestFullscreen?(_t(p,i.fullscreenchange,Ot(this,function t(e){this.isFullscreen(p[i.fullscreenElement]),!1===this.isFullscreen()&&bt(p,i.fullscreenchange,t),this.trigger("fullscreenchange")})),this.el_[i.requestFullscreen]()):this.tech_.supportsFullScreen()?this.techCall_("enterFullScreen"):(this.enterFullWindow(),this.trigger("fullscreenchange"))},h.prototype.exitFullscreen=function(){var t=Se;this.isFullscreen(!1),t.requestFullscreen?p[t.exitFullscreen]():this.tech_.supportsFullScreen()?this.techCall_("exitFullScreen"):(this.exitFullWindow(),this.trigger("fullscreenchange"))},h.prototype.enterFullWindow=function(){this.isFullWindow=!0,this.docOrigOverflow=p.documentElement.style.overflow,_t(p,"keydown",Ot(this,this.fullWindowOnEscKey)),p.documentElement.style.overflow="hidden",j(p.body,"vjs-full-window"),this.trigger("enterFullWindow")},h.prototype.fullWindowOnEscKey=function(t){27===t.keyCode&&(!0===this.isFullscreen()?this.exitFullscreen():this.exitFullWindow())},h.prototype.exitFullWindow=function(){this.isFullWindow=!1,bt(p,"keydown",this.fullWindowOnEscKey),p.documentElement.style.overflow=this.docOrigOverflow,F(p.body,"vjs-full-window"),this.trigger("exitFullWindow")},h.prototype.canPlayType=function(t){for(var e=void 0,i=0,r=this.options_.techOrder;i<r.length;i++){var n=r[i],s=br.getTech(n);if(s||(s=Xt.getComponent(n)),s){if(s.isSupported()&&(e=s.canPlayType(t)))return e}else f.error('The "'+n+'" tech is undefined. Skipped browser support check for that tech.')}return""},h.prototype.selectSource=function(t){var i,r=this,e=this.options_.techOrder.map(function(t){return[t,br.getTech(t)]}).filter(function(t){var e=t[0],i=t[1];return i?i.isSupported():(f.error('The "'+e+'" tech is undefined. Skipped browser support check for that tech.'),!1)}),n=function(t,i,r){var n=void 0;return t.some(function(e){return i.some(function(t){if(n=r(e,t))return!0})}),n},s=function(t,e){var i=t[0];if(t[1].canPlaySource(e,r.options_[i.toLowerCase()]))return{source:e,tech:i}};return(this.options_.sourceOrder?n(t,e,(i=s,function(t,e){return i(e,t)})):n(e,t,s))||!1},h.prototype.src=function(t){var n=this;if("undefined"==typeof t)return this.cache_.src||"";var s=function e(t){if(Array.isArray(t)){var i=[];t.forEach(function(t){t=e(t),Array.isArray(t)?i=i.concat(t):E(t)&&i.push(t)}),t=i}else t="string"==typeof t&&t.trim()?[Ir({src:t})]:E(t)&&"string"==typeof t.src&&t.src&&t.src.trim()?[Ir(t)]:[];return t}(t);s.length?(this.changingSrc_=!0,this.cache_.sources=s,this.updateSourceCaches_(s[0]),Cr(this,s[0],function(t,e){var i,r;if(n.middleware_=e,n.cache_.sources=s,n.updateSourceCaches_(t),n.src_(t))return 1<s.length?n.src(s.slice(1)):(n.changingSrc_=!1,n.setTimeout(function(){this.error({code:4,message:this.localize(this.options_.notSupportedMessage)})},0),void n.triggerReady());i=e,r=n.tech_,i.forEach(function(t){return t.setTech&&t.setTech(r)})})):this.setTimeout(function(){this.error({code:4,message:this.localize(this.options_.notSupportedMessage)})},0)},h.prototype.src_=function(t){var e,i,r=this,n=this.selectSource([t]);return!n||(e=n.tech,i=this.techName_,zt(e)!==zt(i)?(this.changingSrc_=!0,this.loadTech_(n.tech,n.source),this.tech_.ready(function(){r.changingSrc_=!1})):this.ready(function(){this.tech_.constructor.prototype.hasOwnProperty("setSource")?this.techCall_("setSource",t):this.techCall_("src",t.src),this.changingSrc_=!1},!0),!1)},h.prototype.load=function(){this.techCall_("load")},h.prototype.reset=function(){this.loadTech_(this.options_.techOrder[0],null),this.techCall_("reset")},h.prototype.currentSources=function(){var t=this.currentSource(),e=[];return 0!==Object.keys(t).length&&e.push(t),this.cache_.sources||e},h.prototype.currentSource=function(){return this.cache_.source||{}},h.prototype.currentSrc=function(){return this.currentSource()&&this.currentSource().src||""},h.prototype.currentType=function(){return this.currentSource()&&this.currentSource().type||""},h.prototype.preload=function(t){return void 0!==t?(this.techCall_("setPreload",t),void(this.options_.preload=t)):this.techGet_("preload")},h.prototype.autoplay=function(t){return void 0!==t?(this.techCall_("setAutoplay",t),void(this.options_.autoplay=t)):this.techGet_("autoplay",t)},h.prototype.playsinline=function(t){return void 0!==t?(this.techCall_("setPlaysinline",t),this.options_.playsinline=t,this):this.techGet_("playsinline")},h.prototype.loop=function(t){return void 0!==t?(this.techCall_("setLoop",t),void(this.options_.loop=t)):this.techGet_("loop")},h.prototype.poster=function(t){if(void 0===t)return this.poster_;t||(t=""),t!==this.poster_&&(this.poster_=t,this.techCall_("setPoster",t),this.isPosterFromTech_=!1,this.trigger("posterchange"))},h.prototype.handleTechPosterChange_=function(){if((!this.poster_||this.options_.techCanOverridePoster)&&this.tech_&&this.tech_.poster){var t=this.tech_.poster()||"";t!==this.poster_&&(this.poster_=t,this.isPosterFromTech_=!0,this.trigger("posterchange"))}},h.prototype.controls=function(t){if(void 0===t)return!!this.controls_;t=!!t,this.controls_!==t&&(this.controls_=t,this.usingNativeControls()&&this.techCall_("setControls",t),this.controls_?(this.removeClass("vjs-controls-disabled"),this.addClass("vjs-controls-enabled"),this.trigger("controlsenabled"),this.usingNativeControls()||this.addTechControlsListeners_()):(this.removeClass("vjs-controls-enabled"),this.addClass("vjs-controls-disabled"),this.trigger("controlsdisabled"),this.usingNativeControls()||this.removeTechControlsListeners_()))},h.prototype.usingNativeControls=function(t){if(void 0===t)return!!this.usingNativeControls_;t=!!t,this.usingNativeControls_!==t&&(this.usingNativeControls_=t,this.usingNativeControls_?(this.addClass("vjs-using-native-controls"),this.trigger("usingnativecontrols")):(this.removeClass("vjs-using-native-controls"),this.trigger("usingcustomcontrols")))},h.prototype.error=function(t){return void 0===t?this.error_||null:null===t?(this.error_=t,this.removeClass("vjs-error"),void(this.errorDisplay&&this.errorDisplay.close())):(this.error_=new Le(t),this.addClass("vjs-error"),f.error("(CODE:"+this.error_.code+" "+Le.errorTypes[this.error_.code]+")",this.error_.message,this.error_),void this.trigger("error"))},h.prototype.reportUserActivity=function(t){this.userActivity_=!0},h.prototype.userActive=function(t){if(void 0===t)return this.userActive_;if((t=!!t)!==this.userActive_){if(this.userActive_=t,this.userActive_)return this.userActivity_=!0,this.removeClass("vjs-user-inactive"),this.addClass("vjs-user-active"),void this.trigger("useractive");this.tech_&&this.tech_.one("mousemove",function(t){t.stopPropagation(),t.preventDefault()}),this.userActivity_=!1,this.removeClass("vjs-user-active"),this.addClass("vjs-user-inactive"),this.trigger("userinactive")}},h.prototype.listenForUserActivity_=function(){var e=void 0,i=void 0,r=void 0,n=Ot(this,this.reportUserActivity);this.on("mousedown",function(){n(),this.clearInterval(e),e=this.setInterval(n,250)}),this.on("mousemove",function(t){t.screenX===i&&t.screenY===r||(i=t.screenX,r=t.screenY,n())}),this.on("mouseup",function(t){n(),this.clearInterval(e)}),this.on("keydown",n),this.on("keyup",n);var s=void 0;this.setInterval(function(){if(this.userActivity_){this.userActivity_=!1,this.userActive(!0),this.clearTimeout(s);var t=this.options_.inactivityTimeout;t<=0||(s=this.setTimeout(function(){this.userActivity_||this.userActive(!1)},t))}},250)},h.prototype.playbackRate=function(t){if(void 0===t)return this.tech_&&this.tech_.featuresPlaybackRate?this.cache_.lastPlaybackRate||this.techGet_("playbackRate"):1;this.techCall_("setPlaybackRate",t)},h.prototype.defaultPlaybackRate=function(t){return void 0!==t?this.techCall_("setDefaultPlaybackRate",t):this.tech_&&this.tech_.featuresPlaybackRate?this.techGet_("defaultPlaybackRate"):1},h.prototype.isAudio=function(t){if(void 0===t)return!!this.isAudio_;this.isAudio_=!!t},h.prototype.addTextTrack=function(t,e,i){if(this.tech_)return this.tech_.addTextTrack(t,e,i)},h.prototype.addRemoteTextTrack=function(t,e){if(this.tech_)return this.tech_.addRemoteTextTrack(t,e)},h.prototype.removeRemoteTextTrack=function(){var t=(0<arguments.length&&void 0!==arguments[0]?arguments[0]:{}).track,e=void 0===t?arguments[0]:t;if(this.tech_)return this.tech_.removeRemoteTextTrack(e)},h.prototype.getVideoPlaybackQuality=function(){return this.techGet_("getVideoPlaybackQuality")},h.prototype.videoWidth=function(){return this.tech_&&this.tech_.videoWidth&&this.tech_.videoWidth()||0},h.prototype.videoHeight=function(){return this.tech_&&this.tech_.videoHeight&&this.tech_.videoHeight()||0},h.prototype.language=function(t){if(void 0===t)return this.language_;this.language_=String(t).toLowerCase()},h.prototype.languages=function(){return Gt(h.prototype.options_.languages,this.languages_)},h.prototype.toJSON=function(){var t=Gt(this.options_),e=t.tracks;t.tracks=[];for(var i=0;i<e.length;i++){var r=e[i];(r=Gt(r)).player=void 0,t.tracks[i]=r}return t},h.prototype.createModal=function(t,e){var i=this;(e=e||{}).content=t||"";var r=new Ne(this,e);return this.addChild(r),r.on("dispose",function(){i.removeChild(r)}),r.open(),r},h.getTagSettings=function(t){var e={sources:[],tracks:[]},i=q(t),r=i["data-setup"];if(B(t,"vjs-fluid")&&(i.fluid=!0),null!==r){var n=Oe(r||"{}"),s=n[0],a=n[1];s&&f.error(s),C(i,a)}if(C(e,i),t.hasChildNodes())for(var o=t.childNodes,u=0,l=o.length;u<l;u++){var c=o[u],h=c.nodeName.toLowerCase();"source"===h?e.sources.push(q(c)):"track"===h&&e.tracks.push(q(c))}return e},h.prototype.flexNotSupported_=function(){var t=p.createElement("i");return!("flexBasis"in t.style||"webkitFlexBasis"in t.style||"mozFlexBasis"in t.style||"msFlexBasis"in t.style||"msFlexOrder"in t.style)},h}(Xt);Bi.names.forEach(function(t){var e=Bi[t];ms.prototype[e.getterName]=function(){return this.tech_?this.tech_[e.getterName]():(this[e.privateName]=this[e.privateName]||new e.ListClass,this[e.privateName])}}),ms.players={};var gs=g.navigator;ms.prototype.options_={techOrder:br.defaultTechOrder_,html5:{},flash:{},inactivityTimeout:2e3,playbackRates:[],children:["mediaLoader","posterImage","textTrackDisplay","loadingSpinner","bigPlayButton","controlBar","errorDisplay","textTrackSettings","resizeManager"],language:gs&&(gs.languages&&gs.languages[0]||gs.userLanguage||gs.language)||"en",languages:{},notSupportedMessage:"No compatible source was found for this media."},["ended","seeking","seekable","networkState","readyState"].forEach(function(t){ms.prototype[t]=function(){return this.techGet_(t)}}),ps.forEach(function(t){ms.prototype["handleTech"+zt(t)+"_"]=function(){return this.trigger(t)}}),Xt.registerComponent("Player",ms);var ys="plugin",vs="activePlugins_",_s={},bs=function(t){return _s.hasOwnProperty(t)},Ts=function(t){return bs(t)?_s[t]:void 0},Ss=function(t,e){t[vs]=t[vs]||{},t[vs][e]=!0},ks=function(t,e,i){var r=(i?"before":"")+"pluginsetup";t.trigger(r,e),t.trigger(r+":"+e.name,e)},Cs=function(n,s){return s.prototype.name=n,function(){ks(this,{name:n,plugin:s,instance:null},!0);for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];var r=new(Function.prototype.bind.apply(s,[null].concat([this].concat(e))));return this[n]=function(){return r},ks(this,r.getEventHash()),r}},Es=function(){function s(t){if(y(this,s),this.constructor===s)throw new Error("Plugin must be sub-classed; not directly instantiated.");this.player=t,Vt(this),delete this.trigger,Wt(this,this.constructor.defaultState),Ss(t,this.name),this.dispose=Ot(this,this.dispose),t.on("dispose",this.dispose)}return s.prototype.version=function(){return this.constructor.VERSION},s.prototype.getEventHash=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};return t.name=this.name,t.plugin=this.constructor,t.instance=this,t},s.prototype.trigger=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return Tt(this.eventBusEl_,t,this.getEventHash(e))},s.prototype.handleStateChanged=function(t){},s.prototype.dispose=function(){var t=this.name,e=this.player;this.trigger("dispose"),this.off(),e.off("dispose",this.dispose),e[vs][t]=!1,this.player=this.state=null,e[t]=Cs(t,_s[t])},s.isBasic=function(t){var e="string"==typeof t?Ts(t):t;return"function"==typeof e&&!s.prototype.isPrototypeOf(e.prototype)},s.registerPlugin=function(t,e){if("string"!=typeof t)throw new Error('Illegal plugin name, "'+t+'", must be a string, was '+("undefined"==typeof t?"undefined":v(t))+".");if(bs(t))f.warn('A plugin named "'+t+'" already exists. You may want to avoid re-registering plugins!');else if(ms.prototype.hasOwnProperty(t))throw new Error('Illegal plugin name, "'+t+'", cannot share a name with an existing player method!');if("function"!=typeof e)throw new Error('Illegal plugin for "'+t+'", must be a function, was '+("undefined"==typeof e?"undefined":v(e))+".");var i,r,n;return _s[t]=e,t!==ys&&(s.isBasic(e)?ms.prototype[t]=(i=t,r=e,n=function(){ks(this,{name:i,plugin:r,instance:null},!0);var t=r.apply(this,arguments);return Ss(this,i),ks(this,{name:i,plugin:r,instance:t}),t},Object.keys(r).forEach(function(t){n[t]=r[t]}),n):ms.prototype[t]=Cs(t,e)),e},s.deregisterPlugin=function(t){if(t===ys)throw new Error("Cannot de-register base plugin.");bs(t)&&(delete _s[t],delete ms.prototype[t])},s.getPlugins=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:Object.keys(_s),i=void 0;return t.forEach(function(t){var e=Ts(t);e&&((i=i||{})[t]=e)}),i},s.getPluginVersion=function(t){var e=Ts(t);return e&&e.VERSION||""},s}();Es.getPlugin=Ts,Es.BASE_PLUGIN_NAME=ys,Es.registerPlugin(ys,Es),ms.prototype.usingPlugin=function(t){return!!this[vs]&&!0===this[vs][t]},ms.prototype.hasPlugin=function(t){return!!bs(t)};var ws=function(t){return 0===t.indexOf("#")?t.slice(1):t};function As(t,i,e){var r=As.getPlayer(t);if(r)return i&&f.warn('Player "'+t+'" is already initialised. Options will not be applied.'),e&&r.ready(e),r;var n="string"==typeof t?nt("#"+ws(t)):t;if(!I(n))throw new TypeError("The element or ID supplied is not valid. (videojs)");p.body.contains(n)||f.warn("The element supplied is not included in the DOM"),i=i||{},As.hooks("beforesetup").forEach(function(t){var e=t(n,Gt(i));E(e)&&!Array.isArray(e)?i=Gt(i,e):f.error("please return an object in beforesetup hooks")});var s=Xt.getComponent("Player");return r=new s(n,i,e),As.hooks("setup").forEach(function(t){return t(r)}),r}if(As.hooks_={},As.hooks=function(t,e){return As.hooks_[t]=As.hooks_[t]||[],e&&(As.hooks_[t]=As.hooks_[t].concat(e)),As.hooks_[t]},As.hook=function(t,e){As.hooks(t,e)},As.hookOnce=function(i,t){As.hooks(i,[].concat(t).map(function(e){return function t(){return As.removeHook(i,t),e.apply(void 0,arguments)}}))},As.removeHook=function(t,e){var i=As.hooks(t).indexOf(e);return!(i<=-1)&&(As.hooks_[t]=As.hooks_[t].slice(),As.hooks_[t].splice(i,1),!0)},!0!==g.VIDEOJS_NO_DYNAMIC_STYLE&&x()){var Ls=nt(".vjs-styles-defaults");if(!Ls){Ls=Lt("vjs-styles-defaults");var Ps=nt("head");Ps&&Ps.insertBefore(Ls,Ps.firstChild),Pt(Ls,"\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n ")}}At(1,As),As.VERSION=d,As.options=ms.prototype.options_,As.getPlayers=function(){return ms.players},As.getPlayer=function(t){var e=ms.players,i=void 0;if("string"==typeof t){var r=ws(t),n=e[r];if(n)return n;i=nt("#"+r)}else i=t;if(I(i)){var s=i,a=s.player,o=s.playerId;if(a||e[o])return a||e[o]}},As.getAllPlayers=function(){return Object.keys(ms.players).map(function(t){return ms.players[t]}).filter(Boolean)},As.players=ms.players,As.getComponent=Xt.getComponent,As.registerComponent=function(t,e){br.isTech(e)&&f.warn("The "+t+" tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)"),Xt.registerComponent.call(Xt,t,e)},As.getTech=br.getTech,As.registerTech=br.registerTech,As.use=function(t,e){Tr[t]=Tr[t]||[],Tr[t].push(e)},Object.defineProperty(As,"middleware",{value:{},writeable:!1,enumerable:!0}),Object.defineProperty(As.middleware,"TERMINATOR",{value:kr,writeable:!1,enumerable:!0}),As.browser=ye,As.TOUCH_ENABLED=ge,As.extend=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=function(){t.apply(this,arguments)},r={};for(var n in"object"===("undefined"==typeof e?"undefined":v(e))?(e.constructor!==Object.prototype.constructor&&(i=e.constructor),r=e):"function"==typeof e&&(i=e),function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof e?"undefined":v(e)));t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(t.super_=e)}(i,t),r)r.hasOwnProperty(n)&&(i.prototype[n]=r[n]);return i},As.mergeOptions=Gt,As.bind=Ot,As.registerPlugin=Es.registerPlugin,As.plugin=function(t,e){return f.warn("videojs.plugin() is deprecated; use videojs.registerPlugin() instead"),Es.registerPlugin(t,e)},As.getPlugins=Es.getPlugins,As.getPlugin=Es.getPlugin,As.getPluginVersion=Es.getPluginVersion,As.addLanguage=function(t,e){var i;return t=(""+t).toLowerCase(),As.options.languages=Gt(As.options.languages,((i={})[t]=e,i)),As.options.languages[t]},As.log=f,As.createTimeRange=As.createTimeRanges=be,As.formatTime=Yr,As.setFormatTime=function(t){Xr=t},As.resetFormatTime=function(){Xr=Gr},As.parseUrl=Je,As.isCrossOrigin=ei,As.EventTarget=Dt,As.on=_t,As.one=St,As.off=bt,As.trigger=Tt,As.xhr=Ci,As.TextTrack=Oi,As.AudioTrack=xi,As.VideoTrack=Ii,["isEl","isTextNode","createEl","hasClass","addClass","removeClass","toggleClass","setAttributes","getAttributes","emptyEl","appendContent","insertContent"].forEach(function(t){As[t]=function(){return f.warn("videojs."+t+"() is deprecated; use videojs.dom."+t+"() instead"),at[t].apply(null,arguments)}}),As.computedStyle=A,As.dom=at,As.url=ii;var Os=e(function(t,e){var i,c,r,n,h;i=/^((?:[a-zA-Z0-9+\-.]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/,c=/^([^\/;?#]*)(.*)$/,r=/(?:\/|^)\.(?=\/)/g,n=/(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g,h={buildAbsoluteURL:function(t,e,i){if(i=i||{},t=t.trim(),!(e=e.trim())){if(!i.alwaysNormalize)return t;var r=h.parseURL(t);if(!r)throw new Error("Error trying to parse base URL.");return r.path=h.normalizePath(r.path),h.buildURLFromParts(r)}var n=h.parseURL(e);if(!n)throw new Error("Error trying to parse relative URL.");if(n.scheme)return i.alwaysNormalize?(n.path=h.normalizePath(n.path),h.buildURLFromParts(n)):e;var s=h.parseURL(t);if(!s)throw new Error("Error trying to parse base URL.");if(!s.netLoc&&s.path&&"/"!==s.path[0]){var a=c.exec(s.path);s.netLoc=a[1],s.path=a[2]}s.netLoc&&!s.path&&(s.path="/");var o={scheme:s.scheme,netLoc:n.netLoc,path:null,params:n.params,query:n.query,fragment:n.fragment};if(!n.netLoc&&(o.netLoc=s.netLoc,"/"!==n.path[0]))if(n.path){var u=s.path,l=u.substring(0,u.lastIndexOf("/")+1)+n.path;o.path=h.normalizePath(l)}else o.path=s.path,n.params||(o.params=s.params,n.query||(o.query=s.query));return null===o.path&&(o.path=i.alwaysNormalize?h.normalizePath(n.path):n.path),h.buildURLFromParts(o)},parseURL:function(t){var e=i.exec(t);return e?{scheme:e[1]||"",netLoc:e[2]||"",path:e[3]||"",params:e[4]||"",query:e[5]||"",fragment:e[6]||""}:null},normalizePath:function(t){for(t=t.split("").reverse().join("").replace(r,"");t.length!==(t=t.replace(n,"")).length;);return t.split("").reverse().join("")},buildURLFromParts:function(t){return t.scheme+t.netLoc+t.path+t.params+t.query+t.fragment}},t.exports=h}),xs=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Is=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(t[r]=i[r])}return t},Ds=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof e?"undefined":v(e)));t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)},Rs=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==("undefined"==typeof e?"undefined":v(e))&&"function"!=typeof e?t:e},Ms=function(){function t(){xs(this,t),this.listeners={}}return t.prototype.on=function(t,e){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)},t.prototype.off=function(t,e){if(!this.listeners[t])return!1;var i=this.listeners[t].indexOf(e);return this.listeners[t].splice(i,1),-1<i},t.prototype.trigger=function(t){var e=this.listeners[t],i=void 0,r=void 0,n=void 0;if(e)if(2===arguments.length)for(r=e.length,i=0;i<r;++i)e[i].call(this,arguments[1]);else for(n=Array.prototype.slice.call(arguments,1),r=e.length,i=0;i<r;++i)e[i].apply(this,n)},t.prototype.dispose=function(){this.listeners={}},t.prototype.pipe=function(e){this.on("data",function(t){e.push(t)})},t}(),Us=function(e){function i(){xs(this,i);var t=Rs(this,e.call(this));return t.buffer="",t}return Ds(i,e),i.prototype.push=function(t){var e=void 0;for(this.buffer+=t,e=this.buffer.indexOf("\n");-1<e;e=this.buffer.indexOf("\n"))this.trigger("data",this.buffer.substring(0,e)),this.buffer=this.buffer.substring(e+1)},i}(Ms),Ns=function(t){for(var e=t.split(new RegExp('(?:^|,)((?:[^=]*)=(?:"[^"]*"|[^,]*))')),i={},r=e.length,n=void 0;r--;)""!==e[r]&&((n=/([^=]*)=(.*)/.exec(e[r]).slice(1))[0]=n[0].replace(/^\s+|\s+$/g,""),n[1]=n[1].replace(/^\s+|\s+$/g,""),n[1]=n[1].replace(/^['"](.*)['"]$/g,"$1"),i[n[0]]=n[1]);return i},Bs=function(e){function i(){xs(this,i);var t=Rs(this,e.call(this));return t.customParsers=[],t}return Ds(i,e),i.prototype.push=function(t){var e=void 0,i=void 0;if(0!==(t=t.replace(/^[\u0000\s]+|[\u0000\s]+$/g,"")).length)if("#"===t[0]){for(var r=0;r<this.customParsers.length;r++)if(this.customParsers[r].call(this,t))return;if(0===t.indexOf("#EXT"))if(t=t.replace("\r",""),e=/^#EXTM3U/.exec(t))this.trigger("data",{type:"tag",tagType:"m3u"});else{if(e=/^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(t))return i={type:"tag",tagType:"inf"},e[1]&&(i.duration=parseFloat(e[1])),e[2]&&(i.title=e[2]),void this.trigger("data",i);if(e=/^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(t))return i={type:"tag",tagType:"targetduration"},e[1]&&(i.duration=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(t))return i={type:"tag",tagType:"totalduration"},e[1]&&(i.duration=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#EXT-X-VERSION:?([0-9.]*)?/.exec(t))return i={type:"tag",tagType:"version"},e[1]&&(i.version=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(t))return i={type:"tag",tagType:"media-sequence"},e[1]&&(i.number=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(t))return i={type:"tag",tagType:"discontinuity-sequence"},e[1]&&(i.number=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(t))return i={type:"tag",tagType:"playlist-type"},e[1]&&(i.playlistType=e[1]),void this.trigger("data",i);if(e=/^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(t))return i={type:"tag",tagType:"byterange"},e[1]&&(i.length=parseInt(e[1],10)),e[2]&&(i.offset=parseInt(e[2],10)),void this.trigger("data",i);if(e=/^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(t))return i={type:"tag",tagType:"allow-cache"},e[1]&&(i.allowed=!/NO/.test(e[1])),void this.trigger("data",i);if(e=/^#EXT-X-MAP:?(.*)$/.exec(t)){if(i={type:"tag",tagType:"map"},e[1]){var n=Ns(e[1]);if(n.URI&&(i.uri=n.URI),n.BYTERANGE){var s=n.BYTERANGE.split("@"),a=s[0],o=s[1];i.byterange={},a&&(i.byterange.length=parseInt(a,10)),o&&(i.byterange.offset=parseInt(o,10))}}this.trigger("data",i)}else if(e=/^#EXT-X-STREAM-INF:?(.*)$/.exec(t)){if(i={type:"tag",tagType:"stream-inf"},e[1]){if(i.attributes=Ns(e[1]),i.attributes.RESOLUTION){var u=i.attributes.RESOLUTION.split("x"),l={};u[0]&&(l.width=parseInt(u[0],10)),u[1]&&(l.height=parseInt(u[1],10)),i.attributes.RESOLUTION=l}i.attributes.BANDWIDTH&&(i.attributes.BANDWIDTH=parseInt(i.attributes.BANDWIDTH,10)),i.attributes["PROGRAM-ID"]&&(i.attributes["PROGRAM-ID"]=parseInt(i.attributes["PROGRAM-ID"],10))}this.trigger("data",i)}else{if(e=/^#EXT-X-MEDIA:?(.*)$/.exec(t))return i={type:"tag",tagType:"media"},e[1]&&(i.attributes=Ns(e[1])),void this.trigger("data",i);if(e=/^#EXT-X-ENDLIST/.exec(t))this.trigger("data",{type:"tag",tagType:"endlist"});else if(e=/^#EXT-X-DISCONTINUITY/.exec(t))this.trigger("data",{type:"tag",tagType:"discontinuity"});else{if(e=/^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(t))return i={type:"tag",tagType:"program-date-time"},e[1]&&(i.dateTimeString=e[1],i.dateTimeObject=new Date(e[1])),void this.trigger("data",i);if(e=/^#EXT-X-KEY:?(.*)$/.exec(t))return i={type:"tag",tagType:"key"},e[1]&&(i.attributes=Ns(e[1]),i.attributes.IV&&("0x"===i.attributes.IV.substring(0,2).toLowerCase()&&(i.attributes.IV=i.attributes.IV.substring(2)),i.attributes.IV=i.attributes.IV.match(/.{8}/g),i.attributes.IV[0]=parseInt(i.attributes.IV[0],16),i.attributes.IV[1]=parseInt(i.attributes.IV[1],16),i.attributes.IV[2]=parseInt(i.attributes.IV[2],16),i.attributes.IV[3]=parseInt(i.attributes.IV[3],16),i.attributes.IV=new Uint32Array(i.attributes.IV))),void this.trigger("data",i);if(e=/^#EXT-X-START:?(.*)$/.exec(t))return i={type:"tag",tagType:"start"},e[1]&&(i.attributes=Ns(e[1]),i.attributes["TIME-OFFSET"]=parseFloat(i.attributes["TIME-OFFSET"]),i.attributes.PRECISE=/YES/.test(i.attributes.PRECISE)),void this.trigger("data",i);if(e=/^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(t))return i={type:"tag",tagType:"cue-out-cont"},e[1]?i.data=e[1]:i.data="",void this.trigger("data",i);if(e=/^#EXT-X-CUE-OUT:?(.*)?$/.exec(t))return i={type:"tag",tagType:"cue-out"},e[1]?i.data=e[1]:i.data="",void this.trigger("data",i);if(e=/^#EXT-X-CUE-IN:?(.*)?$/.exec(t))return i={type:"tag",tagType:"cue-in"},e[1]?i.data=e[1]:i.data="",void this.trigger("data",i);this.trigger("data",{type:"tag",data:t.slice(4)})}}}else this.trigger("data",{type:"comment",text:t.slice(1)})}else this.trigger("data",{type:"uri",uri:t})},i.prototype.addParser=function(t){var e=this,i=t.expression,r=t.customType,n=t.dataParser,s=t.segment;"function"!=typeof n&&(n=function(t){return t}),this.customParsers.push(function(t){if(i.exec(t))return e.trigger("data",{type:"custom",data:n(t),customType:r,segment:s}),!0})},i}(Ms),js=function(e){function i(){xs(this,i);var t=Rs(this,e.call(this));t.lineStream=new Us,t.parseStream=new Bs,t.lineStream.pipe(t.parseStream);var n=t,s=[],a={},o=void 0,u=void 0,l={AUDIO:{},VIDEO:{},"CLOSED-CAPTIONS":{},SUBTITLES:{}},c=0;return t.manifest={allowCache:!0,discontinuityStarts:[],segments:[]},t.parseStream.on("data",function(e){var i=void 0,r=void 0;({tag:function(){({"allow-cache":function(){this.manifest.allowCache=e.allowed,"allowed"in e||(this.trigger("info",{message:"defaulting allowCache to YES"}),this.manifest.allowCache=!0)},byterange:function(){var t={};"length"in e&&((a.byterange=t).length=e.length,"offset"in e||(this.trigger("info",{message:"defaulting offset to zero"}),e.offset=0)),"offset"in e&&((a.byterange=t).offset=e.offset)},endlist:function(){this.manifest.endList=!0},inf:function(){"mediaSequence"in this.manifest||(this.manifest.mediaSequence=0,this.trigger("info",{message:"defaulting media sequence to zero"})),"discontinuitySequence"in this.manifest||(this.manifest.discontinuitySequence=0,this.trigger("info",{message:"defaulting discontinuity sequence to zero"})),0<e.duration&&(a.duration=e.duration),0===e.duration&&(a.duration=.01,this.trigger("info",{message:"updating zero segment duration to a small value"})),this.manifest.segments=s},key:function(){e.attributes?"NONE"!==e.attributes.METHOD?e.attributes.URI?(e.attributes.METHOD||this.trigger("warn",{message:"defaulting key method to AES-128"}),u={method:e.attributes.METHOD||"AES-128",uri:e.attributes.URI},"undefined"!=typeof e.attributes.IV&&(u.iv=e.attributes.IV)):this.trigger("warn",{message:"ignoring key declaration without URI"}):u=null:this.trigger("warn",{message:"ignoring key declaration without attribute list"})},"media-sequence":function(){isFinite(e.number)?this.manifest.mediaSequence=e.number:this.trigger("warn",{message:"ignoring invalid media sequence: "+e.number})},"discontinuity-sequence":function(){isFinite(e.number)?(this.manifest.discontinuitySequence=e.number,c=e.number):this.trigger("warn",{message:"ignoring invalid discontinuity sequence: "+e.number})},"playlist-type":function(){/VOD|EVENT/.test(e.playlistType)?this.manifest.playlistType=e.playlistType:this.trigger("warn",{message:"ignoring unknown playlist type: "+e.playlist})},map:function(){o={},e.uri&&(o.uri=e.uri),e.byterange&&(o.byterange=e.byterange)},"stream-inf":function(){this.manifest.playlists=s,this.manifest.mediaGroups=this.manifest.mediaGroups||l,e.attributes?(a.attributes||(a.attributes={}),Is(a.attributes,e.attributes)):this.trigger("warn",{message:"ignoring empty stream-inf attributes"})},media:function(){if(this.manifest.mediaGroups=this.manifest.mediaGroups||l,e.attributes&&e.attributes.TYPE&&e.attributes["GROUP-ID"]&&e.attributes.NAME){var t=this.manifest.mediaGroups[e.attributes.TYPE];t[e.attributes["GROUP-ID"]]=t[e.attributes["GROUP-ID"]]||{},i=t[e.attributes["GROUP-ID"]],(r={default:/yes/i.test(e.attributes.DEFAULT)}).default?r.autoselect=!0:r.autoselect=/yes/i.test(e.attributes.AUTOSELECT),e.attributes.LANGUAGE&&(r.language=e.attributes.LANGUAGE),e.attributes.URI&&(r.uri=e.attributes.URI),e.attributes["INSTREAM-ID"]&&(r.instreamId=e.attributes["INSTREAM-ID"]),e.attributes.CHARACTERISTICS&&(r.characteristics=e.attributes.CHARACTERISTICS),e.attributes.FORCED&&(r.forced=/yes/i.test(e.attributes.FORCED)),i[e.attributes.NAME]=r}else this.trigger("warn",{message:"ignoring incomplete or missing media group"})},discontinuity:function(){c+=1,a.discontinuity=!0,this.manifest.discontinuityStarts.push(s.length)},"program-date-time":function(){"undefined"==typeof this.manifest.dateTimeString&&(this.manifest.dateTimeString=e.dateTimeString,this.manifest.dateTimeObject=e.dateTimeObject),a.dateTimeString=e.dateTimeString,a.dateTimeObject=e.dateTimeObject},targetduration:function(){!isFinite(e.duration)||e.duration<0?this.trigger("warn",{message:"ignoring invalid target duration: "+e.duration}):this.manifest.targetDuration=e.duration},totalduration:function(){!isFinite(e.duration)||e.duration<0?this.trigger("warn",{message:"ignoring invalid total duration: "+e.duration}):this.manifest.totalDuration=e.duration},start:function(){e.attributes&&!isNaN(e.attributes["TIME-OFFSET"])?this.manifest.start={timeOffset:e.attributes["TIME-OFFSET"],precise:e.attributes.PRECISE}:this.trigger("warn",{message:"ignoring start declaration without appropriate attribute list"})},"cue-out":function(){a.cueOut=e.data},"cue-out-cont":function(){a.cueOutCont=e.data},"cue-in":function(){a.cueIn=e.data}}[e.tagType]||function(){}).call(n)},uri:function(){a.uri=e.uri,s.push(a),!this.manifest.targetDuration||"duration"in a||(this.trigger("warn",{message:"defaulting segment duration to the target duration"}),a.duration=this.manifest.targetDuration),u&&(a.key=u),a.timeline=c,o&&(a.map=o),a={}},comment:function(){},custom:function(){e.segment?(a.custom=a.custom||{},a.custom[e.customType]=e.data):(this.manifest.custom=this.manifest.custom||{},this.manifest.custom[e.customType]=e.data)}})[e.type].call(n)}),t}return Ds(i,e),i.prototype.push=function(t){this.lineStream.push(t)},i.prototype.end=function(){this.lineStream.push("\n")},i.prototype.addParser=function(t){this.parseStream.addParser(t)},i}(Ms),Fs=function(t){var e,i=t.attributes,r=t.segments,n={attributes:(e={NAME:i.id,AUDIO:"audio",SUBTITLES:"subs",RESOLUTION:{width:i.width,height:i.height},CODECS:i.codecs,BANDWIDTH:i.bandwidth},e["PROGRAM-ID"]=1,e),uri:"",endList:"static"===(i.type||"static"),timeline:i.periodIndex,resolvedUri:"",targetDuration:i.duration,segments:r,mediaSequence:r.length?r[0].number:1};return i.contentProtection&&(n.contentProtection=i.contentProtection),n},Hs=function(t){return!!t&&"object"===("undefined"==typeof t?"undefined":v(t))},Vs=function r(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];return e.reduce(function(e,i){return Object.keys(i).forEach(function(t){Array.isArray(e[t])&&Array.isArray(i[t])?e[t]=e[t].concat(i[t]):Hs(e[t])&&Hs(i[t])?e[t]=r(e[t],i[t]):e[t]=i[t]}),e},{})},qs=function(t,e){return/^[a-z]+:/i.test(e)?e:(/\/\//i.test(t)||(t=Os.buildAbsoluteURL(g.location.href,t)),Os.buildAbsoluteURL(t,e))},Ws=function(t){var e=t.baseUrl,i=void 0===e?"":e,r=t.source,n=void 0===r?"":r,s=t.range,a=void 0===s?"":s,o={uri:n,resolvedUri:qs(i||"",n)};if(a){var u=a.split("-"),l=parseInt(u[0],10),c=parseInt(u[1],10);o.byterange={length:c-l,offset:l}}return o},zs=function(t,e){for(var i,r,n,s,a,o,u,l,c,h,d,p,f=t.type,m=void 0===f?"static":f,g=t.minimumUpdatePeriod,y=void 0===g?0:g,v=t.media,_=void 0===v?"":v,b=t.sourceDuration,T=t.timescale,S=void 0===T?1:T,k=t.startNumber,C=void 0===k?1:k,E=t.periodIndex,w=[],A=-1,L=0;L<e.length;L++){var P=e[L],O=P.d,x=P.r||0,I=P.t||0;A<0&&(A=I),I&&A<I&&(A=I);var D=void 0;if(x<0){var R=L+1;R===e.length?"dynamic"===m&&0<y&&0<_.indexOf("$Number$")?(r=A,n=O,void 0,s=(i=t).NOW,a=i.clientOffset,o=i.availabilityStartTime,u=i.timescale,l=void 0===u?1:u,c=i.start,h=void 0===c?0:c,d=i.minimumUpdatePeriod,p=(s+a)/1e3+(void 0===d?0:d)-(o+h),D=Math.ceil((p*l-r)/n)):D=(b*S-A)/O:D=(e[R].t-A)/O}else D=x+1;for(var M=C+w.length+D,U=C+w.length;U<M;)w.push({number:U,duration:O/S,time:A,timeline:E}),A+=O,U++}return w},Gs=function(t){return t.reduce(function(t,e){return t.concat(e)},[])},Xs=function(t){if(!t.length)return[];for(var e=[],i=0;i<t.length;i++)e.push(t[i]);return e},Ys={static:function(t){var e=t.duration,i=t.timescale,r=void 0===i?1:i,n=t.sourceDuration;return{start:0,end:Math.ceil(n/(e/r))}},dynamic:function(t){var e=t.NOW,i=t.clientOffset,r=t.availabilityStartTime,n=t.timescale,s=void 0===n?1:n,a=t.duration,o=t.start,u=void 0===o?0:o,l=t.minimumUpdatePeriod,c=void 0===l?0:l,h=t.timeShiftBufferDepth,d=void 0===h?1/0:h,p=(e+i)/1e3,f=r+u,m=p+c-f,g=Math.ceil(m*s/a),y=Math.floor((p-f-d)*s/a),v=Math.floor((p-f)*s/a);return{start:Math.max(0,y),end:Math.min(g,v)}}},$s=function(t){var o,e=t.type,i=void 0===e?"static":e,r=t.duration,n=t.timescale,s=void 0===n?1:n,a=t.sourceDuration,u=Ys[i](t),l=function(t,e){for(var i=[],r=t;r<e;r++)i.push(r);return i}(u.start,u.end).map((o=t,function(t,e){var i=o.duration,r=o.timescale,n=void 0===r?1:r,s=o.periodIndex,a=o.startNumber;return{number:(void 0===a?1:a)+t,duration:i/n,timeline:s,time:e*i}}));if("static"===i){var c=l.length-1;l[c].duration=a-r/s*c}return l},Ks=/\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g,Qs=function(t,e){return t.replace(Ks,(s=e,function(t,e,i,r){if("$$"===t)return"$";if("undefined"==typeof s[e])return t;var n=""+s[e];return"RepresentationID"===e?n:(r=i?parseInt(r,10):1)<=n.length?n:""+new Array(r-n.length+1).join("0")+n}));var s},Js=function(i,t){var e,r,n={RepresentationID:i.id,Bandwidth:i.bandwidth||0},s=i.initialization,a=void 0===s?{sourceURL:"",range:""}:s,o=Ws({baseUrl:i.baseUrl,source:Qs(a.sourceURL,n),range:a.range});return(r=t,(e=i).duration||r?e.duration?$s(e):zs(e,r):[{number:e.startNumber||1,duration:e.sourceDuration,time:0,timeline:e.periodIndex}]).map(function(t){n.Number=t.number,n.Time=t.time;var e=Qs(i.media||"",n);return{uri:e,timeline:t.timeline,duration:t.duration,resolvedUri:qs(i.baseUrl||"",e),map:o,number:t.number}})},Zs="INVALID_NUMBER_OF_PERIOD",ta="DASH_EMPTY_MANIFEST",ea="DASH_INVALID_XML",ia="NO_BASE_URL",ra="SEGMENT_TIME_UNSPECIFIED",na="UNSUPPORTED_UTC_TIMING_SCHEME",sa=function(u,t){var e=u.duration,i=u.segmentUrls,r=void 0===i?[]:i;if(!e&&!t||e&&t)throw new Error(ra);var n=r.map(function(t){return i=t,r=(e=u).baseUrl,n=e.initialization,a=Ws({baseUrl:r,source:(s=void 0===n?{}:n).sourceURL,range:s.range}),(o=Ws({baseUrl:r,source:i.media,range:i.mediaRange})).map=a,o;var e,i,r,n,s,a,o}),s=void 0;return e&&(s=$s(u)),t&&(s=zs(u,t)),s.map(function(t,e){if(n[e]){var i=n[e];return i.timeline=t.timeline,i.duration=t.duration,i.number=t.number,i}}).filter(function(t){return t})},aa=function(t){var e=t.baseUrl,i=t.initialization,r=void 0===i?{}:i,n=t.sourceDuration,s=t.timescale,a=void 0===s?1:s,o=t.indexRange,u=void 0===o?"":o,l=t.duration;if(!e)throw new Error(ia);var c=Ws({baseUrl:e,source:r.sourceURL,range:r.range}),h=Ws({baseUrl:e,source:e,range:u});if(h.map=c,l){var d=$s(t);d.length&&(h.duration=d[0].duration,h.timeline=d[0].timeline)}else n&&(h.duration=n/a,h.timeline=0);return h.number=0,[h]},oa=function(t){var e=t.attributes,i=t.segmentInfo,r=void 0,n=void 0;if(i.template?(n=Js,r=Vs(e,i.template)):i.base?(n=aa,r=Vs(e,i.base)):i.list&&(n=sa,r=Vs(e,i.list)),!n)return{attributes:e};var s=n(r,i.timeline);if(r.duration){var a=r,o=a.duration,u=a.timescale,l=void 0===u?1:u;r.duration=o/l}else s.length?r.duration=s.reduce(function(t,e){return Math.max(t,Math.ceil(e.duration))},0):r.duration=0;return{attributes:r,segments:s}},ua=function(t,e){return Xs(t.childNodes).filter(function(t){return t.tagName===e})},la=function(t){return t.textContent.trim()},ca=function(t){var e=/P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)D)?(?:T(?:(\d*)H)?(?:(\d*)M)?(?:([\d.]*)S)?)?/.exec(t);if(!e)return 0;var i=e.slice(1),r=i[0],n=i[1],s=i[2],a=i[3],o=i[4],u=i[5];return 31536e3*parseFloat(r||0)+2592e3*parseFloat(n||0)+86400*parseFloat(s||0)+3600*parseFloat(a||0)+60*parseFloat(o||0)+parseFloat(u||0)},ha={mediaPresentationDuration:function(t){return ca(t)},availabilityStartTime:function(t){return/^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(e=t)&&(e+="Z"),Date.parse(e)/1e3;var e},minimumUpdatePeriod:function(t){return ca(t)},timeShiftBufferDepth:function(t){return ca(t)},start:function(t){return ca(t)},width:function(t){return parseInt(t,10)},height:function(t){return parseInt(t,10)},bandwidth:function(t){return parseInt(t,10)},startNumber:function(t){return parseInt(t,10)},timescale:function(t){return parseInt(t,10)},duration:function(t){var e=parseInt(t,10);return isNaN(e)?ca(t):e},d:function(t){return parseInt(t,10)},t:function(t){return parseInt(t,10)},r:function(t){return parseInt(t,10)},DEFAULT:function(t){return t}},da=function(t){return t&&t.attributes?Xs(t.attributes).reduce(function(t,e){var i=ha[e.name]||ha.DEFAULT;return t[e.name]=i(e.value),t},{}):{}};var pa,fa,ma={"urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b":"org.w3.clearkey","urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed":"com.widevine.alpha","urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95":"com.microsoft.playready","urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb":"com.adobe.primetime"},ga=function(t,i){return i.length?Gs(t.map(function(e){return i.map(function(t){return qs(e,la(t))})})):t},ya=function(t){var e=ua(t,"SegmentTemplate")[0],i=ua(t,"SegmentList")[0],r=i&&ua(i,"SegmentURL").map(function(t){return Vs({tag:"SegmentURL"},da(t))}),n=ua(t,"SegmentBase")[0],s=i||e,a=s&&ua(s,"SegmentTimeline")[0],o=i||n||e,u=o&&ua(o,"Initialization")[0],l=e&&da(e);l&&u?l.initialization=u&&da(u):l&&l.initialization&&(l.initialization={sourceURL:l.initialization});var c={template:l,timeline:a&&ua(a,"S").map(function(t){return da(t)}),list:i&&Vs(da(i),{segmentUrls:r,initialization:da(u)}),base:n&&Vs(da(n),{initialization:da(u)})};return Object.keys(c).forEach(function(t){c[t]||delete c[t]}),c},va=function(t){return t.reduce(function(t,e){var i=da(e),r=ma[i.schemeIdUri];if(r){t[r]={attributes:i};var n=ua(e,"cenc:pssh")[0];if(n){var s=la(n),a=s&&function(t){for(var e=g.atob(t),i=new Uint8Array(e.length),r=0;r<e.length;r++)i[r]=e.charCodeAt(r);return i}(s);t[r].pssh=a}}return t},{})},_a=function(p,f,m){return function(t){var e=da(t),i=ga(f,ua(t,"BaseURL")),r=ua(t,"Role")[0],n={role:da(r)},s=Vs(p,e,n),a=va(ua(t,"ContentProtection"));Object.keys(a).length&&(s=Vs(s,{contentProtection:a}));var o,u,l,c=ya(t),h=ua(t,"Representation"),d=Vs(m,c);return Gs(h.map((o=s,u=i,l=d,function(t){var e=ua(t,"BaseURL"),i=ga(u,e),r=Vs(o,da(t)),n=ya(t);return i.map(function(t){return{segmentInfo:Vs(l,n),attributes:Vs(r,{baseUrl:t})}})})))}},ba=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=e.manifestUri,r=void 0===i?"":i,n=e.NOW,s=void 0===n?Date.now():n,a=e.clientOffset,o=void 0===a?0:a,u=ua(t,"Period");if(1!==u.length)throw new Error(Zs);var l,c,h=da(t),d=ga([r],ua(t,"BaseURL"));return h.sourceDuration=h.mediaPresentationDuration||0,h.NOW=s,h.clientOffset=o,Gs(u.map((l=h,c=d,function(t,e){var i=ga(c,ua(t,"BaseURL")),r=da(t),n=Vs(l,r,{periodIndex:e}),s=ua(t,"AdaptationSet"),a=ya(t);return Gs(s.map(_a(n,i,a)))})))},Ta=function(t){if(""===t)throw new Error(ta);var e=(new g.DOMParser).parseFromString(t,"application/xml"),i=e&&"MPD"===e.documentElement.tagName?e.documentElement:null;if(!i||i&&0<i.getElementsByTagName("parsererror").length)throw new Error(ea);return i},Sa=function(t,e){return function(t){var e;if(!t.length)return{};var i=t[0].attributes,r=i.sourceDuration,n=i.minimumUpdatePeriod,s=void 0===n?0:n,a=t.filter(function(t){var e=t.attributes;return"video/mp4"===e.mimeType||"video"===e.contentType}).map(Fs),o=t.filter(function(t){var e=t.attributes;return"audio/mp4"===e.mimeType||"audio"===e.contentType}),u=t.filter(function(t){var e=t.attributes;return"text/vtt"===e.mimeType||"text"===e.contentType}),l={allowCache:!0,discontinuityStarts:[],segments:[],endList:!0,mediaGroups:(e={AUDIO:{},VIDEO:{}},e["CLOSED-CAPTIONS"]={},e.SUBTITLES={},e),uri:"",duration:r,playlists:a,minimumUpdatePeriod:1e3*s};return o.length&&(l.mediaGroups.AUDIO.audio=o.reduce(function(t,e){var i,r,n,s,a,o=e.attributes.role&&e.attributes.role.value||"main",u=e.attributes.lang||"",l="main";return u&&(l=e.attributes.lang+" ("+o+")"),t[l]&&t[l].playlists[0].attributes.BANDWIDTH>e.attributes.bandwidth||(t[l]={language:u,autoselect:!0,default:"main"===o,playlists:[(i=e,n=i.attributes,s=i.segments,a={attributes:(r={NAME:n.id,BANDWIDTH:n.bandwidth,CODECS:n.codecs},r["PROGRAM-ID"]=1,r),uri:"",endList:"static"===(n.type||"static"),timeline:n.periodIndex,resolvedUri:"",targetDuration:n.duration,segments:s,mediaSequence:s.length?s[0].number:1},n.contentProtection&&(a.contentProtection=n.contentProtection),a)],uri:""}),t},{})),u.length&&(l.mediaGroups.SUBTITLES.subs=u.reduce(function(t,e){var i,r,n,s,a=e.attributes.lang||"text";return t[a]||(t[a]={language:a,default:!1,autoselect:!1,playlists:[(i=e,n=i.attributes,s=i.segments,"undefined"==typeof s&&(s=[{uri:n.baseUrl,timeline:n.periodIndex,resolvedUri:n.baseUrl||"",duration:n.sourceDuration,number:0}],n.duration=n.sourceDuration),{attributes:(r={NAME:n.id,BANDWIDTH:n.bandwidth},r["PROGRAM-ID"]=1,r),uri:"",endList:"static"===(n.type||"static"),timeline:n.periodIndex,resolvedUri:n.baseUrl||"",targetDuration:n.duration,segments:s,mediaSequence:s.length?s[0].number:1})],uri:""}),t},{})),l}(ba(Ta(t),e).map(oa))},ka=function(t){return function(t){var e=ua(t,"UTCTiming")[0];if(!e)return null;var i=da(e);switch(i.schemeIdUri){case"urn:mpeg:dash:utc:http-head:2014":case"urn:mpeg:dash:utc:http-head:2012":i.method="HEAD";break;case"urn:mpeg:dash:utc:http-xsdate:2014":case"urn:mpeg:dash:utc:http-iso:2014":case"urn:mpeg:dash:utc:http-xsdate:2012":case"urn:mpeg:dash:utc:http-iso:2012":i.method="GET";break;case"urn:mpeg:dash:utc:direct:2014":case"urn:mpeg:dash:utc:direct:2012":i.method="DIRECT",i.value=Date.parse(i.value);break;case"urn:mpeg:dash:utc:http-ntp:2014":case"urn:mpeg:dash:utc:ntp:2014":case"urn:mpeg:dash:utc:sntp:2014":default:throw new Error(na)}return i}(Ta(t))},Ca={toUnsigned:function(t){return t>>>0}},Ea=Ca.toUnsigned,wa=Object.freeze({default:Ca,__moduleExports:Ca,toUnsigned:Ea}),Aa=(wa&&Ca||wa).toUnsigned;pa=function(t,e){var i,r,n,s,a,o=[];if(!e.length)return null;for(i=0;i<t.byteLength;)r=Aa(t[i]<<24|t[i+1]<<16|t[i+2]<<8|t[i+3]),n=fa(t.subarray(i+4,i+8)),s=1<r?i+r:t.byteLength,n===e[0]&&(1===e.length?o.push(t.subarray(i+8,s)):(a=pa(t.subarray(i+8,s),e.slice(1))).length&&(o=o.concat(a))),i=s;return o};fa=function(t){var e="";return e+=String.fromCharCode(t[0]),e+=String.fromCharCode(t[1]),e+=String.fromCharCode(t[2]),e+=String.fromCharCode(t[3])};var La=function(t){return pa(t,["moov","trak"]).reduce(function(t,e){var i,r,n,s,a;return(i=pa(e,["tkhd"])[0])?(r=i[0],s=Aa(i[n=0===r?12:20]<<24|i[n+1]<<16|i[n+2]<<8|i[n+3]),(a=pa(e,["mdia","mdhd"])[0])?(n=0===(r=a[0])?12:20,t[s]=Aa(a[n]<<24|a[n+1]<<16|a[n+2]<<8|a[n+3]),t):null):null},{})},Pa=function(n,t){var e,i,r;return e=pa(t,["moof","traf"]),i=[].concat.apply([],e.map(function(r){return pa(r,["tfhd"]).map(function(t){var e,i;return e=Aa(t[4]<<24|t[5]<<16|t[6]<<8|t[7]),i=n[e]||9e4,(pa(r,["tfdt"]).map(function(t){var e,i;return e=t[0],i=Aa(t[4]<<24|t[5]<<16|t[6]<<8|t[7]),1===e&&(i*=Math.pow(2,32),i+=Aa(t[8]<<24|t[9]<<16|t[10]<<8|t[11])),i})[0]||1/0)/i})})),r=Math.min.apply(null,i),isFinite(r)?r:0},Oa={H264_STREAM_TYPE:27,ADTS_STREAM_TYPE:15,METADATA_STREAM_TYPE:21},xa=Oa.H264_STREAM_TYPE,Ia=Oa.ADTS_STREAM_TYPE,Da=Oa.METADATA_STREAM_TYPE,Ra=Object.freeze({default:Oa,__moduleExports:Oa,H264_STREAM_TYPE:xa,ADTS_STREAM_TYPE:Ia,METADATA_STREAM_TYPE:Da}),Ma=function(){this.init=function(){var s={};this.on=function(t,e){s[t]||(s[t]=[]),s[t]=s[t].concat(e)},this.off=function(t,e){var i;return!!s[t]&&(i=s[t].indexOf(e),s[t]=s[t].slice(),s[t].splice(i,1),-1<i)},this.trigger=function(t){var e,i,r,n;if(e=s[t])if(2===arguments.length)for(r=e.length,i=0;i<r;++i)e[i].call(this,arguments[1]);else{for(n=[],i=arguments.length,i=1;i<arguments.length;++i)n.push(arguments[i]);for(r=e.length,i=0;i<r;++i)e[i].apply(this,n)}},this.dispose=function(){s={}}}};Ma.prototype.pipe=function(e){return this.on("data",function(t){e.push(t)}),this.on("done",function(t){e.flush(t)}),e},Ma.prototype.push=function(t){this.trigger("data",t)},Ma.prototype.flush=function(t){this.trigger("done",t)};var Ua=Ma,Na=Object.freeze({default:Ua,__moduleExports:Ua}),Ba=function(t,e){var i=1;for(e<t&&(i=-1);4294967296<Math.abs(e-t);)t+=8589934592*i;return t},ja=function t(e){var i,r;t.prototype.init.call(this),this.type_=e,this.push=function(t){t.type===this.type_&&(void 0===r&&(r=t.dts),t.dts=Ba(t.dts,r),t.pts=Ba(t.pts,r),i=t.dts,this.trigger("data",t))},this.flush=function(){r=i,this.trigger("done")},this.discontinuity=function(){i=r=void 0}};ja.prototype=new(Na&&Ua||Na);var Fa={TimestampRolloverStream:ja,handleRollover:Ba},Ha=Fa.TimestampRolloverStream,Va=Fa.handleRollover,qa=Object.freeze({default:Fa,__moduleExports:Fa,TimestampRolloverStream:Ha,handleRollover:Va}),Wa=Ra&&Oa||Ra,za=function(t){var e=31&t[1];return e<<=8,e|=t[2]},Ga=function(t){return!!(64&t[1])},Xa=function(t){var e=0;return 1<(48&t[3])>>>4&&(e+=t[4]+1),e},Ya=function(t){switch(t){case 5:return"slice_layer_without_partitioning_rbsp_idr";case 6:return"sei_rbsp";case 7:return"seq_parameter_set_rbsp";case 8:return"pic_parameter_set_rbsp";case 9:return"access_unit_delimiter_rbsp";default:return null}},$a={parseType:function(t,e){var i=za(t);return 0===i?"pat":i===e?"pmt":e?"pes":null},parsePat:function(t){var e=Ga(t),i=4+Xa(t);return e&&(i+=t[i]+1),(31&t[i+10])<<8|t[i+11]},parsePmt:function(t){var e={},i=Ga(t),r=4+Xa(t);if(i&&(r+=t[r]+1),1&t[r+5]){var n;n=3+((15&t[r+1])<<8|t[r+2])-4;for(var s=12+((15&t[r+10])<<8|t[r+11]);s<n;){var a=r+s;e[(31&t[a+1])<<8|t[a+2]]=t[a],s+=5+((15&t[a+3])<<8|t[a+4])}return e}},parsePayloadUnitStartIndicator:Ga,parsePesType:function(t,e){switch(e[za(t)]){case Wa.H264_STREAM_TYPE:return"video";case Wa.ADTS_STREAM_TYPE:return"audio";case Wa.METADATA_STREAM_TYPE:return"timed-metadata";default:return null}},parsePesTime:function(t){if(!Ga(t))return null;var e=4+Xa(t);if(e>=t.byteLength)return null;var i,r=null;return 192&(i=t[e+7])&&((r={}).pts=(14&t[e+9])<<27|(255&t[e+10])<<20|(254&t[e+11])<<12|(255&t[e+12])<<5|(254&t[e+13])>>>3,r.pts*=4,r.pts+=(6&t[e+13])>>>1,r.dts=r.pts,64&i&&(r.dts=(14&t[e+14])<<27|(255&t[e+15])<<20|(254&t[e+16])<<12|(255&t[e+17])<<5|(254&t[e+18])>>>3,r.dts*=4,r.dts+=(6&t[e+18])>>>1)),r},videoPacketContainsKeyFrame:function(t){for(var e=4+Xa(t),i=t.subarray(e),r=0,n=0,s=!1;n<i.byteLength-3;n++)if(1===i[n+2]){r=n+5;break}for(;r<i.byteLength;)switch(i[r]){case 0:if(0!==i[r-1]){r+=2;break}if(0!==i[r-2]){r++;break}for(n+3!==r-2&&"slice_layer_without_partitioning_rbsp_idr"===Ya(31&i[n+3])&&(s=!0);1!==i[++r]&&r<i.length;);n=r-2,r+=3;break;case 1:if(0!==i[r-1]||0!==i[r-2]){r+=3;break}"slice_layer_without_partitioning_rbsp_idr"===Ya(31&i[n+3])&&(s=!0),n=r-2,r+=3;break;default:r+=3}return i=i.subarray(n),r-=n,n=0,i&&3<i.byteLength&&"slice_layer_without_partitioning_rbsp_idr"===Ya(31&i[n+3])&&(s=!0),s}},Ka=$a.parseType,Qa=$a.parsePat,Ja=$a.parsePmt,Za=$a.parsePayloadUnitStartIndicator,to=$a.parsePesType,eo=$a.parsePesTime,io=$a.videoPacketContainsKeyFrame,ro=Object.freeze({default:$a,__moduleExports:$a,parseType:Ka,parsePat:Qa,parsePmt:Ja,parsePayloadUnitStartIndicator:Za,parsePesType:to,parsePesTime:eo,videoPacketContainsKeyFrame:io}),no=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],so=function(t){return t[0]<<21|t[1]<<14|t[2]<<7|t[3]},ao={parseId3TagSize:function(t,e){var i=t[e+6]<<21|t[e+7]<<14|t[e+8]<<7|t[e+9];return(16&t[e+5])>>4?i+20:i+10},parseAdtsSize:function(t,e){var i=(224&t[e+5])>>5,r=t[e+4]<<3;return 6144&t[e+3]|r|i},parseType:function(t,e){return t[e]==="I".charCodeAt(0)&&t[e+1]==="D".charCodeAt(0)&&t[e+2]==="3".charCodeAt(0)?"timed-metadata":!0&t[e]&&240==(240&t[e+1])?"audio":null},parseSampleRate:function(t){for(var e=0;e+5<t.length;){if(255===t[e]&&240==(246&t[e+1]))return no[(60&t[e+2])>>>2];e++}return null},parseAacTimestamp:function(t){var e,i,r;e=10,64&t[5]&&(e+=4,e+=so(t.subarray(10,14)));do{if((i=so(t.subarray(e+4,e+8)))<1)return null;if("PRIV"===String.fromCharCode(t[e],t[e+1],t[e+2],t[e+3])){r=t.subarray(e+10,e+i+10);for(var n=0;n<r.byteLength;n++)if(0===r[n]){if("com.apple.streaming.transportStreamTimestamp"===unescape(function(t,e,i){var r,n="";for(r=e;r<i;r++)n+="%"+("00"+t[r].toString(16)).slice(-2);return n}(r,0,n))){var s=r.subarray(n+1),a=(1&s[3])<<30|s[4]<<22|s[5]<<14|s[6]<<6|s[7]>>>2;return a*=4,a+=3&s[7]}break}}e+=10,e+=i}while(e<t.byteLength);return null}},oo=ao.parseId3TagSize,uo=ao.parseAdtsSize,lo=ao.parseType,co=ao.parseSampleRate,ho=ao.parseAacTimestamp,po=Object.freeze({default:ao,__moduleExports:ao,parseId3TagSize:oo,parseAdtsSize:uo,parseType:lo,parseSampleRate:co,parseAacTimestamp:ho}),fo=ro&&$a||ro,mo=po&&ao||po,go=(qa&&Fa||qa).handleRollover,yo={};yo.ts=fo,yo.aac=mo;var vo=188,_o=function(t,e,i){for(var r,n,s,a,o=0,u=vo,l=!1;u<t.byteLength;)if(71!==t[o]||71!==t[u])o++,u++;else{switch(r=t.subarray(o,u),yo.ts.parseType(r,e.pid)){case"pes":n=yo.ts.parsePesType(r,e.table),s=yo.ts.parsePayloadUnitStartIndicator(r),"audio"===n&&s&&(a=yo.ts.parsePesTime(r))&&(a.type="audio",i.audio.push(a),l=!0)}if(l)break;o+=vo,u+=vo}for(o=(u=t.byteLength)-vo,l=!1;0<=o;)if(71!==t[o]||71!==t[u])o--,u--;else{switch(r=t.subarray(o,u),yo.ts.parseType(r,e.pid)){case"pes":n=yo.ts.parsePesType(r,e.table),s=yo.ts.parsePayloadUnitStartIndicator(r),"audio"===n&&s&&(a=yo.ts.parsePesTime(r))&&(a.type="audio",i.audio.push(a),l=!0)}if(l)break;o-=vo,u-=vo}},bo=function(t,e,i){for(var r,n,s,a,o,u,l,c=0,h=vo,d=!1,p={data:[],size:0};h<t.byteLength;)if(71!==t[c]||71!==t[h])c++,h++;else{switch(r=t.subarray(c,h),yo.ts.parseType(r,e.pid)){case"pes":if(n=yo.ts.parsePesType(r,e.table),s=yo.ts.parsePayloadUnitStartIndicator(r),"video"===n&&(s&&!d&&(a=yo.ts.parsePesTime(r))&&(a.type="video",i.video.push(a),d=!0),!i.firstKeyFrame)){if(s&&0!==p.size){for(o=new Uint8Array(p.size),u=0;p.data.length;)l=p.data.shift(),o.set(l,u),u+=l.byteLength;yo.ts.videoPacketContainsKeyFrame(o)&&(i.firstKeyFrame=yo.ts.parsePesTime(o),i.firstKeyFrame.type="video"),p.size=0}p.data.push(r),p.size+=r.byteLength}}if(d&&i.firstKeyFrame)break;c+=vo,h+=vo}for(c=(h=t.byteLength)-vo,d=!1;0<=c;)if(71!==t[c]||71!==t[h])c--,h--;else{switch(r=t.subarray(c,h),yo.ts.parseType(r,e.pid)){case"pes":n=yo.ts.parsePesType(r,e.table),s=yo.ts.parsePayloadUnitStartIndicator(r),"video"===n&&s&&(a=yo.ts.parsePesTime(r))&&(a.type="video",i.video.push(a),d=!0)}if(d)break;c-=vo,h-=vo}},To=function(t){var e={pid:null,table:null},i={};for(var r in function(t,e){for(var i,r=0,n=vo;n<t.byteLength;)if(71!==t[r]||71!==t[n])r++,n++;else{switch(i=t.subarray(r,n),yo.ts.parseType(i,e.pid)){case"pat":e.pid||(e.pid=yo.ts.parsePat(i));break;case"pmt":e.table||(e.table=yo.ts.parsePmt(i))}if(e.pid&&e.table)return;r+=vo,n+=vo}}(t,e),e.table){if(e.table.hasOwnProperty(r))switch(e.table[r]){case Wa.H264_STREAM_TYPE:i.video=[],bo(t,e,i),0===i.video.length&&delete i.video;break;case Wa.ADTS_STREAM_TYPE:i.audio=[],_o(t,e,i),0===i.audio.length&&delete i.audio}}return i},So=function(t,e){var i,r;return(r=(i=t)[0]==="I".charCodeAt(0)&&i[1]==="D".charCodeAt(0)&&i[2]==="3".charCodeAt(0)?function(t){for(var e,i=!1,r=0,n=null,s=null,a=0,o=0;3<=t.length-o;){switch(yo.aac.parseType(t,o)){case"timed-metadata":if(t.length-o<10){i=!0;break}if((a=yo.aac.parseId3TagSize(t,o))>t.length){i=!0;break}null===s&&(e=t.subarray(o,o+a),s=yo.aac.parseAacTimestamp(e)),o+=a;break;case"audio":if(t.length-o<7){i=!0;break}if((a=yo.aac.parseAdtsSize(t,o))>t.length){i=!0;break}null===n&&(e=t.subarray(o,o+a),n=yo.aac.parseSampleRate(e)),r++,o+=a;break;default:o++}if(i)return null}if(null===n||null===s)return null;var u=9e4/n;return{audio:[{type:"audio",dts:s,pts:s},{type:"audio",dts:s+1024*r*u,pts:s+1024*r*u}]}}(t):To(t))&&(r.audio||r.video)?(function(t,e){if(t.audio&&t.audio.length){var i=e;"undefined"==typeof i&&(i=t.audio[0].dts),t.audio.forEach(function(t){t.dts=go(t.dts,i),t.pts=go(t.pts,i),t.dtsTime=t.dts/9e4,t.ptsTime=t.pts/9e4})}if(t.video&&t.video.length){var r=e;if("undefined"==typeof r&&(r=t.video[0].dts),t.video.forEach(function(t){t.dts=go(t.dts,r),t.pts=go(t.pts,r),t.dtsTime=t.dts/9e4,t.ptsTime=t.pts/9e4}),t.firstKeyFrame){var n=t.firstKeyFrame;n.dts=go(n.dts,r),n.pts=go(n.pts,r),n.dtsTime=n.dts/9e4,n.ptsTime=n.dts/9e4}}}(r,e),r):null};var ko=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Co=function(){function r(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(t,e,i){return e&&r(t.prototype,e),i&&r(t,i),t}}(),Eo=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==("undefined"==typeof e?"undefined":v(e))&&"function"!=typeof e?t:e},wo=function(){var t=[[[],[],[],[],[]],[[],[],[],[],[]]],e=t[0],i=t[1],r=e[4],n=i[4],s=void 0,a=void 0,o=void 0,u=[],l=[],c=void 0,h=void 0,d=void 0,p=void 0,f=void 0;for(s=0;s<256;s++)l[(u[s]=s<<1^283*(s>>7))^s]=s;for(a=o=0;!r[a];a^=c||1,o=l[o]||1)for(d=(d=o^o<<1^o<<2^o<<3^o<<4)>>8^255&d^99,f=16843009*u[h=u[c=u[n[r[a]=d]=a]]]^65537*h^257*c^16843008*a,p=257*u[d]^16843008*d,s=0;s<4;s++)e[s][a]=p=p<<24^p>>>8,i[s][d]=f=f<<24^f>>>8;for(s=0;s<5;s++)e[s]=e[s].slice(0),i[s]=i[s].slice(0);return t},Ao=null,Lo=function(){function c(t){ko(this,c),Ao||(Ao=wo()),this._tables=[[Ao[0][0].slice(),Ao[0][1].slice(),Ao[0][2].slice(),Ao[0][3].slice(),Ao[0][4].slice()],[Ao[1][0].slice(),Ao[1][1].slice(),Ao[1][2].slice(),Ao[1][3].slice(),Ao[1][4].slice()]];var e=void 0,i=void 0,r=void 0,n=void 0,s=void 0,a=this._tables[0][4],o=this._tables[1],u=t.length,l=1;if(4!==u&&6!==u&&8!==u)throw new Error("Invalid aes key size");for(n=t.slice(0),s=[],this._key=[n,s],e=u;e<4*u+28;e++)r=n[e-1],(e%u==0||8===u&&e%u==4)&&(r=a[r>>>24]<<24^a[r>>16&255]<<16^a[r>>8&255]<<8^a[255&r],e%u==0&&(r=r<<8^r>>>24^l<<24,l=l<<1^283*(l>>7))),n[e]=n[e-u]^r;for(i=0;e;i++,e--)r=n[3&i?e:e-4],s[i]=e<=4||i<4?r:o[0][a[r>>>24]]^o[1][a[r>>16&255]]^o[2][a[r>>8&255]]^o[3][a[255&r]]}return c.prototype.decrypt=function(t,e,i,r,n,s){var a=this._key[1],o=t^a[0],u=r^a[1],l=i^a[2],c=e^a[3],h=void 0,d=void 0,p=void 0,f=a.length/4-2,m=void 0,g=4,y=this._tables[1],v=y[0],_=y[1],b=y[2],T=y[3],S=y[4];for(m=0;m<f;m++)h=v[o>>>24]^_[u>>16&255]^b[l>>8&255]^T[255&c]^a[g],d=v[u>>>24]^_[l>>16&255]^b[c>>8&255]^T[255&o]^a[g+1],p=v[l>>>24]^_[c>>16&255]^b[o>>8&255]^T[255&u]^a[g+2],c=v[c>>>24]^_[o>>16&255]^b[u>>8&255]^T[255&l]^a[g+3],g+=4,o=h,u=d,l=p;for(m=0;m<4;m++)n[(3&-m)+s]=S[o>>>24]<<24^S[u>>16&255]<<16^S[l>>8&255]<<8^S[255&c]^a[g++],h=o,o=u,u=l,l=c,c=h},c}(),Po=function(){function t(){ko(this,t),this.listeners={}}return t.prototype.on=function(t,e){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)},t.prototype.off=function(t,e){if(!this.listeners[t])return!1;var i=this.listeners[t].indexOf(e);return this.listeners[t].splice(i,1),-1<i},t.prototype.trigger=function(t){var e=this.listeners[t];if(e)if(2===arguments.length)for(var i=e.length,r=0;r<i;++r)e[r].call(this,arguments[1]);else for(var n=Array.prototype.slice.call(arguments,1),s=e.length,a=0;a<s;++a)e[a].apply(this,n)},t.prototype.dispose=function(){this.listeners={}},t.prototype.pipe=function(e){this.on("data",function(t){e.push(t)})},t}(),Oo=function(e){function i(){ko(this,i);var t=Eo(this,e.call(this,Po));return t.jobs=[],t.delay=1,t.timeout_=null,t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof e?"undefined":v(e)));t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(i,e),i.prototype.processJob_=function(){this.jobs.shift()(),this.jobs.length?this.timeout_=setTimeout(this.processJob_.bind(this),this.delay):this.timeout_=null},i.prototype.push=function(t){this.jobs.push(t),this.timeout_||(this.timeout_=setTimeout(this.processJob_.bind(this),this.delay))},i}(Po),xo=function(t){return t<<24|(65280&t)<<8|(16711680&t)>>8|t>>>24},Io=function(t,e,i){var r=new Int32Array(t.buffer,t.byteOffset,t.byteLength>>2),n=new Lo(Array.prototype.slice.call(e)),s=new Uint8Array(t.byteLength),a=new Int32Array(s.buffer),o=void 0,u=void 0,l=void 0,c=void 0,h=void 0,d=void 0,p=void 0,f=void 0,m=void 0;for(o=i[0],u=i[1],l=i[2],c=i[3],m=0;m<r.length;m+=4)h=xo(r[m]),d=xo(r[m+1]),p=xo(r[m+2]),f=xo(r[m+3]),n.decrypt(h,d,p,f,a,m),a[m]=xo(a[m]^o),a[m+1]=xo(a[m+1]^u),a[m+2]=xo(a[m+2]^l),a[m+3]=xo(a[m+3]^c),o=h,u=d,l=p,c=f;return s},Do=function(){function u(t,e,i,r){ko(this,u);var n=u.STEP,s=new Int32Array(t.buffer),a=new Uint8Array(t.byteLength),o=0;for(this.asyncStream_=new Oo,this.asyncStream_.push(this.decryptChunk_(s.subarray(o,o+n),e,i,a)),o=n;o<s.length;o+=n)i=new Uint32Array([xo(s[o-4]),xo(s[o-3]),xo(s[o-2]),xo(s[o-1])]),this.asyncStream_.push(this.decryptChunk_(s.subarray(o,o+n),e,i,a));this.asyncStream_.push(function(){var t;r(null,(t=a).subarray(0,t.byteLength-t[t.byteLength-1]))})}return u.prototype.decryptChunk_=function(e,i,r,n){return function(){var t=Io(e,i,r);n.set(t,e.byteOffset)}},Co(u,null,[{key:"STEP",get:function(){return 32e3}}]),u}(),Ro=function(t,e){return/^[a-z]+:/i.test(e)?e:(/\/\//i.test(t)||(t=Os.buildAbsoluteURL(g.location.href,t)),Os.buildAbsoluteURL(t,e))},Mo=As.mergeOptions,Uo=As.log,No=function(n,s){["AUDIO","SUBTITLES"].forEach(function(t){for(var e in n.mediaGroups[t])for(var i in n.mediaGroups[t][e]){var r=n.mediaGroups[t][e][i];s(r,t,e,i)}})},Bo=function(t,e){var i=Mo(t,{}),r=i.playlists[e.uri];if(!r)return null;if(r.segments&&e.segments&&r.segments.length===e.segments.length&&r.mediaSequence===e.mediaSequence)return null;var n=Mo(r,e);r.segments&&(n.segments=function(t,e,i){var r=e.slice();i=i||0;for(var n=Math.min(t.length,e.length+i),s=i;s<n;s++)r[s-i]=Mo(t[s],r[s-i]);return r}(r.segments,e.segments,e.mediaSequence-r.mediaSequence)),n.segments.forEach(function(t){var e,i;e=t,i=n.resolvedUri,e.resolvedUri||(e.resolvedUri=Ro(i,e.uri)),e.key&&!e.key.resolvedUri&&(e.key.resolvedUri=Ro(i,e.key.uri)),e.map&&!e.map.resolvedUri&&(e.map.resolvedUri=Ro(i,e.map.uri))});for(var s=0;s<i.playlists.length;s++)i.playlists[s].uri===e.uri&&(i.playlists[s]=n);return i.playlists[e.uri]=n,i},jo=function(t){for(var e=t.playlists.length;e--;){var i=t.playlists[e];(t.playlists[i.uri]=i).resolvedUri=Ro(t.uri,i.uri),i.id=e,i.attributes||(i.attributes={},Uo.warn("Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute."))}},Fo=function(e){No(e,function(t){t.uri&&(t.resolvedUri=Ro(e.uri,t.uri))})},Ho=function(t,e){var i=t.segments[t.segments.length-1];return e&&i&&i.duration?1e3*i.duration:500*(t.targetDuration||10)},Vo=function(n){function s(t,e,i){y(this,s);var r=b(this,n.call(this));if(r.srcUrl=t,r.hls_=e,r.withCredentials=i,!r.srcUrl)throw new Error("A non-empty playlist URL is required");return r.state="HAVE_NOTHING",r.on("mediaupdatetimeout",function(){"HAVE_METADATA"===r.state&&(r.state="HAVE_CURRENT_METADATA",r.request=r.hls_.xhr({uri:Ro(r.master.uri,r.media().uri),withCredentials:r.withCredentials},function(t,e){if(r.request)return t?r.playlistRequestError(r.request,r.media().uri,"HAVE_METADATA"):void r.haveMetadata(r.request,r.media().uri)}))}),r}return _(s,n),s.prototype.playlistRequestError=function(t,e,i){this.request=null,i&&(this.state=i),this.error={playlist:this.master.playlists[e],status:t.status,message:"HLS playlist request error at URL: "+e,responseText:t.responseText,code:500<=t.status?4:2},this.trigger("error")},s.prototype.haveMetadata=function(t,e){var i=this;this.request=null,this.state="HAVE_METADATA";var r=new js;r.push(t.responseText),r.end(),r.manifest.uri=e,r.manifest.attributes=r.manifest.attributes||{};var n=Bo(this.master,r.manifest);this.targetDuration=r.manifest.targetDuration,n?(this.master=n,this.media_=this.master.playlists[r.manifest.uri]):this.trigger("playlistunchanged"),this.media().endList||(g.clearTimeout(this.mediaUpdateTimeout),this.mediaUpdateTimeout=g.setTimeout(function(){i.trigger("mediaupdatetimeout")},Ho(this.media(),!!n))),this.trigger("loadedplaylist")},s.prototype.dispose=function(){this.stopRequest(),g.clearTimeout(this.mediaUpdateTimeout)},s.prototype.stopRequest=function(){if(this.request){var t=this.request;this.request=null,t.onreadystatechange=null,t.abort()}},s.prototype.media=function(i){var r=this;if(!i)return this.media_;if("HAVE_NOTHING"===this.state)throw new Error("Cannot switch media playlist from "+this.state);var n=this.state;if("string"==typeof i){if(!this.master.playlists[i])throw new Error("Unknown playlist URI: "+i);i=this.master.playlists[i]}var t=!this.media_||i.uri!==this.media_.uri;if(this.master.playlists[i.uri].endList)return this.request&&(this.request.onreadystatechange=null,this.request.abort(),this.request=null),this.state="HAVE_METADATA",this.media_=i,void(t&&(this.trigger("mediachanging"),this.trigger("mediachange")));if(t){if(this.state="SWITCHING_MEDIA",this.request){if(Ro(this.master.uri,i.uri)===this.request.url)return;this.request.onreadystatechange=null,this.request.abort(),this.request=null}this.media_&&this.trigger("mediachanging"),this.request=this.hls_.xhr({uri:Ro(this.master.uri,i.uri),withCredentials:this.withCredentials},function(t,e){if(r.request){if(t)return r.playlistRequestError(r.request,i.uri,n);r.haveMetadata(e,i.uri),"HAVE_MASTER"===n?r.trigger("loadedmetadata"):r.trigger("mediachange")}})}},s.prototype.pause=function(){this.stopRequest(),g.clearTimeout(this.mediaUpdateTimeout),"HAVE_NOTHING"===this.state&&(this.started=!1),"SWITCHING_MEDIA"===this.state?this.media_?this.state="HAVE_METADATA":this.state="HAVE_MASTER":"HAVE_CURRENT_METADATA"===this.state&&(this.state="HAVE_METADATA")},s.prototype.load=function(t){var e=this;g.clearTimeout(this.mediaUpdateTimeout);var i=this.media();if(t){var r=i?i.targetDuration/2*1e3:5e3;this.mediaUpdateTimeout=g.setTimeout(function(){return e.load()},r)}else this.started?i&&!i.endList?this.trigger("mediaupdatetimeout"):this.trigger("loadedplaylist"):this.start()},s.prototype.start=function(){var r=this;this.started=!0,this.request=this.hls_.xhr({uri:this.srcUrl,withCredentials:this.withCredentials},function(t,e){if(r.request){if(r.request=null,t)return r.error={status:e.status,message:"HLS playlist request error at URL: "+r.srcUrl,responseText:e.responseText,code:2},"HAVE_NOTHING"===r.state&&(r.started=!1),r.trigger("error");var i=new js;return i.push(e.responseText),i.end(),r.state="HAVE_MASTER",i.manifest.uri=r.srcUrl,i.manifest.playlists?(r.master=i.manifest,jo(r.master),Fo(r.master),r.trigger("loadedplaylist"),void(r.request||r.media(i.manifest.playlists[0]))):(r.master={mediaGroups:{AUDIO:{},VIDEO:{},"CLOSED-CAPTIONS":{},SUBTITLES:{}},uri:g.location.href,playlists:[{uri:r.srcUrl,id:0}]},r.master.playlists[r.srcUrl]=r.master.playlists[0],r.master.playlists[0].resolvedUri=r.srcUrl,r.master.playlists[0].attributes=r.master.playlists[0].attributes||{},r.haveMetadata(e,r.srcUrl),r.trigger("loadedmetadata"))}})},s}(As.EventTarget),qo=As.createTimeRange,Wo=function(t,e,i){var r,n;return"undefined"==typeof e&&(e=t.mediaSequence+t.segments.length),e<t.mediaSequence?0:(r=function(t,e){var i=0,r=e-t.mediaSequence,n=t.segments[r];if(n){if("undefined"!=typeof n.start)return{result:n.start,precise:!0};if("undefined"!=typeof n.end)return{result:n.end-n.duration,precise:!0}}for(;r--;){if("undefined"!=typeof(n=t.segments[r]).end)return{result:i+n.end,precise:!0};if(i+=n.duration,"undefined"!=typeof n.start)return{result:i+n.start,precise:!0}}return{result:i,precise:!1}}(t,e)).precise?r.result:(n=function(t,e){for(var i=0,r=void 0,n=e-t.mediaSequence;n<t.segments.length;n++){if("undefined"!=typeof(r=t.segments[n]).start)return{result:r.start-i,precise:!0};if(i+=r.duration,"undefined"!=typeof r.end)return{result:r.end-i,precise:!0}}return{result:-1,precise:!1}}(t,e)).precise?n.result:r.result+i},zo=function(t,e,i){if(!t)return 0;if("number"!=typeof i&&(i=0),"undefined"==typeof e){if(t.totalDuration)return t.totalDuration;if(!t.endList)return g.Infinity}return Wo(t,e,i)},Go=function(t,e,i){var r=0;if(i<e){var n=[i,e];e=n[0],i=n[1]}if(e<0){for(var s=e;s<Math.min(0,i);s++)r+=t.targetDuration;e=0}for(var a=e;a<i;a++)r+=t.segments[a].duration;return r},Xo=function(t){if(!t.segments.length)return 0;for(var e=t.segments.length-1,i=t.segments[e].duration||t.targetDuration,r=i+2*t.targetDuration;e--&&!(r<=(i+=t.segments[e].duration)););return Math.max(0,e)},Yo=function(t,e,i){if(!t||!t.segments)return null;if(t.endList)return zo(t);if(null===e)return null;e=e||0;var r=i?Xo(t):t.segments.length;return Wo(t,t.mediaSequence+r,e)},$o=function(t){return t-Math.floor(t)==0},Ko=function(t,e){if($o(e))return e+.1*t;for(var i=e.toString().split(".")[1].length,r=1;r<=i;r++){var n=Math.pow(10,r),s=e*n;if($o(s)||r===i)return(s+t)/n}},Qo=Ko.bind(null,1),Jo=Ko.bind(null,-1),Zo=function(t){return t.excludeUntil&&t.excludeUntil>Date.now()},tu=function(t){return t.excludeUntil&&t.excludeUntil===1/0},eu=function(t){var e=Zo(t);return!t.disabled&&!e},iu=function(t,e){return e.attributes&&e.attributes[t]},ru=function(t,e){if(1===t.playlists.length)return!0;var i=e.attributes.BANDWIDTH||Number.MAX_VALUE;return 0===t.playlists.filter(function(t){return!!eu(t)&&(t.attributes.BANDWIDTH||0)<i}).length},nu={duration:zo,seekable:function(t,e){var i=e||0,r=Yo(t,e,!0);return null===r?qo():qo(i,r)},safeLiveIndex:Xo,getMediaInfoForTime:function(t,e,i,r){var n=void 0,s=void 0,a=t.segments.length,o=e-r;if(o<0){if(0<i)for(n=i-1;0<=n;n--)if(s=t.segments[n],0<(o+=Jo(s.duration)))return{mediaIndex:n,startTime:r-Go(t,i,n)};return{mediaIndex:0,startTime:e}}if(i<0){for(n=i;n<0;n++)if((o-=t.targetDuration)<0)return{mediaIndex:0,startTime:e};i=0}for(n=i;n<a;n++)if(s=t.segments[n],(o-=Qo(s.duration))<0)return{mediaIndex:n,startTime:r+Go(t,i,n)};return{mediaIndex:a-1,startTime:e}},isEnabled:eu,isDisabled:function(t){return t.disabled},isBlacklisted:Zo,isIncompatible:tu,playlistEnd:Yo,isAes:function(t){for(var e=0;e<t.segments.length;e++)if(t.segments[e].key)return!0;return!1},isFmp4:function(t){for(var e=0;e<t.segments.length;e++)if(t.segments[e].map)return!0;return!1},hasAttribute:iu,estimateSegmentRequestTime:function(t,e,i){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:0;return iu("BANDWIDTH",i)?(t*i.attributes.BANDWIDTH-8*r)/e:NaN},isLowestEnabledRendition:ru},su=As.xhr,au=As.mergeOptions,ou=function(){return function t(e,r){e=au({timeout:45e3},e);var i=t.beforeRequest||As.Hls.xhr.beforeRequest;if(i&&"function"==typeof i){var n=i(e);n&&(e=n)}var s=su(e,function(t,e){var i=s.response;!t&&i&&(s.responseTime=Date.now(),s.roundTripTime=s.responseTime-s.requestTime,s.bytesReceived=i.byteLength||i.length,s.bandwidth||(s.bandwidth=Math.floor(s.bytesReceived/s.roundTripTime*8*1e3))),e.headers&&(s.responseHeaders=e.headers),t&&"ETIMEDOUT"===t.code&&(s.timedout=!0),t||s.aborted||200===e.statusCode||206===e.statusCode||0===e.statusCode||(t=new Error("XHR Failed with a response of: "+(s&&(i||s.responseText)))),r(t,s)}),a=s.abort;return s.abort=function(){return s.aborted=!0,a.apply(s,arguments)},s.uri=e.uri,s.requestTime=Date.now(),s}},uu=function(t,e){var i=t.toString(16);return"00".substring(0,2-i.length)+i+(e%2?" ":"")},lu=function(t){return 32<=t&&t<126?String.fromCharCode(t):"."},cu=function(i){var r={};return Object.keys(i).forEach(function(t){var e=i[t];ArrayBuffer.isView(e)?r[t]={bytes:e.buffer,byteOffset:e.byteOffset,byteLength:e.byteLength}:r[t]=e}),r},hu=function(t){var e=t.byterange||{length:1/0,offset:0};return[e.length,e.offset,t.resolvedUri].join(",")},du=function(t){for(var e=Array.prototype.slice.call(t),i="",r=0;r<e.length/16;r++)i+=e.slice(16*r,16*r+16).map(uu).join("")+" "+e.slice(16*r,16*r+16).map(lu).join("")+"\n";return i},pu=Object.freeze({createTransferableMessage:cu,initSegmentId:hu,hexDump:du,tagDump:function(t){var e=t.bytes;return du(e)},textRanges:function(t){var e,i,r="",n=void 0;for(n=0;n<t.length;n++)r+=(i=n,(e=t).start(i)+"-"+e.end(i)+" ");return r}}),fu=1/30,mu=function(t,e){var i=[],r=void 0;if(t&&t.length)for(r=0;r<t.length;r++)e(t.start(r),t.end(r))&&i.push([t.start(r),t.end(r)]);return As.createTimeRanges(i)},gu=function(t,i){return mu(t,function(t,e){return t-fu<=i&&i<=e+fu})},yu=function(t,e){return mu(t,function(t){return e<=t-fu})},vu=function(t){var e=[];if(!t||!t.length)return"";for(var i=0;i<t.length;i++)e.push(t.start(i)+" => "+t.end(i));return e.join(", ")},_u=function(t){for(var e=[],i=0;i<t.length;i++)e.push({start:t.start(i),end:t.end(i)});return e},bu=function(t,e,i){var r=void 0,n=void 0;if(i&&i.cues)for(r=i.cues.length;r--;)(n=i.cues[r]).startTime<=e&&n.endTime>=t&&i.removeCue(n)},Tu=function(t){return isNaN(t)||Math.abs(t)===1/0?Number.MAX_VALUE:t},Su=function(t,e,i){var n=g.WebKitDataCue||g.VTTCue;if(e&&e.forEach(function(t){var e=t.stream;this.inbandTextTracks_[e].addCue(new n(t.startTime+this.timestampOffset,t.endTime+this.timestampOffset,t.text))},t),i){var s=Tu(t.mediaSource_.duration);if(i.forEach(function(t){var r=t.cueTime+this.timestampOffset;t.frames.forEach(function(t){var e,i=new n(r,r,t.value||t.url||t.data||"");i.frame=t,i.value=t,e=i,Object.defineProperties(e.frame,{id:{get:function(){return As.log.warn("cue.frame.id is deprecated. Use cue.value.key instead."),e.value.key}},value:{get:function(){return As.log.warn("cue.frame.value is deprecated. Use cue.value.data instead."),e.value.data}},privateData:{get:function(){return As.log.warn("cue.frame.privateData is deprecated. Use cue.value.data instead."),e.value.data}}}),this.metadataTrack_.addCue(i)},this)},t),t.metadataTrack_&&t.metadataTrack_.cues&&t.metadataTrack_.cues.length){for(var r=t.metadataTrack_.cues,a=[],o=0;o<r.length;o++)r[o]&&a.push(r[o]);var u=a.reduce(function(t,e){var i=t[e.startTime]||[];return i.push(e),t[e.startTime]=i,t},{}),l=Object.keys(u).sort(function(t,e){return Number(t)-Number(e)});l.forEach(function(t,e){var i=u[t],r=Number(l[e+1])||s;i.forEach(function(t){t.endTime=r})})}}},ku="undefined"!=typeof window?window:{},Cu="undefined"==typeof Symbol?"__target":Symbol(),Eu="application/javascript",wu=ku.BlobBuilder||ku.WebKitBlobBuilder||ku.MozBlobBuilder||ku.MSBlobBuilder,Au=ku.URL||ku.webkitURL||Au&&Au.msURL,Lu=ku.Worker;function Pu(n,s){return function(t){var e=this;if(!s)return new Lu(n);if(Lu&&!t){var i=Du(s.toString().replace(/^function.+?{/,"").slice(0,-1));return this[Cu]=new Lu(i),function(t,e){if(!t||!e)return;var i=t.terminate;t.objURL=e,t.terminate=function(){t.objURL&&Au.revokeObjectURL(t.objURL),i.call(t)}}(this[Cu],i),this[Cu]}var r={postMessage:function(t){e.onmessage&&setTimeout(function(){e.onmessage({data:t,target:r})})}};s.call(r),this.postMessage=function(t){setTimeout(function(){r.onmessage({data:t,target:e})})},this.isThisThread=!0}}if(Lu){var Ou,xu=Du("self.onmessage = function () {}"),Iu=new Uint8Array(1);try{(Ou=new Lu(xu)).postMessage(Iu,[Iu.buffer])}catch(t){Lu=null}finally{Au.revokeObjectURL(xu),Ou&&Ou.terminate()}}function Du(e){try{return Au.createObjectURL(new Blob([e],{type:Eu}))}catch(t){var i=new wu;return i.append(e),Au.createObjectURL(i.getBlob(type))}}var Ru=new Pu("./transmuxer-worker.worker.js",function(ie,t){var re=this;!function(){var o,e,i,n,s,r,t,a,u,l,c,h,d,p,f,m,g,y,v,_,b,T,S,k,C,E,w,A,L,P,O,x,I,D,R,M,U,N,B,j,F="undefined"!=typeof ie?ie:"undefined"!=typeof global?global:"undefined"!=typeof re?re:{},H="undefined"!=typeof ie?ie:"undefined"!=typeof F?F:"undefined"!=typeof re?re:{},V=Math.pow(2,32)-1;!function(){var t;if(T={avc1:[],avcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],mvex:[],mvhd:[],sdtp:[],smhd:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],styp:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[]},"undefined"!=typeof Uint8Array){for(t in T)T.hasOwnProperty(t)&&(T[t]=[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]);S=new Uint8Array(["i".charCodeAt(0),"s".charCodeAt(0),"o".charCodeAt(0),"m".charCodeAt(0)]),C=new Uint8Array(["a".charCodeAt(0),"v".charCodeAt(0),"c".charCodeAt(0),"1".charCodeAt(0)]),k=new Uint8Array([0,0,0,1]),E=new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),w=new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]),A={video:E,audio:w},O=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),P=new Uint8Array([0,0,0,0,0,0,0,0]),x=new Uint8Array([0,0,0,0,0,0,0,0]),I=x,D=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),R=x,L=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0])}}(),o=function(t){var e,i,r=[],n=0;for(e=1;e<arguments.length;e++)r.push(arguments[e]);for(e=r.length;e--;)n+=r[e].byteLength;for(i=new Uint8Array(n+8),new DataView(i.buffer,i.byteOffset,i.byteLength).setUint32(0,i.byteLength),i.set(t,4),e=0,n=8;e<r.length;e++)i.set(r[e],n),n+=r[e].byteLength;return i},e=function(){return o(T.dinf,o(T.dref,O))},i=function(t){return o(T.esds,new Uint8Array([0,0,0,0,3,25,0,0,0,4,17,64,21,0,6,0,0,0,218,192,0,0,218,192,5,2,t.audioobjecttype<<3|t.samplingfrequencyindex>>>1,t.samplingfrequencyindex<<7|t.channelcount<<3,6,1,2]))},f=function(t){return o(T.hdlr,A[t])},p=function(t){var e=new Uint8Array([0,0,0,0,0,0,0,2,0,0,0,3,0,1,95,144,t.duration>>>24&255,t.duration>>>16&255,t.duration>>>8&255,255&t.duration,85,196,0,0]);return t.samplerate&&(e[12]=t.samplerate>>>24&255,e[13]=t.samplerate>>>16&255,e[14]=t.samplerate>>>8&255,e[15]=255&t.samplerate),o(T.mdhd,e)},d=function(t){return o(T.mdia,p(t),f(t.type),r(t))},s=function(t){return o(T.mfhd,new Uint8Array([0,0,0,0,(4278190080&t)>>24,(16711680&t)>>16,(65280&t)>>8,255&t]))},r=function(t){return o(T.minf,"video"===t.type?o(T.vmhd,L):o(T.smhd,P),e(),g(t))},t=function(t,e){for(var i=[],r=e.length;r--;)i[r]=v(e[r]);return o.apply(null,[T.moof,s(t)].concat(i))},a=function(t){for(var e=t.length,i=[];e--;)i[e]=c(t[e]);return o.apply(null,[T.moov,l(4294967295)].concat(i).concat(u(t)))},u=function(t){for(var e=t.length,i=[];e--;)i[e]=_(t[e]);return o.apply(null,[T.mvex].concat(i))},l=function(t){var e=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,0,1,95,144,(4278190080&t)>>24,(16711680&t)>>16,(65280&t)>>8,255&t,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return o(T.mvhd,e)},m=function(t){var e,i,r=t.samples||[],n=new Uint8Array(4+r.length);for(i=0;i<r.length;i++)e=r[i].flags,n[i+4]=e.dependsOn<<4|e.isDependedOn<<2|e.hasRedundancy;return o(T.sdtp,n)},g=function(t){return o(T.stbl,y(t),o(T.stts,R),o(T.stsc,I),o(T.stsz,D),o(T.stco,x))},y=function(t){return o(T.stsd,new Uint8Array([0,0,0,0,0,0,0,1]),"video"===t.type?M(t):U(t))},M=function(t){var e,i=t.sps||[],r=t.pps||[],n=[],s=[];for(e=0;e<i.length;e++)n.push((65280&i[e].byteLength)>>>8),n.push(255&i[e].byteLength),n=n.concat(Array.prototype.slice.call(i[e]));for(e=0;e<r.length;e++)s.push((65280&r[e].byteLength)>>>8),s.push(255&r[e].byteLength),s=s.concat(Array.prototype.slice.call(r[e]));return o(T.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(65280&t.width)>>8,255&t.width,(65280&t.height)>>8,255&t.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,19,118,105,100,101,111,106,115,45,99,111,110,116,114,105,98,45,104,108,115,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),o(T.avcC,new Uint8Array([1,t.profileIdc,t.profileCompatibility,t.levelIdc,255].concat([i.length]).concat(n).concat([r.length]).concat(s))),o(T.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])))},U=function(t){return o(T.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,(65280&t.channelcount)>>8,255&t.channelcount,(65280&t.samplesize)>>8,255&t.samplesize,0,0,0,0,(65280&t.samplerate)>>8,255&t.samplerate,0,0]),i(t))},h=function(t){var e=new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,(4278190080&t.id)>>24,(16711680&t.id)>>16,(65280&t.id)>>8,255&t.id,0,0,0,0,(4278190080&t.duration)>>24,(16711680&t.duration)>>16,(65280&t.duration)>>8,255&t.duration,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,(65280&t.width)>>8,255&t.width,0,0,(65280&t.height)>>8,255&t.height,0,0]);return o(T.tkhd,e)},v=function(t){var e,i,r,n,s,a;return e=o(T.tfhd,new Uint8Array([0,0,0,58,(4278190080&t.id)>>24,(16711680&t.id)>>16,(65280&t.id)>>8,255&t.id,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0])),s=Math.floor(t.baseMediaDecodeTime/(V+1)),a=Math.floor(t.baseMediaDecodeTime%(V+1)),i=o(T.tfdt,new Uint8Array([1,0,0,0,s>>>24&255,s>>>16&255,s>>>8&255,255&s,a>>>24&255,a>>>16&255,a>>>8&255,255&a])),92,"audio"===t.type?(r=b(t,92),o(T.traf,e,i,r)):(n=m(t),r=b(t,n.length+92),o(T.traf,e,i,r,n))},c=function(t){return t.duration=t.duration||4294967295,o(T.trak,h(t),d(t))},_=function(t){var e=new Uint8Array([0,0,0,0,(4278190080&t.id)>>24,(16711680&t.id)>>16,(65280&t.id)>>8,255&t.id,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return"video"!==t.type&&(e[e.length-1]=0),o(T.trex,e)},j=function(t,e){var i=0,r=0,n=0,s=0;return t.length&&(void 0!==t[0].duration&&(i=1),void 0!==t[0].size&&(r=2),void 0!==t[0].flags&&(n=4),void 0!==t[0].compositionTimeOffset&&(s=8)),[0,0,i|r|n|s,1,(4278190080&t.length)>>>24,(16711680&t.length)>>>16,(65280&t.length)>>>8,255&t.length,(4278190080&e)>>>24,(16711680&e)>>>16,(65280&e)>>>8,255&e]},B=function(t,e){var i,r,n,s;for(e+=20+16*(r=t.samples||[]).length,i=j(r,e),s=0;s<r.length;s++)n=r[s],i=i.concat([(4278190080&n.duration)>>>24,(16711680&n.duration)>>>16,(65280&n.duration)>>>8,255&n.duration,(4278190080&n.size)>>>24,(16711680&n.size)>>>16,(65280&n.size)>>>8,255&n.size,n.flags.isLeading<<2|n.flags.dependsOn,n.flags.isDependedOn<<6|n.flags.hasRedundancy<<4|n.flags.paddingValue<<1|n.flags.isNonSyncSample,61440&n.flags.degradationPriority,15&n.flags.degradationPriority,(4278190080&n.compositionTimeOffset)>>>24,(16711680&n.compositionTimeOffset)>>>16,(65280&n.compositionTimeOffset)>>>8,255&n.compositionTimeOffset]);return o(T.trun,new Uint8Array(i))},N=function(t,e){var i,r,n,s;for(e+=20+8*(r=t.samples||[]).length,i=j(r,e),s=0;s<r.length;s++)n=r[s],i=i.concat([(4278190080&n.duration)>>>24,(16711680&n.duration)>>>16,(65280&n.duration)>>>8,255&n.duration,(4278190080&n.size)>>>24,(16711680&n.size)>>>16,(65280&n.size)>>>8,255&n.size]);return o(T.trun,new Uint8Array(i))},b=function(t,e){return"audio"===t.type?N(t,e):B(t,e)};var q={ftyp:n=function(){return o(T.ftyp,S,k,S,C)},mdat:function(t){return o(T.mdat,t)},moof:t,moov:a,initSegment:function(t){var e,i=n(),r=a(t);return(e=new Uint8Array(i.byteLength+r.byteLength)).set(i),e.set(r,i.byteLength),e}},W=function(){this.init=function(){var s={};this.on=function(t,e){s[t]||(s[t]=[]),s[t]=s[t].concat(e)},this.off=function(t,e){var i;return!!s[t]&&(i=s[t].indexOf(e),s[t]=s[t].slice(),s[t].splice(i,1),-1<i)},this.trigger=function(t){var e,i,r,n;if(e=s[t])if(2===arguments.length)for(r=e.length,i=0;i<r;++i)e[i].call(this,arguments[1]);else{for(n=[],i=arguments.length,i=1;i<arguments.length;++i)n.push(arguments[i]);for(r=e.length,i=0;i<r;++i)e[i].apply(this,n)}},this.dispose=function(){s={}}}};W.prototype.pipe=function(e){return this.on("data",function(t){e.push(t)}),this.on("done",function(t){e.flush(t)}),e},W.prototype.push=function(t){this.trigger("data",t)},W.prototype.flush=function(t){this.trigger("done",t)};var z=W,G=function t(){t.prototype.init.call(this),this.captionPackets_=[],this.ccStreams_=[new Q(0,0),new Q(0,1),new Q(1,0),new Q(1,1)],this.reset(),this.ccStreams_.forEach(function(t){t.on("data",this.trigger.bind(this,"data")),t.on("done",this.trigger.bind(this,"done"))},this)};(G.prototype=new z).push=function(t){var e,i,r;if("sei_rbsp"===t.nalUnitType&&(4===(e=function(t){for(var e=0,i={payloadType:-1,payloadSize:0},r=0,n=0;e<t.byteLength&&128!==t[e];){for(;255===t[e];)r+=255,e++;for(r+=t[e++];255===t[e];)n+=255,e++;if(n+=t[e++],!i.payload&&4===r){i.payloadType=r,i.payloadSize=n,i.payload=t.subarray(e,e+n);break}e+=n,n=r=0}return i}(t.escapedRBSP)).payloadType&&(i=181!==(r=e).payload[0]?null:49!=(r.payload[1]<<8|r.payload[2])?null:"GA94"!==String.fromCharCode(r.payload[3],r.payload[4],r.payload[5],r.payload[6])?null:3!==r.payload[7]?null:r.payload.subarray(8,r.payload.length-1))))if(t.dts<this.latestDts_)this.ignoreNextEqualDts_=!0;else{if(t.dts===this.latestDts_&&this.ignoreNextEqualDts_)return this.numSameDts_--,void(this.numSameDts_||(this.ignoreNextEqualDts_=!1));this.captionPackets_=this.captionPackets_.concat(function(t,e){var i,r,n,s,a=[];if(!(64&e[0]))return a;for(r=31&e[0],i=0;i<r;i++)s={type:3&e[2+(n=3*i)],pts:t},4&e[n+2]&&(s.ccData=e[n+3]<<8|e[n+4],a.push(s));return a}(t.pts,i)),this.latestDts_!==t.dts&&(this.numSameDts_=0),this.numSameDts_++,this.latestDts_=t.dts}},G.prototype.flush=function(){this.captionPackets_.length?(this.captionPackets_.forEach(function(t,e){t.presortIndex=e}),this.captionPackets_.sort(function(t,e){return t.pts===e.pts?t.presortIndex-e.presortIndex:t.pts-e.pts}),this.captionPackets_.forEach(function(t){t.type<2&&this.dispatchCea608Packet(t)},this),this.captionPackets_.length=0,this.ccStreams_.forEach(function(t){t.flush()},this)):this.ccStreams_.forEach(function(t){t.flush()},this)},G.prototype.reset=function(){this.latestDts_=null,this.ignoreNextEqualDts_=!1,this.numSameDts_=0,this.activeCea608Channel_=[null,null],this.ccStreams_.forEach(function(t){t.reset()})},G.prototype.dispatchCea608Packet=function(t){this.setsChannel1Active(t)?this.activeCea608Channel_[t.type]=0:this.setsChannel2Active(t)&&(this.activeCea608Channel_[t.type]=1),null!==this.activeCea608Channel_[t.type]&&this.ccStreams_[(t.type<<1)+this.activeCea608Channel_[t.type]].push(t)},G.prototype.setsChannel1Active=function(t){return 4096==(30720&t.ccData)},G.prototype.setsChannel2Active=function(t){return 6144==(30720&t.ccData)};var X={42:225,92:233,94:237,95:243,96:250,123:231,124:247,125:209,126:241,127:9608,304:174,305:176,306:189,307:191,308:8482,309:162,310:163,311:9834,312:224,313:160,314:232,315:226,316:234,317:238,318:244,319:251,544:193,545:201,546:211,547:218,548:220,549:252,550:8216,551:161,552:42,553:39,554:8212,555:169,556:8480,557:8226,558:8220,559:8221,560:192,561:194,562:199,563:200,564:202,565:203,566:235,567:206,568:207,569:239,570:212,571:217,572:249,573:219,574:171,575:187,800:195,801:227,802:205,803:204,804:236,805:210,806:242,807:213,808:245,809:123,810:125,811:92,812:94,813:95,814:124,815:126,816:196,817:228,818:214,819:246,820:223,821:165,822:164,823:9474,824:197,825:229,826:216,827:248,828:9484,829:9488,830:9492,831:9496},Y=function(t){return null===t?"":(t=X[t]||t,String.fromCharCode(t))},$=[4352,4384,4608,4640,5376,5408,5632,5664,5888,5920,4096,4864,4896,5120,5152],K=function(){for(var t=[],e=15;e--;)t.push("");return t},Q=function t(e,i){t.prototype.init.call(this),this.field_=e||0,this.dataChannel_=i||0,this.name_="CC"+(1+(this.field_<<1|this.dataChannel_)),this.setConstants(),this.reset(),this.push=function(t){var e,i,r,n,s;if((e=32639&t.ccData)!==this.lastControlCode_){if(4096==(61440&e)?this.lastControlCode_=e:e!==this.PADDING_&&(this.lastControlCode_=null),r=e>>>8,n=255&e,e!==this.PADDING_)if(e===this.RESUME_CAPTION_LOADING_)this.mode_="popOn";else if(e===this.END_OF_CAPTION_)this.clearFormatting(t.pts),this.flushDisplayed(t.pts),i=this.displayed_,this.displayed_=this.nonDisplayed_,this.nonDisplayed_=i,this.startPts_=t.pts;else if(e===this.ROLL_UP_2_ROWS_)this.topRow_=13,this.mode_="rollUp";else if(e===this.ROLL_UP_3_ROWS_)this.topRow_=12,this.mode_="rollUp";else if(e===this.ROLL_UP_4_ROWS_)this.topRow_=11,this.mode_="rollUp";else if(e===this.CARRIAGE_RETURN_)this.clearFormatting(t.pts),this.flushDisplayed(t.pts),this.shiftRowsUp_(),this.startPts_=t.pts;else if(e===this.BACKSPACE_)"popOn"===this.mode_?this.nonDisplayed_[14]=this.nonDisplayed_[14].slice(0,-1):this.displayed_[14]=this.displayed_[14].slice(0,-1);else if(e===this.ERASE_DISPLAYED_MEMORY_)this.flushDisplayed(t.pts),this.displayed_=K();else if(e===this.ERASE_NON_DISPLAYED_MEMORY_)this.nonDisplayed_=K();else if(e===this.RESUME_DIRECT_CAPTIONING_)this.mode_="paintOn";else if(this.isSpecialCharacter(r,n))s=Y((r=(3&r)<<8)|n),this[this.mode_](t.pts,s),this.column_++;else if(this.isExtCharacter(r,n))"popOn"===this.mode_?this.nonDisplayed_[this.row_]=this.nonDisplayed_[this.row_].slice(0,-1):this.displayed_[14]=this.displayed_[14].slice(0,-1),s=Y((r=(3&r)<<8)|n),this[this.mode_](t.pts,s),this.column_++;else if(this.isMidRowCode(r,n))this.clearFormatting(t.pts),this[this.mode_](t.pts," "),this.column_++,14==(14&n)&&this.addFormatting(t.pts,["i"]),1==(1&n)&&this.addFormatting(t.pts,["u"]);else if(this.isOffsetControlCode(r,n))this.column_+=3&n;else if(this.isPAC(r,n)){var a=$.indexOf(7968&e);a!==this.row_&&(this.clearFormatting(t.pts),this.row_=a),1&n&&-1===this.formatting_.indexOf("u")&&this.addFormatting(t.pts,["u"]),16==(16&e)&&(this.column_=4*((14&e)>>1)),this.isColorPAC(n)&&14==(14&n)&&this.addFormatting(t.pts,["i"])}else this.isNormalChar(r)&&(0===n&&(n=null),s=Y(r),s+=Y(n),this[this.mode_](t.pts,s),this.column_+=s.length)}else this.lastControlCode_=null}};Q.prototype=new z,Q.prototype.flushDisplayed=function(t){var e=this.displayed_.map(function(t){return t.trim()}).join("\n").replace(/^\n+|\n+$/g,"");e.length&&this.trigger("data",{startPts:this.startPts_,endPts:t,text:e,stream:this.name_})},Q.prototype.reset=function(){this.mode_="popOn",this.topRow_=0,this.startPts_=0,this.displayed_=K(),this.nonDisplayed_=K(),this.lastControlCode_=null,this.column_=0,this.row_=14,this.formatting_=[]},Q.prototype.setConstants=function(){0===this.dataChannel_?(this.BASE_=16,this.EXT_=17,this.CONTROL_=(20|this.field_)<<8,this.OFFSET_=23):1===this.dataChannel_&&(this.BASE_=24,this.EXT_=25,this.CONTROL_=(28|this.field_)<<8,this.OFFSET_=31),this.PADDING_=0,this.RESUME_CAPTION_LOADING_=32|this.CONTROL_,this.END_OF_CAPTION_=47|this.CONTROL_,this.ROLL_UP_2_ROWS_=37|this.CONTROL_,this.ROLL_UP_3_ROWS_=38|this.CONTROL_,this.ROLL_UP_4_ROWS_=39|this.CONTROL_,this.CARRIAGE_RETURN_=45|this.CONTROL_,this.RESUME_DIRECT_CAPTIONING_=41|this.CONTROL_,this.BACKSPACE_=33|this.CONTROL_,this.ERASE_DISPLAYED_MEMORY_=44|this.CONTROL_,this.ERASE_NON_DISPLAYED_MEMORY_=46|this.CONTROL_},Q.prototype.isSpecialCharacter=function(t,e){return t===this.EXT_&&48<=e&&e<=63},Q.prototype.isExtCharacter=function(t,e){return(t===this.EXT_+1||t===this.EXT_+2)&&32<=e&&e<=63},Q.prototype.isMidRowCode=function(t,e){return t===this.EXT_&&32<=e&&e<=47},Q.prototype.isOffsetControlCode=function(t,e){return t===this.OFFSET_&&33<=e&&e<=35},Q.prototype.isPAC=function(t,e){return t>=this.BASE_&&t<this.BASE_+8&&64<=e&&e<=127},Q.prototype.isColorPAC=function(t){return 64<=t&&t<=79||96<=t&&t<=127},Q.prototype.isNormalChar=function(t){return 32<=t&&t<=127},Q.prototype.addFormatting=function(t,e){this.formatting_=this.formatting_.concat(e);var i=e.reduce(function(t,e){return t+"<"+e+">"},"");this[this.mode_](t,i)},Q.prototype.clearFormatting=function(t){if(this.formatting_.length){var e=this.formatting_.reverse().reduce(function(t,e){return t+"</"+e+">"},"");this.formatting_=[],this[this.mode_](t,e)}},Q.prototype.popOn=function(t,e){var i=this.nonDisplayed_[this.row_];i+=e,this.nonDisplayed_[this.row_]=i},Q.prototype.rollUp=function(t,e){var i=this.displayed_[14];i+=e,this.displayed_[14]=i},Q.prototype.shiftRowsUp_=function(){var t;for(t=0;t<this.topRow_;t++)this.displayed_[t]="";for(t=this.topRow_;t<14;t++)this.displayed_[t]=this.displayed_[t+1];this.displayed_[14]=""},Q.prototype.paintOn=function(){};var J={CaptionStream:G,Cea608Stream:Q},Z={H264_STREAM_TYPE:27,ADTS_STREAM_TYPE:15,METADATA_STREAM_TYPE:21},tt=function(t,e){var i=1;for(e<t&&(i=-1);4294967296<Math.abs(e-t);)t+=8589934592*i;return t},et=function t(e){var i,r;t.prototype.init.call(this),this.type_=e,this.push=function(t){t.type===this.type_&&(void 0===r&&(r=t.dts),t.dts=tt(t.dts,r),t.pts=tt(t.pts,r),i=t.dts,this.trigger("data",t))},this.flush=function(){r=i,this.trigger("done")},this.discontinuity=function(){i=r=void 0}};et.prototype=new z;var it,rt=et,nt=function(t,e,i){var r,n="";for(r=e;r<i;r++)n+="%"+("00"+t[r].toString(16)).slice(-2);return n},st=function(t,e,i){return decodeURIComponent(nt(t,e,i))},at=function(t){return t[0]<<21|t[1]<<14|t[2]<<7|t[3]},ot={TXXX:function(t){var e;if(3===t.data[0]){for(e=1;e<t.data.length;e++)if(0===t.data[e]){t.description=st(t.data,1,e),t.value=st(t.data,e+1,t.data.length).replace(/\0*$/,"");break}t.data=t.value}},WXXX:function(t){var e;if(3===t.data[0])for(e=1;e<t.data.length;e++)if(0===t.data[e]){t.description=st(t.data,1,e),t.url=st(t.data,e+1,t.data.length);break}},PRIV:function(t){var e,i;for(e=0;e<t.data.length;e++)if(0===t.data[e]){t.owner=(i=t.data,unescape(nt(i,0,e)));break}t.privateData=t.data.subarray(e+1),t.data=t.privateData}};(it=function(t){var e,u={debug:!(!t||!t.debug),descriptor:t&&t.descriptor},l=0,c=[],h=0;if(it.prototype.init.call(this),this.dispatchType=Z.METADATA_STREAM_TYPE.toString(16),u.descriptor)for(e=0;e<u.descriptor.length;e++)this.dispatchType+=("00"+u.descriptor[e].toString(16)).slice(-2);this.push=function(t){var e,i,r,n,s;if("timed-metadata"===t.type)if(t.dataAlignmentIndicator&&(h=0,c.length=0),0===c.length&&(t.data.length<10||t.data[0]!=="I".charCodeAt(0)||t.data[1]!=="D".charCodeAt(0)||t.data[2]!=="3".charCodeAt(0)))u.debug;else if(c.push(t),h+=t.data.byteLength,1===c.length&&(l=at(t.data.subarray(6,10)),l+=10),!(h<l)){for(e={data:new Uint8Array(l),frames:[],pts:c[0].pts,dts:c[0].dts},s=0;s<l;)e.data.set(c[0].data.subarray(0,l-s),s),s+=c[0].data.byteLength,h-=c[0].data.byteLength,c.shift();i=10,64&e.data[5]&&(i+=4,i+=at(e.data.subarray(10,14)),l-=at(e.data.subarray(16,20)));do{if((r=at(e.data.subarray(i+4,i+8)))<1)return;if((n={id:String.fromCharCode(e.data[i],e.data[i+1],e.data[i+2],e.data[i+3]),data:e.data.subarray(i+10,i+r+10)}).key=n.id,ot[n.id]&&(ot[n.id](n),"com.apple.streaming.transportStreamTimestamp"===n.owner)){var a=n.data,o=(1&a[3])<<30|a[4]<<22|a[5]<<14|a[6]<<6|a[7]>>>2;o*=4,o+=3&a[7],n.timeStamp=o,void 0===e.pts&&void 0===e.dts&&(e.pts=n.timeStamp,e.dts=n.timeStamp),this.trigger("timestamp",n)}e.frames.push(n),i+=10,i+=r}while(i<l);this.trigger("data",e)}}}).prototype=new z;var ut,lt,ct,ht=it,dt=rt;(ut=function(){var n=new Uint8Array(188),s=0;ut.prototype.init.call(this),this.push=function(t){var e,i=0,r=188;for(s?((e=new Uint8Array(t.byteLength+s)).set(n.subarray(0,s)),e.set(t,s),s=0):e=t;r<e.byteLength;)71!==e[i]||71!==e[r]?(i++,r++):(this.trigger("data",e.subarray(i,r)),i+=188,r+=188);i<e.byteLength&&(n.set(e.subarray(i),0),s=e.byteLength-i)},this.flush=function(){188===s&&71===n[0]&&(this.trigger("data",n),s=0),this.trigger("done")}}).prototype=new z,(lt=function(){var r,n,s,a;lt.prototype.init.call(this),(a=this).packetsWaitingForPmt=[],this.programMapTable=void 0,r=function(t,e){var i=0;e.payloadUnitStartIndicator&&(i+=t[i]+1),"pat"===e.type?n(t.subarray(i),e):s(t.subarray(i),e)},n=function(t,e){e.section_number=t[7],e.last_section_number=t[8],a.pmtPid=(31&t[10])<<8|t[11],e.pmtPid=a.pmtPid},s=function(t,e){var i,r;if(1&t[5]){for(a.programMapTable={video:null,audio:null,"timed-metadata":{}},i=3+((15&t[1])<<8|t[2])-4,r=12+((15&t[10])<<8|t[11]);r<i;){var n=t[r],s=(31&t[r+1])<<8|t[r+2];n===Z.H264_STREAM_TYPE&&null===a.programMapTable.video?a.programMapTable.video=s:n===Z.ADTS_STREAM_TYPE&&null===a.programMapTable.audio?a.programMapTable.audio=s:n===Z.METADATA_STREAM_TYPE&&(a.programMapTable["timed-metadata"][s]=n),r+=5+((15&t[r+3])<<8|t[r+4])}e.programMapTable=a.programMapTable}},this.push=function(t){var e={},i=4;if(e.payloadUnitStartIndicator=!!(64&t[1]),e.pid=31&t[1],e.pid<<=8,e.pid|=t[2],1<(48&t[3])>>>4&&(i+=t[i]+1),0===e.pid)e.type="pat",r(t.subarray(i),e),this.trigger("data",e);else if(e.pid===this.pmtPid)for(e.type="pmt",r(t.subarray(i),e),this.trigger("data",e);this.packetsWaitingForPmt.length;)this.processPes_.apply(this,this.packetsWaitingForPmt.shift());else void 0===this.programMapTable?this.packetsWaitingForPmt.push([t,i,e]):this.processPes_(t,i,e)},this.processPes_=function(t,e,i){i.pid===this.programMapTable.video?i.streamType=Z.H264_STREAM_TYPE:i.pid===this.programMapTable.audio?i.streamType=Z.ADTS_STREAM_TYPE:i.streamType=this.programMapTable["timed-metadata"][i.pid],i.type="pes",i.data=t.subarray(e),this.trigger("data",i)}}).prototype=new z,lt.STREAM_TYPES={h264:27,adts:15},(ct=function(){var d=this,r={data:[],size:0},n={data:[],size:0},s={data:[],size:0},a=function(t,e,i){var r,n,s=new Uint8Array(t.size),a={type:e},o=0,u=0;if(t.data.length&&!(t.size<9)){for(a.trackId=t.data[0].pid,o=0;o<t.data.length;o++)n=t.data[o],s.set(n.data,u),u+=n.data.byteLength;var l,c,h;l=s,(c=a).packetLength=6+(l[4]<<8|l[5]),c.dataAlignmentIndicator=0!=(4&l[6]),192&(h=l[7])&&(c.pts=(14&l[9])<<27|(255&l[10])<<20|(254&l[11])<<12|(255&l[12])<<5|(254&l[13])>>>3,c.pts*=4,c.pts+=(6&l[13])>>>1,c.dts=c.pts,64&h&&(c.dts=(14&l[14])<<27|(255&l[15])<<20|(254&l[16])<<12|(255&l[17])<<5|(254&l[18])>>>3,c.dts*=4,c.dts+=(6&l[18])>>>1)),c.data=l.subarray(9+l[8]),r="video"===e||a.packetLength<=t.size,(i||r)&&(t.size=0,t.data.length=0),r&&d.trigger("data",a)}};ct.prototype.init.call(this),this.push=function(i){({pat:function(){},pes:function(){var t,e;switch(i.streamType){case Z.H264_STREAM_TYPE:case Z.H264_STREAM_TYPE:t=r,e="video";break;case Z.ADTS_STREAM_TYPE:t=n,e="audio";break;case Z.METADATA_STREAM_TYPE:t=s,e="timed-metadata";break;default:return}i.payloadUnitStartIndicator&&a(t,e,!0),t.data.push(i),t.size+=i.data.byteLength},pmt:function(){var t={type:"metadata",tracks:[]},e=i.programMapTable;null!==e.video&&t.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+e.video,codec:"avc",type:"video"}),null!==e.audio&&t.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+e.audio,codec:"adts",type:"audio"}),d.trigger("data",t)}})[i.type]()},this.flush=function(){a(r,"video"),a(n,"audio"),a(s,"timed-metadata"),this.trigger("done")}}).prototype=new z;var pt={PAT_PID:0,MP2T_PACKET_LENGTH:188,TransportPacketStream:ut,TransportParseStream:lt,ElementaryStream:ct,TimestampRolloverStream:dt,CaptionStream:J.CaptionStream,Cea608Stream:J.Cea608Stream,MetadataStream:ht};for(var ft in Z)Z.hasOwnProperty(ft)&&(pt[ft]=Z[ft]);var mt,gt=pt,yt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350];(mt=function(){var l;mt.prototype.init.call(this),this.push=function(t){var e,i,r,n,s,a,o=0,u=0;if("audio"===t.type)for(l?(n=l,(l=new Uint8Array(n.byteLength+t.data.byteLength)).set(n),l.set(t.data,n.byteLength)):l=t.data;o+5<l.length;)if(255===l[o]&&240==(246&l[o+1])){if(i=2*(1&~l[o+1]),e=(3&l[o+3])<<11|l[o+4]<<3|(224&l[o+5])>>5,a=9e4*(s=1024*(1+(3&l[o+6])))/yt[(60&l[o+2])>>>2],r=o+e,l.byteLength<r)return;if(this.trigger("data",{pts:t.pts+u*a,dts:t.dts+u*a,sampleCount:s,audioobjecttype:1+(l[o+2]>>>6&3),channelcount:(1&l[o+2])<<2|(192&l[o+3])>>>6,samplerate:yt[(60&l[o+2])>>>2],samplingfrequencyindex:(60&l[o+2])>>>2,samplesize:16,data:l.subarray(o+7+i,r)}),l.byteLength===r)return void(l=void 0);u++,l=l.subarray(r)}else o++},this.flush=function(){this.trigger("done")}}).prototype=new z;var vt,_t,bt,Tt=mt,St=function(r){var n=r.byteLength,s=0,a=0;this.length=function(){return 8*n},this.bitsAvailable=function(){return 8*n+a},this.loadWord=function(){var t=r.byteLength-n,e=new Uint8Array(4),i=Math.min(4,n);if(0===i)throw new Error("no bytes available");e.set(r.subarray(t,t+i)),s=new DataView(e.buffer).getUint32(0),a=8*i,n-=i},this.skipBits=function(t){var e;t<a||(t-=a,t-=8*(e=Math.floor(t/8)),n-=e,this.loadWord()),s<<=t,a-=t},this.readBits=function(t){var e=Math.min(a,t),i=s>>>32-e;return 0<(a-=e)?s<<=e:0<n&&this.loadWord(),0<(e=t-e)?i<<e|this.readBits(e):i},this.skipLeadingZeros=function(){var t;for(t=0;t<a;++t)if(0!=(s&2147483648>>>t))return s<<=t,a-=t,t;return this.loadWord(),t+this.skipLeadingZeros()},this.skipUnsignedExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros())},this.skipExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros())},this.readUnsignedExpGolomb=function(){var t=this.skipLeadingZeros();return this.readBits(t+1)-1},this.readExpGolomb=function(){var t=this.readUnsignedExpGolomb();return 1&t?1+t>>>1:-1*(t>>>1)},this.readBoolean=function(){return 1===this.readBits(1)},this.readUnsignedByte=function(){return this.readBits(8)},this.loadWord()};(_t=function(){var i,r,n=0;_t.prototype.init.call(this),this.push=function(t){var e;for(r?((e=new Uint8Array(r.byteLength+t.data.byteLength)).set(r),e.set(t.data,r.byteLength),r=e):r=t.data;n<r.byteLength-3;n++)if(1===r[n+2]){i=n+5;break}for(;i<r.byteLength;)switch(r[i]){case 0:if(0!==r[i-1]){i+=2;break}if(0!==r[i-2]){i++;break}for(n+3!==i-2&&this.trigger("data",r.subarray(n+3,i-2));1!==r[++i]&&i<r.length;);n=i-2,i+=3;break;case 1:if(0!==r[i-1]||0!==r[i-2]){i+=3;break}this.trigger("data",r.subarray(n+3,i-2)),n=i-2,i+=3;break;default:i+=3}r=r.subarray(n),i-=n,n=0},this.flush=function(){r&&3<r.byteLength&&this.trigger("data",r.subarray(n+3)),r=null,n=0,this.trigger("done")}}).prototype=new z,bt={100:!0,110:!0,122:!0,244:!0,44:!0,83:!0,86:!0,118:!0,128:!0,138:!0,139:!0,134:!0},(vt=function(){var i,r,n,s,a,o,_,e=new _t;vt.prototype.init.call(this),(i=this).push=function(t){"video"===t.type&&(r=t.trackId,n=t.pts,s=t.dts,e.push(t))},e.on("data",function(t){var e={trackId:r,pts:n,dts:s,data:t};switch(31&t[0]){case 5:e.nalUnitType="slice_layer_without_partitioning_rbsp_idr";break;case 6:e.nalUnitType="sei_rbsp",e.escapedRBSP=a(t.subarray(1));break;case 7:e.nalUnitType="seq_parameter_set_rbsp",e.escapedRBSP=a(t.subarray(1)),e.config=o(e.escapedRBSP);break;case 8:e.nalUnitType="pic_parameter_set_rbsp";break;case 9:e.nalUnitType="access_unit_delimiter_rbsp"}i.trigger("data",e)}),e.on("done",function(){i.trigger("done")}),this.flush=function(){e.flush()},_=function(t,e){var i,r=8,n=8;for(i=0;i<t;i++)0!==n&&(n=(r+e.readExpGolomb()+256)%256),r=0===n?r:n},a=function(t){for(var e,i,r=t.byteLength,n=[],s=1;s<r-2;)0===t[s]&&0===t[s+1]&&3===t[s+2]?(n.push(s+2),s+=2):s++;if(0===n.length)return t;e=r-n.length,i=new Uint8Array(e);var a=0;for(s=0;s<e;a++,s++)a===n[0]&&(a++,n.shift()),i[s]=t[a];return i},o=function(t){var e,i,r,n,s,a,o,u,l,c,h,d,p,f=0,m=0,g=0,y=0,v=1;if(i=(e=new St(t)).readUnsignedByte(),n=e.readUnsignedByte(),r=e.readUnsignedByte(),e.skipUnsignedExpGolomb(),bt[i]&&(3===(s=e.readUnsignedExpGolomb())&&e.skipBits(1),e.skipUnsignedExpGolomb(),e.skipUnsignedExpGolomb(),e.skipBits(1),e.readBoolean()))for(h=3!==s?8:12,p=0;p<h;p++)e.readBoolean()&&_(p<6?16:64,e);if(e.skipUnsignedExpGolomb(),0===(a=e.readUnsignedExpGolomb()))e.readUnsignedExpGolomb();else if(1===a)for(e.skipBits(1),e.skipExpGolomb(),e.skipExpGolomb(),o=e.readUnsignedExpGolomb(),p=0;p<o;p++)e.skipExpGolomb();if(e.skipUnsignedExpGolomb(),e.skipBits(1),u=e.readUnsignedExpGolomb(),l=e.readUnsignedExpGolomb(),0===(c=e.readBits(1))&&e.skipBits(1),e.skipBits(1),e.readBoolean()&&(f=e.readUnsignedExpGolomb(),m=e.readUnsignedExpGolomb(),g=e.readUnsignedExpGolomb(),y=e.readUnsignedExpGolomb()),e.readBoolean()&&e.readBoolean()){switch(e.readUnsignedByte()){case 1:d=[1,1];break;case 2:d=[12,11];break;case 3:d=[10,11];break;case 4:d=[16,11];break;case 5:d=[40,33];break;case 6:d=[24,11];break;case 7:d=[20,11];break;case 8:d=[32,11];break;case 9:d=[80,33];break;case 10:d=[18,11];break;case 11:d=[15,11];break;case 12:d=[64,33];break;case 13:d=[160,99];break;case 14:d=[4,3];break;case 15:d=[3,2];break;case 16:d=[2,1];break;case 255:d=[e.readUnsignedByte()<<8|e.readUnsignedByte(),e.readUnsignedByte()<<8|e.readUnsignedByte()]}d&&(v=d[0]/d[1])}return{profileIdc:i,levelIdc:r,profileCompatibility:n,width:Math.ceil((16*(u+1)-2*f-2*m)*v),height:(2-c)*(l+1)*16-2*g-2*y}}}).prototype=new z;var kt,Ct={H264Stream:vt,NalByteStream:_t};(kt=function(){var o=new Uint8Array,u=0;kt.prototype.init.call(this),this.setTimestamp=function(t){u=t},this.parseId3TagSize=function(t,e){var i=t[e+6]<<21|t[e+7]<<14|t[e+8]<<7|t[e+9];return(16&t[e+5])>>4?i+20:i+10},this.parseAdtsSize=function(t,e){var i=(224&t[e+5])>>5,r=t[e+4]<<3;return 6144&t[e+3]|r|i},this.push=function(t){var e,i,r,n,s=0,a=0;for(o.length?(n=o.length,(o=new Uint8Array(t.byteLength+n)).set(o.subarray(0,n)),o.set(t,n)):o=t;3<=o.length-a;)if(o[a]!=="I".charCodeAt(0)||o[a+1]!=="D".charCodeAt(0)||o[a+2]!=="3".charCodeAt(0))if(!0&o[a]&&240==(240&o[a+1])){if(o.length-a<7)break;if((s=this.parseAdtsSize(o,a))>o.length)break;r={type:"audio",data:o.subarray(a,a+s),pts:u,dts:u},this.trigger("data",r),a+=s}else a++;else{if(o.length-a<10)break;if((s=this.parseId3TagSize(o,a))>o.length)break;i={type:"timed-metadata",data:o.subarray(a,a+s)},this.trigger("data",i),a+=s}e=o.length-a,o=0<e?o.subarray(a):new Uint8Array}}).prototype=new z;var Et,wt,At,Lt,Pt,Ot,xt,It,Dt,Rt,Mt,Ut,Nt,Bt,jt,Ft=kt,Ht=[33,16,5,32,164,27],Vt=[33,65,108,84,1,2,4,8,168,2,4,8,17,191,252],qt=function(t){for(var e=[];t--;)e.push(0);return e},Wt={96000:[Ht,[227,64],qt(154),[56]],88200:[Ht,[231],qt(170),[56]],64000:[Ht,[248,192],qt(240),[56]],48000:[Ht,[255,192],qt(268),[55,148,128],qt(54),[112]],44100:[Ht,[255,192],qt(268),[55,163,128],qt(84),[112]],32000:[Ht,[255,192],qt(268),[55,234],qt(226),[112]],24000:[Ht,[255,192],qt(268),[55,255,128],qt(268),[111,112],qt(126),[224]],16000:[Ht,[255,192],qt(268),[55,255,128],qt(268),[111,255],qt(269),[223,108],qt(195),[1,192]],12000:[Vt,qt(268),[3,127,248],qt(268),[6,255,240],qt(268),[13,255,224],qt(268),[27,253,128],qt(259),[56]],11025:[Vt,qt(268),[3,127,248],qt(268),[6,255,240],qt(268),[13,255,224],qt(268),[27,255,192],qt(268),[55,175,128],qt(108),[112]],8000:[Vt,qt(268),[3,121,16],qt(47),[7]]},zt=(Et=Wt,Object.keys(Et).reduce(function(t,e){return t[e]=new Uint8Array(Et[e].reduce(function(t,e){return t.concat(e)},[])),t},{})),Gt=(wt=function(t){return 9e4*t},At=function(t,e){return t*e},Lt=function(t){return t/9e4},Pt=function(t,e){return t/e},function(t,e){return wt(Pt(t,e))}),Xt=function(t,e){return At(Lt(t),e)},Yt=Ct.H264Stream,$t=["audioobjecttype","channelcount","samplerate","samplingfrequencyindex","samplesize"],Kt=["width","height","profileIdc","levelIdc","profileCompatibility"];Rt=function(t){return t[0]==="I".charCodeAt(0)&&t[1]==="D".charCodeAt(0)&&t[2]==="3".charCodeAt(0)},Bt=function(t,e){var i;if(t.length!==e.length)return!1;for(i=0;i<t.length;i++)if(t[i]!==e[i])return!1;return!0},jt=function(t){var e,i=0;for(e=0;e<t.length;e++)i+=t[e].data.byteLength;return i},(xt=function(n,s){var a=[],o=0,e=0,l=0,c=1/0;s=s||{},xt.prototype.init.call(this),this.push=function(e){Mt(n,e),n&&$t.forEach(function(t){n[t]=e[t]}),a.push(e)},this.setEarliestDts=function(t){e=t-n.timelineStartInfo.baseMediaDecodeTime},this.setVideoBaseMediaDecodeTime=function(t){c=t},this.setAudioAppendStart=function(t){l=t},this.flush=function(){var t,e,i,r;0!==a.length&&(t=this.trimAdtsFramesByEarliestDts_(a),n.baseMediaDecodeTime=Nt(n,s.keepOriginalTimestamps),this.prefixWithSilence_(n,t),n.samples=this.generateSampleTable_(t),i=q.mdat(this.concatenateFrameData_(t)),a=[],e=q.moof(o,[n]),r=new Uint8Array(e.byteLength+i.byteLength),o++,r.set(e),r.set(i,e.byteLength),Ut(n),this.trigger("data",{track:n,boxes:r})),this.trigger("done","AudioSegmentStream")},this.prefixWithSilence_=function(t,e){var i,r,n,s,a=0,o=0,u=0;if(e.length&&(i=Gt(t.baseMediaDecodeTime,t.samplerate),r=Math.ceil(9e4/(t.samplerate/1024)),l&&c&&(a=i-Math.max(l,c),u=(o=Math.floor(a/r))*r),!(o<1||45e3<u))){for((n=zt[t.samplerate])||(n=e[0].data),s=0;s<o;s++)e.splice(s,0,{data:n});t.baseMediaDecodeTime-=Math.floor(Xt(u,t.samplerate))}},this.trimAdtsFramesByEarliestDts_=function(t){return n.minSegmentDts>=e?t:(n.minSegmentDts=1/0,t.filter(function(t){return t.dts>=e&&(n.minSegmentDts=Math.min(n.minSegmentDts,t.dts),n.minSegmentPts=n.minSegmentDts,!0)}))},this.generateSampleTable_=function(t){var e,i,r=[];for(e=0;e<t.length;e++)i=t[e],r.push({size:i.data.byteLength,duration:1024});return r},this.concatenateFrameData_=function(t){var e,i,r=0,n=new Uint8Array(jt(t));for(e=0;e<t.length;e++)i=t[e],n.set(i.data,r),r+=i.data.byteLength;return n}}).prototype=new z,(Ot=function(o,u){var e,i,l=0,c=[],h=[];u=u||{},Ot.prototype.init.call(this),delete o.minPTS,this.gopCache_=[],this.push=function(t){Mt(o,t),"seq_parameter_set_rbsp"!==t.nalUnitType||e||(e=t.config,o.sps=[t.data],Kt.forEach(function(t){o[t]=e[t]},this)),"pic_parameter_set_rbsp"!==t.nalUnitType||i||(i=t.data,o.pps=[t.data]),c.push(t)},this.flush=function(){for(var t,e,i,r,n,s;c.length&&"access_unit_delimiter_rbsp"!==c[0].nalUnitType;)c.shift();if(0===c.length)return this.resetStream_(),void this.trigger("done","VideoSegmentStream");if(t=this.groupNalsIntoFrames_(c),(i=this.groupFramesIntoGops_(t))[0][0].keyFrame||((e=this.getGopForFusion_(c[0],o))?(i.unshift(e),i.byteLength+=e.byteLength,i.nalCount+=e.nalCount,i.pts=e.pts,i.dts=e.dts,i.duration+=e.duration):i=this.extendFirstKeyFrame_(i)),h.length){var a;if(!(a=u.alignGopsAtEnd?this.alignGopsAtEnd_(i):this.alignGopsAtStart_(i)))return this.gopCache_.unshift({gop:i.pop(),pps:o.pps,sps:o.sps}),this.gopCache_.length=Math.min(6,this.gopCache_.length),c=[],this.resetStream_(),void this.trigger("done","VideoSegmentStream");Ut(o),i=a}Mt(o,i),o.samples=this.generateSampleTable_(i),n=q.mdat(this.concatenateNalData_(i)),o.baseMediaDecodeTime=Nt(o,u.keepOriginalTimestamps),this.trigger("processedGopsInfo",i.map(function(t){return{pts:t.pts,dts:t.dts,byteLength:t.byteLength}})),this.gopCache_.unshift({gop:i.pop(),pps:o.pps,sps:o.sps}),this.gopCache_.length=Math.min(6,this.gopCache_.length),c=[],this.trigger("baseMediaDecodeTime",o.baseMediaDecodeTime),this.trigger("timelineStartInfo",o.timelineStartInfo),r=q.moof(l,[o]),s=new Uint8Array(r.byteLength+n.byteLength),l++,s.set(r),s.set(n,r.byteLength),this.trigger("data",{track:o,boxes:s}),this.resetStream_(),this.trigger("done","VideoSegmentStream")},this.resetStream_=function(){Ut(o),i=e=void 0},this.getGopForFusion_=function(t){var e,i,r,n,s,a=1/0;for(s=0;s<this.gopCache_.length;s++)r=(n=this.gopCache_[s]).gop,o.pps&&Bt(o.pps[0],n.pps[0])&&o.sps&&Bt(o.sps[0],n.sps[0])&&(r.dts<o.timelineStartInfo.dts||-1e4<=(e=t.dts-r.dts-r.duration)&&e<=45e3&&(!i||e<a)&&(i=n,a=e));return i?i.gop:null},this.extendFirstKeyFrame_=function(t){var e;return!t[0][0].keyFrame&&1<t.length&&(e=t.shift(),t.byteLength-=e.byteLength,t.nalCount-=e.nalCount,t[0][0].dts=e.dts,t[0][0].pts=e.pts,t[0][0].duration+=e.duration),t},this.groupNalsIntoFrames_=function(t){var e,i,r=[],n=[];for(e=r.byteLength=0;e<t.length;e++)"access_unit_delimiter_rbsp"===(i=t[e]).nalUnitType?(r.length&&(r.duration=i.dts-r.dts,n.push(r)),(r=[i]).byteLength=i.data.byteLength,r.pts=i.pts,r.dts=i.dts):("slice_layer_without_partitioning_rbsp_idr"===i.nalUnitType&&(r.keyFrame=!0),r.duration=i.dts-r.dts,r.byteLength+=i.data.byteLength,r.push(i));return n.length&&(!r.duration||r.duration<=0)&&(r.duration=n[n.length-1].duration),n.push(r),n},this.groupFramesIntoGops_=function(t){var e,i,r=[],n=[];for(r.byteLength=0,r.nalCount=0,r.duration=0,r.pts=t[0].pts,r.dts=t[0].dts,n.byteLength=0,n.nalCount=0,n.duration=0,n.pts=t[0].pts,n.dts=t[0].dts,e=0;e<t.length;e++)(i=t[e]).keyFrame?(r.length&&(n.push(r),n.byteLength+=r.byteLength,n.nalCount+=r.nalCount,n.duration+=r.duration),(r=[i]).nalCount=i.length,r.byteLength=i.byteLength,r.pts=i.pts,r.dts=i.dts,r.duration=i.duration):(r.duration+=i.duration,r.nalCount+=i.length,r.byteLength+=i.byteLength,r.push(i));return n.length&&r.duration<=0&&(r.duration=n[n.length-1].duration),n.byteLength+=r.byteLength,n.nalCount+=r.nalCount,n.duration+=r.duration,n.push(r),n},this.generateSampleTable_=function(t,e){var i,r,n,s,a,o=e||0,u=[];for(i=0;i<t.length;i++)for(s=t[i],r=0;r<s.length;r++)a=s[r],(n={size:0,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0,degradationPriority:0}}).dataOffset=o,n.compositionTimeOffset=a.pts-a.dts,n.duration=a.duration,n.size=4*a.length,n.size+=a.byteLength,a.keyFrame&&(n.flags.dependsOn=2),o+=n.size,u.push(n);return u},this.concatenateNalData_=function(t){var e,i,r,n,s,a,o=0,u=t.byteLength,l=t.nalCount,c=new Uint8Array(u+4*l),h=new DataView(c.buffer);for(e=0;e<t.length;e++)for(n=t[e],i=0;i<n.length;i++)for(s=n[i],r=0;r<s.length;r++)a=s[r],h.setUint32(o,a.data.byteLength),o+=4,c.set(a.data,o),o+=a.data.byteLength;return c},this.alignGopsAtStart_=function(t){var e,i,r,n,s,a,o,u;for(s=t.byteLength,a=t.nalCount,o=t.duration,e=i=0;e<h.length&&i<t.length&&(r=h[e],n=t[i],r.pts!==n.pts);)n.pts>r.pts?e++:(i++,s-=n.byteLength,a-=n.nalCount,o-=n.duration);return 0===i?t:i===t.length?null:((u=t.slice(i)).byteLength=s,u.duration=o,u.nalCount=a,u.pts=u[0].pts,u.dts=u[0].dts,u)},this.alignGopsAtEnd_=function(t){var e,i,r,n,s,a,o;for(e=h.length-1,i=t.length-1,s=null,a=!1;0<=e&&0<=i;){if(r=h[e],n=t[i],r.pts===n.pts){a=!0;break}r.pts>n.pts?e--:(e===h.length-1&&(s=i),i--)}if(!a&&null===s)return null;if(0===(o=a?i:s))return t;var u=t.slice(o),l=u.reduce(function(t,e){return t.byteLength+=e.byteLength,t.duration+=e.duration,t.nalCount+=e.nalCount,t},{byteLength:0,duration:0,nalCount:0});return u.byteLength=l.byteLength,u.duration=l.duration,u.nalCount=l.nalCount,u.pts=u[0].pts,u.dts=u[0].dts,u},this.alignGopsWith=function(t){h=t}}).prototype=new z,Mt=function(t,e){"number"==typeof e.pts&&(void 0===t.timelineStartInfo.pts&&(t.timelineStartInfo.pts=e.pts),void 0===t.minSegmentPts?t.minSegmentPts=e.pts:t.minSegmentPts=Math.min(t.minSegmentPts,e.pts),void 0===t.maxSegmentPts?t.maxSegmentPts=e.pts:t.maxSegmentPts=Math.max(t.maxSegmentPts,e.pts)),"number"==typeof e.dts&&(void 0===t.timelineStartInfo.dts&&(t.timelineStartInfo.dts=e.dts),void 0===t.minSegmentDts?t.minSegmentDts=e.dts:t.minSegmentDts=Math.min(t.minSegmentDts,e.dts),void 0===t.maxSegmentDts?t.maxSegmentDts=e.dts:t.maxSegmentDts=Math.max(t.maxSegmentDts,e.dts))},Ut=function(t){delete t.minSegmentDts,delete t.maxSegmentDts,delete t.minSegmentPts,delete t.maxSegmentPts},Nt=function(t,e){var i,r=t.minSegmentDts;return e||(r-=t.timelineStartInfo.dts),i=t.timelineStartInfo.baseMediaDecodeTime,i+=r,i=Math.max(0,i),"audio"===t.type&&(i*=t.samplerate/9e4,i=Math.floor(i)),i},(Dt=function(t,e){this.numberOfTracks=0,this.metadataStream=e,"undefined"!=typeof t.remux?this.remuxTracks=!!t.remux:this.remuxTracks=!0,this.pendingTracks=[],this.videoTrack=null,this.pendingBoxes=[],this.pendingCaptions=[],this.pendingMetadata=[],this.pendingBytes=0,this.emittedTracks=0,Dt.prototype.init.call(this),this.push=function(t){return t.text?this.pendingCaptions.push(t):t.frames?this.pendingMetadata.push(t):(this.pendingTracks.push(t.track),this.pendingBoxes.push(t.boxes),this.pendingBytes+=t.boxes.byteLength,"video"===t.track.type&&(this.videoTrack=t.track),void("audio"===t.track.type&&(this.audioTrack=t.track)))}}).prototype=new z,Dt.prototype.flush=function(t){var e,i,r,n,s=0,a={captions:[],captionStreams:{},metadata:[],info:{}},o=0;if(this.pendingTracks.length<this.numberOfTracks){if("VideoSegmentStream"!==t&&"AudioSegmentStream"!==t)return;if(this.remuxTracks)return;if(0===this.pendingTracks.length)return this.emittedTracks++,void(this.emittedTracks>=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0))}for(this.videoTrack?(o=this.videoTrack.timelineStartInfo.pts,Kt.forEach(function(t){a.info[t]=this.videoTrack[t]},this)):this.audioTrack&&(o=this.audioTrack.timelineStartInfo.pts,$t.forEach(function(t){a.info[t]=this.audioTrack[t]},this)),1===this.pendingTracks.length?a.type=this.pendingTracks[0].type:a.type="combined",this.emittedTracks+=this.pendingTracks.length,r=q.initSegment(this.pendingTracks),a.initSegment=new Uint8Array(r.byteLength),a.initSegment.set(r),a.data=new Uint8Array(this.pendingBytes),n=0;n<this.pendingBoxes.length;n++)a.data.set(this.pendingBoxes[n],s),s+=this.pendingBoxes[n].byteLength;for(n=0;n<this.pendingCaptions.length;n++)(e=this.pendingCaptions[n]).startTime=e.startPts-o,e.startTime/=9e4,e.endTime=e.endPts-o,e.endTime/=9e4,a.captionStreams[e.stream]=!0,a.captions.push(e);for(n=0;n<this.pendingMetadata.length;n++)(i=this.pendingMetadata[n]).cueTime=i.pts-o,i.cueTime/=9e4,a.metadata.push(i);a.metadata.dispatchType=this.metadataStream.dispatchType,this.pendingTracks.length=0,this.videoTrack=null,this.pendingBoxes.length=0,this.pendingCaptions.length=0,this.pendingBytes=0,this.pendingMetadata.length=0,this.trigger("data",a),this.emittedTracks>=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0)},(It=function(r){var n,s,a=this,i=!0;It.prototype.init.call(this),r=r||{},this.baseMediaDecodeTime=r.baseMediaDecodeTime||0,this.transmuxPipeline_={},this.setupAacPipeline=function(){var e={};(this.transmuxPipeline_=e).type="aac",e.metadataStream=new gt.MetadataStream,e.aacStream=new Ft,e.audioTimestampRolloverStream=new gt.TimestampRolloverStream("audio"),e.timedMetadataTimestampRolloverStream=new gt.TimestampRolloverStream("timed-metadata"),e.adtsStream=new Tt,e.coalesceStream=new Dt(r,e.metadataStream),e.headOfPipeline=e.aacStream,e.aacStream.pipe(e.audioTimestampRolloverStream).pipe(e.adtsStream),e.aacStream.pipe(e.timedMetadataTimestampRolloverStream).pipe(e.metadataStream).pipe(e.coalesceStream),e.metadataStream.on("timestamp",function(t){e.aacStream.setTimestamp(t.timeStamp)}),e.aacStream.on("data",function(t){"timed-metadata"!==t.type||e.audioSegmentStream||(s=s||{timelineStartInfo:{baseMediaDecodeTime:a.baseMediaDecodeTime},codec:"adts",type:"audio"},e.coalesceStream.numberOfTracks++,e.audioSegmentStream=new xt(s,r),e.adtsStream.pipe(e.audioSegmentStream).pipe(e.coalesceStream))}),e.coalesceStream.on("data",this.trigger.bind(this,"data")),e.coalesceStream.on("done",this.trigger.bind(this,"done"))},this.setupTsPipeline=function(){var i={};(this.transmuxPipeline_=i).type="ts",i.metadataStream=new gt.MetadataStream,i.packetStream=new gt.TransportPacketStream,i.parseStream=new gt.TransportParseStream,i.elementaryStream=new gt.ElementaryStream,i.videoTimestampRolloverStream=new gt.TimestampRolloverStream("video"),i.audioTimestampRolloverStream=new gt.TimestampRolloverStream("audio"),i.timedMetadataTimestampRolloverStream=new gt.TimestampRolloverStream("timed-metadata"),i.adtsStream=new Tt,i.h264Stream=new Yt,i.captionStream=new gt.CaptionStream,i.coalesceStream=new Dt(r,i.metadataStream),i.headOfPipeline=i.packetStream,i.packetStream.pipe(i.parseStream).pipe(i.elementaryStream),i.elementaryStream.pipe(i.videoTimestampRolloverStream).pipe(i.h264Stream),i.elementaryStream.pipe(i.audioTimestampRolloverStream).pipe(i.adtsStream),i.elementaryStream.pipe(i.timedMetadataTimestampRolloverStream).pipe(i.metadataStream).pipe(i.coalesceStream),i.h264Stream.pipe(i.captionStream).pipe(i.coalesceStream),i.elementaryStream.on("data",function(t){var e;if("metadata"===t.type){for(e=t.tracks.length;e--;)n||"video"!==t.tracks[e].type?s||"audio"!==t.tracks[e].type||((s=t.tracks[e]).timelineStartInfo.baseMediaDecodeTime=a.baseMediaDecodeTime):(n=t.tracks[e]).timelineStartInfo.baseMediaDecodeTime=a.baseMediaDecodeTime;n&&!i.videoSegmentStream&&(i.coalesceStream.numberOfTracks++,i.videoSegmentStream=new Ot(n,r),i.videoSegmentStream.on("timelineStartInfo",function(t){s&&(s.timelineStartInfo=t,i.audioSegmentStream.setEarliestDts(t.dts))}),i.videoSegmentStream.on("processedGopsInfo",a.trigger.bind(a,"gopInfo")),i.videoSegmentStream.on("baseMediaDecodeTime",function(t){s&&i.audioSegmentStream.setVideoBaseMediaDecodeTime(t)}),i.h264Stream.pipe(i.videoSegmentStream).pipe(i.coalesceStream)),s&&!i.audioSegmentStream&&(i.coalesceStream.numberOfTracks++,i.audioSegmentStream=new xt(s,r),i.adtsStream.pipe(i.audioSegmentStream).pipe(i.coalesceStream))}}),i.coalesceStream.on("data",this.trigger.bind(this,"data")),i.coalesceStream.on("done",this.trigger.bind(this,"done"))},this.setBaseMediaDecodeTime=function(t){var e=this.transmuxPipeline_;this.baseMediaDecodeTime=t,s&&(s.timelineStartInfo.dts=void 0,s.timelineStartInfo.pts=void 0,Ut(s),s.timelineStartInfo.baseMediaDecodeTime=t,e.audioTimestampRolloverStream&&e.audioTimestampRolloverStream.discontinuity()),n&&(e.videoSegmentStream&&(e.videoSegmentStream.gopCache_=[],e.videoTimestampRolloverStream.discontinuity()),n.timelineStartInfo.dts=void 0,n.timelineStartInfo.pts=void 0,Ut(n),e.captionStream.reset(),n.timelineStartInfo.baseMediaDecodeTime=t),e.timedMetadataTimestampRolloverStream&&e.timedMetadataTimestampRolloverStream.discontinuity()},this.setAudioAppendStart=function(t){s&&this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(t)},this.alignGopsWith=function(t){n&&this.transmuxPipeline_.videoSegmentStream&&this.transmuxPipeline_.videoSegmentStream.alignGopsWith(t)},this.push=function(t){if(i){var e=Rt(t);e&&"aac"!==this.transmuxPipeline_.type?this.setupAacPipeline():e||"ts"===this.transmuxPipeline_.type||this.setupTsPipeline(),i=!1}this.transmuxPipeline_.headOfPipeline.push(t)},this.flush=function(){i=!0,this.transmuxPipeline_.headOfPipeline.flush()},this.resetCaptions=function(){this.transmuxPipeline_.captionStream&&this.transmuxPipeline_.captionStream.reset()}}).prototype=new z;var Qt={Transmuxer:It,VideoSegmentStream:Ot,AudioSegmentStream:xt,AUDIO_PROPERTIES:$t,VIDEO_PROPERTIES:Kt},Jt={generator:q,Transmuxer:Qt.Transmuxer,AudioSegmentStream:Qt.AudioSegmentStream,VideoSegmentStream:Qt.VideoSegmentStream},Zt=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},te=function(){function r(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(t,e,i){return e&&r(t.prototype,e),i&&r(t,i),t}}(),ee=function(){function e(t){Zt(this,e),this.options=t||{},this.init()}return te(e,[{key:"init",value:function(){var t;this.transmuxer&&this.transmuxer.dispose(),this.transmuxer=new Jt.Transmuxer(this.options),(t=this.transmuxer).on("data",function(t){var e=t.initSegment;t.initSegment={data:e.buffer,byteOffset:e.byteOffset,byteLength:e.byteLength};var i=t.data;t.data=i.buffer,H.postMessage({action:"data",segment:t,byteOffset:i.byteOffset,byteLength:i.byteLength},[t.data])}),t.captionStream&&t.captionStream.on("data",function(t){H.postMessage({action:"caption",data:t})}),t.on("done",function(t){H.postMessage({action:"done"})}),t.on("gopInfo",function(t){H.postMessage({action:"gopInfo",gopInfo:t})})}},{key:"push",value:function(t){var e=new Uint8Array(t.data,t.byteOffset,t.byteLength);this.transmuxer.push(e)}},{key:"reset",value:function(){this.init()}},{key:"setTimestampOffset",value:function(t){var e=t.timestampOffset||0;this.transmuxer.setBaseMediaDecodeTime(Math.round(9e4*e))}},{key:"setAudioAppendStart",value:function(t){this.transmuxer.setAudioAppendStart(Math.ceil(9e4*t.appendStart))}},{key:"flush",value:function(t){this.transmuxer.flush()}},{key:"resetCaptions",value:function(){this.transmuxer.resetCaptions()}},{key:"alignGopsWith",value:function(t){this.transmuxer.alignGopsWith(t.gopsToAlignWith.slice())}}]),e}();new function(t){t.onmessage=function(t){"init"===t.data.action&&t.data.options?this.messageHandlers=new ee(t.data.options):(this.messageHandlers||(this.messageHandlers=new ee),t.data&&t.data.action&&"init"!==t.data.action&&this.messageHandlers[t.data.action]&&this.messageHandlers[t.data.action](t.data))}}(re)}()}),Mu=function(t){return/mp4a\.\d+.\d+/i.test(t)},Uu=function(t){return/avc1\.[\da-f]+/i.test(t)},Nu=function(t){return t.map(function(t){return t.replace(/avc1\.(\d+)\.(\d+)/i,function(t,e,i){return"avc1."+("00"+Number(e).toString(16)).slice(-2)+"00"+("00"+Number(i).toString(16)).slice(-2)})})},Bu=function(n){function s(t,e){y(this,s);var i=b(this,n.call(this,As.EventTarget));i.timestampOffset_=0,i.pendingBuffers_=[],i.bufferUpdating_=!1,i.mediaSource_=t,i.codecs_=e,i.audioCodec_=null,i.videoCodec_=null,i.audioDisabled_=!1,i.appendAudioInitSegment_=!0,i.gopBuffer_=[],i.timeMapping_=0,i.safeAppend_=11<=As.browser.IE_VERSION;var r={remux:!1,alignGopsAtEnd:i.safeAppend_};return i.codecs_.forEach(function(t){Mu(t)?i.audioCodec_=t:Uu(t)&&(i.videoCodec_=t)}),i.transmuxer_=new Ru,i.transmuxer_.postMessage({action:"init",options:r}),i.transmuxer_.onmessage=function(t){return"data"===t.data.action?i.data_(t):"done"===t.data.action?i.done_(t):"gopInfo"===t.data.action?i.appendGopInfo_(t):void 0},Object.defineProperty(i,"timestampOffset",{get:function(){return this.timestampOffset_},set:function(t){"number"==typeof t&&0<=t&&(this.timestampOffset_=t,this.appendAudioInitSegment_=!0,this.gopBuffer_.length=0,this.timeMapping_=0,this.transmuxer_.postMessage({action:"setTimestampOffset",timestampOffset:t}))}}),Object.defineProperty(i,"appendWindowStart",{get:function(){return(this.videoBuffer_||this.audioBuffer_).appendWindowStart},set:function(t){this.videoBuffer_&&(this.videoBuffer_.appendWindowStart=t),this.audioBuffer_&&(this.audioBuffer_.appendWindowStart=t)}}),Object.defineProperty(i,"updating",{get:function(){return!!(this.bufferUpdating_||!this.audioDisabled_&&this.audioBuffer_&&this.audioBuffer_.updating||this.videoBuffer_&&this.videoBuffer_.updating)}}),Object.defineProperty(i,"buffered",{get:function(){var t=null,e=null,i=0,r=[],n=[];if(!this.videoBuffer_&&!this.audioBuffer_)return As.createTimeRange();if(!this.videoBuffer_)return this.audioBuffer_.buffered;if(!this.audioBuffer_)return this.videoBuffer_.buffered;if(this.audioDisabled_)return this.videoBuffer_.buffered;if(0===this.videoBuffer_.buffered.length&&0===this.audioBuffer_.buffered.length)return As.createTimeRange();for(var s=this.videoBuffer_.buffered,a=this.audioBuffer_.buffered,o=s.length;o--;)r.push({time:s.start(o),type:"start"}),r.push({time:s.end(o),type:"end"});for(o=a.length;o--;)r.push({time:a.start(o),type:"start"}),r.push({time:a.end(o),type:"end"});for(r.sort(function(t,e){return t.time-e.time}),o=0;o<r.length;o++)"start"===r[o].type?2===++i&&(t=r[o].time):"end"===r[o].type&&1===--i&&(e=r[o].time),null!==t&&null!==e&&(n.push([t,e]),e=t=null);return As.createTimeRanges(n)}}),i}return _(s,n),s.prototype.data_=function(t){var e=t.data.segment;e.data=new Uint8Array(e.data,t.data.byteOffset,t.data.byteLength),e.initSegment=new Uint8Array(e.initSegment.data,e.initSegment.byteOffset,e.initSegment.byteLength),function(t,e,i){var r=e.player_;if(i.captions&&i.captions.length)for(var n in t.inbandTextTracks_||(t.inbandTextTracks_={}),i.captionStreams)if(!t.inbandTextTracks_[n]){r.tech_.trigger({type:"usage",name:"hls-608"});var s=r.textTracks().getTrackById(n);t.inbandTextTracks_[n]=s||r.addRemoteTextTrack({kind:"captions",id:n,label:n},!1).track}i.metadata&&i.metadata.length&&!t.metadataTrack_&&(t.metadataTrack_=r.addRemoteTextTrack({kind:"metadata",label:"Timed Metadata"},!1).track,t.metadataTrack_.inBandMetadataTrackDispatchType=i.metadata.dispatchType)}(this,this.mediaSource_,e),this.pendingBuffers_.push(e)},s.prototype.done_=function(t){"closed"!==this.mediaSource_.readyState?this.processPendingSegments_():this.pendingBuffers_.length=0},s.prototype.createRealSourceBuffers_=function(){var r=this,n=["audio","video"];n.forEach(function(e){if(r[e+"Codec_"]&&!r[e+"Buffer_"]){var i=null;if(r.mediaSource_[e+"Buffer_"])(i=r.mediaSource_[e+"Buffer_"]).updating=!1;else{var t=e+'/mp4;codecs="'+r[e+"Codec_"]+'"';i=function(t,e){var i=t.addSourceBuffer(e),r=Object.create(null);r.updating=!1,r.realBuffer_=i;var n=function(e){"function"==typeof i[e]?r[e]=function(){return i[e].apply(i,arguments)}:"undefined"==typeof r[e]&&Object.defineProperty(r,e,{get:function(){return i[e]},set:function(t){return i[e]=t}})};for(var s in i)n(s);return r}(r.mediaSource_.nativeMediaSource_,t),r.mediaSource_[e+"Buffer_"]=i}r[e+"Buffer_"]=i,["update","updatestart","updateend"].forEach(function(t){i.addEventListener(t,function(){if("audio"!==e||!r.audioDisabled_)return"updateend"===t&&(r[e+"Buffer_"].updating=!1),n.every(function(t){return!("audio"!==t||!r.audioDisabled_)||(e===t||!r[t+"Buffer_"]||!r[t+"Buffer_"].updating)})?r.trigger(t):void 0})})}})},s.prototype.appendBuffer=function(t){if(this.bufferUpdating_=!0,this.audioBuffer_&&this.audioBuffer_.buffered.length){var e=this.audioBuffer_.buffered;this.transmuxer_.postMessage({action:"setAudioAppendStart",appendStart:e.end(e.length-1)})}this.videoBuffer_&&this.transmuxer_.postMessage({action:"alignGopsWith",gopsToAlignWith:function(t,e,i){if(!e||!t.length)return[];var r=Math.ceil(9e4*(e.currentTime()-i+3)),n=void 0;for(n=0;n<t.length&&!(t[n].pts>r);n++);return t.slice(n)}(this.gopBuffer_,this.mediaSource_.player_,this.timeMapping_)}),this.transmuxer_.postMessage({action:"push",data:t.buffer,byteOffset:t.byteOffset,byteLength:t.byteLength},[t.buffer]),this.transmuxer_.postMessage({action:"flush"})},s.prototype.appendGopInfo_=function(t){this.gopBuffer_=function(t,e,i){if(!e.length)return t;if(i)return e.slice();for(var r=e[0].pts,n=0;n<t.length&&!(t[n].pts>=r);n++);return t.slice(0,n).concat(e)}(this.gopBuffer_,t.data.gopInfo,this.safeAppend_)},s.prototype.remove=function(t,e){if(this.videoBuffer_&&(this.videoBuffer_.updating=!0,this.videoBuffer_.remove(t,e),this.gopBuffer_=function(t,e,i,r){for(var n=Math.ceil(9e4*(e-r)),s=Math.ceil(9e4*(i-r)),a=t.slice(),o=t.length;o--&&!(t[o].pts<=s););if(-1===o)return a;for(var u=o+1;u--&&!(t[u].pts<=n););return u=Math.max(u,0),a.splice(u,o-u+1),a}(this.gopBuffer_,t,e,this.timeMapping_)),!this.audioDisabled_&&this.audioBuffer_&&(this.audioBuffer_.updating=!0,this.audioBuffer_.remove(t,e)),bu(t,e,this.metadataTrack_),this.inbandTextTracks_)for(var i in this.inbandTextTracks_)bu(t,e,this.inbandTextTracks_[i])},s.prototype.processPendingSegments_=function(){var t={video:{segments:[],bytes:0},audio:{segments:[],bytes:0},captions:[],metadata:[]};t=this.pendingBuffers_.reduce(function(t,e){var i=e.type,r=e.data,n=e.initSegment;return t[i].segments.push(r),t[i].bytes+=r.byteLength,t[i].initSegment=n,e.captions&&(t.captions=t.captions.concat(e.captions)),e.info&&(t[i].info=e.info),e.metadata&&(t.metadata=t.metadata.concat(e.metadata)),t},t),this.videoBuffer_||this.audioBuffer_||(0===t.video.bytes&&(this.videoCodec_=null),0===t.audio.bytes&&(this.audioCodec_=null),this.createRealSourceBuffers_()),t.audio.info&&this.mediaSource_.trigger({type:"audioinfo",info:t.audio.info}),t.video.info&&this.mediaSource_.trigger({type:"videoinfo",info:t.video.info}),this.appendAudioInitSegment_&&(!this.audioDisabled_&&this.audioBuffer_&&(t.audio.segments.unshift(t.audio.initSegment),t.audio.bytes+=t.audio.initSegment.byteLength),this.appendAudioInitSegment_=!1);var e=!1;this.videoBuffer_&&t.video.bytes?(t.video.segments.unshift(t.video.initSegment),t.video.bytes+=t.video.initSegment.byteLength,this.concatAndAppendSegments_(t.video,this.videoBuffer_),Su(this,t.captions,t.metadata)):!this.videoBuffer_||!this.audioDisabled_&&this.audioBuffer_||(e=!0),!this.audioDisabled_&&this.audioBuffer_&&this.concatAndAppendSegments_(t.audio,this.audioBuffer_),this.pendingBuffers_.length=0,e&&this.trigger("updateend"),this.bufferUpdating_=!1},s.prototype.concatAndAppendSegments_=function(t,e){var i=0,r=void 0;if(t.bytes){r=new Uint8Array(t.bytes),t.segments.forEach(function(t){r.set(t,i),i+=t.byteLength});try{e.updating=!0,e.appendBuffer(r)}catch(t){this.mediaSource_.player_&&this.mediaSource_.player_.error({code:-3,type:"APPEND_BUFFER_ERR",message:t.message,originalError:t})}}},s.prototype.abort=function(){this.videoBuffer_&&this.videoBuffer_.abort(),!this.audioDisabled_&&this.audioBuffer_&&this.audioBuffer_.abort(),this.transmuxer_&&this.transmuxer_.postMessage({action:"reset"}),this.pendingBuffers_.length=0,this.bufferUpdating_=!1},s}(As.EventTarget),ju=function(e){function i(){y(this,i);var s=b(this,e.call(this)),t=void 0;for(t in s.nativeMediaSource_=new g.MediaSource,s.nativeMediaSource_)t in i.prototype||"function"!=typeof s.nativeMediaSource_[t]||(s[t]=s.nativeMediaSource_[t].bind(s.nativeMediaSource_));return s.duration_=NaN,Object.defineProperty(s,"duration",{get:function(){return this.duration_===1/0?this.duration_:this.nativeMediaSource_.duration},set:function(t){(this.duration_=t)===1/0||(this.nativeMediaSource_.duration=t)}}),Object.defineProperty(s,"seekable",{get:function(){return this.duration_===1/0?As.createTimeRanges([[0,this.nativeMediaSource_.duration]]):this.nativeMediaSource_.seekable}}),Object.defineProperty(s,"readyState",{get:function(){return this.nativeMediaSource_.readyState}}),Object.defineProperty(s,"activeSourceBuffers",{get:function(){return this.activeSourceBuffers_}}),s.sourceBuffers=[],s.activeSourceBuffers_=[],s.updateActiveSourceBuffers_=function(){if(s.activeSourceBuffers_.length=0,1===s.sourceBuffers.length){var t=s.sourceBuffers[0];return t.appendAudioInitSegment_=!0,t.audioDisabled_=!t.audioCodec_,void s.activeSourceBuffers_.push(t)}for(var i=!1,r=!0,e=0;e<s.player_.audioTracks().length;e++){var n=s.player_.audioTracks()[e];if(n.enabled&&"main"!==n.kind){r=!(i=!0);break}}s.sourceBuffers.forEach(function(t,e){if(t.appendAudioInitSegment_=!0,t.videoCodec_&&t.audioCodec_)t.audioDisabled_=i;else if(t.videoCodec_&&!t.audioCodec_)t.audioDisabled_=!0,r=!1;else if(!t.videoCodec_&&t.audioCodec_&&(t.audioDisabled_=e?r:!r,t.audioDisabled_))return;s.activeSourceBuffers_.push(t)})},s.onPlayerMediachange_=function(){s.sourceBuffers.forEach(function(t){t.appendAudioInitSegment_=!0})},s.onHlsReset_=function(){s.sourceBuffers.forEach(function(t){t.transmuxer_&&t.transmuxer_.postMessage({action:"resetCaptions"})})},s.onHlsSegmentTimeMapping_=function(e){s.sourceBuffers.forEach(function(t){return t.timeMapping_=e.mapping})},["sourceopen","sourceclose","sourceended"].forEach(function(t){this.nativeMediaSource_.addEventListener(t,this.trigger.bind(this))},s),s.on("sourceopen",function(t){var e=p.querySelector('[src="'+s.url_+'"]');e&&(s.player_=As(e.parentNode),s.player_.tech_.on("hls-reset",s.onHlsReset_),s.player_.tech_.on("hls-segment-time-mapping",s.onHlsSegmentTimeMapping_),s.player_.audioTracks&&s.player_.audioTracks()&&(s.player_.audioTracks().on("change",s.updateActiveSourceBuffers_),s.player_.audioTracks().on("addtrack",s.updateActiveSourceBuffers_),s.player_.audioTracks().on("removetrack",s.updateActiveSourceBuffers_)),s.player_.on("mediachange",s.onPlayerMediachange_))}),s.on("sourceended",function(t){for(var e=Tu(s.duration),i=0;i<s.sourceBuffers.length;i++){var r=s.sourceBuffers[i],n=r.metadataTrack_&&r.metadataTrack_.cues;n&&n.length&&(n[n.length-1].endTime=e)}}),s.on("sourceclose",function(t){this.sourceBuffers.forEach(function(t){t.transmuxer_&&t.transmuxer_.terminate()}),this.sourceBuffers.length=0,this.player_&&(this.player_.audioTracks&&this.player_.audioTracks()&&(this.player_.audioTracks().off("change",this.updateActiveSourceBuffers_),this.player_.audioTracks().off("addtrack",this.updateActiveSourceBuffers_),this.player_.audioTracks().off("removetrack",this.updateActiveSourceBuffers_)),this.player_.el_&&(this.player_.off("mediachange",this.onPlayerMediachange_),this.player_.tech_.off("hls-reset",this.onHlsReset_),this.player_.tech_.off("hls-segment-time-mapping",this.onHlsSegmentTimeMapping_)))}),s}return _(i,e),i.prototype.addSeekableRange_=function(t,e){var i=void 0;if(this.duration!==1/0)throw(i=new Error("MediaSource.addSeekableRange() can only be invoked when the duration is Infinity")).name="InvalidStateError",i.code=11,i;(e>this.nativeMediaSource_.duration||isNaN(this.nativeMediaSource_.duration))&&(this.nativeMediaSource_.duration=e)},i.prototype.addSourceBuffer=function(t){var n,e,i=void 0,r=(n={type:"",parameters:{}},e=t.trim().split(";"),n.type=e.shift().trim(),e.forEach(function(t){var e=t.trim().split("=");if(1<e.length){var i=e[0].replace(/"/g,"").trim(),r=e[1].replace(/"/g,"").trim();n.parameters[i]=r}}),n);if(/^(video|audio)\/mp2t$/i.test(r.type)){var s=[];r.parameters&&r.parameters.codecs&&(s=r.parameters.codecs.split(","),s=(s=Nu(s)).filter(function(t){return Mu(t)||Uu(t)})),0===s.length&&(s=["avc1.4d400d","mp4a.40.2"]),i=new Bu(this,s),0!==this.sourceBuffers.length&&(this.sourceBuffers[0].createRealSourceBuffers_(),i.createRealSourceBuffers_(),this.sourceBuffers[0].audioDisabled_=!0)}else i=this.nativeMediaSource_.addSourceBuffer(t);return this.sourceBuffers.push(i),i},i}(As.EventTarget),Fu=0;As.mediaSources={};var Hu=function(t,e){var i=As.mediaSources[t];if(!i)throw new Error("Media Source not found (Video.js)");i.trigger({type:"sourceopen",swfId:e})},Vu=function(){return!!g.MediaSource&&!!g.MediaSource.isTypeSupported&&g.MediaSource.isTypeSupported('video/mp4;codecs="avc1.4d400d,mp4a.40.2"')},qu=function(){if(this.MediaSource={open:Hu,supportsNativeMediaSources:Vu},Vu())return new ju;throw new Error("Cannot use create a virtual MediaSource for this video")};qu.open=Hu,qu.supportsNativeMediaSources=Vu;var Wu={createObjectURL:function(t){var e=void 0;return t instanceof ju?(e=g.URL.createObjectURL(t.nativeMediaSource_),t.url_=e):t instanceof ju?(e="blob:vjs-media-source/"+Fu,Fu++,As.mediaSources[e]=t,e):(e=g.URL.createObjectURL(t),t.url_=e)}};As.MediaSource=qu,As.URL=Wu;var zu=As.mergeOptions,Gu=function(t,e){for(var a=zu(t,{duration:e.duration,minimumUpdatePeriod:e.minimumUpdatePeriod}),i=0;i<e.playlists.length;i++){var r=Bo(a,e.playlists[i]);r&&(a=r)}return No(e,function(t,e,i,r){if(t.playlists&&t.playlists.length){var n=t.playlists[0].uri,s=Bo(a,t.playlists[0]);s&&((a=s).mediaGroups[e][i][r].playlists[0]=a.playlists[n])}}),a},Xu=function(s){function a(t,e,i,r){y(this,a);var n=b(this,s.call(this));if(n.hls_=e,n.withCredentials=i,!t)throw new Error("A non-empty playlist URL or playlist is required");return n.on("minimumUpdatePeriod",function(){n.refreshXml_()}),n.on("mediaupdatetimeout",function(){n.refreshMedia_()}),"string"==typeof t?(n.srcUrl=t,n.state="HAVE_NOTHING",b(n)):(n.masterPlaylistLoader_=r,n.state="HAVE_METADATA",n.started=!0,n.media(t),g.setTimeout(function(){n.trigger("loadedmetadata")},0),n)}return _(a,s),a.prototype.dispose=function(){this.stopRequest(),g.clearTimeout(this.mediaUpdateTimeout)},a.prototype.stopRequest=function(){if(this.request){var t=this.request;this.request=null,t.onreadystatechange=null,t.abort()}},a.prototype.media=function(t){if(!t)return this.media_;if("HAVE_NOTHING"===this.state)throw new Error("Cannot switch media playlist from "+this.state);var e=this.state;if("string"==typeof t){if(!this.master.playlists[t])throw new Error("Unknown playlist URI: "+t);t=this.master.playlists[t]}var i=!this.media_||t.uri!==this.media_.uri;this.state="HAVE_METADATA",i&&(this.media_&&this.trigger("mediachanging"),this.media_=t,this.refreshMedia_(),"HAVE_MASTER"!==e&&this.trigger("mediachange"))},a.prototype.pause=function(){this.stopRequest(),"HAVE_NOTHING"===this.state&&(this.started=!1)},a.prototype.load=function(){this.started?this.trigger("loadedplaylist"):this.start()},a.prototype.parseMasterXml=function(){var s=Sa(this.masterXml_,{manifestUri:this.srcUrl,clientOffset:this.clientOffset_});s.uri=this.srcUrl;for(var t=0;t<s.playlists.length;t++){var e="placeholder-uri-"+t;s.playlists[t].uri=e,s.playlists[e]=s.playlists[t]}return No(s,function(t,e,i,r){if(t.playlists&&t.playlists.length){var n="placeholder-uri-"+e+"-"+i+"-"+r;t.playlists[0].uri=n,s.playlists[n]=t.playlists[0]}}),jo(s),Fo(s),s},a.prototype.start=function(){var i=this;this.started=!0,this.request=this.hls_.xhr({uri:this.srcUrl,withCredentials:this.withCredentials},function(t,e){if(i.request){if(i.request=null,t)return i.error={status:e.status,message:"DASH playlist request error at URL: "+i.srcUrl,responseText:e.responseText,code:2},"HAVE_NOTHING"===i.state&&(i.started=!1),i.trigger("error");i.masterXml_=e.responseText,e.responseHeaders&&e.responseHeaders.date?i.masterLoaded_=Date.parse(e.responseHeaders.date):i.masterLoaded_=Date.now(),i.syncClientServerClock_(i.onClientServerClockSync_.bind(i))}})},a.prototype.syncClientServerClock_=function(r){var n=this,s=ka(this.masterXml_);return null===s?(this.clientOffset_=this.masterLoaded_-Date.now(),r()):"DIRECT"===s.method?(this.clientOffset_=s.value-Date.now(),r()):void(this.request=this.hls_.xhr({uri:Ro(this.srcUrl,s.value),method:s.method,withCredentials:this.withCredentials},function(t,e){if(n.request){if(t)return n.clientOffset_=n.masterLoaded_-Date.now(),r();var i=void 0;i="HEAD"===s.method?e.responseHeaders&&e.responseHeaders.date?Date.parse(e.responseHeaders.date):n.masterLoaded_:Date.parse(e.responseText),n.clientOffset_=i-Date.now(),r()}}))},a.prototype.onClientServerClockSync_=function(){var t=this;this.master=this.parseMasterXml(),this.state="HAVE_MASTER",this.trigger("loadedplaylist"),this.media_||this.media(this.master.playlists[0]),g.setTimeout(function(){t.trigger("loadedmetadata")},0),this.master.minimumUpdatePeriod&&g.setTimeout(function(){t.trigger("minimumUpdatePeriod")},this.master.minimumUpdatePeriod)},a.prototype.refreshXml_=function(){var r=this;this.request=this.hls_.xhr({uri:this.srcUrl,withCredentials:this.withCredentials},function(t,e){if(r.request){if(r.request=null,t)return r.error={status:e.status,message:"DASH playlist request error at URL: "+r.srcUrl,responseText:e.responseText,code:2},"HAVE_NOTHING"===r.state&&(r.started=!1),r.trigger("error");r.masterXml_=e.responseText;var i=r.parseMasterXml();r.master=Gu(r.master,i),g.setTimeout(function(){r.trigger("minimumUpdatePeriod")},r.master.minimumUpdatePeriod)}})},a.prototype.refreshMedia_=function(){var t=this,e=void 0,i=void 0;this.masterPlaylistLoader_?(e=this.masterPlaylistLoader_.master,i=this.masterPlaylistLoader_.parseMasterXml()):(e=this.master,i=this.parseMasterXml());var r=Gu(e,i);r?(this.masterPlaylistLoader_?this.masterPlaylistLoader_.master=r:this.master=r,this.media_=r.playlists[this.media_.uri]):this.trigger("playlistunchanged"),this.media().endList||(this.mediaUpdateTimeout=g.setTimeout(function(){t.trigger("mediaupdatetimeout")},Ho(this.media(),!!r))),this.trigger("loadedplaylist")},a}(As.EventTarget),Yu=function(t){return As.log.debug?As.log.debug.bind(As,"VHS:",t+" >"):function(){}};function $u(){}var Ku=function(){function n(t,e,i,r){y(this,n),this.callbacks_=[],this.pendingCallback_=null,this.timestampOffset_=0,this.mediaSource=t,this.processedAppend_=!1,this.type_=i,this.mimeType_=e,this.logger_=Yu("SourceUpdater["+i+"]["+e+"]"),"closed"===t.readyState?t.addEventListener("sourceopen",this.createSourceBuffer_.bind(this,e,r)):this.createSourceBuffer_(e,r)}return n.prototype.createSourceBuffer_=function(t,e){var i=this;this.sourceBuffer_=this.mediaSource.addSourceBuffer(t),this.logger_("created SourceBuffer"),e&&(e.trigger("sourcebufferadded"),this.mediaSource.sourceBuffers.length<2)?e.on("sourcebufferadded",function(){i.start_()}):this.start_()},n.prototype.start_=function(){var e=this;this.started_=!0,this.onUpdateendCallback_=function(){var t=e.pendingCallback_;e.pendingCallback_=null,e.logger_("buffered ["+vu(e.buffered())+"]"),t&&t(),e.runCallback_()},this.sourceBuffer_.addEventListener("updateend",this.onUpdateendCallback_),this.runCallback_()},n.prototype.abort=function(t){var e=this;this.processedAppend_&&this.queueCallback_(function(){e.sourceBuffer_.abort()},t)},n.prototype.appendBuffer=function(t,e){var i=this;this.processedAppend_=!0,this.queueCallback_(function(){i.sourceBuffer_.appendBuffer(t)},e)},n.prototype.buffered=function(){return this.sourceBuffer_?this.sourceBuffer_.buffered:As.createTimeRanges()},n.prototype.remove=function(t,e){var i=this;this.processedAppend_&&this.queueCallback_(function(){i.logger_("remove ["+t+" => "+e+"]"),i.sourceBuffer_.remove(t,e)},$u)},n.prototype.updating=function(){return!this.sourceBuffer_||this.sourceBuffer_.updating||this.pendingCallback_},n.prototype.timestampOffset=function(t){var e=this;return"undefined"!=typeof t&&(this.queueCallback_(function(){e.sourceBuffer_.timestampOffset=t}),this.timestampOffset_=t),this.timestampOffset_},n.prototype.queueCallback_=function(t,e){this.callbacks_.push([t.bind(this),e]),this.runCallback_()},n.prototype.runCallback_=function(){var t=void 0;!this.updating()&&this.callbacks_.length&&this.started_&&(t=this.callbacks_.shift(),this.pendingCallback_=t[1],t[0]())},n.prototype.dispose=function(){this.sourceBuffer_.removeEventListener("updateend",this.onUpdateendCallback_),this.sourceBuffer_&&"open"===this.mediaSource.readyState&&this.sourceBuffer_.abort()},n}(),Qu={GOAL_BUFFER_LENGTH:30,MAX_GOAL_BUFFER_LENGTH:60,GOAL_BUFFER_LENGTH_RATE:1,BANDWIDTH_VARIANCE:1.2,BUFFER_LOW_WATER_LINE:0,MAX_BUFFER_LOW_WATER_LINE:30,BUFFER_LOW_WATER_LINE_RATE:1},Ju=2,Zu=-101,tl=-102,el=function(t){var e,i,r={};return t.byterange&&(r.Range=(e=t.byterange,i=e.offset+e.length-1,"bytes="+e.offset+"-"+i)),r},il=function(t){t.forEach(function(t){t.abort()})},rl=function(t,e){return e.timedout?{status:e.status,message:"HLS request timed-out at URL: "+e.uri,code:Zu,xhr:e}:e.aborted?{status:e.status,message:"HLS request aborted at URL: "+e.uri,code:tl,xhr:e}:t?{status:e.status,message:"HLS request errored at URL: "+e.uri,code:Ju,xhr:e}:null},nl=function(a,o,u){var l=[],c=0;return function(t,e){if(t&&(il(a),l.push(t)),(c+=1)===a.length){if(e.endOfAllRequests=Date.now(),0<l.length){var i=l.reduce(function(t,e){return e.code>t.code?e:t});return u(i,e)}return e.encryptedBytes?(n=e,s=u,(r=o).addEventListener("message",function t(e){if(e.data.source===n.requestId){r.removeEventListener("message",t);var i=e.data.decrypted;return n.bytes=new Uint8Array(i.bytes,i.byteOffset,i.byteLength),s(null,n)}}),void r.postMessage(cu({source:n.requestId,encrypted:n.encryptedBytes,key:n.key.bytes,iv:n.key.iv}),[n.encryptedBytes.buffer,n.key.bytes.buffer])):u(null,e)}var r,n,s}},sl=function(n,s){return function(t){var e,i,r;return n.stats=As.mergeOptions(n.stats,(i=(e=t).target,(r={bandwidth:1/0,bytesReceived:0,roundTripTime:Date.now()-i.requestTime||0}).bytesReceived=e.loaded,r.bandwidth=Math.floor(r.bytesReceived/r.roundTripTime*8*1e3),r)),!n.stats.firstBytesReceivedAt&&n.stats.bytesReceived&&(n.stats.firstBytesReceivedAt=Date.now()),s(t,n)}},al=function(t,e,i,r,n,s){var a,o,u,l,c=[],h=nl(c,i,s);if(r.key){var d=t(As.mergeOptions(e,{uri:r.key.resolvedUri,responseType:"arraybuffer"}),(a=r,o=h,function(t,e){var i=e.response,r=rl(t,e);if(r)return o(r,a);if(16!==i.byteLength)return o({status:e.status,message:"Invalid HLS key at URL: "+e.uri,code:Ju,xhr:e},a);var n=new DataView(i);return a.key.bytes=new Uint32Array([n.getUint32(0),n.getUint32(4),n.getUint32(8),n.getUint32(12)]),o(null,a)}));c.push(d)}if(r.map&&!r.map.bytes){var p=t(As.mergeOptions(e,{uri:r.map.resolvedUri,responseType:"arraybuffer",headers:el(r.map)}),(u=r,l=h,function(t,e){var i=e.response,r=rl(t,e);return r?l(r,u):0===i.byteLength?l({status:e.status,message:"Empty HLS segment content at URL: "+e.uri,code:Ju,xhr:e},u):(u.map.bytes=new Uint8Array(e.response),l(null,u))}));c.push(p)}var f,m,g=t(As.mergeOptions(e,{uri:r.resolvedUri,responseType:"arraybuffer",headers:el(r)}),(f=r,m=h,function(t,e){var i,r=e.response,n=rl(t,e);return n?m(n,f):0===r.byteLength?m({status:e.status,message:"Empty HLS segment content at URL: "+e.uri,code:Ju,xhr:e},f):(f.stats={bandwidth:(i=e).bandwidth,bytesReceived:i.bytesReceived||0,roundTripTime:i.roundTripTime||0},f.key?f.encryptedBytes=new Uint8Array(e.response):f.bytes=new Uint8Array(e.response),m(null,f))}));return g.addEventListener("progress",sl(r,n)),c.push(g),function(){return il(c)}},ol={videoCodec:"avc1",videoObjectTypeIndicator:".4d400d",audioProfile:"2"},ul=function(){var t,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"",i={codecCount:0};return i.codecCount=e.split(",").length,i.codecCount=i.codecCount||2,(t=/(^|\s|,)+(avc[13])([^ ,]*)/i.exec(e))&&(i.videoCodec=t[2],i.videoObjectTypeIndicator=t[3]),i.audioProfile=/(^|\s|,)+mp4a.[0-9A-Fa-f]+\.([0-9A-Fa-f]+)/i.exec(e),i.audioProfile=i.audioProfile&&i.audioProfile[2],i},ll=function(t,e,i){return t+"/"+e+'; codecs="'+i.filter(function(t){return!!t}).join(", ")+'"'},cl=function(t,e){var i,r,n=(i=e).segments&&i.segments.length&&i.segments[0].map?"mp4":"mp2t",s=(r=e.attributes||{}).CODECS?ul(r.CODECS):ol,a=e.attributes||{},o=!0,u=!1;if(!e)return[];if(t.mediaGroups.AUDIO&&a.AUDIO){var l=t.mediaGroups.AUDIO[a.AUDIO];if(l)for(var c in o=!(u=!0),l)if(!l[c].uri&&!l[c].playlists){o=!0;break}}u&&!s.audioProfile&&(o||(s.audioProfile=function(t,e){if(!t.mediaGroups.AUDIO||!e)return null;var i=t.mediaGroups.AUDIO[e];if(!i)return null;for(var r in i){var n=i[r];if(n.default&&n.playlists)return ul(n.playlists[0].attributes.CODECS).audioProfile}return null}(t,a.AUDIO)),s.audioProfile||(As.log.warn("Multiple audio tracks present but no audio codec string is specified. Attempting to use the default audio codec (mp4a.40.2)"),s.audioProfile=ol.audioProfile));var h={};s.videoCodec&&(h.video=""+s.videoCodec+s.videoObjectTypeIndicator),s.audioProfile&&(h.audio="mp4a.40."+s.audioProfile);var d=ll("audio",n,[h.audio]),p=ll("video",n,[h.video]),f=ll("video",n,[h.video,h.audio]);return u?!o&&h.video?[p,d]:o||h.video?[f,d]:[d,d]:h.video?[f]:[d]},hl=function(t,e){var i;return t&&(i=g.getComputedStyle(t))?i[e]:""},dl=function(t,r){var n=t.slice();t.sort(function(t,e){var i=r(t,e);return 0===i?n.indexOf(t)-n.indexOf(e):i})},pl=function(t,e){var i=void 0,r=void 0;return t.attributes.BANDWIDTH&&(i=t.attributes.BANDWIDTH),i=i||g.Number.MAX_VALUE,e.attributes.BANDWIDTH&&(r=e.attributes.BANDWIDTH),i-(r=r||g.Number.MAX_VALUE)},fl=function(t,e,i){if(!t||!e)return!1;var r=i===t.segments.length;return t.endList&&"open"===e.readyState&&r},ml=function(t){return"number"==typeof t&&isFinite(t)},gl=function(i){function r(t){y(this,r);var e=b(this,i.call(this));if(!t)throw new TypeError("Initialization settings are required");if("function"!=typeof t.currentTime)throw new TypeError("No currentTime getter specified");if(!t.mediaSource)throw new TypeError("No MediaSource specified");return e.bandwidth=t.bandwidth,e.throughput={rate:0,count:0},e.roundTrip=NaN,e.resetStats_(),e.mediaIndex=null,e.hasPlayed_=t.hasPlayed,e.currentTime_=t.currentTime,e.seekable_=t.seekable,e.seeking_=t.seeking,e.duration_=t.duration,e.mediaSource_=t.mediaSource,e.hls_=t.hls,e.loaderType_=t.loaderType,e.startingMedia_=void 0,e.segmentMetadataTrack_=t.segmentMetadataTrack,e.goalBufferLength_=t.goalBufferLength,e.sourceType_=t.sourceType,e.state_="INIT",e.checkBufferTimeout_=null,e.error_=void 0,e.currentTimeline_=-1,e.pendingSegment_=null,e.mimeType_=null,e.sourceUpdater_=null,e.xhrOptions_=null,e.activeInitSegmentId_=null,e.initSegments_={},e.decrypter_=t.decrypter,e.syncController_=t.syncController,e.syncPoint_={segmentIndex:0,time:0},e.syncController_.on("syncinfoupdate",function(){return e.trigger("syncinfoupdate")}),e.mediaSource_.addEventListener("sourceopen",function(){return e.ended_=!1}),e.fetchAtBuffer_=!1,e.logger_=Yu("SegmentLoader["+e.loaderType_+"]"),Object.defineProperty(e,"state",{get:function(){return this.state_},set:function(t){t!==this.state_&&(this.logger_(this.state_+" -> "+t),this.state_=t)}}),e}return _(r,i),r.prototype.resetStats_=function(){this.mediaBytesTransferred=0,this.mediaRequests=0,this.mediaRequestsAborted=0,this.mediaRequestsTimedout=0,this.mediaRequestsErrored=0,this.mediaTransferDuration=0,this.mediaSecondsLoaded=0},r.prototype.dispose=function(){this.state="DISPOSED",this.pause(),this.abort_(),this.sourceUpdater_&&this.sourceUpdater_.dispose(),this.resetStats_()},r.prototype.abort=function(){"WAITING"===this.state?(this.abort_(),this.state="READY",this.paused()||this.monitorBuffer_()):this.pendingSegment_&&(this.pendingSegment_=null)},r.prototype.abort_=function(){this.pendingSegment_&&this.pendingSegment_.abortRequests(),this.pendingSegment_=null},r.prototype.error=function(t){return"undefined"!=typeof t&&(this.error_=t),this.pendingSegment_=null,this.error_},r.prototype.endOfStream=function(){this.ended_=!0,this.pause(),this.trigger("ended")},r.prototype.buffered_=function(){return this.sourceUpdater_?this.sourceUpdater_.buffered():As.createTimeRanges()},r.prototype.initSegment=function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1];if(!t)return null;var i=hu(t),r=this.initSegments_[i];return e&&!r&&t.bytes&&(this.initSegments_[i]=r={resolvedUri:t.resolvedUri,byterange:t.byterange,bytes:t.bytes}),r||t},r.prototype.couldBeginLoading_=function(){return this.playlist_&&(this.sourceUpdater_||this.mimeType_&&"INIT"===this.state)&&!this.paused()},r.prototype.load=function(){if(this.monitorBuffer_(),this.playlist_){if(this.syncController_.setDateTimeMapping(this.playlist_),"INIT"===this.state&&this.couldBeginLoading_())return this.init_();!this.couldBeginLoading_()||"READY"!==this.state&&"INIT"!==this.state||(this.state="READY")}},r.prototype.init_=function(){return this.state="READY",this.sourceUpdater_=new Ku(this.mediaSource_,this.mimeType_,this.loaderType_,this.sourceBufferEmitter_),this.resetEverything(),this.monitorBuffer_()},r.prototype.playlist=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};if(t){var i=this.playlist_,r=this.pendingSegment_;this.playlist_=t,this.xhrOptions_=e,this.hasPlayed_()||(t.syncInfo={mediaSequence:t.mediaSequence,time:0});var n=i?i.id:null;if(this.logger_("playlist update ["+n+" => "+t.id+"]"),this.trigger("syncinfoupdate"),"INIT"===this.state&&this.couldBeginLoading_())return this.init_();if(i&&i.uri===t.uri){var s=t.mediaSequence-i.mediaSequence;this.logger_("live window shift ["+s+"]"),null!==this.mediaIndex&&(this.mediaIndex-=s),r&&(r.mediaIndex-=s,0<=r.mediaIndex&&(r.segment=t.segments[r.mediaIndex])),this.syncController_.saveExpiredSegmentInfo(i,t)}else null!==this.mediaIndex&&this.resyncLoader()}},r.prototype.pause=function(){this.checkBufferTimeout_&&(g.clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=null)},r.prototype.paused=function(){return null===this.checkBufferTimeout_},r.prototype.mimeType=function(t,e){this.mimeType_||(this.mimeType_=t,this.sourceBufferEmitter_=e,"INIT"===this.state&&this.couldBeginLoading_()&&this.init_())},r.prototype.resetEverything=function(){this.ended_=!1,this.resetLoader(),this.remove(0,this.duration_()),this.trigger("reseteverything")},r.prototype.resetLoader=function(){this.fetchAtBuffer_=!1,this.resyncLoader()},r.prototype.resyncLoader=function(){this.mediaIndex=null,this.syncPoint_=null,this.abort()},r.prototype.remove=function(t,e){this.sourceUpdater_&&this.sourceUpdater_.remove(t,e),bu(t,e,this.segmentMetadataTrack_)},r.prototype.monitorBuffer_=function(){this.checkBufferTimeout_&&g.clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=g.setTimeout(this.monitorBufferTick_.bind(this),1)},r.prototype.monitorBufferTick_=function(){"READY"===this.state&&this.fillBuffer_(),this.checkBufferTimeout_&&g.clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=g.setTimeout(this.monitorBufferTick_.bind(this),500)},r.prototype.fillBuffer_=function(){if(!this.sourceUpdater_.updating()){this.syncPoint_||(this.syncPoint_=this.syncController_.getSyncPoint(this.playlist_,this.duration_(),this.currentTimeline_,this.currentTime_()));var t=this.checkBuffer_(this.buffered_(),this.playlist_,this.mediaIndex,this.hasPlayed_(),this.currentTime_(),this.syncPoint_);if(t)fl(this.playlist_,this.mediaSource_,t.mediaIndex)?this.endOfStream():(t.mediaIndex!==this.playlist_.segments.length-1||"ended"!==this.mediaSource_.readyState||this.seeking_())&&((t.timeline!==this.currentTimeline_||null!==t.startOfSegment&&t.startOfSegment<this.sourceUpdater_.timestampOffset())&&(this.syncController_.reset(),t.timestampOffset=t.startOfSegment),this.loadSegment_(t))}},r.prototype.checkBuffer_=function(t,e,i,r,n,s){var a=0,o=void 0;t.length&&(a=t.end(t.length-1));var u=Math.max(0,a-n);if(!e.segments.length)return null;if(u>=this.goalBufferLength_())return null;if(!r&&1<=u)return null;if(null===s)return i=this.getSyncSegmentCandidate_(e),this.generateSegmentInfo_(e,i,null,!0);if(null!==i){var l=e.segments[i];return o=l&&l.end?l.end:a,this.generateSegmentInfo_(e,i+1,o,!1)}if(this.fetchAtBuffer_){var c=nu.getMediaInfoForTime(e,a,s.segmentIndex,s.time);i=c.mediaIndex,o=c.startTime}else{var h=nu.getMediaInfoForTime(e,n,s.segmentIndex,s.time);i=h.mediaIndex,o=h.startTime}return this.generateSegmentInfo_(e,i,o,!1)},r.prototype.getSyncSegmentCandidate_=function(t){var e=this;if(-1===this.currentTimeline_)return 0;var i=t.segments.map(function(t,e){return{timeline:t.timeline,segmentIndex:e}}).filter(function(t){return t.timeline===e.currentTimeline_});return i.length?i[Math.min(i.length-1,1)].segmentIndex:Math.max(t.segments.length-1,0)},r.prototype.generateSegmentInfo_=function(t,e,i,r){if(e<0||e>=t.segments.length)return null;var n=t.segments[e];return{requestId:"segment-loader-"+Math.random(),uri:n.resolvedUri,mediaIndex:e,isSyncRequest:r,startOfSegment:i,playlist:t,bytes:null,encryptedBytes:null,timestampOffset:null,timeline:n.timeline,duration:n.duration,segment:n}},r.prototype.abortRequestEarly_=function(t){if(this.hls_.tech_.paused()||!this.xhrOptions_.timeout||!this.playlist_.attributes.BANDWIDTH)return!1;if(Date.now()-(t.firstBytesReceivedAt||Date.now())<1e3)return!1;var e=this.currentTime_(),i=t.bandwidth,r=this.pendingSegment_.duration,n=nu.estimateSegmentRequestTime(r,i,this.playlist_,t.bytesReceived),s=function(t,e){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:1;return((t.length?t.end(t.length-1):0)-e)/i}(this.buffered_(),e,this.hls_.tech_.playbackRate())-1;if(n<=s)return!1;var a=function(t){var e=t.master,i=t.currentTime,r=t.bandwidth,n=t.duration,s=t.segmentDuration,a=t.timeUntilRebuffer,o=t.currentTimeline,u=t.syncController,l=e.playlists.filter(function(t){return!nu.isIncompatible(t)}),c=l.filter(nu.isEnabled);c.length||(c=l.filter(function(t){return!nu.isDisabled(t)}));var h=c.filter(nu.hasAttribute.bind(null,"BANDWIDTH")).map(function(t){var e=u.getSyncPoint(t,n,o,i)?1:2;return{playlist:t,rebufferingImpact:nu.estimateSegmentRequestTime(s,r,t)*e-a}}),d=h.filter(function(t){return t.rebufferingImpact<=0});return dl(d,function(t,e){return pl(e.playlist,t.playlist)}),d.length?d[0]:(dl(h,function(t,e){return t.rebufferingImpact-e.rebufferingImpact}),h[0]||null)}({master:this.hls_.playlists.master,currentTime:e,bandwidth:i,duration:this.duration_(),segmentDuration:r,timeUntilRebuffer:s,currentTimeline:this.currentTimeline_,syncController:this.syncController_});if(a){var o=n-s-a.rebufferingImpact,u=.5;return s<=fu&&(u=1),!a.playlist||a.playlist.uri===this.playlist_.uri||o<u?!1:(this.bandwidth=a.playlist.attributes.BANDWIDTH*Qu.BANDWIDTH_VARIANCE+1,this.abort(),this.trigger("earlyabort"),!0)}},r.prototype.handleProgress_=function(t,e){this.pendingSegment_&&e.requestId===this.pendingSegment_.requestId&&!this.abortRequestEarly_(e.stats)&&this.trigger("progress")},r.prototype.loadSegment_=function(t){this.state="WAITING",this.pendingSegment_=t,this.trimBackBuffer_(t),t.abortRequests=al(this.hls_.xhr,this.xhrOptions_,this.decrypter_,this.createSimplifiedSegmentObj_(t),this.handleProgress_.bind(this),this.segmentRequestFinished_.bind(this))},r.prototype.trimBackBuffer_=function(t){var e,i,r,n,s=(e=this.seekable_(),i=this.currentTime_(),r=this.playlist_.targetDuration||10,n=void 0,n=e.length&&0<e.start(0)&&e.start(0)<i?e.start(0):i-30,Math.min(n,i-r));0<s&&this.remove(0,s)},r.prototype.createSimplifiedSegmentObj_=function(t){var e=t.segment,i={resolvedUri:e.resolvedUri,byterange:e.byterange,requestId:t.requestId};if(e.key){var r=e.key.iv||new Uint32Array([0,0,0,t.mediaIndex+t.playlist.mediaSequence]);i.key={resolvedUri:e.key.resolvedUri,iv:r}}return e.map&&(i.map=this.initSegment(e.map)),i},r.prototype.segmentRequestFinished_=function(t,e){if(this.mediaRequests+=1,e.stats&&(this.mediaBytesTransferred+=e.stats.bytesReceived,this.mediaTransferDuration+=e.stats.roundTripTime),this.pendingSegment_){if(e.requestId===this.pendingSegment_.requestId){if(t)return this.pendingSegment_=null,this.state="READY",t.code===tl?void(this.mediaRequestsAborted+=1):(this.pause(),t.code===Zu?(this.mediaRequestsTimedout+=1,this.bandwidth=1,this.roundTrip=NaN,void this.trigger("bandwidthupdate")):(this.mediaRequestsErrored+=1,this.error(t),void this.trigger("error")));this.bandwidth=e.stats.bandwidth,this.roundTrip=e.stats.roundTripTime,e.map&&(e.map=this.initSegment(e.map,!0)),this.processSegmentResponse_(e)}}else this.mediaRequestsAborted+=1},r.prototype.processSegmentResponse_=function(t){var e=this.pendingSegment_;e.bytes=t.bytes,t.map&&(e.segment.map.bytes=t.map.bytes),e.endOfAllRequests=t.endOfAllRequests,this.handleSegment_()},r.prototype.handleSegment_=function(){var t=this;if(this.pendingSegment_){var e=this.pendingSegment_,i=e.segment,r=this.syncController_.probeSegmentInfo(e);"undefined"==typeof this.startingMedia_&&r&&(r.containsAudio||r.containsVideo)&&(this.startingMedia_={containsAudio:r.containsAudio,containsVideo:r.containsVideo});var n,s,a,o=(n=this.loaderType_,s=this.startingMedia_,a=r,"main"===n&&s&&a?a.containsAudio||a.containsVideo?s.containsVideo&&!a.containsVideo?"Only audio found in segment when we expected video. We can't switch to audio only from a stream that had video. To get rid of this message, please add codec information to the manifest.":!s.containsVideo&&a.containsVideo?"Video found in segment when we expected only audio. We can't switch to a stream with video from an audio only stream. To get rid of this message, please add codec information to the manifest.":null:"Neither audio nor video found in segment.":null);if(o)return this.error({message:o,blacklistDuration:1/0}),void this.trigger("error");if(e.isSyncRequest)return this.trigger("syncinfoupdate"),this.pendingSegment_=null,void(this.state="READY");null!==e.timestampOffset&&e.timestampOffset!==this.sourceUpdater_.timestampOffset()&&(this.sourceUpdater_.timestampOffset(e.timestampOffset),this.trigger("timestampoffset"));var u,l,c,h,d,p,f,m,g,y,v,_=this.syncController_.mappingForTimeline(e.timeline);if(null!==_&&this.trigger({type:"segmenttimemapping",mapping:_}),this.state="APPENDING",i.map){var b=hu(i.map);if(!this.activeInitSegmentId_||this.activeInitSegmentId_!==b){var T=this.initSegment(i.map);this.sourceUpdater_.appendBuffer(T.bytes,function(){t.activeInitSegmentId_=b})}}e.byteLength=e.bytes.byteLength,"number"==typeof i.start&&"number"==typeof i.end?this.mediaSecondsLoaded+=i.end-i.start:this.mediaSecondsLoaded+=i.duration,this.logger_((l=(u=e).segment,c=l.start,h=l.end,d=u.playlist,p=d.mediaSequence,f=d.id,m=d.segments,g=void 0===m?[]:m,y=u.mediaIndex,v=u.timeline,["appending ["+y+"] of ["+p+", "+(p+g.length)+"] from playlist ["+f+"]","["+c+" => "+h+"] in timeline ["+v+"]"].join(" "))),this.sourceUpdater_.appendBuffer(e.bytes,this.handleUpdateEnd_.bind(this))}else this.state="READY"},r.prototype.handleUpdateEnd_=function(){if(!this.pendingSegment_)return this.state="READY",void(this.paused()||this.monitorBuffer_());var t=this.pendingSegment_,e=t.segment,i=null!==this.mediaIndex;(this.pendingSegment_=null,this.recordThroughput_(t),this.addSegmentMetadataCue_(t),this.state="READY",this.mediaIndex=t.mediaIndex,this.fetchAtBuffer_=!0,this.currentTimeline_=t.timeline,this.trigger("syncinfoupdate"),e.end&&this.currentTime_()-e.end>3*t.playlist.targetDuration)?this.resetEverything():(i&&this.trigger("bandwidthupdate"),this.trigger("progress"),fl(t.playlist,this.mediaSource_,t.mediaIndex+1)&&this.endOfStream(),this.paused()||this.monitorBuffer_())},r.prototype.recordThroughput_=function(t){var e=this.throughput.rate,i=Date.now()-t.endOfAllRequests+1,r=Math.floor(t.byteLength/i*8*1e3);this.throughput.rate+=(r-e)/++this.throughput.count},r.prototype.addSegmentMetadataCue_=function(t){if(this.segmentMetadataTrack_){var e=t.segment,i=e.start,r=e.end;if(ml(i)&&ml(r)){bu(i,r,this.segmentMetadataTrack_);var n=g.WebKitDataCue||g.VTTCue,s={bandwidth:t.playlist.attributes.BANDWIDTH,resolution:t.playlist.attributes.RESOLUTION,codecs:t.playlist.attributes.CODECS,byteLength:t.byteLength,uri:t.uri,timeline:t.timeline,playlist:t.playlist.uri,start:i,end:r},a=new n(i,r,JSON.stringify(s));a.value=s,this.segmentMetadataTrack_.addCue(a)}}},r}(As.EventTarget),yl=new Uint8Array("\n\n".split("").map(function(t){return t.charCodeAt(0)})),vl=function(t){return String.fromCharCode.apply(null,t)},_l=function(r){function n(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};y(this,n);var i=b(this,r.call(this,t,e));return i.mediaSource_=null,i.subtitlesTrack_=null,i}return _(n,r),n.prototype.buffered_=function(){if(!this.subtitlesTrack_||!this.subtitlesTrack_.cues.length)return As.createTimeRanges();var t=this.subtitlesTrack_.cues,e=t[0].startTime,i=t[t.length-1].startTime;return As.createTimeRanges([[e,i]])},n.prototype.initSegment=function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1];if(!t)return null;var i=hu(t),r=this.initSegments_[i];if(e&&!r&&t.bytes){var n=yl.byteLength+t.bytes.byteLength,s=new Uint8Array(n);s.set(t.bytes),s.set(yl,t.bytes.byteLength),this.initSegments_[i]=r={resolvedUri:t.resolvedUri,byterange:t.byterange,bytes:s}}return r||t},n.prototype.couldBeginLoading_=function(){return this.playlist_&&this.subtitlesTrack_&&!this.paused()},n.prototype.init_=function(){return this.state="READY",this.resetEverything(),this.monitorBuffer_()},n.prototype.track=function(t){return"undefined"==typeof t||(this.subtitlesTrack_=t,"INIT"===this.state&&this.couldBeginLoading_()&&this.init_()),this.subtitlesTrack_},n.prototype.remove=function(t,e){bu(t,e,this.subtitlesTrack_)},n.prototype.fillBuffer_=function(){var t=this;this.syncPoint_||(this.syncPoint_=this.syncController_.getSyncPoint(this.playlist_,this.duration_(),this.currentTimeline_,this.currentTime_()));var e=this.checkBuffer_(this.buffered_(),this.playlist_,this.mediaIndex,this.hasPlayed_(),this.currentTime_(),this.syncPoint_);if(e=this.skipEmptySegments_(e)){if(null===this.syncController_.timestampOffsetForTimeline(e.timeline)){return this.syncController_.one("timestampoffset",function(){t.state="READY",t.paused()||t.monitorBuffer_()}),void(this.state="WAITING_ON_TIMELINE")}this.loadSegment_(e)}},n.prototype.skipEmptySegments_=function(t){for(;t&&t.segment.empty;)t=this.generateSegmentInfo_(t.playlist,t.mediaIndex+1,t.startOfSegment+t.duration,t.isSyncRequest);return t},n.prototype.handleSegment_=function(){var e=this;if(this.pendingSegment_&&this.subtitlesTrack_){this.state="APPENDING";var t=this.pendingSegment_,i=t.segment;if("function"!=typeof g.WebVTT&&this.subtitlesTrack_&&this.subtitlesTrack_.tech_){var r=function(){e.handleSegment_()};return this.state="WAITING_ON_VTTJS",this.subtitlesTrack_.tech_.one("vttjsloaded",r),void this.subtitlesTrack_.tech_.one("vttjserror",function(){e.subtitlesTrack_.tech_.off("vttjsloaded",r),e.error({message:"Error loading vtt.js"}),e.state="READY",e.pause(),e.trigger("error")})}i.requested=!0;try{this.parseVTTCues_(t)}catch(t){return this.error({message:t.message}),this.state="READY",this.pause(),this.trigger("error")}if(this.updateTimeMapping_(t,this.syncController_.timelines[t.timeline],this.playlist_),t.isSyncRequest)return this.trigger("syncinfoupdate"),this.pendingSegment_=null,void(this.state="READY");t.byteLength=t.bytes.byteLength,this.mediaSecondsLoaded+=i.duration,t.cues.length&&this.remove(t.cues[0].endTime,t.cues[t.cues.length-1].endTime),t.cues.forEach(function(t){e.subtitlesTrack_.addCue(t)}),this.handleUpdateEnd_()}else this.state="READY"},n.prototype.parseVTTCues_=function(e){var t=void 0,i=!1;"function"==typeof g.TextDecoder?t=new g.TextDecoder("utf8"):(t=g.WebVTT.StringDecoder(),i=!0);var r=new g.WebVTT.Parser(g,g.vttjs,t);if(e.cues=[],e.timestampmap={MPEGTS:0,LOCAL:0},r.oncue=e.cues.push.bind(e.cues),r.ontimestampmap=function(t){return e.timestampmap=t},r.onparsingerror=function(t){As.log.warn("Error encountered when parsing cues: "+t.message)},e.segment.map){var n=e.segment.map.bytes;i&&(n=vl(n)),r.parse(n)}var s=e.bytes;i&&(s=vl(s)),r.parse(s),r.flush()},n.prototype.updateTimeMapping_=function(t,e,i){var r=t.segment;if(e)if(t.cues.length){var n=t.timestampmap,s=n.MPEGTS/9e4-n.LOCAL+e.mapping;if(t.cues.forEach(function(t){t.startTime+=s,t.endTime+=s}),!i.syncInfo){var a=t.cues[0].startTime,o=t.cues[t.cues.length-1].startTime;i.syncInfo={mediaSequence:i.mediaSequence+t.mediaIndex,time:Math.min(a,o-r.duration)}}}else r.empty=!0},n}(gl),bl=function(t,e){for(var i=t.cues,r=0;r<i.length;r++){var n=i[r];if(e>=n.adStartTime&&e<=n.adEndTime)return n}return null},Tl=So,Sl=[{name:"VOD",run:function(t,e,i,r,n){if(i!==1/0){return{time:0,segmentIndex:0}}return null}},{name:"ProgramDateTime",run:function(t,e,i,r,n){if(!t.datetimeToDisplayTime)return null;var s=e.segments||[],a=null,o=null;n=n||0;for(var u=0;u<s.length;u++){var l=s[u];if(l.dateTimeObject){var c=l.dateTimeObject.getTime()/1e3+t.datetimeToDisplayTime,h=Math.abs(n-c);if(null!==o&&o<h)break;o=h,a={time:c,segmentIndex:u}}}return a}},{name:"Segment",run:function(t,e,i,r,n){var s=e.segments||[],a=null,o=null;n=n||0;for(var u=0;u<s.length;u++){var l=s[u];if(l.timeline===r&&"undefined"!=typeof l.start){var c=Math.abs(n-l.start);if(null!==o&&o<c)break;(!a||null===o||c<=o)&&(o=c,a={time:l.start,segmentIndex:u})}}return a}},{name:"Discontinuity",run:function(t,e,i,r,n){var s=null;if(n=n||0,e.discontinuityStarts&&e.discontinuityStarts.length)for(var a=null,o=0;o<e.discontinuityStarts.length;o++){var u=e.discontinuityStarts[o],l=e.discontinuitySequence+o+1,c=t.discontinuities[l];if(c){var h=Math.abs(n-c.time);if(null!==a&&a<h)break;(!s||null===a||h<=a)&&(a=h,s={time:c.time,segmentIndex:u})}}return s}},{name:"Playlist",run:function(t,e,i,r,n){return e.syncInfo?{time:e.syncInfo.time,segmentIndex:e.syncInfo.mediaSequence-e.mediaSequence}:null}}],kl=function(e){function i(){y(this,i);var t=b(this,e.call(this));return t.inspectCache_=void 0,t.timelines=[],t.discontinuities=[],t.datetimeToDisplayTime=null,t.logger_=Yu("SyncController"),t}return _(i,e),i.prototype.getSyncPoint=function(t,e,i,r){var n=this.runStrategies_(t,e,i,r);return n.length?this.selectSyncPoint_(n,{key:"time",value:r}):null},i.prototype.getExpiredTime=function(t,e){if(!t||!t.segments)return null;var i=this.runStrategies_(t,e,t.discontinuitySequence,0);if(!i.length)return null;var r=this.selectSyncPoint_(i,{key:"segmentIndex",value:0});return 0<r.segmentIndex&&(r.time*=-1),Math.abs(r.time+Go(t,r.segmentIndex,0))},i.prototype.runStrategies_=function(t,e,i,r){for(var n=[],s=0;s<Sl.length;s++){var a=Sl[s],o=a.run(this,t,e,i,r);o&&(o.strategy=a.name,n.push({strategy:a.name,syncPoint:o}))}return n},i.prototype.selectSyncPoint_=function(t,e){for(var i=t[0].syncPoint,r=Math.abs(t[0].syncPoint[e.key]-e.value),n=t[0].strategy,s=1;s<t.length;s++){var a=Math.abs(t[s].syncPoint[e.key]-e.value);a<r&&(r=a,i=t[s].syncPoint,n=t[s].strategy)}return this.logger_("syncPoint for ["+e.key+": "+e.value+"] chosen with strategy ["+n+"]: [time:"+i.time+", segmentIndex:"+i.segmentIndex+"]"),i},i.prototype.saveExpiredSegmentInfo=function(t,e){for(var i=e.mediaSequence-t.mediaSequence-1;0<=i;i--){var r=t.segments[i];if(r&&"undefined"!=typeof r.start){e.syncInfo={mediaSequence:t.mediaSequence+i,time:r.start},this.logger_("playlist refresh sync: [time:"+e.syncInfo.time+", mediaSequence: "+e.syncInfo.mediaSequence+"]"),this.trigger("syncinfoupdate");break}}},i.prototype.setDateTimeMapping=function(t){if(!this.datetimeToDisplayTime&&t.segments&&t.segments.length&&t.segments[0].dateTimeObject){var e=t.segments[0].dateTimeObject.getTime()/1e3;this.datetimeToDisplayTime=-e}},i.prototype.reset=function(){this.inspectCache_=void 0},i.prototype.probeSegmentInfo=function(t){var e=t.segment,i=t.playlist,r=void 0;return(r=e.map?this.probeMp4Segment_(t):this.probeTsSegment_(t))&&this.calculateSegmentTimeMapping_(t,r)&&(this.saveDiscontinuitySyncInfo_(t),i.syncInfo||(i.syncInfo={mediaSequence:i.mediaSequence+t.mediaIndex,time:e.start})),r},i.prototype.probeMp4Segment_=function(t){var e=t.segment,i=La(e.map.bytes),r=Pa(i,t.bytes);return null!==t.timestampOffset&&(t.timestampOffset-=r),{start:r,end:r+e.duration}},i.prototype.probeTsSegment_=function(t){var e=Tl(t.bytes,this.inspectCache_),i=void 0,r=void 0;return e?(e.video&&2===e.video.length?(this.inspectCache_=e.video[1].dts,i=e.video[0].dtsTime,r=e.video[1].dtsTime):e.audio&&2===e.audio.length&&(this.inspectCache_=e.audio[1].dts,i=e.audio[0].dtsTime,r=e.audio[1].dtsTime),{start:i,end:r,containsVideo:e.video&&2===e.video.length,containsAudio:e.audio&&2===e.audio.length}):null},i.prototype.timestampOffsetForTimeline=function(t){return"undefined"==typeof this.timelines[t]?null:this.timelines[t].time},i.prototype.mappingForTimeline=function(t){return"undefined"==typeof this.timelines[t]?null:this.timelines[t].mapping},i.prototype.calculateSegmentTimeMapping_=function(t,e){var i=t.segment,r=this.timelines[t.timeline];if(null!==t.timestampOffset)r={time:t.startOfSegment,mapping:t.startOfSegment-e.start},this.timelines[t.timeline]=r,this.trigger("timestampoffset"),this.logger_("time mapping for timeline "+t.timeline+": [time: "+r.time+"] [mapping: "+r.mapping+"]"),i.start=t.startOfSegment,i.end=e.end+r.mapping;else{if(!r)return!1;i.start=e.start+r.mapping,i.end=e.end+r.mapping}return!0},i.prototype.saveDiscontinuitySyncInfo_=function(t){var e=t.playlist,i=t.segment;if(i.discontinuity)this.discontinuities[i.timeline]={time:i.start,accuracy:0};else if(e.discontinuityStarts&&e.discontinuityStarts.length)for(var r=0;r<e.discontinuityStarts.length;r++){var n=e.discontinuityStarts[r],s=e.discontinuitySequence+r+1,a=n-t.mediaIndex,o=Math.abs(a);if(!this.discontinuities[s]||this.discontinuities[s].accuracy>o){var u=void 0;u=a<0?i.start-Go(e,t.mediaIndex,n):i.end+Go(e,t.mediaIndex+1,n),this.discontinuities[s]={time:u,accuracy:o}}}},i}(As.EventTarget),Cl=new Pu("./decrypter-worker.worker.js",function(t,e){var i,s,h,r,n,d,p,g,a,l,y,o,u=this;i="undefined"!=typeof t?t:"undefined"!=typeof global?global:"undefined"!=typeof u?u:{},s="undefined"!=typeof t?t:"undefined"!=typeof i?i:"undefined"!=typeof u?u:{},h=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},r=function(){function r(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(t,e,i){return e&&r(t.prototype,e),i&&r(t,i),t}}(),n=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==("undefined"==typeof e?"undefined":v(e))&&"function"!=typeof e?t:e},d=function(){var t=[[[],[],[],[],[]],[[],[],[],[],[]]],e=t[0],i=t[1],r=e[4],n=i[4],s=void 0,a=void 0,o=void 0,u=[],l=[],c=void 0,h=void 0,d=void 0,p=void 0,f=void 0;for(s=0;s<256;s++)l[(u[s]=s<<1^283*(s>>7))^s]=s;for(a=o=0;!r[a];a^=c||1,o=l[o]||1)for(d=(d=o^o<<1^o<<2^o<<3^o<<4)>>8^255&d^99,f=16843009*u[h=u[c=u[n[r[a]=d]=a]]]^65537*h^257*c^16843008*a,p=257*u[d]^16843008*d,s=0;s<4;s++)e[s][a]=p=p<<24^p>>>8,i[s][d]=f=f<<24^f>>>8;for(s=0;s<5;s++)e[s]=e[s].slice(0),i[s]=i[s].slice(0);return t},p=null,g=function(){function c(t){h(this,c),p||(p=d()),this._tables=[[p[0][0].slice(),p[0][1].slice(),p[0][2].slice(),p[0][3].slice(),p[0][4].slice()],[p[1][0].slice(),p[1][1].slice(),p[1][2].slice(),p[1][3].slice(),p[1][4].slice()]];var e=void 0,i=void 0,r=void 0,n=void 0,s=void 0,a=this._tables[0][4],o=this._tables[1],u=t.length,l=1;if(4!==u&&6!==u&&8!==u)throw new Error("Invalid aes key size");for(n=t.slice(0),s=[],this._key=[n,s],e=u;e<4*u+28;e++)r=n[e-1],(e%u==0||8===u&&e%u==4)&&(r=a[r>>>24]<<24^a[r>>16&255]<<16^a[r>>8&255]<<8^a[255&r],e%u==0&&(r=r<<8^r>>>24^l<<24,l=l<<1^283*(l>>7))),n[e]=n[e-u]^r;for(i=0;e;i++,e--)r=n[3&i?e:e-4],s[i]=e<=4||i<4?r:o[0][a[r>>>24]]^o[1][a[r>>16&255]]^o[2][a[r>>8&255]]^o[3][a[255&r]]}return c.prototype.decrypt=function(t,e,i,r,n,s){var a=this._key[1],o=t^a[0],u=r^a[1],l=i^a[2],c=e^a[3],h=void 0,d=void 0,p=void 0,f=a.length/4-2,m=void 0,g=4,y=this._tables[1],v=y[0],_=y[1],b=y[2],T=y[3],S=y[4];for(m=0;m<f;m++)h=v[o>>>24]^_[u>>16&255]^b[l>>8&255]^T[255&c]^a[g],d=v[u>>>24]^_[l>>16&255]^b[c>>8&255]^T[255&o]^a[g+1],p=v[l>>>24]^_[c>>16&255]^b[o>>8&255]^T[255&u]^a[g+2],c=v[c>>>24]^_[o>>16&255]^b[u>>8&255]^T[255&l]^a[g+3],g+=4,o=h,u=d,l=p;for(m=0;m<4;m++)n[(3&-m)+s]=S[o>>>24]<<24^S[u>>16&255]<<16^S[l>>8&255]<<8^S[255&c]^a[g++],h=o,o=u,u=l,l=c,c=h},c}(),a=function(){function t(){h(this,t),this.listeners={}}return t.prototype.on=function(t,e){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)},t.prototype.off=function(t,e){if(!this.listeners[t])return!1;var i=this.listeners[t].indexOf(e);return this.listeners[t].splice(i,1),-1<i},t.prototype.trigger=function(t){var e=this.listeners[t];if(e)if(2===arguments.length)for(var i=e.length,r=0;r<i;++r)e[r].call(this,arguments[1]);else for(var n=Array.prototype.slice.call(arguments,1),s=e.length,a=0;a<s;++a)e[a].apply(this,n)},t.prototype.dispose=function(){this.listeners={}},t.prototype.pipe=function(e){this.on("data",function(t){e.push(t)})},t}(),l=function(e){function i(){h(this,i);var t=n(this,e.call(this,a));return t.jobs=[],t.delay=1,t.timeout_=null,t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof e?"undefined":v(e)));t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(i,e),i.prototype.processJob_=function(){this.jobs.shift()(),this.jobs.length?this.timeout_=setTimeout(this.processJob_.bind(this),this.delay):this.timeout_=null},i.prototype.push=function(t){this.jobs.push(t),this.timeout_||(this.timeout_=setTimeout(this.processJob_.bind(this),this.delay))},i}(a),y=function(t){return t<<24|(65280&t)<<8|(16711680&t)>>8|t>>>24},o=function(){function u(t,e,i,r){h(this,u);var n=u.STEP,s=new Int32Array(t.buffer),a=new Uint8Array(t.byteLength),o=0;for(this.asyncStream_=new l,this.asyncStream_.push(this.decryptChunk_(s.subarray(o,o+n),e,i,a)),o=n;o<s.length;o+=n)i=new Uint32Array([y(s[o-4]),y(s[o-3]),y(s[o-2]),y(s[o-1])]),this.asyncStream_.push(this.decryptChunk_(s.subarray(o,o+n),e,i,a));this.asyncStream_.push(function(){var t;r(null,(t=a).subarray(0,t.byteLength-t[t.byteLength-1]))})}return u.prototype.decryptChunk_=function(e,i,r,n){return function(){var t=function(t,e,i){var r=new Int32Array(t.buffer,t.byteOffset,t.byteLength>>2),n=new g(Array.prototype.slice.call(e)),s=new Uint8Array(t.byteLength),a=new Int32Array(s.buffer),o=void 0,u=void 0,l=void 0,c=void 0,h=void 0,d=void 0,p=void 0,f=void 0,m=void 0;for(o=i[0],u=i[1],l=i[2],c=i[3],m=0;m<r.length;m+=4)h=y(r[m]),d=y(r[m+1]),p=y(r[m+2]),f=y(r[m+3]),n.decrypt(h,d,p,f,a,m),a[m]=y(a[m]^o),a[m+1]=y(a[m+1]^u),a[m+2]=y(a[m+2]^l),a[m+3]=y(a[m+3]^c),o=h,u=d,l=p,c=f;return s}(e,i,r);n.set(t,e.byteOffset)}},r(u,null,[{key:"STEP",get:function(){return 32e3}}]),u}(),new function(t){t.onmessage=function(t){var n=t.data,e=new Uint8Array(n.encrypted.bytes,n.encrypted.byteOffset,n.encrypted.byteLength),i=new Uint32Array(n.key.bytes,n.key.byteOffset,n.key.byteLength/4),r=new Uint32Array(n.iv.bytes,n.iv.byteOffset,n.iv.byteLength/4);new o(e,i,r,function(t,e){var i,r;s.postMessage((i={source:n.source,decrypted:e},r={},Object.keys(i).forEach(function(t){var e=i[t];ArrayBuffer.isView(e)?r[t]={bytes:e.buffer,byteOffset:e.byteOffset,byteLength:e.byteLength}:r[t]=e}),r),[e.buffer])})}}(u)}),El=function(t,e){t.abort(),t.pause(),e&&e.activePlaylistLoader&&(e.activePlaylistLoader.pause(),e.activePlaylistLoader=null)},wl=function(t,e){(e.activePlaylistLoader=t).load()},Al={AUDIO:function(u,l){return function(){var t=l.segmentLoaders[u],e=l.mediaTypes[u],i=l.blacklistCurrentPlaylist;El(t,e);var r=e.activeTrack(),n=e.activeGroup(),s=(n.filter(function(t){return t.default})[0]||n[0]).id,a=e.tracks[s];if(r!==a){for(var o in As.log.warn("Problem encountered loading the alternate audio track.Switching back to default."),e.tracks)e.tracks[o].enabled=e.tracks[o]===a;e.onTrackChanged()}else i({message:"Problem encountered loading the default audio track."})}},SUBTITLES:function(r,n){return function(){var t=n.segmentLoaders[r],e=n.mediaTypes[r];As.log.warn("Problem encountered loading the subtitle track.Disabling subtitle track."),El(t,e);var i=e.activeTrack();i&&(i.mode="disabled"),e.onTrackChanged()}}},Ll={AUDIO:function(t,e,i){if(e){var r=i.tech,n=i.requestOptions,s=i.segmentLoaders[t];e.on("loadedmetadata",function(){var t=e.media();s.playlist(t,n),(!r.paused()||t.endList&&"none"!==r.preload())&&s.load()}),e.on("loadedplaylist",function(){s.playlist(e.media(),n),r.paused()||s.load()}),e.on("error",Al[t](t,i))}},SUBTITLES:function(t,e,i){var r=i.tech,n=i.requestOptions,s=i.segmentLoaders[t],a=i.mediaTypes[t];e.on("loadedmetadata",function(){var t=e.media();s.playlist(t,n),s.track(a.activeTrack()),(!r.paused()||t.endList&&"none"!==r.preload())&&s.load()}),e.on("loadedplaylist",function(){s.playlist(e.media(),n),r.paused()||s.load()}),e.on("error",Al[t](t,i))}},Pl=function(e,i){return function(t){return t.attributes[e]===i}},Ol=function(e){return function(t){return t.resolvedUri===e}},xl={AUDIO:function(t,e){var i,r,n=e.hls,s=e.sourceType,a=e.segmentLoaders[t],o=e.requestOptions.withCredentials,u=e.master,l=u.mediaGroups,c=u.playlists,h=e.mediaTypes[t],d=h.groups,p=h.tracks,f=e.masterPlaylistLoader;for(var m in l[t]&&0!==Object.keys(l[t]).length||(l[t]={main:{default:{default:!0}}}),l[t]){d[m]||(d[m]=[]);var g=c.filter(Pl(t,m));for(var y in l[t][m]){var v=l[t][m][y];g.filter(Ol(v.resolvedUri)).length&&delete v.resolvedUri;var _=void 0;if(_=v.resolvedUri?new Vo(v.resolvedUri,n,o):v.playlists&&"dash"===s?new Xu(v.playlists[0],n,o,f):null,v=As.mergeOptions({id:y,playlistLoader:_},v),Ll[t](t,v.playlistLoader,e),d[m].push(v),"undefined"==typeof p[y]){var b=new As.AudioTrack({id:y,kind:(i=v,r=void 0,r=i.default?"main":"alternative",i.characteristics&&0<=i.characteristics.indexOf("public.accessibility.describes-video")&&(r="main-desc"),r),enabled:!1,language:v.language,default:v.default,label:y});p[y]=b}}}a.on("error",Al[t](t,e))},SUBTITLES:function(t,e){var i=e.tech,r=e.hls,n=e.sourceType,s=e.segmentLoaders[t],a=e.requestOptions.withCredentials,o=e.master.mediaGroups,u=e.mediaTypes[t],l=u.groups,c=u.tracks,h=e.masterPlaylistLoader;for(var d in o[t])for(var p in l[d]||(l[d]=[]),o[t][d])if(!o[t][d][p].forced){var f=o[t][d][p],m=void 0;if("hls"===n?m=new Vo(f.resolvedUri,r,a):"dash"===n&&(m=new Xu(f.playlists[0],r,a,h)),f=As.mergeOptions({id:p,playlistLoader:m},f),Ll[t](t,f.playlistLoader,e),l[d].push(f),"undefined"==typeof c[p]){var g=i.addRemoteTextTrack({id:p,kind:"subtitles",enabled:!1,language:f.language,label:p},!1).track;c[p]=g}}s.on("error",Al[t](t,e))},"CLOSED-CAPTIONS":function(t,e){var i=e.tech,r=e.master.mediaGroups,n=e.mediaTypes[t],s=n.groups,a=n.tracks;for(var o in r[t])for(var u in s[o]||(s[o]=[]),r[t][o]){var l=r[t][o][u];if(l.instreamId.match(/CC\d/)&&(s[o].push(As.mergeOptions({id:u},l)),"undefined"==typeof a[u])){var c=i.addRemoteTextTrack({id:l.instreamId,kind:"captions",enabled:!1,language:l.language,label:u},!1).track;a[u]=c}}}},Il={AUDIO:function(i,r){return function(){var t=r.mediaTypes[i].tracks;for(var e in t)if(t[e].enabled)return t[e];return null}},SUBTITLES:function(i,r){return function(){var t=r.mediaTypes[i].tracks;for(var e in t)if("showing"===t[e].mode)return t[e];return null}}},Dl=function(e){["AUDIO","SUBTITLES","CLOSED-CAPTIONS"].forEach(function(t){xl[t](t,e)});var i=e.mediaTypes,t=e.masterPlaylistLoader,r=e.tech,n=e.hls;["AUDIO","SUBTITLES"].forEach(function(t){var s,a,o,u,l,c;i[t].activeGroup=(s=t,a=e,function(e){var t=a.masterPlaylistLoader,i=a.mediaTypes[s].groups,r=t.media();if(!r)return null;var n=null;return r.attributes[s]&&(n=i[r.attributes[s]]),n=n||i.main,"undefined"==typeof e?n:null===e?null:n.filter(function(t){return t.id===e.id})[0]||null}),i[t].activeTrack=Il[t](t,e),i[t].onGroupChanged=(o=t,u=e,function(){var t=u.segmentLoaders,e=t[o],i=t.main,r=u.mediaTypes[o],n=r.activeTrack(),s=r.activeGroup(n),a=r.activePlaylistLoader;El(e,r),s&&(s.playlistLoader?(e.resyncLoader(),wl(s.playlistLoader,r)):a&&i.resetEverything())}),i[t].onTrackChanged=(l=t,c=e,function(){var t=c.segmentLoaders,e=t[l],i=t.main,r=c.mediaTypes[l],n=r.activeTrack(),s=r.activeGroup(n),a=r.activePlaylistLoader;El(e,r),s&&(s.playlistLoader?(a!==s.playlistLoader&&(e.track&&e.track(n),e.resetEverything()),wl(s.playlistLoader,r)):i.resetEverything())})});var s=i.AUDIO.activeGroup(),a=(s.filter(function(t){return t.default})[0]||s[0]).id;i.AUDIO.tracks[a].enabled=!0,i.AUDIO.onTrackChanged(),t.on("mediachange",function(){["AUDIO","SUBTITLES"].forEach(function(t){return i[t].onGroupChanged()})});var o=function(){i.AUDIO.onTrackChanged(),r.trigger({type:"usage",name:"hls-audio-change"})};for(var u in r.audioTracks().addEventListener("change",o),r.remoteTextTracks().addEventListener("change",i.SUBTITLES.onTrackChanged),n.on("dispose",function(){r.audioTracks().removeEventListener("change",o),r.remoteTextTracks().removeEventListener("change",i.SUBTITLES.onTrackChanged)}),r.clearTracks("audio"),i.AUDIO.tracks)r.audioTracks().addTrack(i.AUDIO.tracks[u])},Rl=function(){var e={};return["AUDIO","SUBTITLES","CLOSED-CAPTIONS"].forEach(function(t){e[t]={groups:{},tracks:{},activePlaylistLoader:null,activeGroup:$u,activeTrack:$u,onGroupChanged:$u,onTrackChanged:$u}}),e},Ml=void 0,Ul=["mediaRequests","mediaRequestsAborted","mediaRequestsTimedout","mediaRequestsErrored","mediaTransferDuration","mediaBytesTransferred"],Nl=function(t){return this.audioSegmentLoader_[t]+this.mainSegmentLoader_[t]},Bl=function(d){function p(t){y(this,p);var e=b(this,d.call(this)),i=t.url,r=t.withCredentials,n=t.tech,s=t.bandwidth,a=t.externHls,o=t.useCueTags,u=t.blacklistDuration,l=t.enableLowInitialPlaylist,c=t.sourceType;if(!i)throw new Error("A non-empty playlist URL is required");Ml=a,e.withCredentials=r,e.tech_=n,e.hls_=n.hls,e.sourceType_=c,e.useCueTags_=o,e.blacklistDuration=u,e.enableLowInitialPlaylist=l,e.useCueTags_&&(e.cueTagsTrack_=e.tech_.addTextTrack("metadata","ad-cues"),e.cueTagsTrack_.inBandMetadataTrackDispatchType=""),e.requestOptions_={withCredentials:e.withCredentials,timeout:null},e.mediaTypes_=Rl(),e.mediaSource=new As.MediaSource,e.mediaSource.addEventListener("sourceopen",e.handleSourceOpen_.bind(e)),e.seekable_=As.createTimeRanges(),e.hasPlayed_=function(){return!1},e.syncController_=new kl(t),e.segmentMetadataTrack_=n.addRemoteTextTrack({kind:"metadata",label:"segment-metadata"},!1).track,e.decrypter_=new Cl;var h={hls:e.hls_,mediaSource:e.mediaSource,currentTime:e.tech_.currentTime.bind(e.tech_),seekable:function(){return e.seekable()},seeking:function(){return e.tech_.seeking()},duration:function(){return e.mediaSource.duration},hasPlayed:function(){return e.hasPlayed_()},goalBufferLength:function(){return e.goalBufferLength()},bandwidth:s,syncController:e.syncController_,decrypter:e.decrypter_,sourceType:e.sourceType_};return e.masterPlaylistLoader_="dash"===e.sourceType_?new Xu(i,e.hls_,e.withCredentials):new Vo(i,e.hls_,e.withCredentials),e.setupMasterPlaylistLoaderListeners_(),e.mainSegmentLoader_=new gl(As.mergeOptions(h,{segmentMetadataTrack:e.segmentMetadataTrack_,loaderType:"main"}),t),e.audioSegmentLoader_=new gl(As.mergeOptions(h,{loaderType:"audio"}),t),e.subtitleSegmentLoader_=new _l(As.mergeOptions(h,{loaderType:"vtt"}),t),e.setupSegmentLoaderListeners_(),Ul.forEach(function(t){e[t+"_"]=Nl.bind(e,t)}),e.logger_=Yu("MPC"),e.masterPlaylistLoader_.load(),e}return _(p,d),p.prototype.setupMasterPlaylistLoaderListeners_=function(){var r=this;this.masterPlaylistLoader_.on("loadedmetadata",function(){var t=r.masterPlaylistLoader_.media(),e=1.5*r.masterPlaylistLoader_.targetDuration*1e3;ru(r.masterPlaylistLoader_.master,r.masterPlaylistLoader_.media())?r.requestOptions_.timeout=0:r.requestOptions_.timeout=e,t.endList&&"none"!==r.tech_.preload()&&(r.mainSegmentLoader_.playlist(t,r.requestOptions_),r.mainSegmentLoader_.load()),Dl({sourceType:r.sourceType_,segmentLoaders:{AUDIO:r.audioSegmentLoader_,SUBTITLES:r.subtitleSegmentLoader_,main:r.mainSegmentLoader_},tech:r.tech_,requestOptions:r.requestOptions_,masterPlaylistLoader:r.masterPlaylistLoader_,hls:r.hls_,master:r.master(),mediaTypes:r.mediaTypes_,blacklistCurrentPlaylist:r.blacklistCurrentPlaylist.bind(r)}),r.triggerPresenceUsage_(r.master(),t);try{r.setupSourceBuffers_()}catch(t){return As.log.warn("Failed to create SourceBuffers",t),r.mediaSource.endOfStream("decode")}r.setupFirstPlay(),r.trigger("selectedinitialmedia")}),this.masterPlaylistLoader_.on("loadedplaylist",function(){var t=r.masterPlaylistLoader_.media();if(!t){r.excludeUnsupportedVariants_();var e=void 0;return r.enableLowInitialPlaylist&&(e=r.selectInitialPlaylist()),e||(e=r.selectPlaylist()),r.initialMedia_=e,void r.masterPlaylistLoader_.media(r.initialMedia_)}if(r.useCueTags_&&r.updateAdCues_(t),r.mainSegmentLoader_.playlist(t,r.requestOptions_),r.updateDuration(),r.tech_.paused()||r.mainSegmentLoader_.load(),!t.endList){var i=function(){var t=r.seekable();0!==t.length&&r.mediaSource.addSeekableRange_(t.start(0),t.end(0))};if(r.duration()!==1/0){r.tech_.one("durationchange",function t(){r.duration()===1/0?i():r.tech_.one("durationchange",t)})}else i()}}),this.masterPlaylistLoader_.on("error",function(){r.blacklistCurrentPlaylist(r.masterPlaylistLoader_.error)}),this.masterPlaylistLoader_.on("mediachanging",function(){r.mainSegmentLoader_.abort(),r.mainSegmentLoader_.pause()}),this.masterPlaylistLoader_.on("mediachange",function(){var t=r.masterPlaylistLoader_.media(),e=1.5*r.masterPlaylistLoader_.targetDuration*1e3;ru(r.masterPlaylistLoader_.master,r.masterPlaylistLoader_.media())?r.requestOptions_.timeout=0:r.requestOptions_.timeout=e,r.mainSegmentLoader_.playlist(t,r.requestOptions_),r.mainSegmentLoader_.load(),r.tech_.trigger({type:"mediachange",bubbles:!0})}),this.masterPlaylistLoader_.on("playlistunchanged",function(){var t=r.masterPlaylistLoader_.media();r.stuckAtPlaylistEnd_(t)&&(r.blacklistCurrentPlaylist({message:"Playlist no longer updating."}),r.tech_.trigger("playliststuck"))}),this.masterPlaylistLoader_.on("renditiondisabled",function(){r.tech_.trigger({type:"usage",name:"hls-rendition-disabled"})}),this.masterPlaylistLoader_.on("renditionenabled",function(){r.tech_.trigger({type:"usage",name:"hls-rendition-enabled"})})},p.prototype.triggerPresenceUsage_=function(t,e){var i=t.mediaGroups||{},r=!0,n=Object.keys(i.AUDIO);for(var s in i.AUDIO)for(var a in i.AUDIO[s]){i.AUDIO[s][a].uri||(r=!1)}r&&this.tech_.trigger({type:"usage",name:"hls-demuxed"}),Object.keys(i.SUBTITLES).length&&this.tech_.trigger({type:"usage",name:"hls-webvtt"}),Ml.Playlist.isAes(e)&&this.tech_.trigger({type:"usage",name:"hls-aes"}),Ml.Playlist.isFmp4(e)&&this.tech_.trigger({type:"usage",name:"hls-fmp4"}),n.length&&1<Object.keys(i.AUDIO[n[0]]).length&&this.tech_.trigger({type:"usage",name:"hls-alternate-audio"}),this.useCueTags_&&this.tech_.trigger({type:"usage",name:"hls-playlist-cue-tags"})},p.prototype.setupSegmentLoaderListeners_=function(){var s=this;this.mainSegmentLoader_.on("bandwidthupdate",function(){var t=s.selectPlaylist(),e=s.masterPlaylistLoader_.media(),i=s.tech_.buffered(),r=i.length?i.end(i.length-1)-s.tech_.currentTime():0,n=s.bufferLowWaterLine();(!e.endList||s.duration()<Qu.MAX_BUFFER_LOW_WATER_LINE||t.attributes.BANDWIDTH<e.attributes.BANDWIDTH||n<=r)&&s.masterPlaylistLoader_.media(t),s.tech_.trigger("bandwidthupdate")}),this.mainSegmentLoader_.on("progress",function(){s.trigger("progress")}),this.mainSegmentLoader_.on("error",function(){s.blacklistCurrentPlaylist(s.mainSegmentLoader_.error())}),this.mainSegmentLoader_.on("syncinfoupdate",function(){s.onSyncInfoUpdate_()}),this.mainSegmentLoader_.on("timestampoffset",function(){s.tech_.trigger({type:"usage",name:"hls-timestamp-offset"})}),this.audioSegmentLoader_.on("syncinfoupdate",function(){s.onSyncInfoUpdate_()}),this.mainSegmentLoader_.on("ended",function(){s.onEndOfStream()}),this.mainSegmentLoader_.on("earlyabort",function(){s.blacklistCurrentPlaylist({message:"Aborted early because there isn't enough bandwidth to complete the request without rebuffering."},120)}),this.mainSegmentLoader_.on("reseteverything",function(){s.tech_.trigger("hls-reset")}),this.mainSegmentLoader_.on("segmenttimemapping",function(t){s.tech_.trigger({type:"hls-segment-time-mapping",mapping:t.mapping})}),this.audioSegmentLoader_.on("ended",function(){s.onEndOfStream()})},p.prototype.mediaSecondsLoaded_=function(){return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded+this.mainSegmentLoader_.mediaSecondsLoaded)},p.prototype.load=function(){this.mainSegmentLoader_.load(),this.mediaTypes_.AUDIO.activePlaylistLoader&&this.audioSegmentLoader_.load(),this.mediaTypes_.SUBTITLES.activePlaylistLoader&&this.subtitleSegmentLoader_.load()},p.prototype.fastQualityChange_=function(){var t=this.selectPlaylist();t!==this.masterPlaylistLoader_.media()&&(this.masterPlaylistLoader_.media(t),this.mainSegmentLoader_.resetLoader())},p.prototype.play=function(){if(!this.setupFirstPlay()){this.tech_.ended()&&this.tech_.setCurrentTime(0),this.hasPlayed_()&&this.load();var t=this.tech_.seekable();return this.tech_.duration()===1/0&&this.tech_.currentTime()<t.start(0)?this.tech_.setCurrentTime(t.end(t.length-1)):void 0}},p.prototype.setupFirstPlay=function(){var t=this,e=this.masterPlaylistLoader_.media();if(!e||this.tech_.paused()||this.hasPlayed_())return!1;if(!e.endList){var i=this.seekable();if(!i.length)return!1;if(As.browser.IE_VERSION&&0===this.tech_.readyState())return this.tech_.one("loadedmetadata",function(){t.trigger("firstplay"),t.tech_.setCurrentTime(i.end(0)),t.hasPlayed_=function(){return!0}}),!1;this.trigger("firstplay"),this.tech_.setCurrentTime(i.end(0))}return this.hasPlayed_=function(){return!0},this.load(),!0},p.prototype.handleSourceOpen_=function(){try{this.setupSourceBuffers_()}catch(t){return As.log.warn("Failed to create Source Buffers",t),this.mediaSource.endOfStream("decode")}if(this.tech_.autoplay()){var t=this.tech_.play();"undefined"!=typeof t&&"function"==typeof t.then&&t.then(null,function(t){})}this.trigger("sourceopen")},p.prototype.onEndOfStream=function(){var t=this.mainSegmentLoader_.ended_;this.mediaTypes_.AUDIO.activePlaylistLoader&&(t=!this.mainSegmentLoader_.startingMedia_||this.mainSegmentLoader_.startingMedia_.containsVideo?t&&this.audioSegmentLoader_.ended_:this.audioSegmentLoader_.ended_),t&&this.mediaSource.endOfStream()},p.prototype.stuckAtPlaylistEnd_=function(t){if(!this.seekable().length)return!1;var e=this.syncController_.getExpiredTime(t,this.mediaSource.duration);if(null===e)return!1;var i=Ml.Playlist.playlistEnd(t,e),r=this.tech_.currentTime(),n=this.tech_.buffered();if(!n.length)return i-r<=.1;var s=n.end(n.length-1);return s-r<=.1&&i-s<=.1},p.prototype.blacklistCurrentPlaylist=function(){var t,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},i=arguments[1],r=void 0;if(r=e.playlist||this.masterPlaylistLoader_.media(),i=i||e.blacklistDuration||this.blacklistDuration,!r){this.error=e;try{return this.mediaSource.endOfStream("network")}catch(t){return this.trigger("error")}}var n=1===this.masterPlaylistLoader_.master.playlists.filter(eu).length;return n?(As.log.warn("Problem encountered with the current HLS playlist. Trying again since it is the final playlist."),this.tech_.trigger("retryplaylist"),this.masterPlaylistLoader_.load(n)):(r.excludeUntil=Date.now()+1e3*i,this.tech_.trigger("blacklistplaylist"),this.tech_.trigger({type:"usage",name:"hls-rendition-blacklisted"}),t=this.selectPlaylist(),As.log.warn("Problem encountered with the current HLS playlist."+(e.message?" "+e.message:"")+" Switching to another playlist."),this.masterPlaylistLoader_.media(t))},p.prototype.pauseLoading=function(){this.mainSegmentLoader_.pause(),this.mediaTypes_.AUDIO.activePlaylistLoader&&this.audioSegmentLoader_.pause(),this.mediaTypes_.SUBTITLES.activePlaylistLoader&&this.subtitleSegmentLoader_.pause()},p.prototype.setCurrentTime=function(t){var e=gu(this.tech_.buffered(),t);return this.masterPlaylistLoader_&&this.masterPlaylistLoader_.media()&&this.masterPlaylistLoader_.media().segments?e&&e.length?t:(this.mainSegmentLoader_.resetEverything(),this.mainSegmentLoader_.abort(),this.mediaTypes_.AUDIO.activePlaylistLoader&&(this.audioSegmentLoader_.resetEverything(),this.audioSegmentLoader_.abort()),this.mediaTypes_.SUBTITLES.activePlaylistLoader&&(this.subtitleSegmentLoader_.resetEverything(),this.subtitleSegmentLoader_.abort()),void this.load()):0},p.prototype.duration=function(){return this.masterPlaylistLoader_?this.mediaSource?this.mediaSource.duration:Ml.Playlist.duration(this.masterPlaylistLoader_.media()):0},p.prototype.seekable=function(){return this.seekable_},p.prototype.onSyncInfoUpdate_=function(){var t=void 0,e=void 0;if(this.masterPlaylistLoader_){var i=this.masterPlaylistLoader_.media();if(i){var r=this.syncController_.getExpiredTime(i,this.mediaSource.duration);if(null!==r&&0!==(t=Ml.Playlist.seekable(i,r)).length){if(this.mediaTypes_.AUDIO.activePlaylistLoader){if(i=this.mediaTypes_.AUDIO.activePlaylistLoader.media(),null===(r=this.syncController_.getExpiredTime(i,this.mediaSource.duration)))return;if(0===(e=Ml.Playlist.seekable(i,r)).length)return}e?e.start(0)>t.end(0)||t.start(0)>e.end(0)?this.seekable_=t:this.seekable_=As.createTimeRanges([[e.start(0)>t.start(0)?e.start(0):t.start(0),e.end(0)<t.end(0)?e.end(0):t.end(0)]]):this.seekable_=t,this.logger_("seekable updated ["+vu(this.seekable_)+"]"),this.tech_.trigger("seekablechanged")}}}},p.prototype.updateDuration=function(){var e=this,t=this.mediaSource.duration,i=Ml.Playlist.duration(this.masterPlaylistLoader_.media()),r=this.tech_.buffered(),n=function t(){e.mediaSource.duration=i,e.tech_.trigger("durationchange"),e.mediaSource.removeEventListener("sourceopen",t)};0<r.length&&(i=Math.max(i,r.end(r.length-1))),t!==i&&("open"!==this.mediaSource.readyState?this.mediaSource.addEventListener("sourceopen",n):n())},p.prototype.dispose=function(){var r=this;this.decrypter_.terminate(),this.masterPlaylistLoader_.dispose(),this.mainSegmentLoader_.dispose(),["AUDIO","SUBTITLES"].forEach(function(t){var e=r.mediaTypes_[t].groups;for(var i in e)e[i].forEach(function(t){t.playlistLoader&&t.playlistLoader.dispose()})}),this.audioSegmentLoader_.dispose(),this.subtitleSegmentLoader_.dispose()},p.prototype.master=function(){return this.masterPlaylistLoader_.master},p.prototype.media=function(){return this.masterPlaylistLoader_.media()||this.initialMedia_},p.prototype.setupSourceBuffers_=function(){var t,e=this.masterPlaylistLoader_.media();if(e&&"open"===this.mediaSource.readyState){if((t=cl(this.masterPlaylistLoader_.master,e)).length<1)return this.error="No compatible SourceBuffer configuration for the variant stream:"+e.resolvedUri,this.mediaSource.endOfStream("decode");this.configureLoaderMimeTypes_(t),this.excludeIncompatibleVariants_(e)}},p.prototype.configureLoaderMimeTypes_=function(t){var e=1<t.length&&-1===t[0].indexOf(",")&&t[0]!==t[1]?new As.EventTarget:null;this.mainSegmentLoader_.mimeType(t[0],e),t[1]&&this.audioSegmentLoader_.mimeType(t[1],e)},p.prototype.excludeUnsupportedVariants_=function(){this.master().playlists.forEach(function(t){t.attributes.CODECS&&g.MediaSource&&g.MediaSource.isTypeSupported&&!g.MediaSource.isTypeSupported('video/mp4; codecs="'+t.attributes.CODECS.replace(/avc1\.(\d+)\.(\d+)/i,function(t){return Nu([t])[0]})+'"')&&(t.excludeUntil=1/0)})},p.prototype.excludeIncompatibleVariants_=function(t){var i=2,r=null,e=void 0;t.attributes.CODECS&&(e=ul(t.attributes.CODECS),r=e.videoCodec,i=e.codecCount),this.master().playlists.forEach(function(t){var e={codecCount:2,videoCodec:null};t.attributes.CODECS&&(e=ul(t.attributes.CODECS)),e.codecCount!==i&&(t.excludeUntil=1/0),e.videoCodec!==r&&(t.excludeUntil=1/0)})},p.prototype.updateAdCues_=function(t){var e=0,i=this.seekable();i.length&&(e=i.start(0)),function(t,e){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0;if(t.segments)for(var r=i,n=void 0,s=0;s<t.segments.length;s++){var a=t.segments[s];if(n||(n=bl(e,r+a.duration/2)),n){if("cueIn"in a){n.endTime=r,n.adEndTime=r,r+=a.duration,n=null;continue}if(r<n.endTime){r+=a.duration;continue}n.endTime+=a.duration}else if("cueOut"in a&&((n=new g.VTTCue(r,r+a.duration,a.cueOut)).adStartTime=r,n.adEndTime=r+parseFloat(a.cueOut),e.addCue(n)),"cueOutCont"in a){var o,u,l=a.cueOutCont.split("/").map(parseFloat);o=l[0],u=l[1],(n=new g.VTTCue(r,r+a.duration,"")).adStartTime=r-o,n.adEndTime=n.adStartTime+u,e.addCue(n)}r+=a.duration}}(t,this.cueTagsTrack_,e)},p.prototype.goalBufferLength=function(){var t=this.tech_.currentTime(),e=Qu.GOAL_BUFFER_LENGTH,i=Qu.GOAL_BUFFER_LENGTH_RATE,r=Math.max(e,Qu.MAX_GOAL_BUFFER_LENGTH);return Math.min(e+t*i,r)},p.prototype.bufferLowWaterLine=function(){var t=this.tech_.currentTime(),e=Qu.BUFFER_LOW_WATER_LINE,i=Qu.BUFFER_LOW_WATER_LINE_RATE,r=Math.max(e,Qu.MAX_BUFFER_LOW_WATER_LINE);return Math.min(e+t*i,r)},p}(As.EventTarget),jl=function t(e,i,r){y(this,t);var n,s,a,o=e.masterPlaylistController_.fastQualityChange_.bind(e.masterPlaylistController_);if(i.attributes.RESOLUTION){var u=i.attributes.RESOLUTION;this.width=u.width,this.height=u.height}this.bandwidth=i.attributes.BANDWIDTH,this.id=r,this.enabled=(n=e.playlists,s=i.uri,a=o,function(t){var e=n.master.playlists[s],i=tu(e),r=eu(e);return"undefined"==typeof t?r:(t?delete e.disabled:e.disabled=!0,t===r||i||(a(),t?n.trigger("renditionenabled"):n.trigger("renditiondisabled")),t)})},Fl=["seeking","seeked","pause","playing","error"],Hl=function(){function a(t){var e=this;y(this,a),this.tech_=t.tech,this.seekable=t.seekable,this.consecutiveUpdates=0,this.lastRecordedTime=null,this.timer_=null,this.checkCurrentTimeTimeout_=null,this.logger_=Yu("PlaybackWatcher"),this.logger_("initialize");var i=function(){return e.monitorCurrentTime_()},r=function(){return e.techWaiting_()},n=function(){return e.cancelTimer_()},s=function(){return e.fixesBadSeeks_()};this.tech_.on("seekablechanged",s),this.tech_.on("waiting",r),this.tech_.on(Fl,n),this.tech_.on("canplay",i),this.dispose=function(){e.logger_("dispose"),e.tech_.off("seekablechanged",s),e.tech_.off("waiting",r),e.tech_.off(Fl,n),e.tech_.off("canplay",i),e.checkCurrentTimeTimeout_&&g.clearTimeout(e.checkCurrentTimeTimeout_),e.cancelTimer_()}}return a.prototype.monitorCurrentTime_=function(){this.checkCurrentTime_(),this.checkCurrentTimeTimeout_&&g.clearTimeout(this.checkCurrentTimeTimeout_),this.checkCurrentTimeTimeout_=g.setTimeout(this.monitorCurrentTime_.bind(this),250)},a.prototype.checkCurrentTime_=function(){if(this.tech_.seeking()&&this.fixesBadSeeks_())return this.consecutiveUpdates=0,void(this.lastRecordedTime=this.tech_.currentTime());if(!this.tech_.paused()&&!this.tech_.seeking()){var t=this.tech_.currentTime(),e=this.tech_.buffered();if(this.lastRecordedTime===t&&(!e.length||t+.1>=e.end(e.length-1)))return this.techWaiting_();5<=this.consecutiveUpdates&&t===this.lastRecordedTime?(this.consecutiveUpdates++,this.waiting_()):t===this.lastRecordedTime?this.consecutiveUpdates++:(this.consecutiveUpdates=0,this.lastRecordedTime=t)}},a.prototype.cancelTimer_=function(){this.consecutiveUpdates=0,this.timer_&&(this.logger_("cancelTimer_"),clearTimeout(this.timer_)),this.timer_=null},a.prototype.fixesBadSeeks_=function(){var t=this.tech_.seeking(),e=this.seekable(),i=this.tech_.currentTime(),r=void 0;t&&this.afterSeekableWindow_(e,i)&&(r=e.end(e.length-1));t&&this.beforeSeekableWindow_(e,i)&&(r=e.start(0)+.1);return"undefined"!=typeof r&&(this.logger_("Trying to seek outside of seekable at time "+i+" with seekable range "+vu(e)+". Seeking to "+r+"."),this.tech_.setCurrentTime(r),!0)},a.prototype.waiting_=function(){if(!this.techWaiting_()){var t=this.tech_.currentTime(),e=this.tech_.buffered(),i=gu(e,t);return i.length&&t+3<=i.end(0)?(this.cancelTimer_(),this.tech_.setCurrentTime(t),this.logger_("Stopped at "+t+" while inside a buffered region ["+i.start(0)+" -> "+i.end(0)+"]. Attempting to resume playback by seeking to the current time."),void this.tech_.trigger({type:"usage",name:"hls-unknown-waiting"})):void 0}},a.prototype.techWaiting_=function(){var t=this.seekable(),e=this.tech_.currentTime();if(this.tech_.seeking()&&this.fixesBadSeeks_())return!0;if(this.tech_.seeking()||null!==this.timer_)return!0;if(this.beforeSeekableWindow_(t,e)){var i=t.end(t.length-1);return this.logger_("Fell out of live window at time "+e+". Seeking to live point (seekable end) "+i),this.cancelTimer_(),this.tech_.setCurrentTime(i),this.tech_.trigger({type:"usage",name:"hls-live-resync"}),!0}var r=this.tech_.buffered(),n=yu(r,e);if(this.videoUnderflow_(n,r,e))return this.cancelTimer_(),this.tech_.setCurrentTime(e),this.tech_.trigger({type:"usage",name:"hls-video-underflow"}),!0;if(0<n.length){var s=n.start(0)-e;return this.logger_("Stopped at "+e+", setting timer for "+s+", seeking to "+n.start(0)),this.timer_=setTimeout(this.skipTheGap_.bind(this),1e3*s,e),!0}return!1},a.prototype.afterSeekableWindow_=function(t,e){return!!t.length&&e>t.end(t.length-1)+.1},a.prototype.beforeSeekableWindow_=function(t,e){return!!(t.length&&0<t.start(0)&&e<t.start(0)-.1)},a.prototype.videoUnderflow_=function(t,e,i){if(0===t.length){var r=this.gapFromVideoUnderflow_(e,i);if(r)return this.logger_("Encountered a gap in video from "+r.start+" to "+r.end+". Seeking to current time "+i),!0}return!1},a.prototype.skipTheGap_=function(t){var e=this.tech_.buffered(),i=this.tech_.currentTime(),r=yu(e,i);this.cancelTimer_(),0!==r.length&&i===t&&(this.logger_("skipTheGap_:","currentTime:",i,"scheduled currentTime:",t,"nextRange start:",r.start(0)),this.tech_.setCurrentTime(r.start(0)+fu),this.tech_.trigger({type:"usage",name:"hls-gap-skip"}))},a.prototype.gapFromVideoUnderflow_=function(t,e){for(var i=function(t){if(t.length<2)return As.createTimeRanges();for(var e=[],i=1;i<t.length;i++){var r=t.end(i-1),n=t.start(i);e.push([r,n])}return As.createTimeRanges(e)}(t),r=0;r<i.length;r++){var n=i.start(r),s=i.end(r);if(e-n<4&&2<e-n)return{start:n,end:s}}return null},a}(),Vl={errorInterval:30,getSource:function(t){return t(this.tech({IWillNotUseThisInPlugins:!0}).currentSource_)}},ql=function(t){!function e(i,t){var r=0,n=0,s=As.mergeOptions(Vl,t);i.ready(function(){i.trigger({type:"usage",name:"hls-error-reload-initialized"})});var a=function(){n&&i.currentTime(n)},o=function(t){null!=t&&(n=i.duration()!==1/0&&i.currentTime()||0,i.one("loadedmetadata",a),i.src(t),i.trigger({type:"usage",name:"hls-error-reload"}),i.play())},u=function(){if(Date.now()-r<1e3*s.errorInterval)i.trigger({type:"usage",name:"hls-error-reload-canceled"});else{if(s.getSource&&"function"==typeof s.getSource)return r=Date.now(),s.getSource.call(i,o);As.log.error("ERROR: reloadSourceOnError - The option getSource must be a function!")}},l=function t(){i.off("loadedmetadata",a),i.off("error",u),i.off("dispose",t)};i.on("error",u),i.on("dispose",l),i.reloadSourceOnError=function(t){l(),e(i,t)}}(this,t)},Wl={PlaylistLoader:Vo,Playlist:nu,Decrypter:Do,AsyncStream:Oo,decrypt:Io,utils:pu,STANDARD_PLAYLIST_SELECTOR:function(){return function(t,e,i,r){var n=t.playlists.map(function(t){var e,i;return e=t.attributes.RESOLUTION&&t.attributes.RESOLUTION.width,i=t.attributes.RESOLUTION&&t.attributes.RESOLUTION.height,{bandwidth:t.attributes.BANDWIDTH||g.Number.MAX_VALUE,width:e,height:i,playlist:t}});dl(n,function(t,e){return t.bandwidth-e.bandwidth});var s=(n=n.filter(function(t){return!nu.isIncompatible(t.playlist)})).filter(function(t){return nu.isEnabled(t.playlist)});s.length||(s=n.filter(function(t){return!nu.isDisabled(t.playlist)}));var a=s.filter(function(t){return t.bandwidth*Qu.BANDWIDTH_VARIANCE<e}),o=a[a.length-1],u=a.filter(function(t){return t.bandwidth===o.bandwidth})[0],l=a.filter(function(t){return t.width&&t.height});dl(l,function(t,e){return t.width-e.width});var c=l.filter(function(t){return t.width===i&&t.height===r});o=c[c.length-1];var h=c.filter(function(t){return t.bandwidth===o.bandwidth})[0],d=void 0,p=void 0,f=void 0;h||(p=(d=l.filter(function(t){return t.width>i||t.height>r})).filter(function(t){return t.width===d[0].width&&t.height===d[0].height}),o=p[p.length-1],f=p.filter(function(t){return t.bandwidth===o.bandwidth})[0]);var m=f||h||u||s[0]||n[0];return m?m.playlist:null}(this.playlists.master,this.systemBandwidth,parseInt(hl(this.tech_.el(),"width"),10),parseInt(hl(this.tech_.el(),"height"),10))},INITIAL_PLAYLIST_SELECTOR:function(){var t=this.playlists.master.playlists.filter(nu.isEnabled);return dl(t,function(t,e){return pl(t,e)}),t.filter(function(t){return ul(t.attributes.CODECS).videoCodec})[0]||null},comparePlaylistBandwidth:pl,comparePlaylistResolution:function(t,e){var i=void 0,r=void 0;return t.attributes.RESOLUTION&&t.attributes.RESOLUTION.width&&(i=t.attributes.RESOLUTION.width),i=i||g.Number.MAX_VALUE,e.attributes.RESOLUTION&&e.attributes.RESOLUTION.width&&(r=e.attributes.RESOLUTION.width),i===(r=r||g.Number.MAX_VALUE)&&t.attributes.BANDWIDTH&&e.attributes.BANDWIDTH?t.attributes.BANDWIDTH-e.attributes.BANDWIDTH:i-r},xhr:ou()};["GOAL_BUFFER_LENGTH","MAX_GOAL_BUFFER_LENGTH","GOAL_BUFFER_LENGTH_RATE","BUFFER_LOW_WATER_LINE","MAX_BUFFER_LOW_WATER_LINE","BUFFER_LOW_WATER_LINE_RATE","BANDWIDTH_VARIANCE"].forEach(function(e){Object.defineProperty(Wl,e,{get:function(){return As.log.warn("using Hls."+e+" is UNSAFE be sure you know what you are doing"),Qu[e]},set:function(t){As.log.warn("using Hls."+e+" is UNSAFE be sure you know what you are doing"),"number"!=typeof t||t<0?As.log.warn("value of Hls."+e+" must be greater than or equal to 0"):Qu[e]=t}})});var zl=function(t){if(/^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i.test(t))return"hls";return/^application\/dash\+xml/i.test(t)?"dash":null},Gl=function(t,e){for(var i=e.media(),r=-1,n=0;n<t.length;n++)if(t[n].id===i.uri){r=n;break}t.selectedIndex_=r,t.trigger({selectedIndex:r,type:"change"})};Wl.canPlaySource=function(){return As.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder.")};var Xl=function(t){if("dash"===t.options_.sourceType){var e=As.players[t.tech_.options_.playerId];if(e.eme){var i=function(t,e,i){if(!t)return t;var r={};for(var n in t)r[n]={audioContentType:'audio/mp4; codecs="'+i.attributes.CODECS+'"',videoContentType:'video/mp4; codecs="'+e.attributes.CODECS+'"'},e.contentProtection&&e.contentProtection[n]&&e.contentProtection[n].pssh&&(r[n].pssh=e.contentProtection[n].pssh),"string"==typeof t[n]&&(r[n].url=t[n]);return As.mergeOptions(t,r)}(t.source_.keySystems,t.playlists.media(),t.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader.media());i&&(e.currentSource().keySystems=i)}}};Wl.supportsNativeHls=function(){var e=p.createElement("video");if(!As.getTech("Html5").isSupported())return!1;return["application/vnd.apple.mpegurl","audio/mpegurl","audio/x-mpegurl","application/x-mpegurl","video/x-mpegurl","video/mpegurl","application/mpegurl"].some(function(t){return/maybe|probably/i.test(e.canPlayType(t))})}(),Wl.supportsNativeDash=!!As.getTech("Html5").isSupported()&&/maybe|probably/i.test(p.createElement("video").canPlayType("application/dash+xml")),Wl.supportsTypeNatively=function(t){return"hls"===t?Wl.supportsNativeHls:"dash"===t&&Wl.supportsNativeDash},Wl.isSupported=function(){return As.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder.")};var Yl=function(s){function a(t,e,i){y(this,a);var r=b(this,s.call(this,e,i.hls));if(e.options_&&e.options_.playerId){var n=As(e.options_.playerId);n.hasOwnProperty("hls")||Object.defineProperty(n,"hls",{get:function(){return As.log.warn("player.hls is deprecated. Use player.tech_.hls instead."),e.trigger({type:"usage",name:"hls-player-access"}),r}}),n.vhs=r,n.dash=r}if(r.tech_=e,r.source_=t,r.stats={},r.ignoreNextSeekingEvent_=!1,r.setOptions_(),r.options_.overrideNative&&(e.featuresNativeVideoTracks||e.featuresNativeAudioTracks))throw new Error("Overriding native HLS requires emulated tracks. See https://git.io/vMpjB");return r.on(p,["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"],function(t){var e=p.fullscreenElement||p.webkitFullscreenElement||p.mozFullScreenElement||p.msFullscreenElement;e&&e.contains(r.tech_.el())&&r.masterPlaylistController_.fastQualityChange_()}),r.on(r.tech_,"seeking",function(){this.ignoreNextSeekingEvent_?this.ignoreNextSeekingEvent_=!1:this.setCurrentTime(this.tech_.currentTime())}),r.on(r.tech_,"error",function(){this.masterPlaylistController_&&this.masterPlaylistController_.pauseLoading()}),r.on(r.tech_,"play",r.play),r}return _(a,s),a.prototype.setOptions_=function(){var e=this;this.options_.withCredentials=this.options_.withCredentials||!1,"number"!=typeof this.options_.blacklistDuration&&(this.options_.blacklistDuration=300),"number"!=typeof this.options_.bandwidth&&(this.options_.bandwidth=4194304),this.options_.enableLowInitialPlaylist=this.options_.enableLowInitialPlaylist&&4194304===this.options_.bandwidth,["withCredentials","bandwidth"].forEach(function(t){"undefined"!=typeof e.source_[t]&&(e.options_[t]=e.source_[t])}),this.bandwidth=this.options_.bandwidth},a.prototype.src=function(t,e){var r=this;t&&(this.setOptions_(),this.options_.url=this.source_.src,this.options_.tech=this.tech_,this.options_.externHls=Wl,this.options_.sourceType=zl(e),this.masterPlaylistController_=new Bl(this.options_),this.playbackWatcher_=new Hl(As.mergeOptions(this.options_,{seekable:function(){return r.seekable()}})),this.masterPlaylistController_.on("error",function(){As.players[r.tech_.options_.playerId].error(r.masterPlaylistController_.error)}),this.masterPlaylistController_.selectPlaylist=this.selectPlaylist?this.selectPlaylist.bind(this):Wl.STANDARD_PLAYLIST_SELECTOR.bind(this),this.masterPlaylistController_.selectInitialPlaylist=Wl.INITIAL_PLAYLIST_SELECTOR.bind(this),this.playlists=this.masterPlaylistController_.masterPlaylistLoader_,this.mediaSource=this.masterPlaylistController_.mediaSource,Object.defineProperties(this,{selectPlaylist:{get:function(){return this.masterPlaylistController_.selectPlaylist},set:function(t){this.masterPlaylistController_.selectPlaylist=t.bind(this)}},throughput:{get:function(){return this.masterPlaylistController_.mainSegmentLoader_.throughput.rate},set:function(t){this.masterPlaylistController_.mainSegmentLoader_.throughput.rate=t,this.masterPlaylistController_.mainSegmentLoader_.throughput.count=1}},bandwidth:{get:function(){return this.masterPlaylistController_.mainSegmentLoader_.bandwidth},set:function(t){this.masterPlaylistController_.mainSegmentLoader_.bandwidth=t,this.masterPlaylistController_.mainSegmentLoader_.throughput={rate:0,count:0}}},systemBandwidth:{get:function(){var t=1/(this.bandwidth||1),e=void 0;return e=0<this.throughput?1/this.throughput:0,Math.floor(1/(t+e))},set:function(){As.log.error('The "systemBandwidth" property is read-only')}}}),Object.defineProperties(this.stats,{bandwidth:{get:function(){return r.bandwidth||0},enumerable:!0},mediaRequests:{get:function(){return r.masterPlaylistController_.mediaRequests_()||0},enumerable:!0},mediaRequestsAborted:{get:function(){return r.masterPlaylistController_.mediaRequestsAborted_()||0},enumerable:!0},mediaRequestsTimedout:{get:function(){return r.masterPlaylistController_.mediaRequestsTimedout_()||0},enumerable:!0},mediaRequestsErrored:{get:function(){return r.masterPlaylistController_.mediaRequestsErrored_()||0},enumerable:!0},mediaTransferDuration:{get:function(){return r.masterPlaylistController_.mediaTransferDuration_()||0},enumerable:!0},mediaBytesTransferred:{get:function(){return r.masterPlaylistController_.mediaBytesTransferred_()||0},enumerable:!0},mediaSecondsLoaded:{get:function(){return r.masterPlaylistController_.mediaSecondsLoaded_()||0},enumerable:!0},buffered:{get:function(){return _u(r.tech_.buffered())},enumerable:!0},currentTime:{get:function(){return r.tech_.currentTime()},enumerable:!0},currentSource:{get:function(){return r.tech_.currentSource_},enumerable:!0},currentTech:{get:function(){return r.tech_.name_},enumerable:!0},duration:{get:function(){return r.tech_.duration()},enumerable:!0},master:{get:function(){return r.playlists.master},enumerable:!0},playerDimensions:{get:function(){return r.tech_.currentDimensions()},enumerable:!0},seekable:{get:function(){return _u(r.tech_.seekable())},enumerable:!0},timestamp:{get:function(){return Date.now()},enumerable:!0},videoPlaybackQuality:{get:function(){return r.tech_.getVideoPlaybackQuality()},enumerable:!0}}),this.tech_.one("canplay",this.masterPlaylistController_.setupFirstPlay.bind(this.masterPlaylistController_)),this.masterPlaylistController_.on("selectedinitialmedia",function(){var i,t;t=(i=r).playlists,i.representations=function(){return t.master.playlists.filter(function(t){return!tu(t)}).map(function(t,e){return new jl(i,t,t.uri)})},Xl(r)}),this.on(this.masterPlaylistController_,"progress",function(){this.tech_.trigger("progress")}),this.on(this.masterPlaylistController_,"firstplay",function(){this.ignoreNextSeekingEvent_=!0}),this.tech_.ready(function(){return r.setupQualityLevels_()}),this.tech_.el()&&this.tech_.src(As.URL.createObjectURL(this.masterPlaylistController_.mediaSource)))},a.prototype.setupQualityLevels_=function(){var i=this,t=As.players[this.tech_.options_.playerId];t&&t.qualityLevels&&(this.qualityLevels_=t.qualityLevels(),this.masterPlaylistController_.on("selectedinitialmedia",function(){var e,t;e=i.qualityLevels_,(t=i).representations().forEach(function(t){e.addQualityLevel(t)}),Gl(e,t.playlists)}),this.playlists.on("mediachange",function(){Gl(i.qualityLevels_,i.playlists)}))},a.prototype.play=function(){this.masterPlaylistController_.play()},a.prototype.setCurrentTime=function(t){this.masterPlaylistController_.setCurrentTime(t)},a.prototype.duration=function(){return this.masterPlaylistController_.duration()},a.prototype.seekable=function(){return this.masterPlaylistController_.seekable()},a.prototype.dispose=function(){this.playbackWatcher_&&this.playbackWatcher_.dispose(),this.masterPlaylistController_&&this.masterPlaylistController_.dispose(),this.qualityLevels_&&this.qualityLevels_.dispose(),s.prototype.dispose.call(this)},a}(As.getComponent("Component")),$l={name:"videojs-http-streaming",VERSION:"1.0.0",canHandleSource:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=As.mergeOptions(As.options,e);return $l.canPlayType(t.type,i)},handleSource:function(t,e){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},r=As.mergeOptions(As.options,i);return e.hls=new Yl(t,e,r),e.hls.xhr=ou(),e.hls.src(t.src,t.type),e.hls},canPlayType:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=As.mergeOptions(As.options,e).hls.overrideNative,r=zl(t);return r&&(!Wl.supportsTypeNatively(r)||i)?"maybe":""}};return"undefined"!=typeof As.MediaSource&&"undefined"!=typeof As.URL||(As.MediaSource=qu,As.URL=Wu),qu.supportsNativeMediaSources()&&As.getTech("Html5").registerSourceHandler($l,0),As.HlsHandler=Yl,As.HlsSourceHandler=$l,As.Hls=Wl,As.use||As.registerComponent("Hls",Wl),As.options.hls=As.options.hls||{},As.registerPlugin?As.registerPlugin("reloadSourceOnError",ql):As.plugin("reloadSourceOnError",ql),As}); diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..7b4f817 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8081c7ceaf2be08bf59010158c586170d9d2d517 GIT binary patch literal 5430 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 literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..5df7a8f --- /dev/null +++ b/src/index.html @@ -0,0 +1,21 @@ +<!doctype html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>NgOne</title> + <base href="/"> + + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="icon" type="image/x-icon" href="favicon.ico"> +</head> +<body> + <app-root></app-root> +</body> + +<script> + window.net = window.parent.net||{}; + window.net.doUpload = function(){ + console.log("*********"); + } +</script> +</html> diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..aa665d6 --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,63 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags.ts'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/styles.scss b/src/styles.scss new file mode 100644 index 0000000..90d4ee0 --- /dev/null +++ b/src/styles.scss @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..1631789 --- /dev/null +++ b/src/test.ts @@ -0,0 +1,20 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: any; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..565a11a --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "src/test.ts", + "src/**/*.spec.ts" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..b4f6b3c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "esnext", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "importHelpers": true, + "target": "es2015", + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2018", + "dom" + ] + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + } +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..6400fde --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..f0adae9 --- /dev/null +++ b/tslint.json @@ -0,0 +1,92 @@ +{ + "extends": "tslint:recommended", + "rules": { + "array-type": false, + "arrow-parens": false, + "deprecation": { + "severity": "warning" + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "interface-name": false, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-consecutive-blank-lines": false, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-use-before-declare": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "object-literal-sort-keys": false, + "ordered-imports": false, + "quotemark": [ + true, + "single" + ], + "trailing-comma": false, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true + }, + "rulesDirectory": [ + "codelyzer" + ] +} \ No newline at end of file -- 2.21.0