aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/clapprio/dash-shaka-playback.min.js2
-rw-r--r--assets/css/_feedback.less4
-rw-r--r--assets/css/_overview.less14
-rw-r--r--assets/css/_room.less4
-rw-r--r--assets/css/_schedule.less11
-rw-r--r--assets/css/_structure.less4
-rw-r--r--configs/conferences/1npa/config.php210
-rw-r--r--configs/conferences/34c3/main.less6
-rw-r--r--configs/conferences/35c3/assets/35C3_Logo-mit-Verlauf.svg98
-rw-r--r--configs/conferences/35c3/assets/Makefile10
-rw-r--r--configs/conferences/35c3/assets/bg-capacitor.pngbin0 -> 1911 bytes
-rw-r--r--configs/conferences/35c3/assets/bg-resistor.gifbin0 -> 1823 bytes
-rw-r--r--configs/conferences/35c3/assets/bg-resistor.pngbin0 -> 3836 bytes
-rw-r--r--configs/conferences/35c3/assets/logo-inline.svg198
-rw-r--r--configs/conferences/35c3/assets/logo.svg43
-rw-r--r--configs/conferences/35c3/assets/min/35C3_Logo-mit-Verlauf.svg1
-rw-r--r--configs/conferences/35c3/assets/min/logo.svg1
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Black.eotbin0 -> 102451 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Black.woffbin0 -> 107388 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Black.woff2bin0 -> 82528 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.eotbin0 -> 107248 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.woffbin0 -> 112068 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.woff2bin0 -> 85576 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Bold.eotbin0 -> 104070 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Bold.woffbin0 -> 108200 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Bold.woff2bin0 -> 83392 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.eotbin0 -> 109016 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.woffbin0 -> 113132 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.woff2bin0 -> 86440 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.eotbin0 -> 103434 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.woffbin0 -> 107912 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.woff2bin0 -> 82888 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.eotbin0 -> 108428 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.woffbin0 -> 112880 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.woff2bin0 -> 86192 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.eotbin0 -> 102071 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.woffbin0 -> 106308 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.woff2bin0 -> 81828 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.eotbin0 -> 106113 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.woffbin0 -> 110692 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.woff2bin0 -> 84508 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Italic.eotbin0 -> 107752 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Italic.woffbin0 -> 112300 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Italic.woff2bin0 -> 86024 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Light.eotbin0 -> 103001 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Light.woffbin0 -> 106924 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Light.woff2bin0 -> 82104 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.eotbin0 -> 107149 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.woffbin0 -> 111468 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.woff2bin0 -> 85172 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Medium.eotbin0 -> 104101 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Medium.woffbin0 -> 107872 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Medium.woff2bin0 -> 83080 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.eotbin0 -> 108677 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.woffbin0 -> 112476 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.woff2bin0 -> 86468 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Regular.eotbin0 -> 104215 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Regular.woffbin0 -> 108124 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Regular.woff2bin0 -> 83532 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.eotbin0 -> 103341 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.woffbin0 -> 107524 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.woff2bin0 -> 82620 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.eotbin0 -> 108290 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.woffbin0 -> 112440 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.woff2bin0 -> 85980 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Thin.eotbin0 -> 97905 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Thin.woffbin0 -> 102452 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-Thin.woff2bin0 -> 78392 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.eotbin0 -> 101456 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.woffbin0 -> 106400 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.woff2bin0 -> 80832 bytes
-rwxr-xr-xconfigs/conferences/35c3/assets/montserrat/Montserrat.css399
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.eotbin0 -> 85264 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.woffbin0 -> 88280 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.woff2bin0 -> 69140 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.eotbin0 -> 89463 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.woffbin0 -> 92568 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.woff2bin0 -> 72368 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.eotbin0 -> 87123 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.woffbin0 -> 89816 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.woff2bin0 -> 70232 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.eotbin0 -> 90903 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.woffbin0 -> 93464 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.woff2bin0 -> 73132 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.eotbin0 -> 87183 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.woffbin0 -> 89740 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.woff2bin0 -> 70464 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.eotbin0 -> 90760 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.woffbin0 -> 93448 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.woff2bin0 -> 72976 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.eotbin0 -> 85845 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.woffbin0 -> 88364 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.woff2bin0 -> 69172 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.eotbin0 -> 88968 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.woffbin0 -> 91780 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.woff2bin0 -> 71648 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.eotbin0 -> 90178 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.woffbin0 -> 92968 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.woff2bin0 -> 72940 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.eotbin0 -> 86343 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.woffbin0 -> 88884 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.woff2bin0 -> 69728 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.eotbin0 -> 89428 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.woffbin0 -> 92448 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.woff2bin0 -> 72068 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.eotbin0 -> 87027 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.woffbin0 -> 89664 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.woff2bin0 -> 70148 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.eotbin0 -> 90639 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.woffbin0 -> 93188 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.woff2bin0 -> 73040 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.eotbin0 -> 87088 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.woffbin0 -> 89720 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.woff2bin0 -> 70316 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.eotbin0 -> 86796 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.woffbin0 -> 89264 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.woff2bin0 -> 69948 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.eotbin0 -> 90411 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.woffbin0 -> 92804 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.woff2bin0 -> 72488 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.eotbin0 -> 82212 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.woffbin0 -> 85048 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.woff2bin0 -> 66452 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.eotbin0 -> 84883 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.woffbin0 -> 88068 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.woff2bin0 -> 68236 bytes
-rw-r--r--configs/conferences/35c3/assets/montserrat/README.MD35
-rw-r--r--configs/conferences/35c3/config.php802
-rw-r--r--configs/conferences/35c3/main.less448
-rw-r--r--configs/conferences/35c3/streams.preview.v2.json1480
-rwxr-xr-xconfigs/conferences/bub2018/config.php304
-rw-r--r--configs/conferences/bub2018/logo.pngbin0 -> 11696 bytes
-rw-r--r--configs/conferences/datengarten/config.php6
-rw-r--r--configs/conferences/denog10/config.php208
-rw-r--r--configs/conferences/denog10/denog-logo-konferenz-10_v001_yellow_white.pngbin0 -> 251817 bytes
-rw-r--r--configs/conferences/denog10/main.less53
-rwxr-xr-xconfigs/conferences/doh18/config.php207
-rwxr-xr-xconfigs/conferences/doh18/download.sh8
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-Black.otfbin0 -> 234176 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-BlackIt.otfbin0 -> 81120 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-Bold.otfbin0 -> 235128 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-BoldIt.otfbin0 -> 80392 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-ExtraLight.otfbin0 -> 221580 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-ExtraLightIt.otfbin0 -> 76400 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-It.otfbin0 -> 79724 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-Light.otfbin0 -> 226032 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-LightIt.otfbin0 -> 77816 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-Regular.otfbin0 -> 229588 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-Semibold.otfbin0 -> 232680 bytes
-rw-r--r--configs/conferences/doh18/fonts/SourceSansPro-SemiboldIt.otfbin0 -> 80316 bytes
-rw-r--r--configs/conferences/doh18/logo.pngbin0 -> 4826765 bytes
-rw-r--r--configs/conferences/jh-ulm/config.php30
-rwxr-xr-xconfigs/conferences/jh-ulm/download.sh5
-rw-r--r--configs/conferences/rustfest2018/config.php2
-rw-r--r--configs/conferences/rustfestrome2018/SourceCodePro-Light.eotbin0 -> 83959 bytes
-rw-r--r--configs/conferences/rustfestrome2018/SourceCodePro-Light.otf.woffbin0 -> 87828 bytes
-rw-r--r--configs/conferences/rustfestrome2018/SourceCodePro-Light.otf.woff2bin0 -> 74664 bytes
-rw-r--r--configs/conferences/rustfestrome2018/SourceCodePro-Light.ttfbin0 -> 198696 bytes
-rw-r--r--configs/conferences/rustfestrome2018/SourceSansPro-Light.svg1117
-rw-r--r--configs/conferences/rustfestrome2018/config.php390
-rwxr-xr-xconfigs/conferences/rustfestrome2018/download.sh5
-rw-r--r--configs/conferences/rustfestrome2018/logo.svg262
-rw-r--r--configs/conferences/rustfestrome2018/main.less54
-rwxr-xr-xconfigs/conferences/uplink2018/config.php209
-rw-r--r--configs/conferences/uplink2018/logo.pngbin0 -> 1763 bytes
-rwxr-xr-xconfigs/conferences/uplink2018/main.less9
-rw-r--r--configs/conferences/uplink2018/uplink_banner.pngbin0 -> 433128 bytes
-rw-r--r--index.php2
-rw-r--r--lib/less.php/Less.php297
-rw-r--r--lib/less.php/Less.php.ori10510
-rw-r--r--model/Feedback.php6
-rw-r--r--model/Room.php10
-rw-r--r--model/Schedule.php8
-rw-r--r--model/Stream.php7
-rw-r--r--template/assemblies/feedback.phtml98
-rw-r--r--template/assemblies/player/audio.phtml11
-rw-r--r--template/assemblies/player/dash.phtml4
-rw-r--r--template/assemblies/player/video.phtml1
-rw-r--r--template/assemblies/schedule.phtml10
-rw-r--r--template/feedback-read.phtml2
-rw-r--r--template/overview.phtml5
-rw-r--r--view/feedback-read.php5
-rw-r--r--view/streams-json-v2.php13
183 files changed, 17393 insertions, 235 deletions
diff --git a/assets/clapprio/dash-shaka-playback.min.js b/assets/clapprio/dash-shaka-playback.min.js
index 6c746b6..ca58633 100644
--- a/assets/clapprio/dash-shaka-playback.min.js
+++ b/assets/clapprio/dash-shaka-playback.min.js
@@ -1,2 +1,2 @@
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("clappr")):"function"==typeof define&&define.amd?define(["clappr"],e):"object"==typeof exports?exports.DashShakaPlayback=e(require("clappr")):t.DashShakaPlayback=e(t.Clappr)}("undefined"!=typeof self?self:this,function(t){return function(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,n){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="dist/",e(e.s=0)}([function(t,e,i){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(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}function a(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)}Object.defineProperty(e,"__esModule",{value:!0});var s=function t(e,i,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,i);if(void 0===r){var a=Object.getPrototypeOf(e);return null===a?void 0:t(a,i,n)}if("value"in r)return r.value;var s=r.get;if(void 0!==s)return s.call(n)},o=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),u=i(1),h=i(2),c=function(t){return t&&t.__esModule?t:{default:t}}(h),l=function(t){function e(t){n(this,e);var i=r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i._levels=[],i._pendingAdaptationEvent=!1,i._isShakaReadyState=!1,t.autoPlay&&i.play(),i}return a(e,t),o(e,[{key:"name",get:function(){return"dash_shaka_playback"}},{key:"shakaVersion",get:function(){return c.default.player.Player.version}},{key:"shakaPlayerInstance",get:function(){return this._player}},{key:"levels",get:function(){return this._levels}},{key:"currentLevel",set:function(t){var e=this;this._currentLevelId=t;var i=-1===this._currentLevelId;this.trigger(u.Events.PLAYBACK_LEVEL_SWITCH_START),i?(this._player.configure({abr:{enabled:!0}}),this.trigger(u.Events.PLAYBACK_LEVEL_SWITCH_END)):(this._player.configure({abr:{enabled:!1}}),this._pendingAdaptationEvent=!0,this.selectTrack(this.videoTracks.filter(function(t){return t.id===e._currentLevelId})[0]))},get:function(){return this._currentLevelId||-1}}],[{key:"canPlay",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";c.default.polyfill.installAll();var i=c.default.Player.isBrowserSupported(),n=t.split("?")[0].match(/.*\.(.*)$/)||[];return i&&("mpd"===n[1]||e.indexOf("application/dash+xml")>-1)}},{key:"Events",get:function(){return{SHAKA_READY:"shaka:ready"}}}]),o(e,[{key:"play",value:function(){if(this._player||this._setup(),!this.isReady)return void this.once(e.Events.SHAKA_READY,this.play);this._stopped=!1,this._src=this.el.src,s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"play",this).call(this)}},{key:"setupSrc",value:function(){}},{key:"_ready",value:function(){}},{key:"_onShakaReady",value:function(){this._isShakaReadyState=!0,this.trigger(e.Events.SHAKA_READY),this.trigger(u.Events.PLAYBACK_READY,this.name)}},{key:"error",value:function(t){u.Log.error("an error was raised by the video tag",t,this.el.error)}},{key:"isHighDefinitionInUse",value:function(){return!1}},{key:"stop",value:function(){var t=this;clearInterval(this.sendStatsId),this._stopped=!0,this._player?(this._sendStats(),this._player.unload().then(function(){s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"stop",t).call(t),t._player=null,t._isShakaReadyState=!1}).catch(function(){u.Log.error("shaka could not be unloaded")})):s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"stop",this).call(this)}},{key:"getPlaybackType",value:function(){return(this.isReady&&this._player.isLive()?"live":"vod")||""}},{key:"selectAudioLanguage",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this._player.selectAudioLanguage(t,e)}},{key:"selectTrack",value:function(t){if("text"===t.type)this._player.selectTextTrack(t);else{if("variant"!==t.type)throw new Error("Unhandled track type:",t.type);this._player.selectVariantTrack(t),t.mimeType.startsWith("video/")&&this._onAdaptation()}}},{key:"_enableShakaTextTrack",value:function(t){this.el.textTracks&&(this._shakaTTVisible=t,Array.from(this.el.textTracks).filter(function(t){return"subtitles"===t.kind}).forEach(function(e){return e.mode=!0===t?"showing":"hidden"}))}},{key:"_checkForClosedCaptions",value:function(){if(!this._ccIsSetup){if(this.hasClosedCaptionsTracks){this.trigger(u.Events.PLAYBACK_SUBTITLE_AVAILABLE);var t=this.closedCaptionsTrackId;this.closedCaptionsTrackId=t}this._ccIsSetup=!0}}},{key:"destroy",value:function(){var t=this;clearInterval(this.sendStatsId),this._player?this._player.destroy().then(function(){return t._destroy()}).catch(function(){t._destroy(),u.Log.error("shaka could not be destroyed")}):this._destroy()}},{key:"_setup",value:function(){var t=this;this._isShakaReadyState=!1,this._ccIsSetup=!1,this._player=this._createPlayer(),this._options.shakaConfiguration&&this._player.configure(this._options.shakaConfiguration),this._options.shakaOnBeforeLoad&&this._options.shakaOnBeforeLoad(this._player),this._player.load(this._options.src).then(function(){return t._loaded()}).catch(function(e){return t._setupError(e)})}},{key:"_createPlayer",value:function(){var t=new c.default.Player(this.el);return t.addEventListener("error",this._onError.bind(this)),t.addEventListener("adaptation",this._onAdaptation.bind(this)),t.addEventListener("buffering",this._onBuffering.bind(this)),t}},{key:"_onBuffering",value:function(t){if(!this._stopped){var e=t.buffering?u.Events.PLAYBACK_BUFFERING:u.Events.PLAYBACK_BUFFERFULL;this.trigger(e)}}},{key:"_loaded",value:function(){this._onShakaReady(),this._startToSendStats(),this._fillLevels(),this._checkForClosedCaptions()}},{key:"_fillLevels",value:function(){0===this._levels.length&&(this._levels=this.videoTracks.slice(0).reverse(),this.trigger(u.Events.PLAYBACK_LEVELS_AVAILABLE,this.levels))}},{key:"_startToSendStats",value:function(){var t=this,e=this._options.shakaSendStatsInterval||3e4;this.sendStatsId=setInterval(function(){return t._sendStats()},e)}},{key:"_sendStats",value:function(){this.trigger(u.Events.PLAYBACK_STATS_ADD,this._player.getStats())}},{key:"_setupError",value:function(t){this._onError(t)}},{key:"_onError",value:function(t){var e=this;u.Log.error("Shaka error event:",t.detail),this.trigger(u.Events.PLAYBACK_ERROR,t,this.name),t.detail&&2==t.detail.severity&&1002==t.detail.code&&(console.log("retrying"),this.stop(),setTimeout(function(){return e.play()},1e3))}},{key:"_onAdaptation",value:function(){var t=this.videoTracks.filter(function(t){return!0===t.active})[0];this._fillLevels(),this._sendStats(),this._pendingAdaptationEvent_&&(this.trigger(u.Events.PLAYBACK_LEVEL_SWITCH_END),this._pendingAdaptationEvent=!1),u.Log.debug("an adaptation has happened:",t),this.trigger(u.Events.PLAYBACK_BITRATE,{bandwidth:t.bandwidth,language:t.language,width:t.width,height:t.height,level:t.id})}},{key:"_destroy",value:function(){s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"destroy",this).call(this),this._isShakaReadyState=!1,u.Log.debug("shaka was destroyed")}},{key:"isReady",get:function(){return this._isShakaReadyState}},{key:"textTracks",get:function(){return this.isReady&&this._player.getTextTracks()}},{key:"audioLanguages",get:function(){return this.isReady&&this._player.getAudioLanguages()}},{key:"audioTracks",get:function(){return this.isReady&&this._player.getVariantTracks().filter(function(t){return t.mimeType.startsWith("audio/")})}},{key:"videoTracks",get:function(){return this.isReady&&this._player.getVariantTracks().filter(function(t){return t.mimeType.startsWith("video/")})}},{key:"closedCaptionsTracks",get:function(){var t=0,e=function(){return t++};return(this.textTracks||[]).filter(function(t){return"subtitle"===t.kind}).map(function(t){return{id:e(),name:t.label||t.language,track:t}})}},{key:"closedCaptionsTrackId",get:function(){return s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"closedCaptionsTrackId",this)},set:function(t){if(this._player){var e=this.closedCaptionsTracks,i=void 0;if(-1!==t){if(!(i=e.find(function(e){return e.id===t})))return void u.Log.warn('Track id "'+t+'" not found');if(this._shakaTTVisible&&!0===i.track.active)return void u.Log.info('Track id "'+t+'" already showing')}i?(this._player.selectTextTrack(i.track),this._enableShakaTextTrack(!0)):this._enableShakaTextTrack(!1),this._ccTrackId=t,this.trigger(u.Events.PLAYBACK_SUBTITLE_CHANGED,{id:t})}}}]),e}(u.HTML5Video);e.default=l,t.exports=e.default},function(e,i){e.exports=t},function(t,e,i){var n;!function(){var r={};(function(t){function e(t,e){var i=t.split("."),n=Do;i[0]in n||!n.execScript||n.execScript("var "+i[0]);for(var r;i.length&&(r=i.shift());)i.length||void 0===e?n=n[r]?n[r]:n[r]={}:n[r]=e}function i(t){function e(){}var i=Re;e.prototype=i.prototype,t.ff=i.prototype,t.prototype=new e,t.prototype.constructor=t,t.df=function(t,e,n){return i.prototype[e].apply(t,Array.prototype.slice.call(arguments,2))}}function n(t){this.c=Math.exp(Math.log(.5)/t),this.b=this.a=0}function r(t,e,i){var n=Math.pow(t.c,e);i=i*(1-n)+n*t.a,isNaN(i)||(t.a=i,t.b+=e)}function a(t){return t.a/(1-Math.pow(t.c,t.b))}function s(){this.b=new n(2),this.c=new n(5),this.a=0}function o(){}function u(){}function h(t,e,i,n){this.severity=t,this.category=e,this.code=i,this.data=Array.prototype.slice.call(arguments,3),this.handled=!1}function c(t){var e;t instanceof c?(l(this,t.da),this.Ba=t.Ba,this.ia=t.ia,f(this,t.La),this.Y=t.Y,d(this,g(t.a)),this.ua=t.ua):t&&(e=String(t).match(Mo))?(l(this,e[1]||"",!0),this.Ba=p(e[2]||""),this.ia=p(e[3]||"",!0),f(this,e[4]),this.Y=p(e[5]||"",!0),d(this,e[6]||"",!0),this.ua=p(e[7]||"")):this.a=new v(null)}function l(t,e,i){t.da=i?p(e,!0):e,t.da&&(t.da=t.da.replace(/:$/,""))}function f(t,e){if(e){if(e=Number(e),isNaN(e)||0>e)throw Error("Bad port number "+e);t.La=e}else t.La=null}function d(t,e,i){e instanceof v?t.a=e:(i||(e=m(e,jo)),t.a=new v(e))}function p(t,e){return t?e?decodeURI(t):decodeURIComponent(t):""}function m(t,e,i){return"string"==typeof t?(t=encodeURI(t).replace(e,y),i&&(t=t.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),t):null}function y(t){return t=t.charCodeAt(0),"%"+(t>>4&15).toString(16)+(15&t).toString(16)}function v(t){this.b=t||null}function g(t){var e=new v;if(e.b=t.b,t.a){var i,n={};for(i in t.a)n[i]=t.a[i].concat();e.a=n,e.c=t.c}return e}function b(){var t,e,i=new Promise(function(i,n){t=i,e=n});return i.resolve=t,i.reject=e,i}function T(t,e,i){var n=E();this.j=null==t.maxAttempts?n.maxAttempts:t.maxAttempts,this.f=null==t.baseDelay?n.baseDelay:t.baseDelay,this.i=null==t.fuzzFactor?n.fuzzFactor:t.fuzzFactor,this.h=null==t.backoffFactor?n.backoffFactor:t.backoffFactor,this.a=0,this.b=this.f,this.c=e||!1,this.g=i||null,this.c&&(this.a=1)}function w(t){if(t.a>=t.j){if(!t.c)return Promise.reject();t.a=1,t.b=t.f}var e=new b;return t.a?(S(t,e.resolve,t.b*(1+(2*Math.random()-1)*t.i)),t.b*=t.h):e.resolve(),t.a++,e}function E(){return{maxAttempts:2,baseDelay:1e3,backoffFactor:2,fuzzFactor:.5,timeout:0}}function S(t,e,i){if(t.g)if(t.g()||!i)e();else{var n=Math.min(200,i);A(function(){S(this,e,i-n)}.bind(t),n)}else A(e,i)}function A(e,i){t.setTimeout(e,i)}function k(t,e,i,n,r){var a,s=r in n;for(a in e){var o=r+"."+a,u=s?n[r]:i[a];(s||a in t)&&(void 0===e[a]?void 0===u||s?delete t[a]:t[a]=u:u.constructor==Object&&e[a]&&e[a].constructor==Object?(t[a]||(t[a]=u),k(t[a],e[a],u,n,o)):typeof e[a]==typeof u&&null!=e[a]&&e[a].constructor==u.constructor&&(t[a]=e[a]))}}function I(t){function e(t){switch(typeof t){case"undefined":case"boolean":case"number":case"string":case"symbol":case"function":return t;default:if(!t)return t;if(0<=i.indexOf(t))return null;var n=t.constructor==Array;if(t.constructor!=Object&&!n)return null;i.push(t);var r,a=n?[]:{};for(r in t)a[r]=e(t[r]);return n&&(a.length=t.length),a}}var i=[];return e(t)}function _(t,e){return t.reduce(function(t,e,i){return e.catch(t.bind(null,i))}.bind(null,e),Promise.reject())}function P(t,e){return t.concat(e)}function x(){}function R(t){return null!=t}function N(t,e,i){return i.indexOf(t)==e}function L(t){this.f=!1,this.a=[],this.b=[],this.c=[],this.g=t||null}function D(t,e,i){i=i||3;var n=Fo[t];(!n||i>=n.ke)&&(Fo[t]={ke:i,ie:e})}function M(t,e){return{uris:t,method:"GET",body:null,headers:{},allowCrossSiteCredentials:!1,retryParameters:e}}function C(t,e,i,n,r,a,s){if(t.f||s())return Promise.reject();var o=new c(i.uris[r]),u=o.da;if(u||(u=location.protocol,u=u.slice(0,-1),l(o,u),i.uris[r]=o.toString()),!(u=(u=Fo[u])?u.ie:null))return Promise.reject(new h(2,1,1e3,o));var f=Date.now();return u(i.uris[r],i,e).then(function(t){void 0==t.timeMs&&(t.timeMs=Date.now()-f);var i=Date.now(),n=Promise.resolve();return this.c.forEach(function(i){n=n.then(function(){return Promise.resolve(i(e,t))}.bind(this))}.bind(this)),n=n.catch(function(t){var e=2;throw t instanceof h&&(e=t.severity),new h(e,1,1007,t)}),n.then(function(){return t.timeMs+=Date.now()-i,t.timeMs+=a,t})}.bind(t)).catch(function(t){if(t&&1==t.severity)return r=(r+1)%i.uris.length,s()?Promise.reject():w(n).then(function(){return C(this,e,i,n,r,a,s)}.bind(this),function(){throw t});throw t}.bind(t))}function O(t,e){for(var i=[],n=0;n<t.length;++n){for(var r=!1,a=0;a<i.length&&!(r=e?e(t[n],i[a]):t[n]===i[a]);++a);r||i.push(t[n])}return i}function U(t,e,i){for(var n=0;n<t.length;++n)if(i(t[n],e))return n;return-1}function j(t,e){var i=t.indexOf(e);-1<i&&t.splice(i,1)}function B(t,e){var i=0;return t.forEach(function(t){i+=e(t)?1:0}),i}function F(){this.a={}}function V(){this.a=new F}function H(t,e,i,n){t.a&&(e=new G(e,i,n),t.a.push(i,e))}function K(t,e,i,n){H(t,e,i,function(t){this.ga(e,i),n(t)}.bind(t))}function q(t){if(t.a){var e,i=t.a,n=[];for(e in i.a)n.push.apply(n,i.a[e]);for(i=0;i<n.length;++i)n[i].ga();t.a.a={}}}function G(t,e,i){this.target=t,this.type=e,this.a=i,this.target.addEventListener(e,i,!1)}function X(e,i){var n,r=i||{};for(n in r)this[n]=r[n];this.defaultPrevented=this.cancelable=this.bubbles=!1,this.timeStamp=t.performance&&t.performance.now?t.performance.now():Date.now(),this.type=e,this.isTrusted=!1,this.target=this.currentTarget=null,this.a=!1}function Y(t,e){if(!e.length)return t;var i=e.map(function(t){return new c(t)});return t.map(function(t){return new c(t)}).map(function(t){return i.map(t.resolve.bind(t))}).reduce(P,[]).map(function(t){return t.toString()})}function z(t,e){return{keySystem:t,licenseServerUri:"",distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,initData:e||[],keyIds:[]}}function $(t){return!t||!Object.keys(t).length}function W(t){return Object.keys(t).map(function(e){return t[e]})}function J(t,e){return Object.keys(t).every(function(i){return e(i,t[i])})}function Q(t,e){Object.keys(t).forEach(function(i){e(i,t[i])})}function Z(t,e){var i=t;return e&&(i+='; codecs="'+e+'"'),i}function tt(t){if(!t)return"";t=new Uint8Array(t),239==t[0]&&187==t[1]&&191==t[2]&&(t=t.subarray(3)),t=escape(rt(t));try{return decodeURIComponent(t)}catch(t){throw new h(2,2,2004)}}function et(t,e,i){if(!t)return"";if(!i&&t.byteLength%2)throw new h(2,2,2004);if(t instanceof ArrayBuffer)var n=t;else i=new Uint8Array(t.byteLength),i.set(new Uint8Array(t)),n=i.buffer;t=Math.floor(t.byteLength/2),i=new Uint16Array(t),n=new DataView(n);for(var r=0;r<t;r++)i[r]=n.getUint16(2*r,e);return rt(i)}function it(t){var e=new Uint8Array(t);if(239==e[0]&&187==e[1]&&191==e[2])return tt(e);if(254==e[0]&&255==e[1])return et(e.subarray(2),!1);if(255==e[0]&&254==e[1])return et(e.subarray(2),!0);var i=function(t,e){return t.byteLength<=e||32<=t[e]&&126>=t[e]}.bind(null,e);if(!e[0]&&!e[2])return et(t,!1);if(!e[1]&&!e[3])return et(t,!0);if(i(0)&&i(1)&&i(2)&&i(3))return tt(t);throw new h(2,2,2003)}function nt(t){t=unescape(encodeURIComponent(t));for(var e=new Uint8Array(t.length),i=0;i<t.length;++i)e[i]=t.charCodeAt(i);return e.buffer}function rt(t){for(var e="",i=0;i<t.length;i+=16e3)e+=String.fromCharCode.apply(null,t.subarray(i,i+16e3));return e}function at(t){this.a=null,this.b=function(){this.a=null,t()}.bind(this)}function st(t,e){t.cancel(),t.a=setTimeout(t.b,1e3*e)}function ot(t,e){t.cancel();var i=function(){this.b(),this.a=setTimeout(i,1e3*e)}.bind(t);t.a=setTimeout(i,1e3*e)}function ut(e,i){var n=void 0==i||i,r=t.btoa(String.fromCharCode.apply(null,e)).replace(/\+/g,"-").replace(/\//g,"_");return n?r:r.replace(/=*$/,"")}function ht(e){e=t.atob(e.replace(/-/g,"+").replace(/_/g,"/"));for(var i=new Uint8Array(e.length),n=0;n<e.length;++n)i[n]=e.charCodeAt(n);return i}function ct(e){for(var i=new Uint8Array(e.length/2),n=0;n<e.length;n+=2)i[n/2]=t.parseInt(e.substr(n,2),16);return i}function lt(t){for(var e="",i=0;i<t.length;++i){var n=t[i].toString(16);1==n.length&&(n="0"+n),e+=n}return e}function ft(t,e){if(!t&&!e)return!0;if(!t||!e||t.length!=e.length)return!1;for(var i=0;i<t.length;++i)if(t[i]!=e[i])return!1;return!0}function dt(t){for(var e=0,i=0;i<arguments.length;++i)e+=arguments[i].length;for(var e=new Uint8Array(e),n=0,i=0;i<arguments.length;++i)e.set(arguments[i],n),n+=arguments[i].length;return e}function pt(t){this.s=t,this.l=this.j=this.u=null,this.K=!1,this.b=null,this.f=new V,this.a=[],this.m=[],this.i=new b,this.h=null,this.g=function(e){this.i.reject(e),t.onError(e)}.bind(this),this.A={},this.F=new at(this.le.bind(this)),this.ha=this.c=!1,this.J=[],this.W=!1,this.w=new at(this.je.bind(this)),ot(this.w,1),this.i.catch(function(){})}function mt(t,e){if(!t.j)return K(t.f,e,"encrypted",function(){this.g(new h(2,6,6010))}.bind(t)),Promise.resolve();t.l=e,K(t.f,t.l,"play",t.Pd.bind(t));var i=t.l.setMediaKeys(t.j),i=i.catch(function(t){return Promise.reject(new h(2,6,6003,t.message))}),n=null;return t.b.serverCertificate&&t.b.serverCertificate.length&&(n=t.j.setServerCertificate(t.b.serverCertificate).then(function(){}).catch(function(t){return Promise.reject(new h(2,6,6004,t.message))})),Promise.all([i,n]).then(function(){if(this.c)return Promise.reject();vt(this),this.b.initData.length||this.m.length||H(this.f,this.l,"encrypted",this.Ed.bind(this))}.bind(t)).catch(function(t){return this.c?Promise.resolve():Promise.reject(t)}.bind(t))}function yt(t,e){return Promise.all(e.map(function(t){return kt(this,t).then(function(t){if(t){for(var e=new b,i=0;i<this.a.length;i++)if(this.a[i].ea==t){this.a[i].ma=e;break}return Promise.all([t.remove(),e])}}.bind(this))}.bind(t)))}function vt(t){var e=t.b?t.b.initData:[];return e.forEach(function(t){It(this,t.initDataType,t.initData)}.bind(t)),t.m.forEach(function(t){kt(this,t)}.bind(t)),e.length||t.m.length||t.i.resolve(),t.i}function gt(t){return t.a.map(function(t){return t.ea.sessionId})}function bt(e,i,n,r,a){var s=Et(e);i.periods.forEach(function(e){e.variants.forEach(function(e){s&&(e.drmInfos=[s]),e.drmInfos.forEach(function(i){wt(this,i),t.cast&&t.cast.__platform__&&"com.microsoft.playready"==i.keySystem&&(i.keySystem="com.chromecast.playready");var s=r[i.keySystem];s||(s={audioCapabilities:[],videoCapabilities:[],distinctiveIdentifier:"optional",persistentState:n?"required":"optional",sessionTypes:[n?"persistent-license":"temporary"],label:i.keySystem,drmInfos:[]},r[i.keySystem]=s,a.push(i.keySystem)),s.drmInfos.push(i),i.distinctiveIdentifierRequired&&(s.distinctiveIdentifier="required"),i.persistentStateRequired&&(s.persistentState="required");var o=[];e.video&&o.push(e.video),e.audio&&o.push(e.audio),o.forEach(function(t){("video"==t.type?s.videoCapabilities:s.audioCapabilities).push({robustness:("video"==t.type?i.videoRobustness:i.audioRobustness)||"",contentType:Z(t.mimeType,t.codecs)})}.bind(this))}.bind(this))}.bind(this))}.bind(e))}function Tt(t,e,i){if(1==i.length&&""==i[0])return Promise.reject(new h(2,6,6e3));var n=new b,r=n;return[!0,!1].forEach(function(t){i.forEach(function(i){var n=e[i];n.drmInfos.some(function(t){return!!t.licenseServerUri})==t&&(n.audioCapabilities.length||delete n.audioCapabilities,n.videoCapabilities.length||delete n.videoCapabilities,r=r.catch(function(){return this.c?Promise.reject():navigator.requestMediaKeySystemAccess(i,[n])}.bind(this)))}.bind(this))}.bind(t)),r=r.catch(function(){return Promise.reject(new h(2,6,6001))}),r=r.then(function(t){if(this.c)return Promise.reject();var i=0<=navigator.userAgent.indexOf("Edge/"),n=t.getConfiguration();return this.u=(n.audioCapabilities||[]).concat(n.videoCapabilities||[]).map(function(t){return t.contentType}),i&&(this.u=null),i=e[t.keySystem],St(this,t.keySystem,i,i.drmInfos),this.b.licenseServerUri?t.createMediaKeys():Promise.reject(new h(2,6,6012))}.bind(t)).then(function(t){if(this.c)return Promise.reject();this.j=t,this.K=!0}.bind(t)).catch(function(t){return this.c?Promise.resolve():(this.u=this.b=null,t instanceof h?Promise.reject(t):Promise.reject(new h(2,6,6002,t.message)))}.bind(t)),n.reject(),r}function wt(t,e){var i=e.keySystem;if(i){if(!e.licenseServerUri){var n=t.h.servers[i];n&&(e.licenseServerUri=n)}e.keyIds||(e.keyIds=[]),(i=t.h.advanced[i])&&(e.distinctiveIdentifierRequired||(e.distinctiveIdentifierRequired=i.distinctiveIdentifierRequired),e.persistentStateRequired||(e.persistentStateRequired=i.persistentStateRequired),e.videoRobustness||(e.videoRobustness=i.videoRobustness),e.audioRobustness||(e.audioRobustness=i.audioRobustness),e.serverCertificate||(e.serverCertificate=i.serverCertificate))}}function Et(e){if($(e.h.clearKeys))return null;var i,n=[],r=[];for(i in e.h.clearKeys){var a=e.h.clearKeys[i],s=ct(i),a=ct(a),s={kty:"oct",kid:ut(s,!1),k:ut(a,!1)};n.push(s),r.push(s.kid)}return e=JSON.stringify({keys:n}),r=JSON.stringify({kids:r}),r=[{initData:new Uint8Array(nt(r)),initDataType:"keyids"}],{keySystem:"org.w3.clearkey",licenseServerUri:"data:application/json;base64,"+t.btoa(e),distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,initData:r,keyIds:[]}}function St(t,e,i,n){var r=[],a=[],s=[],o=[];At(n,r,a,s,o),t.b={keySystem:e,licenseServerUri:r[0],distinctiveIdentifierRequired:"required"==i.distinctiveIdentifier,persistentStateRequired:"required"==i.persistentState,audioRobustness:i.audioCapabilities?i.audioCapabilities[0].robustness:"",videoRobustness:i.videoCapabilities?i.videoCapabilities[0].robustness:"",serverCertificate:a[0],initData:s,keyIds:o}}function At(t,e,i,n,r){function a(t,e){return!(!t.keyId||t.keyId!=e.keyId)||t.initDataType==e.initDataType&&ft(t.initData,e.initData)}t.forEach(function(t){if(-1==e.indexOf(t.licenseServerUri)&&e.push(t.licenseServerUri),t.serverCertificate&&-1==U(i,t.serverCertificate,ft)&&i.push(t.serverCertificate),t.initData&&t.initData.forEach(function(t){-1==U(n,t,a)&&n.push(t)}),t.keyIds)for(var s=0;s<t.keyIds.length;++s)-1==r.indexOf(t.keyIds[s])&&r.push(t.keyIds[s])})}function kt(t,e){try{var i=t.j.createSession("persistent-license")}catch(e){var n=new h(2,6,6005,e.message);return t.g(n),Promise.reject(n)}H(t.f,i,"message",t.Dc.bind(t)),H(t.f,i,"keystatuseschange",t.xc.bind(t));var r={initData:null,ea:i,loaded:!1,Ob:1/0,ma:null};return t.a.push(r),i.load(e).then(function(t){if(!this.c){if(t)return r.loaded=!0,this.a.every(function(t){return t.loaded})&&this.i.resolve(),i;this.a.splice(this.a.indexOf(r),1),this.g(new h(2,6,6013))}}.bind(t),function(t){this.c||(this.a.splice(this.a.indexOf(r),1),this.g(new h(2,6,6005,t.message)))}.bind(t))}function It(t,e,i){try{var n=t.ha?t.j.createSession("persistent-license"):t.j.createSession()}catch(e){return void t.g(new h(2,6,6005,e.message))}H(t.f,n,"message",t.Dc.bind(t)),H(t.f,n,"keystatuseschange",t.xc.bind(t)),t.a.push({initData:i,ea:n,loaded:!1,Ob:1/0,ma:null}),n.generateRequest(e,i.buffer).catch(function(t){if(!this.c){for(var e=0;e<this.a.length;++e)if(this.a[e].ea==n){this.a.splice(e,1);break}this.g(new h(2,6,6006,t.message))}}.bind(t))}function _t(t,e){for(var i,n=e.target,r=0;r<t.a.length;r++)if(t.a[r].ea==n){i=t.a[r];break}r=M([t.b.licenseServerUri],t.h.retryParameters),r.body=e.message,r.method="POST","com.microsoft.playready"!=t.b.keySystem&&"com.chromecast.playready"!=t.b.keySystem||Pt(r),t.s.Wa.request(2,r).then(function(t){return this.c?Promise.reject():n.update(t.data).then(function(){this.s.onEvent(new X("drmsessionupdate")),i&&(i.ma&&i.ma.resolve(),setTimeout(function(){i.loaded=!0,this.a.every(function(t){return t.loaded})&&this.i.resolve()}.bind(this),5e3))}.bind(this))}.bind(t),function(t){if(this.c)return Promise.resolve();t=new h(2,6,6007,t),this.g(t),i&&i.ma&&i.ma.reject(t)}.bind(t)).catch(function(t){if(this.c)return Promise.resolve();t=new h(2,6,6008,t.message),this.g(t),i&&i.ma&&i.ma.reject(t)}.bind(t))}function Pt(t){var e=et(t.body,!0,!0);if(-1==e.indexOf("PlayReadyKeyMessage"))t.headers["Content-Type"]="text/xml; charset=utf-8";else{for(var e=(new DOMParser).parseFromString(e,"application/xml"),i=e.getElementsByTagName("HttpHeader"),n=0;n<i.length;++n)t.headers[i[n].querySelector("name").textContent]=i[n].querySelector("value").textContent;t.body=ht(e.querySelector("Challenge").textContent).buffer}}function xt(){var t=[],e=[{contentType:'video/mp4; codecs="avc1.42E01E"'},{contentType:'video/webm; codecs="vp8"'}],i=[{videoCapabilities:e,persistentState:"required",sessionTypes:["persistent-license"]},{videoCapabilities:e}],n={};return"org.w3.clearkey com.widevine.alpha com.microsoft.playready com.apple.fps.2_0 com.apple.fps.1_0 com.apple.fps com.adobe.primetime".split(" ").forEach(function(e){var r=navigator.requestMediaKeySystemAccess(e,i).then(function(t){var i=t.getConfiguration().sessionTypes,i=!!i&&0<=i.indexOf("persistent-license");return 0<=navigator.userAgent.indexOf("Tizen 3")&&(i=!1),n[e]={persistentState:i},t.createMediaKeys()}).catch(function(){n[e]=null});t.push(r)}),Promise.all(t).then(function(){return n})}function Rt(t,e){var i=t.keySystem();return!e.drmInfos.length||e.drmInfos.some(function(t){return t.keySystem==i})}function Nt(t,e){if(!t.length)return e;if(!e.length)return t;for(var i=[],n=0;n<t.length;n++)for(var r=0;r<e.length;r++)if(t[n].keySystem==e[r].keySystem){var a=t[n],r=e[r],s=[],s=s.concat(a.initData||[]),s=s.concat(r.initData||[]),o=[],o=o.concat(a.keyIds),o=o.concat(r.keyIds);i.push({keySystem:a.keySystem,licenseServerUri:a.licenseServerUri||r.licenseServerUri,distinctiveIdentifierRequired:a.distinctiveIdentifierRequired||r.distinctiveIdentifierRequired,persistentStateRequired:a.persistentStateRequired||r.persistentStateRequired,videoRobustness:a.videoRobustness||r.videoRobustness,audioRobustness:a.audioRobustness||r.audioRobustness,serverCertificate:a.serverCertificate||r.serverCertificate,initData:s,keyIds:o});break}return i}function Lt(t){return!t||1==t.length&&1e-6>t.end(0)-t.start(0)?null:t.length?t.end(t.length-1):null}function Dt(t,e){return!(!t||!t.length||1==t.length&&1e-6>t.end(0)-t.start(0))&&(e>=t.start(0)&&e<=t.end(t.length-1))}function Mt(t,e){if(!t||!t.length||1==t.length&&1e-6>t.end(0)-t.start(0))return 0;for(var i=0,n=t.length-1;0<=n&&t.end(n)>e;--n)i+=t.end(n)-Math.max(t.start(n),e);return i}function Ct(t){if(!t)return[];for(var e=[],i=0;i<t.length;i++)e.push({start:t.start(i),end:t.end(i)});return e}function Ot(){this.a=new muxjs.mp4.Transmuxer,this.b=null,this.c=[],this.f=!1,this.a.on("data",this.h.bind(this)),this.a.on("done",this.g.bind(this))}function Ut(t,e){var i=e.replace("mp2t","mp4");"audio"==t&&(i=i.replace("video","audio"));var n=/avc1\.(66|77|100)\.(\d+)/.exec(i);if(n)var r="avc1.",a=n[1],s=Number(n[2]),r=("66"==a?r+"4200":"77"==a?r+"4d00":r+"6400")+(s>>4).toString(16),r=r+(15&s).toString(16),i=i.replace(n[0],r);return i}function jt(t,e,i){return t.b=new b,t.c=[],null==i||t.f||(t.a.setBaseMediaDecodeTime(9e4*i),t.f=!0),e=new Uint8Array(e),t.a.push(e),t.a.flush(),t.b}function Bt(t){this.c=null,this.f=t,this.h=this.i=0,this.g=1/0,this.b=this.a=null}function Ft(t,e,i,n){return Promise.resolve().then(function(){if(this.c&&this.f)if(null==i||null==n)this.c.parseInit(new Uint8Array(e));else{var t={periodStart:this.i,segmentStart:i,segmentEnd:n},t=this.c.parseMedia(new Uint8Array(e),t).filter(function(t){return t.startTime>=this.h&&t.startTime<this.g}.bind(this));this.f.append(t),null==this.a&&(this.a=Math.max(i,this.h)),this.b=Math.min(n,this.g)}}.bind(t))}function Vt(t,e,i){this.g=t,this.f=e,this.l=i,this.b={},this.a=null,this.c={},this.i=new V,this.j=!1,this.h={}}function Ht(){var t={};return'video/mp4; codecs="avc1.42E01E",video/mp4; codecs="avc3.42E01E",video/mp4; codecs="hev1.1.6.L93.90",video/mp4; codecs="hvc1.1.6.L93.90",video/mp4; codecs="hev1.2.4.L153.B0"; eotf="smpte2084",video/mp4; codecs="hvc1.2.4.L153.B0"; eotf="smpte2084",video/mp4; codecs="vp9",video/mp4; codecs="vp09.00.10.08",audio/mp4; codecs="mp4a.40.2",audio/mp4; codecs="ac-3",audio/mp4; codecs="ec-3",audio/mp4; codecs="opus",audio/mp4; codecs="flac",video/webm; codecs="vp8",video/webm; codecs="vp9",video/webm; codecs="av1",audio/webm; codecs="vorbis",audio/webm; codecs="opus",video/mp2t; codecs="avc1.42E01E",video/mp2t; codecs="avc3.42E01E",video/mp2t; codecs="hvc1.1.6.L93.90",video/mp2t; codecs="mp4a.40.2",video/mp2t; codecs="ac-3",video/mp2t; codecs="ec-3",text/vtt,application/mp4; codecs="wvtt",application/ttml+xml,application/mp4; codecs="stpp"'.split(",").forEach(function(e){t[e]=!!Ko[e]||MediaSource.isTypeSupported(e);var i=e.split(";")[0];t[i]=t[i]||t[e]}),t}function Kt(t,e){t.a||(t.a=new Bt(t.l)),t.a.c=new Ko[e]}function qt(t,e){if("text"==e)var i=t.a.a;else i=Gt(t,e),i=!i||1==i.length&&1e-6>i.end(0)-i.start(0)?null:1==i.length&&0>i.start(0)?0:i.length?i.start(0):null;return i}function Gt(t,e){try{return t.b[e].buffered}catch(t){return null}}function Xt(t,e,i,n,r){return"text"==e?Ft(t.a,i,n,r):t.h[e]?jt(t.h[e],i,n).then(function(t){return $t(this,e,this.Sc.bind(this,e,t.buffer))}.bind(t)):$t(t,e,t.Sc.bind(t,e,i))}function Yt(t,e){return"text"==e?t.a.remove(0,1/0):$t(t,e,t.Tc.bind(t,e,0,t.f.duration))}function zt(t,e,i,n,r){return"text"==e?(t.a.i=i,t=t.a,t.h=n,t.g=r,Promise.resolve()):Promise.all([$t(t,e,t.Zc.bind(t,e)),$t(t,e,t.Ce.bind(t,e,i)),$t(t,e,t.ze.bind(t,e,n,r))])}function $t(t,e,i){if(t.j)return Promise.reject();if(i={start:i,p:new b},t.c[e].push(i),1==t.c[e].length)try{i.start()}catch(n){"QuotaExceededError"==n.name?i.p.reject(new h(2,3,3017,e)):i.p.reject(new h(2,3,3015,n)),Jt(t,e)}return i.p}function Wt(t,e){if(t.j)return Promise.reject();var i,n=[];for(i in t.b){var r=new b,a={start:function(t){t.resolve()}.bind(null,r),p:r};t.c[i].push(a),n.push(r),1==t.c[i].length&&a.start()}return Promise.all(n).then(function(){var t;try{e()}catch(t){var i=Promise.reject(new h(2,3,3015,t))}for(t in this.b)Jt(this,t);return i}.bind(t),function(){return Promise.reject()}.bind(t))}function Jt(t,e){t.c[e].shift();var i=t.c[e][0];if(i)try{i.start()}catch(n){i.p.reject(new h(2,3,3015,n)),Jt(t,e)}}function Qt(t,e,i){return i==e||t>=qo&&i==e.split("-")[0]||t>=Go&&i.split("-")[0]==e.split("-")[0]}function Zt(t){t=t.toLowerCase().split("-");var e=Xo[t[0]];return e&&(t[0]=e),t.join("-")}function te(t,e,i){var n=t.video;return!(n&&(n.width<e.minWidth||n.width>e.maxWidth||n.width>i.width||n.height<e.minHeight||n.height>e.maxHeight||n.height>i.height||n.width*n.height<e.minPixels||n.width*n.height>e.maxPixels)||t.bandwidth<e.minBandwidth||t.bandwidth>e.maxBandwidth)}function ee(t,e,i){var n=!1;return t.variants.forEach(function(t){var r=t.allowedByApplication;t.allowedByApplication=te(t,e,i),r!=t.allowedByApplication&&(n=!0)}),n}function ie(t,e,i,n){n.variants=n.variants.filter(function(n){return!(t&&t.K&&!Rt(t,n))&&(ne(n.audio,t,e)&&ne(n.video,t,i))}),n.textStreams=n.textStreams.filter(function(t){return!!Ko[Z(t.mimeType,t.codecs)]})}function ne(e,i,n){if(!e)return!0;var r=null;i&&i.K&&(r=i.u),i=Z(e.mimeType,e.codecs);var a,s=Z(e.mimeType,e.codecs),o=e.mimeType;for(a in Ho){var u=e[a],h=Ho[a];u&&(o+="; "+h+'="'+u+'"')}return!(!(Ko[s]||MediaSource.isTypeSupported(o)||t.muxjs&&"mp2t"==s.split(";")[0].split("/")[1]&&MediaSource.isTypeSupported(Ut(e.type,s)))||r&&e.encrypted&&0>r.indexOf(i)||n&&(e.mimeType!=n.mimeType||e.codecs.split(".")[0]!=n.codecs.split(".")[0]))}function re(t){var e=t.audio,i=t.video,n=e?e.codecs:null,r=i?i.codecs:null,a=[];r&&a.push(r),n&&a.push(n);var s=[];i&&s.push(i.mimeType),e&&s.push(e.mimeType);var s=s[0]||null,o=[];e&&o.push(e.kind),i&&o.push(i.kind);var o=o[0]||null,u=[];return e&&u.push.apply(u,e.roles),i&&u.push.apply(u,i.roles),u=O(u),t={id:t.id,active:!1,type:"variant",bandwidth:t.bandwidth,language:t.language,label:null,kind:o,width:null,height:null,frameRate:null,mimeType:s,codecs:a.join(", "),audioCodec:n,videoCodec:r,primary:t.primary,roles:u,videoId:null,audioId:null,channelsCount:null,audioBandwidth:null,videoBandwidth:null},i&&(t.videoId=i.id,t.width=i.width||null,t.height=i.height||null,t.frameRate=i.frameRate||null,t.videoBandwidth=i.bandwidth||null),e&&(t.audioId=e.id,t.channelsCount=e.channelsCount,t.audioBandwidth=e.bandwidth||null,t.label=e.label),t}function ae(t){return{id:t.id,active:!1,type:"text",bandwidth:0,language:t.language,label:t.label,kind:t.kind||null,width:null,height:null,frameRate:null,mimeType:t.mimeType,codecs:t.codecs||null,audioCodec:null,videoCodec:null,primary:t.primary,roles:t.roles,videoId:null,audioId:null,channelsCount:null,audioBandwidth:null,videoBandwidth:null}}function se(t){var e=[],i=fe(t.variants);return t=t.textStreams,i.forEach(function(t){e.push(re(t))}),t.forEach(function(t){e.push(ae(t))}),e}function oe(t,e,i){return fe(t.variants).map(function(t){var n=re(t);return t.video&&t.audio?n.active=i==t.video.id&&e==t.audio.id:t.video?n.active=i==t.video.id:t.audio&&(n.active=e==t.audio.id),n})}function ue(t,e){return t.textStreams.map(function(t){var i=ae(t);return i.active=e==t.id,i})}function he(t,e){for(var i=0;i<t.variants.length;i++)if(t.variants[i].id==e.id)return t.variants[i];return null}function ce(t,e){for(var i=0;i<t.textStreams.length;i++)if(t.textStreams[i].id==e.id)return t.textStreams[i];return null}function le(t){return t.allowedByApplication&&t.allowedByKeySystem}function fe(t){return t.filter(function(t){return le(t)})}function de(t,e,i,n){var r=fe(t.variants),a=r.filter(function(t){return t.primary});a.length||(a=r);var s=a.length?a[0].language:"",a=a.filter(function(t){return t.language==s});if(e){var o=Zt(e);[Go,qo,0].forEach(function(t){var e=!1;r.forEach(function(i){o=Zt(o);var r=Zt(i.language);Qt(t,o,r)&&(e?a.push(i):(a=[i],e=!0),n&&(n.audio=!0))})})}return i&&(t=me(a,i),t.length)?t:(t=a.map(function(t){return(t.audio?t.audio.roles:[]).concat(t.video?t.video.roles:[])}).reduce(P,[]),t.length?me(a,t[0]):a)}function pe(t,e,i,n){var r=t.textStreams,a=r.filter(function(t){return t.primary});a.length||(a=r);var s=a.length?a[0].language:"",a=a.filter(function(t){return t.language==s});if(e){var o=Zt(e);[Go,qo,0].forEach(function(t){var e=!1;r.forEach(function(i){var r=Zt(i.language);Qt(t,o,r)&&(e?a.push(i):(a=[i],e=!0),n&&(n.text=!0))})})}return i&&(t=ye(a,i),t.length)?t:(t=a.map(function(t){return t.roles}).reduce(P,[]),t.length?ye(a,t[0]):a)}function me(t,e){return t.filter(function(t){return t.audio&&0<=t.audio.roles.indexOf(e)||t.video&&0<=t.video.roles.indexOf(e)})}function ye(t,e){return t.filter(function(t){return 0<=t.roles.indexOf(e)})}function ve(t,e,i){for(var n=0;n<i.length;n++)if(i[n].audio==t&&i[n].video==e)return i[n];return null}function ge(t,e,i){function n(t,e){return null==t?null==e:e.id==t}for(var r=0;r<i.length;r++)if(n(t,i[r].audio)&&n(e,i[r].video))return i[r];return null}function be(t,e){for(var i=t.periods.length-1;0<i;--i)if(e+Vo>=t.periods[i].startTime)return i;return 0}function Te(t,e){for(var i=0;i<t.periods.length;++i){var n=t.periods[i];if("text"==e.type){for(var r=0;r<n.textStreams.length;++r)if(n.textStreams[r]==e)return i}else for(r=0;r<n.variants.length;++r){var a=n.variants[r];if(a.audio==e||a.video==e||a.video&&a.video.trickModeVideo==e)return i}}return-1}function we(){this.h=null,this.c=!1,this.b=new s,this.g=[],this.i=!1,this.a=this.f=null}function Ee(t,e){return e.filter(function(e){return te(e,t,{width:1/0,height:1/0})}).sort(function(t,e){return t.bandwidth-e.bandwidth})}function Se(t){return JSON.stringify(t,function(t,e){if("function"!=typeof e){if(e instanceof Event||e instanceof X){var i,n={};for(i in e){var r=e[i];r&&"object"==typeof r?"detail"==i&&(n[i]=r):i in Event||(n[i]=r)}return n}if(e instanceof TimeRanges)for(n={__type__:"TimeRanges",length:e.length,start:[],end:[]},i=0;i<e.length;++i)n.start.push(e.start(i)),n.end.push(e.end(i));else n="number"==typeof e?isNaN(e)?"NaN":isFinite(e)?e:0>e?"-Infinity":"Infinity":e;return n}})}function Ae(t){return JSON.parse(t,function(t,e){return"NaN"==e?NaN:"-Infinity"==e?-1/0:"Infinity"==e?1/0:e&&"object"==typeof e&&"TimeRanges"==e.__type__?ke(e):e})}function ke(t){return{length:t.length,start:function(e){return t.start[e]},end:function(e){return t.end[e]}}}function Ie(t,e,i,n,r,a){this.J=t,this.g=e,this.K=i,this.j=!1,this.A=n,this.F=r,this.u=a,this.b=this.h=!1,this.w="",this.i=null,this.l=this.vc.bind(this),this.m=this.Ld.bind(this),this.a={video:{},player:{}},this.s=0,this.c={},this.f=null}function _e(t){var e=au;e.removeUpdateListener(t.l),e.removeMessageListener("urn:x-cast:com.google.shaka.v2",t.m)}function Pe(t){for(var e in t.c){var i=t.c[e];delete t.c[e],i.reject(new h(1,7,7e3))}}function xe(t){t=Se(t),au.sendMessage("urn:x-cast:com.google.shaka.v2",t,function(){},u)}function Re(){this.xb=new F,this.eb=this}function Ne(t,e,i){Re.call(this),this.c=t,this.b=e,this.i=this.g=this.f=this.j=this.h=null,this.a=new Ie(i,this.He.bind(this),this.Ie.bind(this),this.Je.bind(this),this.Ke.bind(this),this.mc.bind(this)),Le(this)}function Le(t){t.a.init(),t.i=new V,Yo.forEach(function(t){H(this.i,this.c,t,this.We.bind(this))}.bind(t)),Jo.forEach(function(t){H(this.i,this.b,t,this.he.bind(this))}.bind(t)),t.h={};for(var e in t.c)Object.defineProperty(t.h,e,{configurable:!1,enumerable:!0,get:t.Ve.bind(t,e),set:t.Xe.bind(t,e)});t.j={};for(e in t.b)Object.defineProperty(t.j,e,{configurable:!1,enumerable:!0,get:t.ge.bind(t,e)});t.f=new Re,t.f.eb=t.h,t.g=new Re,t.g.eb=t.j}function De(t,e,i,n){Re.call(this),this.a=t,this.b=e,this.m={video:t,player:e},this.s=i||function(){},this.u=n||function(t){return t},this.l=!1,this.f=!0,this.g=0,this.j=!1,this.i=this.h=this.c=null,Me(this)}function Me(e){var i=cast.receiver.CastReceiverManager.getInstance();i.onSenderConnected=e.Cc.bind(e),i.onSenderDisconnected=e.Cc.bind(e),i.onSystemVolumeChanged=e.gd.bind(e),e.h=i.getCastMessageBus("urn:x-cast:com.google.cast.media"),e.h.onMessage=e.Gd.bind(e),e.c=i.getCastMessageBus("urn:x-cast:com.google.shaka.v2"),e.c.onMessage=e.Ud.bind(e),i.start(),Yo.forEach(function(t){this.a.addEventListener(t,this.Gc.bind(this,"video"))}.bind(e)),Jo.forEach(function(t){this.b.addEventListener(t,this.Gc.bind(this,"player"))}.bind(e)),cast.__platform__&&cast.__platform__.canDisplayType('video/mp4; codecs="avc1.640028"; width=3840; height=2160')?e.b.Yb(3840,2160):e.b.Yb(1920,1080),e.a.addEventListener("loadeddata",function(){this.j=!0}.bind(e)),e.b.addEventListener("loading",function(){this.f=!1,Ce(this)}.bind(e)),e.a.addEventListener("playing",function(){this.f=!1,Ce(this)}.bind(e)),e.a.addEventListener("pause",function(){Ce(this)}.bind(e)),e.b.addEventListener("unloading",function(){this.f=!0,Ce(this)}.bind(e)),e.a.addEventListener("ended",function(){t.setTimeout(function(){this.a&&this.a.ended&&(this.f=!0,Ce(this))}.bind(this),5e3)}.bind(e))}function Ce(t){Promise.resolve().then(function(){this.dispatchEvent(new X("caststatuschanged")),je(this,0)}.bind(t))}function Oe(t,e,i){for(var n in e.player)t.b[n](e.player[n]);t.s(i),i=Promise.resolve();var r=t.a.autoplay;e.manifest&&(t.a.autoplay=!1,i=t.b.load(e.manifest,e.startTime),i.catch(function(t){this.b.dispatchEvent(new X("error",{detail:t}))}.bind(t))),i.then(function(){var t;for(t in e.video){var i=e.video[t];this.a[t]=i}for(t in e.playerAfterLoad)i=e.playerAfterLoad[t],this.b[t](i);this.a.autoplay=r,e.manifest&&(this.a.play(),je(this,0))}.bind(t))}function Ue(t,e,i,n){t.l&&(t=Se(e),n?i.getCastChannel(n).send(t):i.broadcast(t))}function je(t,e,i){var n=t.a.playbackRate,r=su;r=t.f?r.IDLE:t.b.rc()?r.Uc:t.a.paused?r.Wc:r.Xc,n={mediaSessionId:0,playbackRate:n,playerState:r,currentTime:t.a.currentTime,supportedMediaCommands:15,volume:{level:t.a.volume,muted:t.a.muted}},i&&(n.media=i),Ue(t,{requestId:e,type:"MEDIA_STATUS",status:[n]},t.h)}function Be(t,e){var i=Fe(t,e);return 1!=i.length?null:i[0]}function Fe(t,e){return Array.prototype.filter.call(t.childNodes,function(t){return t.tagName==e})}function Ve(t){var e=t.firstChild;return e&&e.nodeType==Node.TEXT_NODE?t.textContent.trim():null}function He(t,e,i,n){var r=null;return t=t.getAttribute(e),null!=t&&(r=i(t)),null==r?void 0!=n?n:null:r}function Ke(t){return t?(/^\d+\-\d+\-\d+T\d+:\d+:\d+(\.\d+)?$/.test(t)&&(t+="Z"),t=Date.parse(t),isNaN(t)?null:Math.floor(t/1e3)):null}function qe(t){return t&&(t=/^P(?:([0-9]*)Y)?(?:([0-9]*)M)?(?:([0-9]*)D)?(?:T(?:([0-9]*)H)?(?:([0-9]*)M)?(?:([0-9.]*)S)?)?$/.exec(t))?(t=31536e3*Number(t[1]||null)+2592e3*Number(t[2]||null)+86400*Number(t[3]||null)+3600*Number(t[4]||null)+60*Number(t[5]||null)+Number(t[6]||null),isFinite(t)?t:null):null}function Ge(t){var e=/([0-9]+)-([0-9]+)/.exec(t);return e?(t=Number(e[1]),isFinite(t)?(e=Number(e[2]),isFinite(e)?{start:t,end:e}:null):null):null}function Xe(t){return t=Number(t),t%1?null:t}function Ye(t){return t=Number(t),!(t%1)&&0<t?t:null}function ze(t){return t=Number(t),!(t%1)&&0<=t?t:null}function $e(t){var e;return t=(e=t.match(/^(\d+)\/(\d+)$/))?Number(e[1]/e[2]):Number(t),isNaN(t)?null:t}function We(t,e,i){t=Ze(t);var n=null,r=[],a=[],s=t.map(function(t){return t.keyId}).filter(R);if(s.length&&1<s.filter(N).length)throw new h(2,4,4010);i||(a=t.filter(function(t){return"urn:mpeg:dash:mp4protection:2011"!=t.Mc||(n=t.init||n,!1)}),a.length&&(r=Qe(n,e,a),r.length||(r=[z("",n)]))),!t.length||!i&&a.length||(r=W(ou).map(function(t){return z(t,n)}));var o=s[0]||null;return o&&r.forEach(function(t){t.initData.forEach(function(t){t.keyId=o})}),{hc:o,ef:n,drmInfos:r,kc:!0}}function Je(t,e,i,n){var r=We(t,e,n);if(i.kc)t=1==i.drmInfos.length&&!i.drmInfos[0].keySystem,e=!r.drmInfos.length,(!i.drmInfos.length||t&&!e)&&(i.drmInfos=r.drmInfos),i.kc=!1;else if(0<r.drmInfos.length&&(i.drmInfos=i.drmInfos.filter(function(t){return r.drmInfos.some(function(e){return e.keySystem==t.keySystem})}),!i.drmInfos.length))throw new h(2,4,4008);return r.hc||i.hc}function Qe(t,e,i){return i.map(function(i){var n=ou[i.Mc];return n?[z(n,i.init||t)]:e(i.node)||[]}).reduce(P,[])}function Ze(t){return t.map(function(t){var e=t.getAttribute("schemeIdUri"),i=t.getAttribute("cenc:default_KID"),n=Fe(t,"cenc:pssh").map(Ve);if(!e)return null;if(e=e.toLowerCase(),i&&(i=i.replace(/-/g,"").toLowerCase(),0<=i.indexOf(" ")))throw new h(2,4,4009);var r=[];try{r=n.map(function(t){return{initDataType:"cenc",initData:ht(t),keyId:null}})}catch(t){throw new h(2,4,4007)}return{node:t,Mc:e,keyId:i,init:0<r.length?r:null}}).filter(R)}function ti(e,i,n,r,a){null!=a&&(a=Math.round(a));var s={RepresentationID:i,Number:n,Bandwidth:r,Time:a};return e.replace(/\$(RepresentationID|Number|Bandwidth|Time)?(?:%0([0-9]+)d)?\$/g,function(e,i,n){if("$$"==e)return"$";var r=s[i];return null==r?e:("RepresentationID"==i&&n&&(n=void 0),e=r.toString(),n=t.parseInt(n,10)||1,Array(Math.max(0,n-e.length)+1).join("0")+e)})}function ei(t,e){var i=ii(t,e,"timescale"),n=1;i&&(n=Ye(i)||1),i=ii(t,e,"duration"),(i=Ye(i||""))&&(i/=n);var r=ii(t,e,"startNumber"),a=Number(ii(t,e,"presentationTimeOffset"))||0,s=ze(r||"");null!=r&&null!=s||(s=1);var o=ni(t,e,"SegmentTimeline"),r=null;if(o){for(var r=n,u=t.R.duration||1/0,o=Fe(o,"S"),h=[],c=0,l=0;l<o.length;++l){var f=o[l],d=He(f,"t",ze),p=He(f,"d",ze),f=He(f,"r",Xe);if(null!=d&&(d-=a),!p)break;if(d=null!=d?d:c,0>(f=f||0))if(l+1<o.length){if(null==(f=He(o[l+1],"t",ze)))break;if(d>=f)break;f=Math.ceil((f-d)/p)-1}else{if(1/0==u)break;if(d/r>=u)break;f=Math.ceil((u*r-d)/p)-1}0<h.length&&d!=c&&(h[h.length-1].end=d/r);for(var m=0;m<=f;++m)c=d+p,h.push({start:d/r,end:c/r,Te:d}),d=c}r=h}return{timescale:n,O:i,za:s,V:a/n||0,dc:a,I:r}}function ii(t,e,i){return[e(t.v),e(t.S),e(t.Z)].filter(R).map(function(t){return t.getAttribute(i)}).reduce(function(t,e){return t||e})}function ni(t,e,i){return[e(t.v),e(t.S),e(t.Z)].filter(R).map(function(t){return Be(t,i)}).reduce(function(t,e){return t||e})}function ri(t,e){var i=new DOMParser;try{var n=tt(t),r=i.parseFromString(n,"text/xml")}catch(t){}if(r&&r.documentElement.tagName==e)var a=r.documentElement;return a&&0<a.getElementsByTagName("parsererror").length?null:a}function ai(t,e,i,n,r,a){for(var s=t.getAttribute("xlink:href"),o=t.getAttribute("xlink:actuate")||"onRequest",u=0;u<t.attributes.length;u++){var c=t.attributes[u].nodeName;-1!=c.indexOf("xlink:")&&(t.removeAttribute(c),--u)}if(5<=a)return Promise.reject(new h(2,4,4028));if("onLoad"!=o)return Promise.reject(new h(2,4,4027));var l=Y([n],[s]);return r.request(0,M(l,e)).then(function(n){if(!(n=ri(n.data,t.tagName)))return Promise.reject(new h(2,4,4001,s));for(;t.childNodes.length;)t.removeChild(t.childNodes[0]);for(;n.childNodes.length;){var o=n.childNodes[0];n.removeChild(o),t.appendChild(o)}for(o=0;o<n.attributes.length;o++){var u=n.attributes[o].nodeName,c=n.getAttribute(u);t.setAttribute(u,c)}return si(t,e,i,l[0],r,a+1)}.bind(t))}function si(t,e,i,n,r,a){if(a=a||0,t.getAttribute("xlink:href")){var s=ai(t,e,i,n,r,a);return i&&(s=s.catch(function(){return si(t,e,i,n,r,a)})),s}for(s=0;s<t.childNodes.length;s++){var o=t.childNodes[s];o instanceof Element&&"urn:mpeg:dash:resolve-to-zero:2013"==o.getAttribute("xlink:href")&&(t.removeChild(o),--s)}for(var u=[],s=0;s<t.childNodes.length;s++)o=t.childNodes[s],o.nodeType==Node.ELEMENT_NODE&&(o=si(o,e,i,n,r,a),u.push(o));return Promise.all(u).then(function(){return t})}function oi(t,e,i){this.a=t,this.N=e,this.D=i}function ui(t,e,i,n,r,a){this.position=t,this.startTime=e,this.endTime=i,this.a=n,this.N=r,this.D=a}function hi(t,e){this.G=t,this.b=e==uu,this.a=0}function ci(){throw new h(2,3,3e3)}function li(){this.c=[],this.b=[],this.a=!1}function fi(t){for(;t.o.ca()&&!t.oa.a;)t.oa.rb(t.start,t.o,t.Ec)}function di(t){for(var e=t.o.B();0<e&&!t.oa.a;--e)t.oa.rb(t.start,t.o,t.Ec)}function pi(t){return function(e){t(e.o.Ma(e.o.G.byteLength-e.o.U()))}}function mi(t){for(var e=0,i=0;i<t.length;i++)e=e<<8|t.charCodeAt(i);return e}function yi(t,e,i,n){var r,a=(new li).ba("sidx",function(t){r=vi(e,n,i,t)});if(t&&a.parse(t),r)return r;throw new h(2,3,3004)}function vi(t,e,i,n){var r=[];n.o.H(4);var a=n.o.B();if(!a)throw new h(2,3,3005);if(n.version)var s=n.o.Na(),o=n.o.Na();else s=n.o.B(),o=n.o.B();n.o.H(2);var u=n.o.Xa();for(t=t+n.size+o,o=0;o<u;o++){var c=n.o.B(),l=(2147483648&c)>>>31,c=2147483647&c,f=n.o.B();if(n.o.H(4),1==l)throw new h(2,3,3006);r.push(new ui(r.length,s/a-e,(s+f)/a-e,function(){return i},t,t+c-1)),s+=f,t+=c}return n.oa.stop(),r}function gi(t){this.a=t}function bi(t,e){for(var i;t.a.length&&(i=t.a[t.a.length-1],i.startTime>=e);)t.a.pop();for(;t.a.length&&(i=t.a[0],0>=i.endTime);)t.a.shift();t.a.length&&(i=t.a[0],i.startTime<Vo&&(t.a[0]=new ui(i.position,0,i.endTime,i.a,i.N,i.D)),i=t.a[t.a.length-1],t.a[t.a.length-1]=new ui(i.position,i.startTime,e,i.a,i.N,i.D))}function Ti(t){this.b=t,this.a=new hi(t,0),hu||(hu=[new Uint8Array([255]),new Uint8Array([127,255]),new Uint8Array([63,255,255]),new Uint8Array([31,255,255,255]),new Uint8Array([15,255,255,255,255]),new Uint8Array([7,255,255,255,255,255]),new Uint8Array([3,255,255,255,255,255,255]),new Uint8Array([1,255,255,255,255,255,255,255])])}function wi(t){var e=Ei(t);if(7<e.length)throw new h(2,3,3002);for(var i=0,n=0;n<e.length;n++)i=256*i+e[n];e=i,i=Ei(t);t:{for(n=0;n<hu.length;n++)if(ft(i,hu[n])){n=!0;break t}n=!1}if(n)i=t.b.byteLength-t.a.U();else{if(8==i.length&&224&i[1])throw new h(2,3,3001);for(var n=i[0]&(1<<8-i.length)-1,r=1;r<i.length;r++)n=256*n+i[r];i=n}return i=t.a.U()+i<=t.b.byteLength?i:t.b.byteLength-t.a.U(),n=new DataView(t.b.buffer,t.b.byteOffset+t.a.U(),i),t.a.H(i),new Si(e,n)}function Ei(t){var e,i=t.a.$();for(e=1;8>=e&&!(i&1<<8-e);e++);if(8<e)throw new h(2,3,3002);var n=new Uint8Array(e);for(n[0]=i,i=1;i<e;i++)n[i]=t.a.$();return n}function Si(t,e){this.id=t,this.a=e}function Ai(t){if(8<t.a.byteLength)throw new h(2,3,3002);if(8==t.a.byteLength&&224&t.a.getUint8(0))throw new h(2,3,3001);for(var e=0,i=0;i<t.a.byteLength;i++)var n=t.a.getUint8(i),e=256*e+n;return e}function ki(){}function Ii(t,e,i,n,r,a){function s(){return r}var o=[];t=new Ti(t.a);for(var u=null,h=null;t.ca();){var c=wi(t);if(187==c.id){var l=_i(c);l&&(c=i*l.Ue,l=e+l.oe,null!=u&&o.push(new ui(o.length,u-a,c-a,s,h,l-1)),u=c,h=l)}}return null!=u&&o.push(new ui(o.length,u-a,n-a,s,h,null)),o}function _i(t){var e=new Ti(t.a);if(t=wi(e),179!=t.id)throw new h(2,3,3013);if(t=Ai(t),e=wi(e),183!=e.id)throw new h(2,3,3012);for(var e=new Ti(e.a),i=0;e.ca();){var n=wi(e);if(241==n.id){i=Ai(n);break}}return{Ue:t,oe:i}}function Pi(t,e){var i=ni(t,e,"Initialization");if(!i)return null;var n=t.v.aa,r=i.getAttribute("sourceURL");r&&(n=Y(t.v.aa,[r]));var r=0,a=null;return(i=He(i,"range",Ge))&&(r=i.start,a=i.end),new oi(function(){return n},r,a)}function xi(t,e){var i=Number(ii(t,Ni,"presentationTimeOffset"))||0,n=ii(t,Ni,"timescale"),r=1;n&&(r=Ye(n)||1);var i=i/r||0,n=Pi(t,Ni),a=t.v.contentType,r=t.v.mimeType.split("/")[1];if("text"!=a&&"mp4"!=r&&"webm"!=r)throw new h(2,4,4006);if("webm"==r&&!n)throw new h(2,4,4005);var a=ni(t,Ni,"RepresentationIndex"),s=ii(t,Ni,"indexRange"),o=t.v.aa,s=Ge(s||"");if(a){var u=a.getAttribute("sourceURL");u&&(o=Y(t.v.aa,[u])),s=He(a,"range",Ge,s)}if(!s)throw new h(2,4,4002);return r=Ri(t,e,n,o,s.start,s.end,r,i),{createSegmentIndex:r.createSegmentIndex,findSegmentPosition:r.findSegmentPosition,getSegmentReference:r.getSegmentReference,initSegmentReference:n,V:i}}function Ri(t,e,i,n,r,a,s,o){var u=t.presentationTimeline,h=!t.Da||!t.R.Hb,c=t.R.duration,l=e,f=null;return{createSegmentIndex:function(){var t=[l(n,r,a),"webm"==s?l(i.a(),i.N,i.D):null];return l=null,Promise.all(t).then(function(t){var e=t[0];t=t[1]||null,e="mp4"==s?yi(e,r,n,o):(new ki).parse(e,t,n,o),u.Ia(0,e),f=new gi(e),h&&bi(f,c)})},findSegmentPosition:function(t){return f.find(t)},getSegmentReference:function(t){return f.get(t)}}}function Ni(t){return t.Ya}function Li(t,e){var i=Pi(t,Di),n=Ci(t),r=ei(t,Di),a=r.za;a||(a=1);var s=0;if(r.O?s=r.O*(a-1):r.I&&0<r.I.length&&(s=r.I[0].start),n={O:r.O,startTime:s,za:a,V:r.V,I:r.I,Ha:n},!n.O&&!n.I&&1<n.Ha.length)throw new h(2,4,4002);if(!n.O&&!t.R.duration&&!n.I&&1==n.Ha.length)throw new h(2,4,4002);if(n.I&&!n.I.length)throw new h(2,4,4002);return a=r=null,t.Z.id&&t.v.id&&(a=t.Z.id+","+t.v.id,r=e[a]),s=Mi(t.R.duration,n.za,t.v.aa,n),r?(r.Lb(s),a=t.presentationTimeline.ja(),r.Bb(a-t.R.start)):(t.presentationTimeline.Ia(0,s),r=new gi(s),a&&t.Da&&(e[a]=r)),t.Da&&t.R.Hb||bi(r,t.R.duration),{createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:r.find.bind(r),getSegmentReference:r.get.bind(r),initSegmentReference:i,V:n.V}}function Di(t){return t.qa}function Mi(t,e,i,n){var r=n.Ha.length;n.I&&n.I.length!=n.Ha.length&&(r=Math.min(n.I.length,n.Ha.length));for(var a=[],s=n.startTime,o=0;o<r;o++){var u=n.Ha[o],h=Y(i,[u.Ad]),c=null!=n.O?s+n.O:n.I?n.I[o].end:s+t;a.push(new ui(o+e,s,c,function(t){return t}.bind(null,h),u.start,u.end)),s=c}return a}function Ci(t){return[t.v.qa,t.S.qa,t.Z.qa].filter(R).map(function(t){return Fe(t,"SegmentURL")}).reduce(function(t,e){return 0<t.length?t:e}).map(function(e){e.getAttribute("indexRange")&&!t.qc&&(t.qc=!0);var i=e.getAttribute("media");return e=He(e,"mediaRange",Ge,{start:0,end:null}),{Ad:i,start:e.start,end:e.end}})}function Oi(t,e,i,n){var r=Fi(t),a=ei(t,Ui),s=ii(t,Ui,"media"),o=ii(t,Ui,"index");if(a={O:a.O,timescale:a.timescale,za:a.za,V:a.V,dc:a.dc,I:a.I,Kb:s,Va:o},s=0+(a.Va?1:0),s+=a.I?1:0,!(s+=a.O?1:0))throw new h(2,4,4002);if(1!=s&&(a.Va&&(a.I=null),a.O=null),!a.Va&&!a.Kb)throw new h(2,4,4002);if(a.Va){if("mp4"!=(i=t.v.mimeType.split("/")[1])&&"webm"!=i)throw new h(2,4,4006);if("webm"==i&&!r)throw new h(2,4,4005);n=ti(a.Va,t.v.id,null,t.bandwidth||null,null),n=Y(t.v.aa,[n]),t=Ri(t,e,r,n,0,null,i,a.V)}else a.O?(n||t.presentationTimeline.Mb(a.O),t=ji(t,a)):(n=e=null,t.Z.id&&t.v.id&&(n=t.Z.id+","+t.v.id,e=i[n]),s=Bi(t,a),e?(e.Lb(s),i=t.presentationTimeline.ja(),e.Bb(i-t.R.start)):(t.presentationTimeline.Ia(0,s),e=new gi(s),n&&t.Da&&(i[n]=e)),t.Da&&t.R.Hb||bi(e,t.R.duration),t={createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:e.find.bind(e),getSegmentReference:e.get.bind(e)});return{createSegmentIndex:t.createSegmentIndex,findSegmentPosition:t.findSegmentPosition,getSegmentReference:t.getSegmentReference,initSegmentReference:r,V:a.V}}function Ui(t){return t.Za}function ji(t,e){var i=t.R.duration,n=e.O,r=e.za,a=e.timescale,s=e.V,o=e.Kb,u=t.bandwidth||null,h=t.v.id,c=t.v.aa;return{createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:function(t){return 0>t||i&&t>=i?null:Math.floor((t+s)/n)},getSegmentReference:function(t){var e=t*n-s,l=Math.min(e+n,i);return 0>l||i&&e>=i?null:new ui(t,e,l,function(){var i=ti(o,h,t+r,u,e*a);return Y(c,[i])},0,null)}}}function Bi(t,e){for(var i=[],n=0;n<e.I.length;n++){var r=n+e.za;i.push(new ui(r,e.I[n].start,e.I[n].end,function(t,e,i,n,r,a){return t=ti(t,e,r,i,a),Y(n,[t]).map(function(t){return t.toString()})}.bind(null,e.Kb,t.v.id,t.bandwidth||null,t.v.aa,r,e.I[n].Te+e.dc),0,null))}return i}function Fi(t){var e=ii(t,Ui,"initialization");if(!e)return null;var i=t.v.id,n=t.bandwidth||null,r=t.v.aa;return new oi(function(){var t=ti(e,i,null,n,null);return Y(r,[t])},0,null)}function Vi(){var t,e={};for(t in cu)e[t]=!0;for(t in lu)e[t]=!0;return["application/dash+xml","application/x-mpegurl","application/vnd.apple.mpegurl","application/vnd.ms-sstr+xml"].forEach(function(t){e[t]=!!cu[t]}),["mpd","m3u8","ism"].forEach(function(t){e[t]=!!lu[t]}),e}function Hi(t,e,i,n){var r=n;return r||(n=new c(t).Y.split("/").pop().split("."),1<n.length&&(n=n.pop().toLowerCase(),r=lu[n])),r?Promise.resolve(r):(i=M([t],i),i.method="HEAD",e.request(0,i).then(function(e){return(e=e.headers["content-type"])&&(e=e.toLowerCase()),(r=cu[e])?r:Promise.reject(new h(2,4,4e3,t))},function(t){return t.severity=2,Promise.reject(t)}))}function Ki(t,e){this.c=t,this.j=e,this.f=this.a=1/0,this.b=1,this.i=0,this.h=!0,this.g=0}function qi(){this.a=this.b=null,this.g=[],this.c=null,this.i=[],this.h=1,this.j={},this.l=0,this.f=null}function Gi(t){return t.a.networkingEngine.request(0,M(t.g,t.b.retryParameters),function(){return!this.a}.bind(t)).then(function(t){if(this.a)return Xi(this,t.data,t.uri)}.bind(t))}function Xi(t,e,i){if(!(e=ri(e,"MPD")))throw new h(2,4,4001,i);return si(e,t.b.retryParameters,t.b.dash.xlinkFailGracefully,i,t.a.networkingEngine).then(function(t){return Yi(this,t,i)}.bind(t))}function Yi(t,e,i){i=[i];var n=Fe(e,"Location").map(Ve).filter(R);0<n.length&&(i=t.g=n),n=Fe(e,"BaseURL").map(Ve),i=Y(i,n);var r=He(e,"minBufferTime",qe);t.l=He(e,"minimumUpdatePeriod",qe,-1);var a=He(e,"availabilityStartTime",Ke),n=He(e,"timeShiftBufferDepth",qe),s=He(e,"suggestedPresentationDelay",qe),o=He(e,"maxSegmentDuration",qe),u=e.getAttribute("type")||"static";if(t.c)var h=t.c.presentationTimeline;else{var c=Math.max(10,1.5*r);h=new Ki(a,null!=s?s:c)}var a=zi(t,{Da:"static"!=u,presentationTimeline:h,Z:null,R:null,S:null,v:null,bandwidth:0,qc:!1},i,e),s=a.duration,l=a.periods;return h.ub("static"==u),"static"!=u&&a.ic||h.fa(s||1/0),h.Zb(null!=n?n:1/0),h.Mb(o||1),t.c?Promise.resolve():(e=Fe(e,"UTCTiming"),n=h.P(),rn(t,i,e,n).then(function(t){this.a&&(h.Pc(t),this.c={presentationTimeline:h,periods:l,offlineSessionIds:[],minBufferTime:r||0})}.bind(t)))}function zi(t,e,i,n){var r=He(n,"mediaPresentationDuration",qe),a=[],s=0;n=Fe(n,"Period");for(var o=0;o<n.length;o++){var u=n[o],s=He(u,"start",qe,s),h=He(u,"duration",qe),c=null;if(o!=n.length-1){var l=He(n[o+1],"start",qe);null!=l&&(c=l-s)}else null!=r&&(c=r-s);if(null==c&&(c=h),u=$i(t,e,i,{start:s,duration:c,node:u,Hb:null==c||o==n.length-1}),a.push(u),h=e.Z.id,-1==t.i.indexOf(h)&&(t.i.push(h),t.c&&(t.a.filterNewPeriod(u),t.c.periods.push(u))),null==c){s=null;break}s+=c}return t.c||t.a.filterAllPeriods(a),null!=r?{periods:a,duration:r,ic:!1}:{periods:a,duration:s,ic:!0}}function $i(t,e,i,n){e.Z=Zi(n.node,null,i),e.R=n,e.Z.id||(e.Z.id="__shaka_period_"+n.start),Fe(n.node,"EventStream").forEach(t.ee.bind(t,n.start,n.duration)),i=Fe(n.node,"AdaptationSet").map(t.ce.bind(t,e)).filter(R);var r=i.map(function(t){return t.qe}).reduce(P,[]),a=r.filter(N);if(e.Da&&r.length!=a.length)throw new h(2,4,4018);var s=i.filter(function(t){return!t.cc});if(i.filter(function(t){return t.cc}).forEach(function(t){var e=t.streams[0],i=t.cc;s.forEach(function(t){t.id==i&&t.streams.forEach(function(t){t.trickModeVideo=e})})}),r=Wi(s,"video"),a=Wi(s,"audio"),!r.length&&!a.length)throw new h(2,4,4004);for(a.length||(a=[null]),r.length||(r=[null]),e=[],i=0;i<a.length;i++)for(var o=0;o<r.length;o++)Ji(t,a[i],r[o],e);for(t=Wi(s,"text"),r=[],i=0;i<t.length;i++)r.push.apply(r,t[i].streams);return{startTime:n.start,textStreams:r,variants:e}}function Wi(t,e){return t.filter(function(t){return t.contentType==e})}function Ji(t,e,i,n){if(e||i)if(e&&i){var r=e.drmInfos,a=i.drmInfos;if(r.length&&a.length?0<Nt(r,a).length:1)for(var s=Nt(e.drmInfos,i.drmInfos),r=0;r<e.streams.length;r++)for(var o=0;o<i.streams.length;o++)a=(i.streams[o].bandwidth||0)+(e.streams[r].bandwidth||0),a={id:t.h++,language:e.language,primary:e.Jb||i.Jb,audio:e.streams[r],video:i.streams[o],bandwidth:a,drmInfos:s,allowedByApplication:!0,allowedByKeySystem:!0},n.push(a)}else for(s=e||i,r=0;r<s.streams.length;r++)a=s.streams[r].bandwidth||0,a={id:t.h++,language:s.language||"und",primary:s.Jb,audio:e?s.streams[r]:null,video:i?s.streams[r]:null,bandwidth:a,drmInfos:s.drmInfos,allowedByApplication:!0,allowedByKeySystem:!0},n.push(a)}function Qi(e,i){0>e.l||(e.f=t.setTimeout(e.Le.bind(e),1e3*Math.max(Math.max(3,e.l)-i,0)))}function Zi(t,e,i){e=e||{contentType:"",mimeType:"",codecs:"",containsEmsgBoxes:!1,frameRate:void 0,Nb:null},i=i||e.aa;var n=Fe(t,"BaseURL").map(Ve),r=t.getAttribute("contentType")||e.contentType,a=t.getAttribute("mimeType")||e.mimeType,s=t.getAttribute("codecs")||e.codecs,o=He(t,"frameRate",$e)||e.frameRate,u=!!Fe(t,"InbandEventStream").length,h=Fe(t,"AudioChannelConfiguration"),h=tn(h)||e.Nb;return r||(r=an(a,s)),{aa:Y(i,n),Ya:Be(t,"SegmentBase")||e.Ya,qa:Be(t,"SegmentList")||e.qa,Za:Be(t,"SegmentTemplate")||e.Za,width:He(t,"width",ze)||e.width,height:He(t,"height",ze)||e.height,contentType:r,mimeType:a,codecs:s,frameRate:o,containsEmsgBoxes:u||e.containsEmsgBoxes,id:t.getAttribute("id"),Nb:h}}function tn(t){for(var e=0;e<t.length;++e){var i=t[e],n=i.getAttribute("schemeIdUri");if(n&&(i=i.getAttribute("value")))switch(n){case"urn:mpeg:dash:outputChannelPositionList:2012":return i.trim().split(/ +/).length;case"urn:mpeg:dash:23003:3:audio_channel_configuration:2011":case"urn:dts:dash:audio_channel_configuration:2012":if(!(n=parseInt(i,10)))continue;return n;case"tag:dolby.com,2014:dash:audio_channel_configuration:2011":case"urn:dolby:dash:audio_channel_configuration:2011":if(n=parseInt(i,16)){for(t=0;n;)1&n&&++t,n>>=1;return t}}}return null}function en(t){var e=0+(t.Ya?1:0);return e+=t.qa?1:0,(e+=t.Za?1:0)?(1!=e&&(t.Ya&&(t.qa=null),t.Za=null),!0):"text"==t.contentType||"application"==t.contentType}function nn(t,e,i,n){return e=Y(e,[i]),e=M(e,t.b.retryParameters),e.method=n,t.a.networkingEngine.request(0,e).then(function(t){if("HEAD"==n){if(!t.headers||!t.headers.date)return 0;t=t.headers.date}else t=tt(t.data);return t=Date.parse(t),isNaN(t)?0:t-Date.now()})}function rn(t,e,i,n){i=i.map(function(t){return{scheme:t.getAttribute("schemeIdUri"),value:t.getAttribute("value")}});var r=t.b.dash.clockSyncUri;return n&&!i.length&&r&&i.push({scheme:"urn:mpeg:dash:utc:http-head:2014",value:r}),_(i,function(t){var i=t.value;switch(t.scheme){case"urn:mpeg:dash:utc:http-head:2014":case"urn:mpeg:dash:utc:http-head:2012":return nn(this,e,i,"HEAD");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":return nn(this,e,i,"GET");case"urn:mpeg:dash:utc:direct:2014":case"urn:mpeg:dash:utc:direct:2012":return t=Date.parse(i),isNaN(t)?0:t-Date.now();case"urn:mpeg:dash:utc:http-ntp:2014":case"urn:mpeg:dash:utc:ntp:2014":case"urn:mpeg:dash:utc:sntp:2014":default:return Promise.reject()}}.bind(t)).catch(function(){return 0})}function an(t,e){return Ko[Z(t,e)]?"text":t.split("/")[0]}function sn(t,e,i,n){this.uri=t,this.type=e,this.a=i,this.segments=n||null}function on(t,e,i,n){this.id=t,this.name=e,this.a=i,this.value=n||null}function un(t,e){this.name=t,this.value=e}function hn(t,e,i){return i=i||null,(t=t.getAttribute(e))?t.value:i}function cn(t,e){this.a=e,this.uri=t}function ln(t,e){return t.filter(function(t){return t.name==e})}function fn(t,e){var i=ln(t,e);return i.length?i[0]:null}function dn(t,e,i){return t.filter(function(t){var n=t.getAttribute("TYPE");return t=t.getAttribute("GROUP-ID"),n.value==e&&t.value==i})}function pn(t,e){return Y([t],[e])[0]}function mn(t){this.b=t,this.a=0}function yn(t,e){e.lastIndex=t.a;var i=(i=e.exec(t.b))?{position:i.index,length:i[0].length,te:i}:null;return t.a!=t.b.length&&i&&i.position==t.a?(t.a+=i.length,i.te):null}function vn(t){return t.a==t.b.length?null:(t=yn(t,/[^ \t\n]*/gm))?t[0]:null}function gn(){this.a=0}function bn(t,e,i){e=tt(e),e=e.replace(/\r\n|\r(?=[^\n]|$)/gm,"\n").trim();var n=e.split(/\n+/m);if(!/^#EXTM3U($|[ \t\n])/m.test(n[0]))throw new h(2,4,4015);e=0;for(var r=[],a=1;a<n.length;)if(/^#(?!EXT)/m.test(n[a]))a+=1;else{var s=n[a];if(s=wn(t.a++,s),0<=fu.indexOf(s.name))e=1;else if(0<=du.indexOf(s.name)){if(1!=e)throw new h(2,4,4017);return n=n.splice(a,n.length-a),t=Tn(t,n,r),new sn(i,e,r,t)}r.push(s),a+=1,"EXT-X-STREAM-INF"==s.name&&(s.a.push(new un("URI",n[a])),a+=1)}return new sn(i,e,r)}function Tn(t,e,i){var n=[],r=[];return e.forEach(function(t){/^(#EXT)/.test(t)?(t=wn(this.a++,t),0<=fu.indexOf(t.name)?i.push(t):r.push(t)):/^#(?!EXT)/m.test(t)||(n.push(new cn(t.trim(),r)),r=[])}.bind(t)),n}function wn(t,e){var i=e.match(/^#(EXT[^:]*)(?::(.*))?$/);if(!i)throw new h(2,4,4016);var n=i[1],r=i[2],i=[];if(r&&0<=r.indexOf("="))for(var a,r=new mn(r),s=/([^=]+)=(?:"([^"]*)"|([^",]*))(?:,|$)/g;a=yn(r,s);)i.push(new un(a[1],a[2]||a[3]));else if(r)return new on(t,n,i,r);return new on(t,n,i)}function En(t){return new Promise(function(e){var i=En.parse(t);e({uri:t,data:i.data,headers:{"content-type":i.contentType}})})}function Sn(){this.g=this.c=null,this.F=1,this.u={},this.A={},this.K={},this.a={},this.b=null,this.l="",this.s=new gn,this.i=this.h=null,this.f=vu,this.m=null,this.j=0,this.w=1/0}function An(t,e,i){Yn(t,i).then(function(t){var n=gu,r=bn(this.s,t.data,i);if(1!=r.type)throw new h(2,4,4017);t=fn(r.a,"EXT-X-MEDIA-SEQUENCE");var a=e.stream;jn(this,r,t?Number(t.value):0,a.mimeType,a.codecs).then(function(t){e.tb.a=t,t=t[t.length-1],fn(r.a,"EXT-X-ENDLIST")&&($n(this,n.na),this.b.fa(t.endTime))}.bind(this))}.bind(t))}function kn(t,e,i){if(e=bn(t.s,e,i),0!=e.type)throw new h(2,4,4022);return In(t,e).then(function(t){if(this.c.filterAllPeriods([t]),this.f!=gu.na){var e=3*this.j;this.b.Qc(e),this.h=this.w,this.f==gu.ec&&this.b.Zb(e)}else{var i,n=1/0,r=1/0;for(i in this.a)e=this.a[i],n=Math.min(n,e.Bd),r=Math.min(r,e.duration);this.b.fa(r);for(i in this.a)e=this.a[i],e.stream.presentationTimeOffset=n,e.tb.offset(-n),bi(e.tb,r)}this.m={presentationTimeline:this.b,periods:[t],offlineSessionIds:[],minBufferTime:0}}.bind(t))}function In(t,e){var i=e.a,n=ln(e.a,"EXT-X-MEDIA").filter(function(t){return"SUBTITLES"==Gn(t,"TYPE")}.bind(t)).map(function(t){return Rn(this,t)}.bind(t));return Promise.all(n).then(function(t){var n=ln(i,"EXT-X-STREAM-INF").map(function(t){return _n(this,t,e)}.bind(this));return Promise.all(n).then(function(e){return{startTime:0,variants:e.reduce(P,[]),textStreams:t}}.bind(this))}.bind(t))}function _n(t,e,i){var n=hn(e,"CODECS","avc1.42E01E,mp4a.40.2").split(","),r=e.getAttribute("RESOLUTION"),a=null,s=null,o=hn(e,"FRAME-RATE"),u=Number(Gn(e,"BANDWIDTH"));if(r)var h=r.value.split("x"),a=h[0],s=h[1];i=ln(i.a,"EXT-X-MEDIA");var c=hn(e,"AUDIO"),l=hn(e,"VIDEO");if(c?i=dn(i,"AUDIO",c):l&&(i=dn(i,"VIDEO",l)),h=Kn("text",n)){var f=hn(e,"SUBTITLES");f&&(f=dn(i,"SUBTITLES",f),f.length&&(t.u[f[0].id].stream.codecs=h)),n.splice(n.indexOf(h),1)}i=i.map(function(t){return Nn(this,t,n)}.bind(t));var d=[],p=[];return Promise.all(i).then(function(t){if(c?d=t:l&&(p=t),d.length||p.length)if(d.length)if(Gn(e,"URI")==d[0].Wb){t="audio";var i=!0}else t="video";else t="audio";else i=!1,1==n.length?(t=Kn("video",n),t=r||o||t?"video":"audio"):(t="video",n=[n.join(",")]);return i?Promise.resolve():Dn(this,e,n,t)}.bind(t)).then(function(t){return t&&("audio"==t.stream.type?d=[t]:p=[t]),Pn(this,d,p,u,a,s,o)}.bind(t))}function Pn(t,e,i,n,r,a,s){i.forEach(function(t){(t=t.stream)&&(t.width=Number(r)||void 0,t.height=Number(a)||void 0,t.frameRate=Number(s)||void 0)}.bind(t)),e.length||(e=[null]),i.length||(i=[null]);for(var o=[],u=0;u<e.length;u++)for(var h=0;h<i.length;h++){var c=e[u]?e[u].stream:null,l=i[h]?i[h].stream:null,f=e[u]?e[u].drmInfos:null,d=i[h]?i[h].drmInfos:null;if(c&&l){if(!(f.length&&d.length?0<Nt(f,d).length:1))continue;var p=Nt(f,d)}else c?p=f:l&&(p=d);f=(i[u]?i[u].Wb:"")+" - "+(e[u]?e[u].Wb:""),t.A[f]||(c=xn(t,c,l,n,p),o.push(c),t.A[f]=c)}return o}function xn(t,e,i,n,r){return{id:t.F++,language:e?e.language:"und",primary:!!e&&e.primary||!!i&&i.primary,audio:e,video:i,bandwidth:n,drmInfos:r,allowedByApplication:!0,allowedByKeySystem:!0}}function Rn(t,e){return Gn(e,"TYPE"),Nn(t,e,[]).then(function(t){return t.stream})}function Nn(t,e,i){var n=Gn(e,"URI"),n=pn(t.l,n);if(t.a[n])return Promise.resolve(t.a[n]);var r=Gn(e,"TYPE").toLowerCase();"subtitles"==r&&(r="text");var a=Zt(hn(e,"LANGUAGE","und")),s=hn(e,"NAME"),o=e.getAttribute("DEFAULT"),u=e.getAttribute("AUTOSELECT"),h=hn(e,"CHANNELS");return Mn(t,n,i,r,a,!!o||!!u,s,"audio"==r?Ln(h):null).then(function(t){return this.a[n]?this.a[n]:(this.u[e.id]=t,this.a[n]=t)}.bind(t))}function Ln(t){return t?(t=t.split("/")[0],parseInt(t,10)):null}function Dn(t,e,i,n){var r=Gn(e,"URI"),r=pn(t.l,r);return t.a[r]?Promise.resolve(t.a[r]):Mn(t,r,i,n,"und",!1,null,null).then(function(t){return this.a[r]?this.a[r]:this.a[r]=t}.bind(t))}function Mn(t,e,i,n,r,a,s,o){var u=e;e=pn(t.l,e);var c,l,f="";return Yn(t,e).then(function(t){if(c=bn(this.s,t.data,e),1!=c.type)throw new h(2,4,4017);t=c;var r=gu,a=fn(t.a,"EXT-X-PLAYLIST-TYPE"),s=fn(t.a,"EXT-X-ENDLIST"),s=a&&"VOD"==a.value||s,a=a&&"EVENT"==a.value&&!s,a=!s&&!a;if(s?$n(this,r.na):(a?$n(this,r.ec):$n(this,r.Vc),t=Xn(t.a,"EXT-X-TARGETDURATION"),t=Number(t.value),this.j=Math.max(t,this.j),this.w=Math.min(t,this.w)),1==i.length)f=i[0];else{if(null==(t=Kn(n,i)))throw new h(2,4,4025,i);f=t}return qn(this,n,f,c)}.bind(t)).then(function(t){return l=t,t=fn(c.a,"EXT-X-MEDIA-SEQUENCE"),jn(this,c,t?Number(t.value):0,l,f)}.bind(t)).then(function(t){var e=t[0].startTime,i=t[t.length-1].endTime,d=i-e,p=new gi(t);this.b||Cn(this,i),i=null,"text"!=n&&(i=On(c)),this.b.Ia(0,t),t=void 0,"text"==n&&(t="subtitle");var m=[];c.segments.forEach(function(t){t=ln(t.a,"EXT-X-KEY"),m.push.apply(m,t)});var y=!1,v=[],g=null;if(m.forEach(function(t){if("NONE"!=Gn(t,"METHOD")){y=!0;var e=Gn(t,"KEYFORMAT");(t=(e=yu[e])?e(t):null)&&(t.keyIds.length&&(g=t.keyIds[0]),v.push(t))}}),y&&!v.length)throw new h(2,4,4026);return t={id:this.F++,createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:p.find.bind(p),getSegmentReference:p.get.bind(p),initSegmentReference:i,presentationTimeOffset:0,mimeType:l,codecs:f,kind:t,encrypted:y,keyId:g,language:r,label:s||null,type:n,primary:a,trickModeVideo:null,containsEmsgBoxes:!1,frameRate:void 0,width:void 0,height:void 0,bandwidth:void 0,roles:[],channelsCount:o},this.K[t.id]=p,{stream:t,tb:p,drmInfos:v,Wb:u,Bd:e,duration:d}}.bind(t))}function Cn(t,e){var i=null,n=0;t.f!=gu.na&&(i=Date.now()/1e3-e,n=3*t.j),t.b=new Ki(i,n),t.b.ub(t.f==gu.na)}function On(t){var e=ln(t.a,"EXT-X-MAP");if(!e.length)return null;if(1<e.length)throw new h(2,4,4020);var e=e[0],i=Gn(e,"URI"),n=pn(t.uri,i);return t=0,i=null,(e=hn(e,"BYTERANGE"))&&(t=e.split("@"),e=Number(t[0]),t=Number(t[1]),i=t+e-1),new oi(function(){return[n]},t,i)}function Un(t,e,i,n,r){var a=i.a,s=pn(t.uri,i.uri);t=Xn(a,"EXTINF").value.split(","),t=r+Number(t[0]),i=0;var o=null;return(a=fn(a,"EXT-X-BYTERANGE"))&&(i=a.value.split("@"),a=Number(i[0]),i=i[1]?Number(i[1]):e.D+1,o=i+a-1),new ui(n,r,t,function(){return[s]},i,o)}function jn(t,e,i,n,r){var a=e.segments,s=[],o=pn(e.uri,a[0].uri),u=Un(e,null,a[0],i,0);return Fn(t,e.uri,u,n,r).then(function(t){o.split("/").pop();for(var n=0;n<a.length;++n){var r=s[s.length-1],r=Un(e,r,a[n],i+n,n?r.endTime:t);s.push(r)}return s}.bind(t))}function Bn(t,e){var i=t.c.networkingEngine,n=M(e.a(),t.g.retryParameters),r={},a=e.N;r.Range="bytes="+a+"-"+(a+2048-1);var s={};return(a||null!=e.D)&&(a="bytes="+a+"-",null!=e.D&&(a+=e.D),s.Range=a),n.headers=r,i.request(1,n).catch(function(){return o("Unable to fetch a partial HLS segment! Falling back to a full segment request, which is expensive! Your server should support Range requests and CORS preflights.",n.uris[0]),n.headers=s,i.request(1,n)})}function Fn(t,e,i,n,r){return t.m&&(e=t.a[e].tb.get(i.position))?Promise.resolve(e.startTime):Bn(t,i).then(function(t){if("video/mp4"==n||"audio/mp4"==n)return Vn(t.data);if("video/mp2t"==n)return Hn(t.data);if("application/mp4"!=n&&n.indexOf("text/"))throw new h(2,4,4030);t=t.data;var e=Z(n,r);if(Ko[e]){var i=new Bt(null);i.c=new Ko[e],t=i.Gb(t)}else t=0;return t}.bind(t))}function Vn(t){var e=0,i=!1;if((new li).C("moof",fi).C("traf",fi).ba("tfdt",function(t){e=(t.version?t.o.Na():t.o.B())/9e4,i=!0,t.oa.stop()}).parse(t,!0),!i)throw new h(2,4,4030);return e}function Hn(t){function e(){throw new h(2,4,4030)}t=new hi(new DataView(t),0);for(var i=0;;){i=t.U();var n=t.$();if(71!=n&&e(),16384&t.Xa()||e(),(n=(48&t.$())>>4)&&2!=n||e(),3==n&&(n=t.$(),t.H(n)),1==t.B()>>8)return t.H(3),(i=t.$()>>6)&&1!=i||e(),t.$()||e(),i=t.$(),n=t.Xa(),t=t.Xa(),(1073741824*((14&i)>>1)+((65534&n)<<14|(65534&t)>>1))/9e4;t.seek(i+188),n=t.$(),71!=n&&(t.seek(i+192),n=t.$()),71!=n&&(t.seek(i+204),n=t.$()),71!=n&&e(),t.Lc(1)}}function Kn(t,e){for(var i=pu[t],n=0;n<i.length;n++)for(var r=0;r<e.length;r++)if(i[n].test(e[r].trim()))return e[r].trim();return"text"==t?"":null}function qn(t,e,i,n){n=pn(n.uri,n.segments[0].uri);var r=new c(n).Y.split(".").pop(),a=mu[e][r];return a?Promise.resolve(a):"text"==e?i&&"vtt"!=i?Promise.resolve("application/mp4"):Promise.resolve("text/vtt"):(e=M([n],t.g.retryParameters),e.method="HEAD",t.c.networkingEngine.request(1,e).then(function(t){if(!(t=t.headers["content-type"]))throw new h(2,4,4021,r);return t.split(";")[0]}))}function Gn(t,e){var i=t.getAttribute(e);if(!i)throw new h(2,4,4023,e);return i.value}function Xn(t,e){var i=fn(t,e);if(!i)throw new h(2,4,4024,e);return i}function Yn(t,e){return t.c.networkingEngine.request(0,M([e],t.g.retryParameters),function(){return!this.c}.bind(t))}function zn(e,i){null!=e.h&&null!=i&&(e.i=t.setTimeout(e.J.bind(e),1e3*i))}function $n(e,i){e.f=i,e.b&&e.b.ub(e.f==gu.na),e.f==gu.na&&null!=e.i&&(t.clearTimeout(e.i),e.i=null,e.h=null)}function Wn(t,e,i,n,r,a){this.a=t,this.c=e,this.l=i,this.m=null==n?null:Qn(this,n),this.K=r,this.J=a,this.b=new V,this.j=!1,this.i=1,this.h=this.f=null,this.g=new at(this.Dd.bind(this)),this.F=t.readyState,this.s=!1,this.A=this.W=-1,this.u=this.w=!1,0<t.readyState?this.yc():(K(this.b,t,"loadedmetadata",this.yc.bind(this)),H(this.b,t,"timeupdate",function(){st(this.g,.1)}.bind(this))),e=this.Ac.bind(this),H(this.b,t,"ratechange",this.Qd.bind(this)),H(this.b,t,"waiting",e),this.h=new at(e),ot(this.h,.25)}function Jn(t,e){0<t.a.readyState?t.a.currentTime=rr(t,e):t.m=e}function Qn(t,e){var i=t.c.presentationTimeline.T();return e>=i?i-t.l.durationBackoff:e}function Zn(t){return 0<t.a.readyState?t.a.paused?t.a.currentTime:rr(t,t.a.currentTime):tr(t)}function tr(t){if(null!=t.m)return rr(t,t.m);var e=t.c.presentationTimeline;return e=1/0>e.T()?e.ja():e.pb(),t.m=Qn(t,e),e}function er(t,e){t.f&&(t.f.cancel(),t.f=null),t.i=e,t.a.playbackRate=t.j||0>e?0:e,!t.j&&0>e&&(t.f=new at(function(){this.a.currentTime+=e/4}.bind(t)),ot(t.f,.25))}function ir(t,e){var i=Dt.bind(null,t.a.buffered),n=1*Math.max(t.c.minBufferTime||0,t.l.rebufferingGoal),r=t.c.presentationTimeline,a=r.Fa(0),s=r.va(),o=r.T(),u=r.Fa(n),h=r.Fa(5),n=r.Fa(n+5);return e>=o?Qn(t,e):e>s?s:e<a?i(h)?h:n:e>=u||i(e)?e:n}function nr(t,e,i){t.a.currentTime=i;var n=0,r=function(){!this.a||10<=n++||this.a.currentTime!=e||(this.a.currentTime=i,setTimeout(r,100))}.bind(t);setTimeout(r,100)}function rr(t,e){var i=t.c.presentationTimeline.ja();return e<i?i:(i=t.c.presentationTimeline.va(),e>i?i:e)}function ar(t,e,i,n,r,a,s){this.a=t,this.w=e,this.g=i,this.u=n,this.l=r,this.h=a,this.A=s,this.c=[],this.j=new V,this.b=!1,this.i=-1,this.f=null,or(this)}function sr(t){var e=I(t);return e.eventElement=t.eventElement,e}function or(e){ur(e),e.f=t.setTimeout(e.F.bind(e),250)}function ur(e){e.f&&(t.clearTimeout(e.f),e.f=null)}function hr(t,e){this.a=e,this.b=t,this.h=null,this.i=1,this.m=Promise.resolve(),this.g=[],this.j={},this.c={},this.s=!1,this.A=null,this.w=this.f=this.l=!1,this.u=0}function cr(t){var e=Zn(t.a.Ka);return t.b.periods[be(t.b,e)]}function lr(t){var e=t.c.video||t.c.audio;return e?t.b.periods[e.xa]:null}function fr(t){return pr(t,"audio")}function dr(t){return pr(t,"video")}function pr(t,e){var i=t.c[e];return i?i.pa||i.stream:null}function mr(t,e){t.u++,t.w=!1;var i=t.u;return t.a.L.init({text:e}),Ar(t,[e]).then(function(){if(this.u==i&&!this.c.text&&!this.w){var t=Zn(this.a.Ka);this.c.text=Er(e,be(this.b,t)),jr(this,this.c.text,0)}}.bind(t))}function yr(t,e){var i=t.c.video;if(i){var n=i.stream;if(n)if(e){var r=n.trickModeVideo;if(r){var a=i.pa;a||(gr(t,r,!1),i.pa=n)}}else(a=i.pa)&&(i.pa=null,gr(t,a,!0))}}function vr(t,e,i){e.video&&gr(t,e.video,i),e.audio&&gr(t,e.audio,i)}function gr(t,e,i){var n=t.c[e.type];if(!n&&"text"==e.type&&t.h.ignoreTextStreamFailures)mr(t,e);else if(n){var r=Te(t.b,e);i&&r!=n.xa?Tr(t):(n.pa&&(e.trickModeVideo?(n.pa=e,e=e.trickModeVideo):n.pa=null),(r=t.g[r])&&r.Oa&&(r=t.j[e.id])&&r.Oa&&n.stream!=e&&("text"==e.type&&Kt(t.a.L,Z(e.mimeType,e.codecs)),n.stream=e,n.qb=!0,i&&(n.ta?n.wb=!0:n.ya?(n.sa=!0,n.wb=!0):(Br(n),Ur(t,n,!0)))))}}function br(t){var e=Zn(t.a.Ka);Object.keys(t.c).every(function(t){var i=this.a.L;return"text"==t?(t=i.a,t=e>=t.a&&e<t.b):(t=Gt(i,t),t=Dt(t,e)),t}.bind(t))||Tr(t)}function Tr(t){for(var e in t.c){var i=t.c[e];i.ta||i.sa||(i.ya?i.sa=!0:null==qt(t.a.L,e)?null==i.ra&&jr(t,i,0):(Br(i),Ur(t,i,!1)))}}function wr(t,e,i){var n=Zn(t.a.Ka),r=be(t.b,n),a={},n=[];return e.variant&&e.variant.audio&&(a.audio=e.variant.audio,n.push(e.variant.audio)),e.variant&&e.variant.video&&(a.video=e.variant.video,n.push(e.variant.video)),e.text&&(a.text=e.text,n.push(e.text)),t.a.L.init(a),kr(t),Ar(t,n).then(function(){if(!this.f)for(var t in a){var e=a[t];this.c[t]||(this.c[t]=Er(e,r,i),jr(this,this.c[t],0))}}.bind(t))}function Er(t,e,i){return{stream:t,type:t.type,Ga:null,ka:null,pa:null,qb:!0,xa:e,endOfStream:!1,ya:!1,ra:null,sa:!1,wb:!1,ta:!1,Vb:!1,Ua:!1,Jc:i||0}}function Sr(t,e){var i=t.g[e];if(i)return i.M;i={M:new b,Oa:!1},t.g[e]=i;var n=t.b.periods[e].variants.map(function(t){var e=[];return t.audio&&e.push(t.audio),t.video&&e.push(t.video),t.video&&t.video.trickModeVideo&&e.push(t.video.trickModeVideo),e}).reduce(P,[]).filter(N);return n.push.apply(n,t.b.periods[e].textStreams),t.m=t.m.then(function(){if(!this.f)return Ar(this,n)}.bind(t)).then(function(){this.f||(this.g[e].M.resolve(),this.g[e].Oa=!0)}.bind(t)).catch(function(t){this.f||(this.g[e].M.reject(),delete this.g[e],this.a.onError(t))}.bind(t)),i.M}function Ar(t,e){e.map(function(t){return t.id}).filter(N);for(var i=[],n=0;n<e.length;++n){var r=e[n],a=t.j[r.id];a?i.push(a.M):(t.j[r.id]={M:new b,Oa:!1},i.push(r.createSegmentIndex()))}return Promise.all(i).then(function(){if(!this.f)for(var t=0;t<e.length;++t){var i=this.j[e[t].id];i.Oa||(i.M.resolve(),i.Oa=!0)}}.bind(t)).catch(function(t){if(!this.f)return this.j[r.id].M.reject(),delete this.j[r.id],Promise.reject(t)}.bind(t))}function kr(t){var e=t.b.presentationTimeline.T();1/0>e?t.a.L.fa(e):t.a.L.fa(Math.pow(2,32))}function Ir(t,e){var i=Zn(t.a.Ka),n=e.Ga&&e.ka?t.b.periods[Te(t.b,e.Ga)].startTime+e.ka.endTime:Math.max(i,e.Jc),r=Te(t.b,e.stream),a=be(t.b,n),s=t.a.L,o=e.type;return"text"==o?(s=s.a,s=null==s.b||s.b<i?0:s.b-Math.max(i,s.a)):(s=Gt(s,o),s=Mt(s,i)),o=Math.max(t.i*Math.max(t.b.minBufferTime||0,t.h.rebufferingGoal),t.i*t.h.bufferingGoal),n>=t.b.presentationTimeline.T()?(e.endOfStream=!0,null):(e.endOfStream=!1,e.xa=a,a!=r?null:s>=o?.5:(n=t.a.L,a=e.type,n="text"==a?n.a.b:Lt(Gt(n,a)),e.ka&&e.stream==e.Ga?(a=e.ka.position+1,n=_r(t,e,r,a)):(a=e.ka?e.stream.findSegmentPosition(Math.max(0,t.b.periods[Te(t.b,e.Ga)].startTime+e.ka.endTime-t.b.periods[r].startTime)):e.stream.findSegmentPosition(Math.max(0,(n||i)-t.b.periods[r].startTime)),null==a?n=null:(s=null,null==n&&(s=_r(t,e,r,Math.max(0,a-1))),n=s||_r(t,e,r,a))),n?(e.Jc=0,Pr(t,e,i,r,n),null):1))}function _r(t,e,i,n){return i=t.b.periods[i],(e=e.stream.getSegmentReference(n))?(n=t.b.presentationTimeline,t=n.ja(),n=n.va(),i.startTime+e.endTime<t||i.startTime+e.startTime>n?null:e):null}function Pr(t,e,i,n,r){var a=t.b.periods[n],s=e.stream,o=t.b.presentationTimeline.T(),u=t.b.periods[n+1];n=Rr(t,e,n,a.startTime,u?u.startTime:o),e.ya=!0,e.qb=!1,o=Or(t,r),Promise.all([n,o]).then(function(t){if(!this.f&&!this.l)return Nr(this,e,i,a,s,r,t[1])}.bind(t)).then(function(){this.f||this.l||(e.ya=!1,e.Vb=!1,e.sa||this.a.Qb(),jr(this,e,0),Dr(this,s))}.bind(t)).catch(function(t){this.f||this.l||(e.ya=!1,"text"==e.type&&this.h.ignoreTextStreamFailures?delete this.c.text:3017==t.code?xr(this,e,t):(e.Ua=!0,t.severity=2,Fr(this,t)))}.bind(t))}function xr(t,e,i){if(!W(t.c).some(function(t){return t!=e&&t.Vb})){var n=Math.round(100*t.i);if(20<n)t.i-=.2;else{if(!(4<n))return e.Ua=!0,t.l=!0,void t.a.onError(i);t.i-=.04}e.Vb=!0}jr(t,e,4)}function Rr(t,e,i,n,r){return e.qb?(i=zt(t.a.L,e.type,t.b.periods[i].startTime-e.stream.presentationTimeOffset,n,r),e.stream.initSegmentReference?(t=Or(t,e.stream.initSegmentReference).then(function(t){if(!this.f)return Xt(this.a.L,e.type,t,null,null)}.bind(t)).catch(function(t){return e.qb=!0,Promise.reject(t)}),Promise.all([i,t])):i):Promise.resolve()}function Nr(t,e,i,n,r,a,s){return r.containsEmsgBoxes&&(new li).ba("emsg",t.de.bind(t,n,a)).parse(s),Lr(t,e,i).then(function(){if(!this.f)return Xt(this.a.L,e.type,s,a.startTime+n.startTime,a.endTime+n.startTime)}.bind(t)).then(function(){if(!this.f)return e.Ga=r,e.ka=a,Promise.resolve()}.bind(t))}function Lr(t,e,i){var n=qt(t.a.L,e.type);return null==n?Promise.resolve():(i=i-n-t.h.bufferBehind,0>=i?Promise.resolve():t.a.L.remove(e.type,n,n+i).then(function(){}.bind(t)))}function Dr(t,e){if(!t.s&&(t.s=W(t.c).every(function(t){return"text"==t.type||!t.sa&&!t.ta&&t.ka}),t.s)){var i=Te(t.b,e);for(t.g[i]||Sr(t,i).then(function(){this.a.sc()}.bind(t)).catch(x),i=0;i<t.b.periods.length;++i)Sr(t,i).catch(x);t.a.Vd&&t.a.Vd()}}function Mr(t,e){if(e.xa!=Te(t.b,e.stream)){var i=e.xa,n=W(t.c);n.every(function(t){return t.xa==i})&&n.every(Cr)&&Sr(t,i).then(function(){if(!this.f&&n.every(function(t){var e=Te(this.b,t.stream);return Cr(t)&&t.xa==i&&e!=i}.bind(this))){var t=this.b.periods[i],e=this.a.tc(t),r={};e.variant&&e.variant.video&&(r.video=e.variant.video),e.variant&&e.variant.audio&&(r.audio=e.variant.audio),e.text&&(r.text=e.text);for(var a in this.c)if(!r[a]&&"text"!=a)return void this.a.onError(new h(2,5,5005));for(a in r)if(!this.c[a]){if("text"!=a)return void this.a.onError(new h(2,5,5005));wr(this,{text:r.text},t.startTime),delete r[a]}for(a in this.c)(t=r[a])?(gr(this,t,!1),jr(this,this.c[a],0)):delete this.c[a];this.a.sc()}}.bind(t)).catch(x)}}function Cr(t){return!t.ya&&null==t.ra&&!t.sa&&!t.ta}function Or(t,e){var i=M(e.a(),t.h.retryParameters);if(e.N||null!=e.D){var n="bytes="+e.N+"-";null!=e.D&&(n+=e.D),i.headers.Range=n}return t.a.Wa.request(1,i).then(function(t){return t.data})}function Ur(t,e,i){e.sa=!1,e.wb=!1,e.ta=!0,Yt(t.a.L,e.type).then(function(){if(!this.f&&i){var t=this.a.L,n=e.type;return"text"==n?Promise.resolve():$t(t,n,t.hd.bind(t,n))}}.bind(t)).then(function(){this.f||(e.Ga=null,e.ka=null,e.ta=!1,e.endOfStream=!1,jr(this,e,0))}.bind(t))}function jr(e,i,n){i.ra=t.setTimeout(e.Ne.bind(e,i),1e3*n)}function Br(e){null!=e.ra&&(t.clearTimeout(e.ra),e.ra=null)}function Fr(t,e){w(t.A).then(function(){this.a.onError(e),e.handled||this.h.failureCallback(e)}.bind(t))}function Vr(t,e){return new Promise(function(i,n){var r=new XMLHttpRequest;r.open(e.method,t,!0),r.responseType="arraybuffer",r.timeout=e.retryParameters.timeout,r.withCredentials=e.allowCrossSiteCredentials,r.onload=function(e){e=e.target;var r=e.getAllResponseHeaders().trim().split("\r\n").reduce(function(t,e){var i=e.split(": ");return t[i[0].toLowerCase()]=i.slice(1).join(": "),t},{});if(200<=e.status&&299>=e.status&&202!=e.status)e.responseURL&&(t=e.responseURL),i({uri:t,data:e.response,headers:r,fromCache:!!r["x-shaka-from-cache"]});else{var a=null;try{a=it(e.response)}catch(t){}n(new h(401==e.status||403==e.status?2:1,1,1001,t,e.status,a,r))}},r.onerror=function(){n(new h(1,1,1002,t))},r.ontimeout=function(){n(new h(1,1,1003,t))};for(var a in e.headers)r.setRequestHeader(a,e.headers[a]);r.send(e.body)})}function Hr(t,e,i){t.openCursor().onsuccess=function(t){var n=t.target.result;n?e(n.key,n.value,function(){n.continue()}):i()}}function Kr(t,e){function i(t){return c?t:(t.close(),Promise.reject(new h(2,9,9001,"Failed to issue upgrade after "+u+" retries")))}function n(t){return c?t:(t.close(),a().then(function(){return r()}))}function r(){return qr(t,s)}function a(){return new Promise(function(t){setTimeout(t,1e3)})}function s(t,e,i){o(t,e,i),c=!0}var o=sa,u=e||0,c=!1,l=Promise.resolve().then(r);if(u){for(var f=0;f<u;f++)l=l.then(n);l=l.then(i)}return l}function qr(e,i){var n=t.indexedDB.open(e,2),r=new b;return n.onupgradeneeded=function(t){var e=t.target.transaction;i(t.oldVersion,e.db,e)},n.onsuccess=function(t){r.resolve(t.target.result)},n.onerror=function(){r.reject(new h(2,9,9001,"Failed to open indexeddb"))},r}function Gr(){}function Xr(){}function Yr(t){var e=t.periods.map(function(t){return zr(t)});return{originalManifestUri:t.originalManifestUri,duration:t.duration,size:t.size,expiration:t.expiration,periods:e,sessionIds:t.sessionIds,drmInfo:t.drmInfo,appMetadata:t.appMetadata}}function zr(t){Wr(t);var e=t.streams.map(function(t){return $r(t)});return{startTime:t.startTime,streams:e}}function $r(t){var e=t.segments.map(function(t){var e=Jr(t.uri);return{startTime:t.startTime,endTime:t.endTime,dataKey:e}}),i=t.initSegmentUri?Jr(t.initSegmentUri):null;return{id:t.id,primary:t.primary,presentationTimeOffset:t.presentationTimeOffset,contentType:t.contentType,mimeType:t.mimeType,codecs:t.codecs,frameRate:t.frameRate,kind:t.kind,language:t.language,label:t.label,width:t.width,height:t.height,initSegmentKey:i,encrypted:t.encrypted,keyId:t.keyId,segments:e,variantIds:t.variantIds}}function Wr(t){var e=[];e.push.apply(e,t.streams),t=e.filter(function(t){return"audio"==t.contentType});var i=e.filter(function(t){return"video"==t.contentType}),n=[];n.push.apply(n,t),n.push.apply(n,i);var r=e.every(function(t){return null==t.variantIds});if(e.every(function(t){return null!=(t=t.variantIds)&&void 0!=t}),r){e.forEach(function(t){t.variantIds=[]});var a=0;t.length&&i.length?t.forEach(function(t){i.forEach(function(e){t.variantIds.push(a),e.variantIds.push(a),a++})}):n.forEach(function(t){t.variantIds.push(a),a++})}}function Jr(t){var e=(e=/^offline:[0-9]+\/[0-9]+\/([0-9]+)$/.exec(t))?Number(e[1]):null;return null==e&&(e=(t=/^offline:segment\/([0-9]+)$/.exec(t))?Number(t[1]):null),e}function Qr(t){this.c=t,this.b=null,this.a=[]}function Zr(t,e){return ea(t,e)}function ta(t,e,i){var n;return aa(t,e,"readonly",function(t){n=t.get(i)}).then(function(){return n.result})}function ea(t,e){function i(){}return aa(t,"manifest-v2","readonly",function(t){Hr(t,function(t,i,n){e(t,i),n()},i)})}function ia(t,e,i){return aa(t,"manifest-v2","readwrite",function(t){t.put(i,e)})}function na(t,e,i){var n;return aa(t,e,"readwrite",function(t){t.add(i).onsuccess=function(t){n=t.target.result}}).then(function(){return n})}function ra(t,e,i,n){return aa(t,e,"readwrite",function(t){i.forEach(function(e){t.delete(e).onsuccess=function(){n&&n(e)}})})}function aa(t,e,i,n){var r={transaction:t.b.transaction([e],i),M:new b};return r.transaction.oncomplete=function(){t.a.splice(t.a.indexOf(r),1),r.M.resolve()},r.transaction.onabort=function(e){t.a.splice(t.a.indexOf(r),1);var i=r.transaction;r.M.reject(i.error?new h(2,9,9001,i.error):new h(2,9,9002)),e.preventDefault()},r.transaction.onerror=function(t){t.preventDefault()},e=r.transaction.objectStore(e),n(e),t.a.push(r),r.M}function sa(t,e,i){var n={0:new Gr,1:new Xr}[t];if(!n)throw new h(1,9,9001,"Attemping to upgrade from version "+t+" which is not supported. To use offline, please delete the offline storage.");n.a(e,i)}function oa(t,e,i){this.b={},this.i=[],this.h=t,this.j=e,this.m=i,this.g=this.a=null,this.f=this.c=0,this.l=[]}function ua(t,e){t.l.push(e)}function ha(t,e,i,n,r){t.b[e]=t.b[e]||[],t.b[e].push({uris:i.a(),N:i.N,D:i.D,gc:n,Wd:r})}function ca(t,e){t.c=0,t.f=0,W(t.b).forEach(function(t){t.forEach(this.s.bind(this))}.bind(t)),t.a=e;var i=W(t.b).map(function(t){var e=0,i=function(){return this.a?e>=t.length?Promise.resolve():la(this,t[e++]).then(i):Promise.reject(new h(2,9,9002))}.bind(this);return i()}.bind(t));return t.b={},t.g=Promise.all(i).then(function(){return na(this.h,"manifest-v2",e)}.bind(t)).then(function(t){return this.i=[],t}.bind(t)),t.g}function la(t,e){var i=M(e.uris,t.m);(e.N||null!=e.D)&&(i.headers.Range="bytes="+e.N+"-"+(null==e.D?"":e.D));var n;return t.j.request(1,i).then(function(t){return this.a?(n=t.data.byteLength,na(this.h,"segment-v2",{data:t.data})):Promise.reject(new h(2,9,9002))}.bind(t)).then(function(t){if(!this.a)return Promise.reject(new h(2,9,9002));this.a.size+=n,this.f+=null==e.D?e.gc:e.D-e.N+1,this.i.push(t),e.Wd(t),fa(this)}.bind(t))}function fa(t){var e=t.c?t.f/t.c:0,i=t.a.size;t.l.forEach(function(t){t(e,i)})}function da(t){return(t=/^offline:manifest\/([0-9]+)$/.exec(t))?Number(t[1]):null}function pa(t,e,i){var n=void 0==e.expiration?1/0:e.expiration,r=e.presentationTimeline.T();return e=se(e.periods[0]),{offlineUri:null,originalManifestUri:t,duration:r,size:0,expiration:n,tracks:e,appMetadata:i}}function ma(t,e){var i=ya(e.periods[0],[],new Ki(null,0)),n=e.appMetadata||{},i=se(i);return{offlineUri:t,originalManifestUri:e.originalManifestUri,duration:e.duration,size:e.size,expiration:e.expiration,tracks:i,appMetadata:n}}function ya(t,e,i){var n=t.streams.filter(wa);return e=ga(n,t.streams.filter(Ea),e),n=t.streams.filter(Sa).map(ba),t.streams.forEach(function(t){t=t.segments.map(function(t,e){return va(e,t)}),i.Ia(0,t)}),{startTime:t.startTime,variants:e,textStreams:n}}function va(t,e){var i="offline:segment/"+e.dataKey;return new ui(t,e.startTime,e.endTime,function(){return[i]},0,null)}function ga(t,e,i){var n={},r=[];return r.push.apply(r,t),r.push.apply(r,e),r.forEach(function(t){t.variantIds.forEach(function(t){n[t]||(n[t]={id:t,language:"",primary:!1,audio:null,video:null,bandwidth:0,drmInfos:i,allowedByApplication:!0,allowedByKeySystem:!0})})}),t.forEach(function(t){var e=ba(t);t.variantIds.forEach(function(t){t=n[t],t.language=e.language,t.primary=t.primary||e.primary,t.audio=e})}),e.forEach(function(t){var e=ba(t);t.variantIds.forEach(function(t){t=n[t],t.primary=t.primary||e.primary,t.video=e})}),W(n)}function ba(t){var e=t.segments.map(function(t,e){return va(e,t)}),e=new gi(e),e={id:t.id,createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:e.find.bind(e),getSegmentReference:e.get.bind(e),initSegmentReference:null,presentationTimeOffset:t.presentationTimeOffset,mimeType:t.mimeType,codecs:t.codecs,width:t.width||void 0,height:t.height||void 0,frameRate:t.frameRate||void 0,kind:t.kind,encrypted:t.encrypted,keyId:t.keyId,language:t.language,label:t.label||null,type:t.contentType,primary:t.primary,trickModeVideo:null,containsEmsgBoxes:!1,roles:[],channelsCount:null};return null!=t.initSegmentKey&&(e.initSegmentReference=Ta(t.initSegmentKey)),e}function Ta(t){var e="offline:segment/"+t;return new oi(function(){return[e]},0,null)}function wa(t){return"audio"==t.contentType}function Ea(t){return"video"==t.contentType}function Sa(t){return"text"==t.contentType}function Aa(){if(!t.indexedDB)return Promise.reject(new h(2,9,9e3));var e=new Qr("shaka_offline_db");return e.init().then(function(){return e})}function ka(){this.a=-1}function Ia(t){var e=new Ki(null,0);e.fa(t.duration);var i=t.drmInfo?[t.drmInfo]:[];return{presentationTimeline:e,minBufferTime:2,offlineSessionIds:t.sessionIds,periods:t.periods.map(function(t){return ya(t,i,e)})}}function _a(t){if(null!=da(t))return _a.a(t);var e=(e=/^offline:segment\/([0-9]+)$/.exec(t))?Number(e[1]):null;return null!=e?_a.b(e,t):Promise.reject(new h(2,1,9004,t))}function Pa(t){this.a=null;for(var e=0;e<t.textTracks.length;++e){var i=t.textTracks[e];i.mode="disabled","Shaka Player TextTrack"==i.label&&(this.a=i)}this.a||(this.a=t.addTextTrack("subtitles","Shaka Player TextTrack")),this.a.mode="hidden",this.b=this.a.cues}function xa(t){if(t.startTime>=t.endTime)return null;var e=new VTTCue(t.startTime,t.endTime,t.payload);e.lineAlign=t.lineAlign,e.positionAlign=t.positionAlign,e.size=t.size;try{e.align=t.textAlign}catch(t){}return"center"==t.textAlign&&"center"!=e.align&&(e.align="middle"),t.writingDirection==Mu?e.vertical="lr":t.writingDirection==Cu&&(e.vertical="rl"),t.lineInterpretation==Uu&&(e.snapToLines=!1),null!=t.line&&(e.line=t.line),null!=t.position&&(e.position=t.position),e}function Ra(t,e){for(var i=t.b,n=[],r=0;r<i.length;++r)e(i[r])&&n.push(i[r]);for(r=0;r<n.length;++r)t.a.removeCue(n[r])}function Na(){this.a=Promise.resolve(),this.b=this.c=this.f=!1,this.i=new Promise(function(t){this.g=t}.bind(this)),this.l=[],this.j=[]}function La(t){return t.f||(t.a=t.a.then(function(t){return this.c=!0,this.l.forEach(function(t){t()}),Promise.resolve(t)}.bind(t),function(t){return this.c=!0,this.b?(this.g(),Promise.reject(this.h)):Promise.reject(t)}.bind(t))),t.f=!0,t.a}function Da(t,e){Re.call(this),this.F=!1,this.f=t,this.lb=!1,this.u=null,this.m=new V,this.h=this.yb=this.b=this.i=this.a=this.w=this.g=this.ib=this.J=this.K=this.l=this.s=null,this.Yc=1e9,this.gb=[],this.kb=!1,this.Ca=!0,this.Sa=this.Ta=this.ha=null,this.fc=!1,this.W=null,this.jb=[],this.A={},this.c=Ga(this),this.hb={width:1/0,height:1/0},this.j=Xa(),this.fb=0,this.Qa=this.c.preferredAudioLanguage,this.Ra=this.c.preferredTextLanguage,this.bb=this.cb="",e&&e(this),this.s=new L(this.Fe.bind(this)),this.ib=Oa(this),H(this.m,this.f,"error",this.Yd.bind(this))}function Ma(t){if(!t.ha)return Promise.resolve();var e=Promise.resolve();return t.i&&(e=t.i.stop(),t.i=null),t=t.ha.cancel(new h(2,7,7e3)),Promise.all([e,t])}function Ca(t){function e(t){return(t.video?t.video.codecs.split(".")[0]:"")+"-"+(t.audio?t.audio.codecs.split(".")[0]:"")}var i={};t.b.periods.forEach(function(t){t.variants.forEach(function(t){var n=e(t);n in i||(i[n]=[]),i[n].push(t)})});var n=null,r=1/0;Q(i,function(t,e){var i=0,a=0;e.forEach(function(t){i+=t.bandwidth||0,++a});var s=i/a;s<r&&(n=t,r=s)}),t.b.periods.forEach(function(t){t.variants=t.variants.filter(function(t){return e(t)==n})})}function Oa(e){e.K=new MediaSource;var i=new b;return H(e.m,e.K,"sourceopen",i.resolve),e.f.src=t.URL.createObjectURL(e.K),i}function Ua(t){if(t.i&&t.i.configure(t.c.manifest),t.l&&t.l.configure(t.c.drm),t.a){t.a.configure(t.c.streaming);try{t.b.periods.forEach(t.mb.bind(t))}catch(e){t.Pa(e)}var e=fr(t.a),i=dr(t.a),n=cr(t.a);(e=ve(e,i,n.variants))&&e.allowedByApplication&&e.allowedByKeySystem||Ja(t,n)}t.h&&(t.h.configure(t.c.abr),t.c.abr.enabled&&!t.Ca?t.h.enable():t.h.disable())}function ja(t){var e=[];return t.forEach(function(t){if(t){var i=t.language;t.roles.length?t.roles.forEach(function(t){e.push({language:i,sb:t})}):e.push({language:i,sb:""})}else e.push({language:"und",sb:""})}),O(e,function(t,e){return t.language==e.language&&t.sb==e.sb})}function Ba(t,e,i){e.video&&Va(t,e.video),e.audio&&Va(t,e.audio);var n=lr(t.a);e!=ve(fr(t.a),dr(t.a),n?n.variants:[])&&t.j.switchHistory.push({timestamp:Date.now()/1e3,id:e.id,type:"variant",fromAdaptation:i,bandwidth:e.bandwidth})}function Fa(t,e,i){Va(t,e),t.j.switchHistory.push({timestamp:Date.now()/1e3,id:e.id,type:"text",fromAdaptation:i,bandwidth:null})}function Va(t,e){var i=Te(t.b,e);t.A[i]||(t.A[i]={}),t.A[i][e.type]=e.id}function Ha(t){t.m&&(t.m.ga(t.K,"sourceopen"),t.m.ga(t.f,"loadeddata"),t.m.ga(t.f,"playing"),t.m.ga(t.f,"pause"),t.m.ga(t.f,"ended")),t.f&&(t.f.removeAttribute("src"),t.f.load());var e=Promise.all([t.h?t.h.stop():null,t.l?t.l.destroy():null,t.J?t.J.destroy():null,t.g?t.g.destroy():null,t.w?t.w.destroy():null,t.a?t.a.destroy():null,t.i?t.i.stop():null,t.u?t.u.destroy():null]);return t.l=null,t.J=null,t.g=null,t.w=null,t.a=null,t.i=null,t.u=null,t.b=null,t.yb=null,t.ib=null,t.K=null,t.jb=[],t.A={},t.j=Xa(),e}function Ka(t){return t.i?Ha(t).then(function(){this.F||(this.Rc(!1),this.ib=Oa(this))}.bind(t)):Promise.resolve()}function qa(){return{".drm.servers":"",".drm.clearKeys":"",".drm.advanced":{distinctiveIdentifierRequired:!1,persistentStateRequired:!1,videoRobustness:"",audioRobustness:"",serverCertificate:new Uint8Array(0)}}}function Ga(t){var e=5e5;return navigator.connection&&navigator.connection.type&&(e=1e6*navigator.connection.downlink),{drm:{retryParameters:E(),servers:{},clearKeys:{},advanced:{},delayLicenseRequestUntilPlayed:!1},manifest:{retryParameters:E(),dash:{customScheme:function(t){if(t)return null},clockSyncUri:"",ignoreDrmInfo:!1,xlinkFailGracefully:!1}},streaming:{retryParameters:E(),failureCallback:t.ed.bind(t),rebufferingGoal:2,bufferingGoal:10,bufferBehind:30,ignoreTextStreamFailures:!1,startAtSegmentBoundary:!1,smallGapLimit:.5,jumpLargeGaps:!1,durationBackoff:1},abrFactory:we,textDisplayFactory:function(t){return new Pa(t)}.bind(null,t.f),abr:{enabled:!0,defaultBandwidthEstimate:e,switchInterval:8,bandwidthUpgradeTarget:.85,bandwidthDowngradeTarget:.95,restrictions:{minWidth:0,maxWidth:1/0,minHeight:0,maxHeight:1/0,minPixels:0,maxPixels:1/0,minBandwidth:0,maxBandwidth:1/0}},preferredAudioLanguage:"",preferredTextLanguage:"",restrictions:{minWidth:0,maxWidth:1/0,minHeight:0,maxHeight:1/0,minPixels:0,maxPixels:1/0,minBandwidth:0,maxBandwidth:1/0},playRangeStart:0,playRangeEnd:1/0}}function Xa(){return{width:NaN,height:NaN,streamBandwidth:NaN,decodedFrames:NaN,droppedFrames:NaN,estimatedBandwidth:NaN,loadLatency:NaN,playTime:0,bufferingTime:0,switchHistory:[],stateHistory:[]}}function Ya(t,e,i){t.Ca?(t.Sa=e,t.fc=i||!1):vr(t.a,e,i||!1)}function za(t){if(t.b){var e=Date.now()/1e3;t.kb?t.j.bufferingTime+=e-t.fb:t.j.playTime+=e-t.fb,t.fb=e}}function $a(t,e){function i(t,e){if(!t)return null;var i=t.findSegmentPosition(e-a.startTime);return null==i?null:(i=t.getSegmentReference(i))?i.startTime+a.startTime:null}var n=fr(t.a),r=dr(t.a),a=cr(t.a),n=i(n,e),r=i(r,e);return null!=r&&null!=n?Math.max(r,n):null!=r?r:null!=n?n:e}function Wa(t,e){return e&&e.length?(t.h.setVariants(e),t.h.chooseVariant()):(t.Pa(new h(2,4,4012)),null)}function Ja(t,e){var i=de(e,t.Qa,t.cb),n=pe(e,t.Ra,t.bb);(i=Wa(t,i))&&(Ba(t,i,!0),Ya(t,i,!0)),(n=n[0])&&t.Ib()&&(Fa(t,n,!0),t.Ca?t.W=n:gr(t.a,n,!0)),Qa(t)}function Qa(t){Promise.resolve().then(function(){this.F||this.dispatchEvent(new X("adaptation"))}.bind(t))}function Za(t){Promise.resolve().then(function(){this.F||this.dispatchEvent(new X("trackschanged"))}.bind(t))}function ts(t){t.dispatchEvent(new X("texttrackvisibility"))}function es(t){if(!t||t.constructor!=Da)throw new h(2,9,9008);this.g=null,this.a=t,this.b=os(this),this.f=null,this.l=!1,this.c=this.s=this.h=this.i=null}function is(){return!!t.indexedDB}function ns(t,e,i,n,r){if(i.presentationTimeline.P()||i.presentationTimeline.wa())throw new h(2,9,9005,e);t.h=i,t.f=r,t.j(i.periods),t.s=pa(e,i,n);var a=ls(t,e,n);return ca(t.c,a).then(function(t){return ma("offline:manifest/"+t,a)})}function rs(t,e){function i(t){6013!=t.code&&(s=t)}var n=da(e);if(null==n)return Promise.reject(new h(2,9,9004,e));var r,a,s=null;return us(t).then(function(){return ps(this),this.g.Ea(n)}.bind(t)).then(function(t){if(ps(this),!t)throw new h(2,9,9003,e);return r=t,t=Ia(r),a=new pt({Wa:this.a.s,onError:i,Pb:function(){},onExpirationUpdated:function(){},onEvent:function(){}}),a.configure(this.a.getConfiguration().drm),a.init(t,this.b.usePersistentLicense||!1)}.bind(t)).then(function(){return yt(a,r.sessionIds)}.bind(t)).then(function(){return a.destroy()}.bind(t)).then(function(){if(ps(this),s)throw s;return as(this,e,n,r)}.bind(t))}function as(t,e,i,n){function r(){u++,a(s,u/h)}var a=t.b.progressCallback,s=ma(e,n),o=ms(n),u=0,h=o.length+1;return Promise.resolve().then(function(){return ps(this),ra(this.g,"segment-v2",o,r)}.bind(t)).then(function(){return ps(this),ra(this.g,"manifest-v2",[i],r)}.bind(t))}function ss(t,e,i,n){function r(){}var a,s,o,u=t.a.s,h=t.a.getConfiguration();return Hi(e,u,h.manifest.retryParameters,n).then(function(t){return ps(this),o=new t,o.configure(h.manifest),o.start(e,{networkingEngine:u,filterAllPeriods:this.j.bind(this),filterNewPeriod:this.m.bind(this),onTimelineRegionAdded:function(){},onEvent:function(){},onError:i})}.bind(t)).then(function(t){return ps(this),a=t,s=new pt({Wa:u,onError:i,Pb:r,onExpirationUpdated:function(){},onEvent:function(){}}),s.configure(h.drm),s.init(a,this.b.usePersistentLicense||!1)}.bind(t)).then(function(){return ps(this),cs(a)}.bind(t)).then(function(){return ps(this),vt(s)}.bind(t)).then(function(){return ps(this),o.stop()}.bind(t)).then(function(){return ps(this),{manifest:a,fd:s}}.bind(t)).catch(function(t){if(o)return o.stop().then(function(){throw t});throw t})}function os(t){return{trackSelectionCallback:t.u.bind(t),progressCallback:function(t,e){if(t||e)return null},usePersistentLicense:!0}}function us(e){if(!t.indexedDB)return Promise.reject(new h(2,9,9e3));if(e.g)return Promise.resolve();var i=e.a.s,n=e.a.getConfiguration().streaming.retryParameters;return Aa().then(function(t){this.g=t,this.c=new oa(t,i,n),ua(this.c,function(t,e){var i=this.s;i.size=e,this.b.progressCallback(i,t)}.bind(this))}.bind(e))}function hs(t){var e=t.f?t.f.destroy():Promise.resolve();return t.f=null,t.h=null,t.l=!1,t.i=null,e}function cs(t){var e=t.periods.map(function(t){return t.variants}).reduce(P,[]).map(function(t){var e=[];return t.audio&&e.push(t.audio),t.video&&e.push(t.video),e}).reduce(P,[]).filter(N);return t=t.periods.map(function(t){return t.textStreams}).reduce(P,[]),e.push.apply(e,t),Promise.all(e.map(function(t){return t.createSegmentIndex()}))}function ls(t,e,i){var n=t.h.periods.map(t.w.bind(t)),r=t.f.b,a=gt(t.f);if(r&&t.b.usePersistentLicense){if(!a.length)throw new h(2,9,9007,e);r.initData=[]}return{originalManifestUri:e,duration:t.h.presentationTimeline.T(),size:0,expiration:t.f.ob(),periods:n,sessionIds:t.b.usePersistentLicense?a:[],drmInfo:r,appMetadata:i}}function fs(t,e,i,n){var r={id:e.id,primary:e.primary,presentationTimeOffset:e.presentationTimeOffset||0,contentType:e.type,mimeType:e.mimeType,codecs:e.codecs,frameRate:e.frameRate,kind:e.kind,language:e.language,label:e.label,width:e.width||null,height:e.height||null,initSegmentKey:null,encrypted:e.encrypted,keyId:e.keyId,segments:[],variantIds:[]};return null!=n&&r.variantIds.push(n),n=t.h.presentationTimeline.ja(),ds(e,n,function(t){var n=t.startTime,a=t.endTime;ha(this.c,e.type,t,(a-n)*i/8,function(t){r.segments.push({startTime:n,endTime:a,dataKey:t})})}.bind(t)),(n=e.initSegmentReference)&&ha(t.c,e.contentType,n,0,function(t){r.initSegmentKey=t}),r}function ds(t,e,i){e=t.findSegmentPosition(e);for(var n=null==e?null:t.getSegmentReference(e);n;)i(n),n=t.getSegmentReference(++e)}function ps(t){if(!t.a)throw new h(2,9,9002)}function ms(t){var e=[];return t.periods.forEach(function(t){t.streams.forEach(function(t){null!=t.initSegmentKey&&e.push(t.initSegmentKey),t.segments.forEach(function(t){e.push(t.dataKey)})})}),e}function ys(t){Tu.push(t)}function vs(t){var e=t.type.replace(/^(webkit|moz|MS)/,"").toLowerCase();if("function"==typeof Event)var i=new Event(e,t);else i=document.createEvent("Event"),i.initEvent(e,t.bubbles,t.cancelable);t.target.dispatchEvent(i)}function gs(t,e,i){if("input"==t)switch(this.type){case"range":t="change"}wu.call(this,t,e,i)}function bs(t){this.f=[],this.b=[],this.a=[],(new li).ba("pssh",this.c.bind(this)).parse(t.buffer)}function Ts(t,e){try{var i=new ws(t,e);return Promise.resolve(i)}catch(t){return Promise.reject(t)}}function ws(t,e){this.keySystem=t;for(var i=!1,n=0;n<e.length;++n){var r=e[n],a={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:r.initDataTypes,sessionTypes:["temporary"],label:r.label},s=!1;if(r.audioCapabilities)for(var o=0;o<r.audioCapabilities.length;++o){var u=r.audioCapabilities[o];if(u.contentType){s=!0;var h=u.contentType.split(";")[0];MSMediaKeys.isTypeSupported(this.keySystem,h)&&(a.audioCapabilities.push(u),i=!0)}}if(r.videoCapabilities)for(o=0;o<r.videoCapabilities.length;++o)u=r.videoCapabilities[o],u.contentType&&(s=!0,h=u.contentType.split(";")[0],MSMediaKeys.isTypeSupported(this.keySystem,h)&&(a.videoCapabilities.push(u),i=!0));if(s||(i=MSMediaKeys.isTypeSupported(this.keySystem,"video/mp4")),"required"==r.persistentState&&(i=!1),i)return void(this.a=a)}throw r=Error("Unsupported keySystem"),r.name="NotSupportedError",r.code=DOMException.NOT_SUPPORTED_ERR,r}function Es(t){var e=this.mediaKeys;return e&&e!=t&&As(e,null),delete this.mediaKeys,(this.mediaKeys=t)?As(t,this):Promise.resolve()}function Ss(t){this.a=new MSMediaKeys(t),this.b=new V}function As(t,e){function i(){e.msSetMediaKeys(n.a),e.removeEventListener("loadedmetadata",i)}if(q(t.b),!e)return Promise.resolve();H(t.b,e,"msneedkey",Is);var n=t;try{return 1<=e.readyState?e.msSetMediaKeys(t.a):e.addEventListener("loadedmetadata",i),Promise.resolve()}catch(t){return Promise.reject(t)}}function ks(t){Re.call(this),this.c=null,this.g=t,this.b=this.a=null,this.f=new V,this.sessionId="",this.expiration=NaN,this.closed=new b,this.keyStatuses=new xs}function Is(t){var e=document.createEvent("CustomEvent");e.initCustomEvent("encrypted",!1,!1,null),e.initDataType="cenc";var i=t.initData;if(i){var n=new bs(i);if(1>=n.a.length)t=i;else{var r=[];for(t=0;t<n.a.length;t++)r.push(i.subarray(n.a[t].start,n.a[t].end+1));for(i=O(r,_s),t=n=0;t<i.length;t++)n+=i[t].length;for(n=new Uint8Array(n),t=r=0;t<i.length;t++)n.set(i[t],r),r+=i[t].length;t=n}}else t=i;e.initData=t,this.dispatchEvent(e)}function _s(t,e){return ft(t,e)}function Ps(t,e){var i=t.keyStatuses;i.size=void 0==e?0:1,i.a=e,t.dispatchEvent(new X("keystatuseschange"))}function xs(){this.size=0,this.a=void 0}function Rs(){return Promise.reject(Error("The key system specified is not supported."))}function Ns(t){return t?Promise.reject(Error("MediaKeys not supported.")):Promise.resolve()}function Ls(){throw new TypeError("Illegal constructor.")}function Ds(){throw new TypeError("Illegal constructor.")}function Ms(e){Su=e,Au=new Uint8Array([0]).buffer,navigator.requestMediaKeySystemAccess=Os,delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=Us,t.MediaKeys=Bs,t.MediaKeySystemAccess=js}function Cs(t){var e=Su;return e?e+t.charAt(0).toUpperCase()+t.slice(1):t}function Os(t,e){try{var i=new js(t,e);return Promise.resolve(i)}catch(t){return Promise.reject(t)}}function Us(t){var e=this.mediaKeys;return e&&e!=t&&Fs(e,null),delete this.mediaKeys,(this.mediaKeys=t)&&Fs(t,this),Promise.resolve()}function js(t,e){this.a=this.keySystem=t;var i=!1;"org.w3.clearkey"==t&&(this.a="webkit-org.w3.clearkey",i=!1);for(var n=!1,r=document.getElementsByTagName("video"),a=r.length?r[0]:document.createElement("video"),s=0;s<e.length;++s){r=e[s];var o={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:r.initDataTypes,sessionTypes:["temporary"],label:r.label},u=!1;if(r.audioCapabilities)for(var h=0;h<r.audioCapabilities.length;++h){var c=r.audioCapabilities[h];if(c.contentType){var u=!0,l=c.contentType.split(";")[0];a.canPlayType(l,this.a)&&(o.audioCapabilities.push(c),n=!0)}}if(r.videoCapabilities)for(h=0;h<r.videoCapabilities.length;++h)c=r.videoCapabilities[h],c.contentType&&(u=!0,a.canPlayType(c.contentType,this.a)&&(o.videoCapabilities.push(c),n=!0));if(u||(n=a.canPlayType("video/mp4",this.a)||a.canPlayType("video/webm",this.a)),"required"==r.persistentState&&(i?(o.persistentState="required",o.sessionTypes=["persistent-license"]):n=!1),n)return void(this.b=o)}throw i="Unsupported keySystem","org.w3.clearkey"!=t&&"com.widevine.alpha"!=t||(i="None of the requested configurations were supported."),i=Error(i),i.name="NotSupportedError",i.code=DOMException.NOT_SUPPORTED_ERR,i}function Bs(t){this.g=t,this.b=null,this.a=new V,this.c=[],this.f={}}function Fs(t,e){t.b=e,q(t.a);var i=Su;e&&(H(t.a,e,i+"needkey",t.be.bind(t)),H(t.a,e,i+"keymessage",t.ae.bind(t)),H(t.a,e,i+"keyadded",t.Zd.bind(t)),H(t.a,e,i+"keyerror",t.$d.bind(t)))}function Vs(t,e){var i=t.f[e];return i||((i=t.c.shift())?(i.sessionId=e,t.f[e]=i):null)}function Hs(t,e,i){Re.call(this),this.f=t,this.h=!1,this.a=this.b=null,this.c=e,this.g=i,this.sessionId="",this.expiration=NaN,this.closed=new b,this.keyStatuses=new Gs}function Ks(t,e,i){if(t.h)return Promise.reject(Error("The session is already initialized."));t.h=!0;try{if("persistent-license"==t.g)if(i)var n=new Uint8Array(nt("LOAD_SESSION|"+i));else{var r=nt("PERSISTENT|"),a=new Uint8Array(r.byteLength+e.byteLength);a.set(new Uint8Array(r),0),a.set(new Uint8Array(e),r.byteLength),n=a}else n=new Uint8Array(e)}catch(t){return Promise.reject(t)}t.b=new b;var s=Cs("generateKeyRequest");try{t.f[s](t.c,n)}catch(e){if("InvalidStateError"!=e.name)return t.b=null,Promise.reject(e);setTimeout(function(){try{this.f[s](this.c,n)}catch(t){this.b.reject(t),this.b=null}}.bind(t),10)}return t.b}function qs(t,e){var i=t.keyStatuses;i.size=void 0==e?0:1,i.a=e,t.dispatchEvent(new X("keystatuseschange"))}function Gs(){this.size=0,this.a=void 0}function Xs(){var t=MediaSource.prototype.addSourceBuffer;MediaSource.prototype.addSourceBuffer=function(){var e=t.apply(this,arguments);return e.abort=function(){},e}}function Ys(){var t=SourceBuffer.prototype.remove;SourceBuffer.prototype.remove=function(e,i){return t.call(this,e,i-.001)}}function zs(){var t=MediaSource.prototype.endOfStream;MediaSource.prototype.endOfStream=function(){for(var e,i=0,n=0;n<this.sourceBuffers.length;++n)e=this.sourceBuffers[n],e=e.buffered.end(e.buffered.length-1),i=Math.max(i,e);if(!isNaN(this.duration)&&i<this.duration)for(this.pc=!0,n=0;n<this.sourceBuffers.length;++n)e=this.sourceBuffers[n],e.jc=!1;return t.apply(this,arguments)};var e=!1,i=MediaSource.prototype.addSourceBuffer;MediaSource.prototype.addSourceBuffer=function(){var t=i.apply(this,arguments);return t.mediaSource_=this,t.addEventListener("updateend",$s,!1),e||(this.addEventListener("sourceclose",Ws,!1),e=!0),t}}function $s(t){var e=t.target,i=e.mediaSource_;if(i.pc){for(t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),e.jc=!0,t=0;t<i.sourceBuffers.length;++t)if(0==i.sourceBuffers[t].jc)return;i.pc=!1}}function Ws(t){t=t.target;for(var e=0;e<t.sourceBuffers.length;++e)t.sourceBuffers[e].removeEventListener("updateend",$s,!1);t.removeEventListener("sourceclose",Ws,!1)}function Js(){var t=MediaSource.isTypeSupported;MediaSource.isTypeSupported=function(e){return"mp2t"!=e.split(/ *; */)[0].split("/")[1]&&t(e)}}function Qs(){var t=MediaSource.isTypeSupported,e=/^dv(?:he|av)\./;MediaSource.isTypeSupported=function(i){for(var n,r,a=i.split(/ *; */),s=a[0],o={},u=1;u<a.length;++u)n=a[u].split("="),r=n[0],n=n[1].replace(/"(.*)"/,"$1"),o[r]=n;if(!(n=o.codecs))return t(i);var h=!1,c=!1;i=n.split(",").filter(function(t){return e.test(t)?(c=!0,!1):(/^(hev|hvc)1\.2/.test(t)&&(h=!0),!0)}),c&&(h=!1),o.codecs=i.join(","),h&&(o.eotf="smpte2084");for(r in o)n=o[r],s+="; "+r+'="'+n+'"';return cast.__platform__.canDisplayType(s)}}function Zs(t){if(this.c=[],this.b=[],this.Aa=ku,t)try{t(this.la.bind(this),this.a.bind(this))}catch(t){this.a(t)}}function to(t){var e=new Zs;return e.la(void 0),e.then(function(){return t})}function eo(t){var e=new Zs;return e.a(t),e}function io(t){function e(t,e,i){t.Aa==ku&&(r[e]=i,++n==r.length&&t.la(r))}var i=new Zs;if(!t.length)return i.la([]),i;for(var n=0,r=Array(t.length),a=i.a.bind(i),s=0;s<t.length;++s)t[s]&&t[s].then?t[s].then(e.bind(null,i,s),a):e(i,s,t[s]);return i}function no(t){for(var e=new Zs,i=e.la.bind(e),n=e.a.bind(e),r=0;r<t.length;++r)t[r]&&t[r].then?t[r].then(i,n):i(t[r]);return e}function ro(t,e,i){_u.push(function(){if(i&&"function"==typeof i){try{var t=i(this.f)}catch(t){return void e.a(t)}try{var n=t&&t.then}catch(t){return void e.a(t)}t instanceof Zs?t==e?e.a(new TypeError("Chaining cycle detected")):t.then(e.la.bind(e),e.a.bind(e)):n?ao(t,n,e):e.la(t)}else 1==this.Aa?e.la(this.f):e.a(this.f)}.bind(t)),null==Iu&&(Iu=oo(so))}function ao(t,e,i){try{var n=!1;e.call(t,function(t){if(!n){n=!0;try{var e=t&&t.then}catch(t){return void i.a(t)}e?ao(t,e,i):i.la(t)}},i.a.bind(i))}catch(t){i.a(t)}}function so(){for(;_u.length;){null!=Iu&&(uo(Iu),Iu=null);var t=_u;_u=[];for(var e=0;e<t.length;++e)t[e]()}}function oo(){return 0}function uo(){}function ho(){return{droppedVideoFrames:this.webkitDroppedFrameCount,totalVideoFrames:this.webkitDecodedFrameCount,corruptedVideoFrames:0,creationTime:NaN,totalFrameDelay:0}}function co(e,i,n){return new t.TextTrackCue(e,i,n)}function lo(e,i,n){return new t.TextTrackCue(e+"-"+i+"-"+n,e,i,n)}function fo(t,e,i){this.startTime=t,this.endTime=e,this.payload=i,this.region={x:0,y:0,width:100,height:100},this.position=null,this.positionAlign=Pu,this.size=100,this.textAlign=xu,this.writingDirection=Du,this.lineInterpretation=Ou,this.line=null,this.lineHeight="",this.lineAlign=ju,this.displayAlign=Nu,this.fontSize=this.backgroundColor=this.color="",this.fontWeight=Fu,this.fontStyle=Vu,this.fontFamily="",this.textDecoration=[],this.wrapLine=!0,this.id=""}function po(){}function mo(t){var e=[];if(!t)return e;for(var i=t.childNodes,n=0;n<i.length;n++){var r="span"==i[n].nodeName&&"p"==t.nodeName;i[n].nodeType!=Node.ELEMENT_NODE||"br"==i[n].nodeName||r||(r=mo(i[n]),e=e.concat(r))}return e.length||e.push(t),e}function yo(t,e){for(var i=t.childNodes,n=0;n<i.length;n++)if("br"==i[n].nodeName&&0<n)i[n-1].textContent+="\n";else if(0<i[n].childNodes.length)yo(i[n],e);else if(e){var r=i[n].textContent.trim(),r=r.replace(/\s+/g," ");i[n].textContent=r}}function vo(t,e){for(var i=e.split(" "),n=0;n<i.length;n++)switch(i[n]){case"underline":0>t.textDecoration.indexOf("underline")&&t.textDecoration.push("underline");break;case"noUnderline":0<=t.textDecoration.indexOf("underline")&&j(t.textDecoration,"underline");break;case"lineThrough":0>t.textDecoration.indexOf("lineThrough")&&t.textDecoration.push("lineThrough");break;case"noLineThrough":0<=t.textDecoration.indexOf("lineThrough")&&j(t.textDecoration,"lineThrough");break;case"overline":0>t.textDecoration.indexOf("overline")&&t.textDecoration.push("overline");break;case"noOverline":0<=t.textDecoration.indexOf("overline")&&j(t.textDecoration,"overline")}}function go(t,e,i,n){return(t=To(t,i,n))?t:bo(e,i,n)}function bo(t,e,i){for(var n=mo(t),r=0;r<n.length;r++){var a=n[r].getAttribute(i);if(a)return a}return(t=wo(t,"style",e))?t.getAttribute(i):null}function To(t,e,i){return(t=wo(t,"style",e))?t.getAttribute(i):null}function wo(t,e,i){if(!t||1>i.length)return null;var n=null,r=t;for(t=null;r&&!(t=r.getAttribute(e))&&(r=r.parentNode)instanceof Element;);if(e=t)for(t=0;t<i.length;t++)if(i[t].getAttribute("xml:id")==e){n=i[t];break}return n}function Eo(t,e){var i=null;if(Ku.test(t))var i=Ku.exec(t),n=Number(i[1]),r=Number(i[2]),a=Number(i[3]),s=Number(i[4]),s=s+(Number(i[5])||0)/e.b,a=a+s/e.frameRate,i=a+60*r+3600*n;else qu.test(t)?i=So(qu,t):Gu.test(t)?i=So(Gu,t):Xu.test(t)?(i=Xu.exec(t),i=Number(i[1])/e.frameRate):Yu.test(t)?(i=Yu.exec(t),i=Number(i[1])/e.a):zu.test(t)&&(i=So(zu,t));return i}function So(t,e){var i=t.exec(e);return i&&""!=i[0]?(Number(i[4])||0)/1e3+(Number(i[3])||0)+60*(Number(i[2])||0)+3600*(Number(i[1])||0):null}function Ao(t,e,i,n){this.frameRate=Number(t)||30,this.b=Number(e)||1,this.a=Number(n),this.a||(this.a=t?this.frameRate*this.b:1),i&&(t=/^(\d+) (\d+)$/g.exec(i))&&(this.frameRate*=t[1]/t[2])}function ko(){this.a=new po}function Io(){}function _o(t,e){var i;(i=/^align:(start|middle|center|end|left|right)$/.exec(e))?(i=i[1],t.textAlign="middle"==i?xu:Ru[i.toUpperCase()]):(i=/^vertical:(lr|rl)$/.exec(e))?t.writingDirection="lr"==i[1]?Mu:Cu:(i=/^size:([\d\.]+)%$/.exec(e))?t.size=Number(i[1]):(i=/^position:([\d\.]+)%(?:,(line-left|line-right|center|start|end))?$/.exec(e))?(t.position=Number(i[1]),i[2]&&(i=i[2],t.positionAlign="line-left"==i||"start"==i?"line-left":"line-right"==i||"end"==i?"line-right":"center")):(i=/^line:([\d\.]+)%(?:,(start|end|center))?$/.exec(e))?(t.lineInterpretation=Uu,t.line=Number(i[1]),i[2]&&(t.lineAlign=Bu[i[2].toUpperCase()])):(i=/^line:(-?\d+)(?:,(start|end|center))?$/.exec(e))&&(t.lineInterpretation=Ou,t.line=Number(i[1]),i[2]&&(t.lineAlign=Bu[i[2].toUpperCase()]))}function Po(t){if(!(t=yn(t,/(?:(\d{1,}):)?(\d{2}):(\d{2})\.(\d{3})/g)))return null;var e=Number(t[2]),i=Number(t[3]);return 59<e||59<i?null:Number(t[4])/1e3+i+60*e+3600*(Number(t[1])||0)}function xo(){this.a=null}function Ro(t,e,i){var n,r,a;return(new li).C("payl",pi(function(t){n=tt(t)})).C("iden",pi(function(t){r=tt(t)})).C("sttg",pi(function(t){a=tt(t)})).parse(t),n?No(n,r,a,e,i):null}function No(t,e,i,n,r){if(t=new fo(n,r,t),e&&(t.id=e),i)for(e=new mn(i),i=vn(e);i;)_o(t,i),yn(e,/[ \t]+/gm),i=vn(e);return t}var Lo,Do=this;Do.$e=!0,s.prototype.getBandwidthEstimate=function(t){return 128e3>this.a?t:Math.min(a(this.b),a(this.c))},t.console&&t.console.log.bind&&(o=console.warn.bind(console)),e("shaka.util.Error",h),h.prototype.toString=function(){return"shaka.util.Error "+JSON.stringify(this,null," ")},h.Severity={RECOVERABLE:1,CRITICAL:2},h.Category={NETWORK:1,TEXT:2,MEDIA:3,MANIFEST:4,STREAMING:5,DRM:6,PLAYER:7,CAST:8,STORAGE:9},h.Code={UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,UNKNOWN_DATA_URI_ENCODING:1005,REQUEST_FILTER_ERROR:1006,RESPONSE_FILTER_ERROR:1007,INVALID_TEXT_HEADER:2e3,INVALID_TEXT_CUE:2001,UNABLE_TO_DETECT_ENCODING:2003,BAD_ENCODING:2004,INVALID_XML:2005,INVALID_MP4_TTML:2007,INVALID_MP4_VTT:2008,UNABLE_TO_EXTRACT_CUE_START_TIME:2009,BUFFER_READ_OUT_OF_BOUNDS:3e3,JS_INTEGER_OVERFLOW:3001,EBML_OVERFLOW:3002,EBML_BAD_FLOATING_POINT_SIZE:3003,MP4_SIDX_WRONG_BOX_TYPE:3004,MP4_SIDX_INVALID_TIMESCALE:3005,MP4_SIDX_TYPE_NOT_SUPPORTED:3006,WEBM_CUES_ELEMENT_MISSING:3007,WEBM_EBML_HEADER_ELEMENT_MISSING:3008,WEBM_SEGMENT_ELEMENT_MISSING:3009,WEBM_INFO_ELEMENT_MISSING:3010,WEBM_DURATION_ELEMENT_MISSING:3011,WEBM_CUE_TRACK_POSITIONS_ELEMENT_MISSING:3012,WEBM_CUE_TIME_ELEMENT_MISSING:3013,MEDIA_SOURCE_OPERATION_FAILED:3014,MEDIA_SOURCE_OPERATION_THREW:3015,VIDEO_ERROR:3016,QUOTA_EXCEEDED_ERROR:3017,UNABLE_TO_GUESS_MANIFEST_TYPE:4e3,DASH_INVALID_XML:4001,DASH_NO_SEGMENT_INFO:4002,DASH_EMPTY_ADAPTATION_SET:4003,DASH_EMPTY_PERIOD:4004,DASH_WEBM_MISSING_INIT:4005,DASH_UNSUPPORTED_CONTAINER:4006,DASH_PSSH_BAD_ENCODING:4007,DASH_NO_COMMON_KEY_SYSTEM:4008,DASH_MULTIPLE_KEY_IDS_NOT_SUPPORTED:4009,DASH_CONFLICTING_KEY_IDS:4010,UNPLAYABLE_PERIOD:4011,RESTRICTIONS_CANNOT_BE_MET:4012,NO_PERIODS:4014,HLS_PLAYLIST_HEADER_MISSING:4015,INVALID_HLS_TAG:4016,HLS_INVALID_PLAYLIST_HIERARCHY:4017,DASH_DUPLICATE_REPRESENTATION_ID:4018,HLS_MULTIPLE_MEDIA_INIT_SECTIONS_FOUND:4020,HLS_COULD_NOT_GUESS_MIME_TYPE:4021,HLS_MASTER_PLAYLIST_NOT_PROVIDED:4022,HLS_REQUIRED_ATTRIBUTE_MISSING:4023,HLS_REQUIRED_TAG_MISSING:4024,HLS_COULD_NOT_GUESS_CODECS:4025,HLS_KEYFORMATS_NOT_SUPPORTED:4026,DASH_UNSUPPORTED_XLINK_ACTUATE:4027,DASH_XLINK_DEPTH_LIMIT:4028,HLS_COULD_NOT_PARSE_SEGMENT_START_TIME:4030,INVALID_STREAMS_CHOSEN:5005,NO_RECOGNIZED_KEY_SYSTEMS:6e3,REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE:6001,FAILED_TO_CREATE_CDM:6002,FAILED_TO_ATTACH_TO_VIDEO:6003,INVALID_SERVER_CERTIFICATE:6004,FAILED_TO_CREATE_SESSION:6005,FAILED_TO_GENERATE_LICENSE_REQUEST:6006,LICENSE_REQUEST_FAILED:6007,LICENSE_RESPONSE_REJECTED:6008,ENCRYPTED_CONTENT_WITHOUT_DRM_INFO:6010,NO_LICENSE_SERVER_GIVEN:6012,OFFLINE_SESSION_REMOVED:6013,EXPIRED:6014,LOAD_INTERRUPTED:7e3,CAST_API_UNAVAILABLE:8e3,NO_CAST_RECEIVERS:8001,ALREADY_CASTING:8002,UNEXPECTED_CAST_ERROR:8003,CAST_CANCELED_BY_USER:8004,CAST_CONNECTION_TIMED_OUT:8005,CAST_RECEIVER_APP_UNAVAILABLE:8006,STORAGE_NOT_SUPPORTED:9e3,INDEXED_DB_ERROR:9001,OPERATION_ABORTED:9002,REQUESTED_ITEM_NOT_FOUND:9003,MALFORMED_OFFLINE_URI:9004,CANNOT_STORE_LIVE_OFFLINE:9005,STORE_ALREADY_IN_PROGRESS:9006,NO_INIT_DATA_FOR_OFFLINE:9007,LOCAL_PLAYER_INSTANCE_REQUIRED:9008,CONTENT_UNSUPPORTED_BY_BROWSER:9009,UNSUPPORTED_UPGRADE_REQUEST:9010};var Mo=/^(?:([^:\/?#.]+):)?(?:\/\/(?:([^\/?#]*)@)?([^\/#?]*?)(?::([0-9]+))?(?=[\/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/;Lo=c.prototype,Lo.da="",Lo.Ba="",Lo.ia="",Lo.La=null,Lo.Y="",Lo.ua="",Lo.toString=function(){var t=[],e=this.da;if(e&&t.push(m(e,Co,!0),":"),e=this.ia){t.push("//");var i=this.Ba;i&&t.push(m(i,Co,!0),"@"),t.push(encodeURIComponent(e).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),e=this.La,null!=e&&t.push(":",String(e))}return(e=this.Y)&&(this.ia&&"/"!=e.charAt(0)&&t.push("/"),t.push(m(e,"/"==e.charAt(0)?Uo:Oo,!0))),(e=this.a.toString())&&t.push("?",e),(e=this.ua)&&t.push("#",m(e,Bo)),t.join("")},Lo.resolve=function(t){var e=new c(this);"data"===e.da&&(e=new c);var i=!!t.da;i?l(e,t.da):i=!!t.Ba,i?e.Ba=t.Ba:i=!!t.ia,i?e.ia=t.ia:i=null!=t.La;var n=t.Y;if(i)f(e,t.La);else if(i=!!t.Y){if("/"!=n.charAt(0))if(this.ia&&!this.Y)n="/"+n;else{var r=e.Y.lastIndexOf("/");-1!=r&&(n=e.Y.substr(0,r+1)+n)}if(".."==n||"."==n)n="";else if(-1!=n.indexOf("./")||-1!=n.indexOf("/.")){for(var r=!n.lastIndexOf("/",0),n=n.split("/"),a=[],s=0;s<n.length;){var o=n[s++];"."==o?r&&s==n.length&&a.push(""):".."==o?((1<a.length||1==a.length&&""!=a[0])&&a.pop(),r&&s==n.length&&a.push("")):(a.push(o),r=!0)}n=a.join("/")}}return i?e.Y=n:i=""!==t.a.toString(),i?d(e,g(t.a)):i=!!t.ua,i&&(e.ua=t.ua),e};var Co=/[#\/\?@]/g,Oo=/[\#\?:]/g,Uo=/[\#\?]/g,jo=/[\#\?@]/g,Bo=/#/g;v.prototype.a=null,v.prototype.c=null,v.prototype.toString=function(){if(this.b)return this.b;if(!this.a)return"";var t,e=[];for(t in this.a)for(var i=encodeURIComponent(t),n=this.a[t],r=0;r<n.length;r++){var a=i;""!==n[r]&&(a+="="+encodeURIComponent(n[r])),e.push(a)}return this.b=e.join("&")},e("shaka.net.NetworkingEngine",L),L.RequestType={MANIFEST:0,SEGMENT:1,LICENSE:2,APP:3},L.PluginPriority={af:1,cf:2,Ye:3};var Fo={};L.registerScheme=D,L.unregisterScheme=function(t){delete Fo[t]},L.prototype.me=function(t){this.b.push(t)},L.prototype.registerRequestFilter=L.prototype.me,L.prototype.Re=function(t){var e=this.b;0<=(t=e.indexOf(t))&&e.splice(t,1)},L.prototype.unregisterRequestFilter=L.prototype.Re,L.prototype.cd=function(){this.b=[]},L.prototype.clearAllRequestFilters=L.prototype.cd,L.prototype.ne=function(t){this.c.push(t)},L.prototype.registerResponseFilter=L.prototype.ne,L.prototype.Se=function(t){var e=this.c;0<=(t=e.indexOf(t))&&e.splice(t,1)},L.prototype.unregisterResponseFilter=L.prototype.Se,L.prototype.dd=function(){this.c=[]},L.prototype.clearAllResponseFilters=L.prototype.dd,L.prototype.destroy=function(){this.f=!0,this.b=[],this.c=[];for(var t=[],e=0;e<this.a.length;++e)t.push(this.a[e].catch(x));return Promise.all(t)},L.prototype.destroy=L.prototype.destroy,L.prototype.request=function(t,e,i){var n=i||function(){return!1};if(this.f)return Promise.reject();e.method=e.method||"GET",e.headers=e.headers||{},e.retryParameters=e.retryParameters?I(e.retryParameters):E(),e.uris=I(e.uris);var r=Date.now(),a=Promise.resolve();return this.b.forEach(function(i){a=a.then(i.bind(null,t,e))}),a=a.catch(function(t){throw new h(2,1,1006,t)}),a=a.then(function(){var a=Date.now()-r,s=new T(e.retryParameters,!1,i);return w(s).then(function(){return C(this,t,e,s,0,a,n)}.bind(this))}.bind(this)),this.a.push(a),a.then(function(e){return 0<=this.a.indexOf(a)&&this.a.splice(this.a.indexOf(a),1),this.g&&!e.fromCache&&1==t&&this.g(e.timeMs,e.data.byteLength),e}.bind(this)).catch(function(t){return t&&(t.severity=2),0<=this.a.indexOf(a)&&this.a.splice(this.a.indexOf(a),1),Promise.reject(t)}.bind(this))},L.prototype.request=L.prototype.request,F.prototype.push=function(t,e){this.a.hasOwnProperty(t)?this.a[t].push(e):this.a[t]=[e]},F.prototype.get=function(t){return(t=this.a[t])?t.slice():null},F.prototype.remove=function(t,e){var i=this.a[t];if(i)for(var n=0;n<i.length;++n)i[n]==e&&(i.splice(n,1),--n)},V.prototype.destroy=function(){return q(this),this.a=null,Promise.resolve()},V.prototype.ga=function(t,e){if(this.a)for(var i=this.a.get(e)||[],n=0;n<i.length;++n){var r=i[n];r.target==t&&(r.ga(),this.a.remove(e,r))}},G.prototype.ga=function(){this.target.removeEventListener(this.type,this.a,!1),this.a=this.target=null},X.prototype.preventDefault=function(){this.cancelable&&(this.defaultPrevented=!0)},X.prototype.stopImmediatePropagation=function(){this.a=!0},X.prototype.stopPropagation=function(){};var Vo=1/15,Ho={codecs:"codecs",frameRate:"framerate",bandwidth:"bitrate",width:"width",height:"height",channelsCount:"channels"};e("shaka.util.StringUtils.fromUTF8",tt),e("shaka.util.StringUtils.fromUTF16",et),e("shaka.util.StringUtils.fromBytesAutoDetect",it),e("shaka.util.StringUtils.toUTF8",nt),at.prototype.cancel=function(){null!=this.a&&(clearTimeout(this.a),this.a=null)},e("shaka.util.Uint8ArrayUtils.toBase64",ut),e("shaka.util.Uint8ArrayUtils.fromBase64",ht),e("shaka.util.Uint8ArrayUtils.fromHex",ct),e("shaka.util.Uint8ArrayUtils.toHex",lt),e("shaka.util.Uint8ArrayUtils.equal",ft),e("shaka.util.Uint8ArrayUtils.concat",dt),Lo=pt.prototype,Lo.destroy=function(){this.c=!0;var t=[];return this.a.forEach(function(e){e=e.ea.close().catch(x);var i=new Promise(function(t){setTimeout(t,1e3)});t.push(Promise.race([e,i]))}),this.i.reject(),this.f&&t.push(this.f.destroy()),this.l&&t.push(this.l.setMediaKeys(null).catch(x)),this.w&&(this.w.cancel(),this.w=null),this.F&&(this.F.cancel(),this.F=null),this.f=this.l=this.j=this.u=this.b=null,this.a=[],this.m=[],this.s=this.g=this.h=null,Promise.all(t)},Lo.configure=function(t){this.h=t},Lo.init=function(t,e){var i={},n=[];return this.ha=e,this.m=t.offlineSessionIds,bt(this,t,e||0<t.offlineSessionIds.length,i,n),n.length?Tt(this,i,n):(this.K=!0,Promise.resolve())},Lo.keySystem=function(){return this.b?this.b.keySystem:""},Lo.ob=function(){var t=this.a.map(function(t){return t=t.ea.expiration,isNaN(t)?1/0:t});return Math.min.apply(Math,t)},Lo.Ed=function(t){for(var e=new Uint8Array(t.initData),i=0;i<this.a.length;++i)if(ft(e,this.a[i].initData))return;It(this,t.initDataType,e)},Lo.Dc=function(t){this.h.delayLicenseRequestUntilPlayed&&this.l.paused&&!this.W?this.J.push(t):_t(this,t)},Lo.xc=function(t){t=t.target;var e;for(e=0;e<this.a.length&&this.a[e].ea!=t;++e);if(e!=this.a.length){var i=!1;t.keyStatuses.forEach(function(t,n){if("string"==typeof n){var r=n;n=t,t=r}if("com.microsoft.playready"==this.b.keySystem&&16==n.byteLength){var r=new DataView(n),a=r.getUint32(0,!0),s=r.getUint16(4,!0),o=r.getUint16(6,!0);r.setUint32(0,a,!1),r.setUint16(4,s,!1),r.setUint16(6,o,!1)}"com.microsoft.playready"==this.b.keySystem&&"status-pending"==t&&(t="usable"),"status-pending"!=t&&(this.a[e].loaded=!0,this.a.every(function(t){return t.loaded})&&this.i.resolve()),"expired"==t&&(i=!0),r=lt(new Uint8Array(n)),this.A[r]=t}.bind(this));var n=t.expiration-Date.now();(0>n||i&&1e3>n)&&!this.a[e].ma&&(this.a.splice(e,1),t.close()),st(this.F,.5)}},Lo.le=function(){function t(t,e){return"expired"==e}!$(this.A)&&J(this.A,t)&&this.g(new h(2,6,6014)),this.s.Pb(this.A)},Lo.Pd=function(){for(var t=0;t<this.J.length;t++)_t(this,this.J[t]);this.W=!0,this.J=[]},Lo.je=function(){this.a.forEach(function(t){var e=t.Ob,i=t.ea.expiration;isNaN(i)&&(i=1/0),i!=e&&(this.s.onExpirationUpdated(t.ea.sessionId,i),t.Ob=i)}.bind(this))},Ot.prototype.destroy=function(){return this.a.dispose(),this.a=null,Promise.resolve()},Ot.prototype.h=function(t){var e=new Uint8Array(t.data.byteLength+t.initSegment.byteLength);e.set(t.initSegment,0),e.set(t.data,t.initSegment.byteLength),this.c.push(e)},Ot.prototype.g=function(){var t=dt.apply(null,this.c);this.b.resolve(t)};var Ko={};e("shaka.text.TextEngine.registerParser",function(t,e){Ko[t]=e}),e("shaka.text.TextEngine.unregisterParser",function(t){delete Ko[t]}),Bt.prototype.destroy=function(){return this.f=this.c=null,Promise.resolve()},Bt.prototype.Ae=function(t){this.f=t},Bt.prototype.setDisplayer=Bt.prototype.Ae,Bt.prototype.Gb=function(t){var e={periodStart:0,segmentStart:0,segmentEnd:0};try{return this.c.parseMedia(new Uint8Array(t),e)[0].startTime}catch(t){throw new h(2,2,2009,t)}},Bt.prototype.remove=function(t,e){return Promise.resolve().then(function(){!this.f||!this.f.remove(t,e)||null==this.a||e<=this.a||t>=this.b||(t<=this.a&&e>=this.b?this.a=this.b=null:t<=this.a&&e<this.b?this.a=e:t>this.a&&e>=this.b&&(this.b=t))}.bind(this))},Lo=Vt.prototype,Lo.destroy=function(){this.j=!0;var t,e=[];for(t in this.c){var i=this.c[t],n=i[0];for(this.c[t]=i.slice(0,1),n&&e.push(n.p.catch(x)),n=1;n<i.length;++n)i[n].p.catch(x),i[n].p.reject()}this.a&&e.push(this.a.destroy());for(t in this.h)e.push(this.h[t].destroy());return Promise.all(e).then(function(){this.i.destroy(),this.l=this.a=this.f=this.g=this.i=null,this.b={},this.h={},this.c={}}.bind(this))},Lo.init=function(e){for(var i in e){var n=e[i],n=Z(n.mimeType,n.codecs);"text"==i?Kt(this,n):(!MediaSource.isTypeSupported(n)&&t.muxjs&&"mp2t"==n.split(";")[0].split("/")[1]&&MediaSource.isTypeSupported(Ut(i,n))&&(this.h[i]=new Ot,n=Ut(i,n)),n=this.f.addSourceBuffer(n),H(this.i,n,"error",this.Me.bind(this,i)),H(this.i,n,"updateend",this.Ja.bind(this,i)),this.b[i]=n,this.c[i]=[])}},Lo.Cb=function(){var t=this.a&&null!=this.a.a?[{start:this.a.a,end:this.a.b}]:[];return{total:Ct(this.g.buffered),audio:Ct(Gt(this,"audio")),video:Ct(Gt(this,"video")),text:t}},Lo.remove=function(t,e,i){return"text"==t?this.a.remove(e,i):$t(this,t,this.Tc.bind(this,t,e,i))},Lo.endOfStream=function(t){return Wt(this,function(){t?this.f.endOfStream(t):this.f.endOfStream()}.bind(this))},Lo.fa=function(t){return Wt(this,function(){this.f.duration=t}.bind(this))},Lo.T=function(){return this.f.duration},Lo.Sc=function(t,e){this.b[t].appendBuffer(e)},Lo.Tc=function(t,e,i){i<=e?this.Ja(t):this.b[t].remove(e,i)},Lo.Zc=function(t){var e=this.b[t].appendWindowStart,i=this.b[t].appendWindowEnd;this.b[t].abort(),this.b[t].appendWindowStart=e,this.b[t].appendWindowEnd=i,this.Ja(t)},Lo.hd=function(t){this.g.currentTime-=.001,this.Ja(t)},Lo.Ce=function(t,e){this.b[t].timestampOffset=e,this.Ja(t)},Lo.ze=function(t,e,i){this.b[t].appendWindowStart=0,this.b[t].appendWindowEnd=i,this.b[t].appendWindowStart=e,this.Ja(t)},Lo.Me=function(t){this.c[t][0].p.reject(new h(2,3,3014,this.g.error?this.g.error.code:0))},Lo.Ja=function(t){var e=this.c[t][0];e&&(e.p.resolve(),Jt(this,t))};var qo=1,Go=2,Xo={aar:"aa",abk:"ab",afr:"af",aka:"ak",alb:"sq",amh:"am",ara:"ar",arg:"an",arm:"hy",asm:"as",ava:"av",ave:"ae",aym:"ay",aze:"az",bak:"ba",bam:"bm",baq:"eu",bel:"be",ben:"bn",bih:"bh",bis:"bi",bod:"bo",bos:"bs",bre:"br",bul:"bg",bur:"my",cat:"ca",ces:"cs",cha:"ch",che:"ce",chi:"zh",chu:"cu",chv:"cv",cor:"kw",cos:"co",cre:"cr",cym:"cy",cze:"cs",dan:"da",deu:"de",div:"dv",dut:"nl",dzo:"dz",ell:"el",eng:"en",epo:"eo",est:"et",eus:"eu",ewe:"ee",fao:"fo",fas:"fa",fij:"fj",fin:"fi",fra:"fr",fre:"fr",fry:"fy",ful:"ff",geo:"ka",ger:"de",gla:"gd",gle:"ga",glg:"gl",glv:"gv",gre:"el",grn:"gn",guj:"gu",hat:"ht",hau:"ha",heb:"he",her:"hz",hin:"hi",hmo:"ho",hrv:"hr",hun:"hu",hye:"hy",ibo:"ig",ice:"is",ido:"io",iii:"ii",iku:"iu",ile:"ie",ina:"ia",ind:"id",ipk:"ik",isl:"is",ita:"it",jav:"jv",jpn:"ja",kal:"kl",kan:"kn",kas:"ks",kat:"ka",kau:"kr",kaz:"kk",khm:"km",kik:"ki",kin:"rw",kir:"ky",kom:"kv",kon:"kg",kor:"ko",kua:"kj",kur:"ku",lao:"lo",lat:"la",lav:"lv",lim:"li",lin:"ln",lit:"lt",ltz:"lb",lub:"lu",lug:"lg",mac:"mk",mah:"mh",mal:"ml",mao:"mi",mar:"mr",may:"ms",mkd:"mk",mlg:"mg",mlt:"mt",mon:"mn",mri:"mi",msa:"ms",mya:"my",nau:"na",nav:"nv",nbl:"nr",nde:"nd",ndo:"ng",nep:"ne",nld:"nl",nno:"nn",nob:"nb",nor:"no",nya:"ny",oci:"oc",oji:"oj",ori:"or",orm:"om",oss:"os",pan:"pa",per:"fa",pli:"pi",pol:"pl",por:"pt",pus:"ps",que:"qu",roh:"rm",ron:"ro",rum:"ro",run:"rn",rus:"ru",sag:"sg",san:"sa",sin:"si",slk:"sk",slo:"sk",slv:"sl",sme:"se",smo:"sm",sna:"sn",snd:"sd",som:"so",sot:"st",spa:"es",sqi:"sq",srd:"sc",srp:"sr",ssw:"ss",sun:"su",swa:"sw",swe:"sv",tah:"ty",tam:"ta",tat:"tt",tel:"te",tgk:"tg",tgl:"tl",tha:"th",tib:"bo",tir:"ti",ton:"to",tsn:"tn",tso:"ts",tuk:"tk",tur:"tr",twi:"tw",uig:"ug",ukr:"uk",urd:"ur",uzb:"uz",ven:"ve",vie:"vi",vol:"vo",wel:"cy",wln:"wa",wol:"wo",xho:"xh",yid:"yi",yor:"yo",zha:"za",zho:"zh",zul:"zu"};e("shaka.abr.SimpleAbrManager",we),we.prototype.stop=function(){this.h=null,this.c=!1,this.g=[],this.f=null},we.prototype.stop=we.prototype.stop,we.prototype.init=function(t){this.h=t},we.prototype.init=we.prototype.init,we.prototype.chooseVariant=function(){var t=Ee(this.a.restrictions,this.g),e=this.b.getBandwidthEstimate(this.a.defaultBandwidthEstimate);if(this.g.length&&!t.length)throw new h(2,4,4012);for(var i=t[0]||null,n=0;n<t.length;++n){var r=t[n],a=(t[n+1]||{bandwidth:1/0}).bandwidth/this.a.bandwidthUpgradeTarget;e>=r.bandwidth/this.a.bandwidthDowngradeTarget&&e<=a&&(i=r)}return this.f=Date.now(),i},we.prototype.chooseVariant=we.prototype.chooseVariant,we.prototype.enable=function(){this.c=!0},we.prototype.enable=we.prototype.enable,we.prototype.disable=function(){this.c=!1},we.prototype.disable=we.prototype.disable,we.prototype.segmentDownloaded=function(t,e){var i=this.b;if(!(16e3>e)){var n=8e3*e/t,a=t/1e3;i.a+=e,r(i.b,a,n),r(i.c,a,n)}if(null!=this.f&&this.c)t:{if(this.i){if(Date.now()-this.f<1e3*this.a.switchInterval)break t}else{if(!(128e3<=this.b.a))break t;this.i=!0}i=this.chooseVariant(),this.b.getBandwidthEstimate(this.a.defaultBandwidthEstimate),this.h(i)}},we.prototype.segmentDownloaded=we.prototype.segmentDownloaded,we.prototype.getBandwidthEstimate=function(){return this.b.getBandwidthEstimate(this.a.defaultBandwidthEstimate)},we.prototype.getBandwidthEstimate=we.prototype.getBandwidthEstimate,we.prototype.setVariants=function(t){this.g=t},we.prototype.setVariants=we.prototype.setVariants,we.prototype.configure=function(t){this.a=t},we.prototype.configure=we.prototype.configure;var Yo="ended play playing pause pausing ratechange seeked seeking timeupdate volumechange".split(" "),zo="buffered currentTime duration ended loop muted paused playbackRate seeking videoHeight videoWidth volume".split(" "),$o=["loop","playbackRate"],Wo=["pause","play"],Jo="adaptation buffering emsg error loading streaming texttrackvisibility timelineregionadded timelineregionenter timelineregionexit trackschanged unloading".split(" "),Qo={drmInfo:20,getAudioLanguages:2,getAudioLanguagesAndRoles:2,getBufferedInfo:2,getConfiguration:2,getExpiration:2,getManifestUri:2,getPlaybackRate:2,getTextLanguages:2,getTextLanguagesAndRoles:2,getTextTracks:2,getStats:5,getVariantTracks:2,isAudioOnly:10,isBuffering:1,isInProgress:1,isLive:10,isTextTrackVisible:1,keySystem:10,seekRange:1},Zo={getPlayheadTimeAsDate:1,getPresentationStartTimeAsDate:20},tu=[["getConfiguration","configure"]],eu=[["isTextTrackVisible","setTextTrackVisibility"]],iu="addTextTrack cancelTrickPlay configure resetConfiguration retryStreaming selectAudioLanguage selectTextLanguage selectTextTrack selectVariantTrack setTextTrackVisibility trickPlay".split(" "),nu=["load","unload"],ru=!1,au=null;Lo=Ie.prototype,Lo.destroy=function(){return Pe(this),au&&_e(this),this.F=this.A=this.g=null,this.b=this.h=!1,this.m=this.l=this.f=this.c=this.a=this.i=null,Promise.resolve()},Lo.X=function(){return this.b},Lo.Ub=function(){return this.w},Lo.init=function(){if(t.chrome&&chrome.cast&&chrome.cast.isAvailable){delete t.__onGCastApiAvailable,this.h=!0,this.g();var e=new chrome.cast.SessionRequest(this.J),e=new chrome.cast.ApiConfig(e,this.wc.bind(this),this.Rd.bind(this),"origin_scoped");chrome.cast.initialize(e,function(){},function(){}),ru&&setTimeout(this.g.bind(this),20),(e=au)&&e.status!=chrome.cast.SessionStatus.STOPPED?this.wc(e):au=null}else t.__onGCastApiAvailable=function(t){t&&this.init()}.bind(this)},Lo.Xb=function(t){this.i=t,this.b&&xe({type:"appData",appData:this.i})},Lo.cast=function(t){return this.h?ru?this.b?Promise.reject(new h(1,8,8002)):(this.f=new b,chrome.cast.requestSession(this.Rb.bind(this,t),this.uc.bind(this)),this.f):Promise.reject(new h(1,8,8001)):Promise.reject(new h(1,8,8e3))},Lo.nb=function(){this.b&&(Pe(this),au&&(_e(this),au.stop(function(){},function(){}),au=null))},Lo.get=function(t,e){if("video"==t){if(0<=Wo.indexOf(e))return this.Ic.bind(this,t,e)}else if("player"==t){if(Zo[e]&&!this.get("player","isLive")())return function(){};if(0<=iu.indexOf(e))return this.Ic.bind(this,t,e);if(0<=nu.indexOf(e))return this.pe.bind(this,t,e);if(Qo[e])return this.Fc.bind(this,t,e)}return this.Fc(t,e)},Lo.set=function(t,e,i){this.a[t][e]=i,xe({type:"set",targetName:t,property:e,value:i})},Lo.Rb=function(t,e){au=e,e.addUpdateListener(this.l),e.addMessageListener("urn:x-cast:com.google.shaka.v2",this.m),this.vc(),xe({type:"init",initState:t,appData:this.i}),this.f.resolve()},Lo.uc=function(t){var e=8003;switch(t.code){case"cancel":e=8004;break;case"timeout":e=8005;break;case"receiver_unavailable":e=8006}this.f.reject(new h(2,8,e,t))},Lo.Fc=function(t,e){return this.a[t][e]},Lo.Ic=function(t,e){xe({type:"call",targetName:t,methodName:e,args:Array.prototype.slice.call(arguments,2)})},Lo.pe=function(t,e){var i=Array.prototype.slice.call(arguments,2),n=new b,r=this.s.toString();return this.s++,this.c[r]=n,xe({type:"asyncCall",targetName:t,methodName:e,args:i,id:r}),n},Lo.wc=function(t){var e=this.u();this.f=new b,this.j=!0,this.Rb(e,t)},Lo.Rd=function(t){ru="available"==t,this.g()},Lo.vc=function(){var t=!!au&&"connected"==au.status;if(this.b&&!t){this.F();for(var e in this.a)this.a[e]={};Pe(this)}this.w=(this.b=t)?au.receiver.friendlyName:"",this.g()},Lo.Ld=function(t,e){var i=Ae(e);switch(i.type){case"event":var n=i.targetName,r=i.event;this.A(n,new X(r.type,r));break;case"update":r=i.update;for(n in r){var i=this.a[n]||{};for(a in r[n])i[a]=r[n][a]}this.j&&(this.K(),this.j=!1);break;case"asyncComplete":n=i.id;var a=i.error;if(i=this.c[n],delete this.c[n],i)if(a){n=new h(a.severity,a.category,a.code);for(r in a)n[r]=a[r];i.reject(n)}else i.resolve()}},Re.prototype.addEventListener=function(t,e){this.xb.push(t,e)},Re.prototype.removeEventListener=function(t,e){this.xb.remove(t,e)},Re.prototype.dispatchEvent=function(t){for(var e=this.xb.get(t.type)||[],i=0;i<e.length;++i){t.target=this.eb,t.currentTarget=this.eb;var n=e[i];try{n.handleEvent?n.handleEvent(t):n.call(this,t)}catch(t){}if(t.a)break}return t.defaultPrevented},i(Ne),e("shaka.cast.CastProxy",Ne),Ne.prototype.destroy=function(t){return t&&this.a&&this.a.nb(),t=[this.i?this.i.destroy():null,this.b?this.b.destroy():null,this.a?this.a.destroy():null],this.a=this.i=this.j=this.h=this.b=this.c=null,Promise.all(t)},Ne.prototype.destroy=Ne.prototype.destroy,Ne.prototype.xd=function(){return this.h},Ne.prototype.getVideo=Ne.prototype.xd,Ne.prototype.od=function(){return this.j},Ne.prototype.getPlayer=Ne.prototype.od,Ne.prototype.$c=function(){return!!this.a&&(this.a.h&&ru)},Ne.prototype.canCast=Ne.prototype.$c,Ne.prototype.X=function(){return!!this.a&&this.a.X()},Ne.prototype.isCasting=Ne.prototype.X,Ne.prototype.Ub=function(){return this.a?this.a.Ub():""},Ne.prototype.receiverName=Ne.prototype.Ub,Ne.prototype.cast=function(){var t=this.mc();return this.a.cast(t).then(function(){return this.b.vb()}.bind(this))},Ne.prototype.cast=Ne.prototype.cast,Ne.prototype.Xb=function(t){this.a.Xb(t)},Ne.prototype.setAppData=Ne.prototype.Xb,Ne.prototype.Pe=function(){var t=this.a;if(t.b){var e=t.u();chrome.cast.requestSession(t.Rb.bind(t,e),t.uc.bind(t))}},Ne.prototype.suggestDisconnect=Ne.prototype.Pe,Ne.prototype.nb=function(){this.a.nb()},Ne.prototype.forceDisconnect=Ne.prototype.nb,Lo=Ne.prototype,Lo.mc=function(){var t={video:{},player:{},playerAfterLoad:{},manifest:this.b.nc(),startTime:null};return this.c.pause(),$o.forEach(function(e){t.video[e]=this.c[e]}.bind(this)),this.c.ended||(t.startTime=this.c.currentTime),tu.forEach(function(e){var i=e[1];e=this.b[e[0]](),t.player[i]=e}.bind(this)),eu.forEach(function(e){var i=e[1];e=this.b[e[0]](),t.playerAfterLoad[i]=e}.bind(this)),t},Lo.He=function(){this.dispatchEvent(new X("caststatuschanged"))},Lo.Ie=function(){this.f.dispatchEvent(new X(this.h.paused?"pause":"play"))},Lo.Ke=function(){tu.forEach(function(t){var e=t[1];t=this.a.get("player",t[0])(),this.b[e](t)}.bind(this));var t=this.a.get("player","getManifestUri")(),e=this.a.get("video","ended"),i=Promise.resolve(),n=this.c.autoplay,r=null;e||(r=this.a.get("video","currentTime")),t&&(this.c.autoplay=!1,i=this.b.load(t,r),i.catch(function(t){this.b.dispatchEvent(new X("error",{detail:t}))}.bind(this)));var a={};$o.forEach(function(t){a[t]=this.a.get("video",t)}.bind(this)),i.then(function(){$o.forEach(function(t){this.c[t]=a[t]}.bind(this)),eu.forEach(function(t){var e=t[1];t=this.a.get("player",t[0])(),this.b[e](t)}.bind(this)),this.c.autoplay=n,t&&this.c.play()}.bind(this))},Lo.Ve=function(t){if("addEventListener"==t)return this.f.addEventListener.bind(this.f);if("removeEventListener"==t)return this.f.removeEventListener.bind(this.f);if(this.a.X()&&!Object.keys(this.a.a.video).length){var e=this.c[t];if("function"!=typeof e)return e}return this.a.X()?this.a.get("video",t):(e=this.c[t],"function"==typeof e&&(e=e.bind(this.c)),e)},Lo.Xe=function(t,e){this.a.X()?this.a.set("video",t,e):this.c[t]=e},Lo.We=function(t){this.a.X()||this.f.dispatchEvent(new X(t.type,t))},Lo.ge=function(t){return"addEventListener"==t?this.g.addEventListener.bind(this.g):"removeEventListener"==t?this.g.removeEventListener.bind(this.g):"getMediaElement"==t?function(){return this.h}.bind(this):"getNetworkingEngine"==t?this.b.oc.bind(this.b):"getManifest"==t?this.a.X()?function(){return null}:this.b.Ea.bind(this.b):this.a.X()&&!Object.keys(this.a.a.video).length&&Qo[t]||!this.a.X()?(t=this.b[t],t.bind(this.b)):this.a.get("player",t)},Lo.he=function(t){this.a.X()||this.g.dispatchEvent(t)},Lo.Je=function(t,e){this.a.X()&&("video"==t?this.f.dispatchEvent(e):"player"==t&&this.g.dispatchEvent(e))},i(De),e("shaka.cast.CastReceiver",De),De.prototype.isConnected=function(){return this.l},De.prototype.isConnected=De.prototype.isConnected,De.prototype.zd=function(){return this.f},De.prototype.isIdle=De.prototype.zd,De.prototype.destroy=function(){var e=this.b?this.b.destroy():Promise.resolve();return null!=this.i&&t.clearTimeout(this.i),this.s=this.m=this.b=this.a=null,this.l=!1,this.f=!0,this.i=this.h=this.c=null,e.then(function(){cast.receiver.CastReceiverManager.getInstance().stop()})},De.prototype.destroy=De.prototype.destroy,Lo=De.prototype,Lo.Cc=function(){this.l=!!cast.receiver.CastReceiverManager.getInstance().getSenders().length,Ce(this)},Lo.Gc=function(t,e){this.b&&(this.Sb(),Ue(this,{type:"event",targetName:t,event:e},this.c))},Lo.Sb=function(){null!=this.i&&t.clearTimeout(this.i),this.i=t.setTimeout(this.Sb.bind(this),500);var e={video:{},player:{}};if(zo.forEach(function(t){e.video[t]=this.a[t]}.bind(this)),this.b.P())for(var i in Zo){var n=Zo[i];this.g%n||(e.player[i]=this.b[i]())}for(i in Qo)n=Qo[i],this.g%n||(e.player[i]=this.b[i]());(n=cast.receiver.CastReceiverManager.getInstance().getSystemVolume())&&(e.video.volume=n.level,e.video.muted=n.muted),this.j&&(this.g+=1),Ue(this,{type:"update",update:e},this.c)},Lo.gd=function(){var t=cast.receiver.CastReceiverManager.getInstance().getSystemVolume();t&&Ue(this,{type:"update",update:{video:{volume:t.level,muted:t.muted}}},this.c),Ue(this,{type:"event",targetName:"video",event:{type:"volumechange"}},this.c)},Lo.Ud=function(t){var e=Ae(t.data);switch(e.type){case"init":this.g=0,this.j=!1,Oe(this,e.initState,e.appData),this.Sb();break;case"appData":this.s(e.appData);break;case"set":var i=e.targetName,n=e.property,r=e.value;if("video"==i){if(e=cast.receiver.CastReceiverManager.getInstance(),"volume"==n){e.setSystemVolumeLevel(r);break}if("muted"==n){e.setSystemVolumeMuted(r);break}}this.m[i][n]=r;break;case"call":i=e.targetName,n=e.methodName,r=e.args,i=this.m[i],i[n].apply(i,r);break;case"asyncCall":i=e.targetName,n=e.methodName,"player"==i&&"load"==n&&(this.g=0,this.j=!1),r=e.args,e=e.id,t=t.senderId,i=this.m[i],i[n].apply(i,r).then(this.Nc.bind(this,t,e,null),this.Nc.bind(this,t,e))}},Lo.Gd=function(t){var e=Ae(t.data);switch(e.type){case"PLAY":this.a.play(),je(this,0);break;case"PAUSE":this.a.pause(),je(this,0);break;case"SEEK":t=e.currentTime;var i=e.resumeState;null!=t&&(this.a.currentTime=Number(t)),i&&"PLAYBACK_START"==i?(this.a.play(),je(this,0)):i&&"PLAYBACK_PAUSE"==i&&(this.a.pause(),je(this,0));break;case"STOP":this.b.vb().then(function(){je(this,0)}.bind(this));break;case"GET_STATUS":je(this,Number(e.requestId));break;case"VOLUME":i=e.volume,t=i.level;var i=i.muted,n=this.a.volume,r=this.a.muted;null!=t&&(this.a.volume=Number(t)),null!=i&&(this.a.muted=i),n==this.a.volume&&r==this.a.muted||je(this,0);break;case"LOAD":this.g=0,this.j=!1,i=e.media.contentId,t=e.currentTime;var a=this.u(i);this.a.autoplay=!0,this.b.load(a,t).then(function(){je(this,0,{contentId:a,streamType:this.b.P()?"LIVE":"BUFFERED",contentType:""})}.bind(this)).catch(function(t){var i="LOAD_FAILED";7==t.category&&7e3==t.code&&(i="LOAD_CANCELLED"),Ue(this,{requestId:Number(e.requestId),type:i},this.h)}.bind(this));break;default:Ue(this,{requestId:Number(e.requestId),type:"INVALID_REQUEST",reason:"INVALID_COMMAND"},this.h)}},Lo.Nc=function(t,e,i){Ue(this,{type:"asyncComplete",id:e,error:i},this.c,t)};var su={IDLE:"IDLE",Xc:"PLAYING",Uc:"BUFFERING",Wc:"PAUSED"},ou={"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"};e("shaka.media.InitSegmentReference",oi),oi.prototype.Ab=function(){return this.a()},oi.prototype.createUris=oi.prototype.Ab,oi.prototype.Fb=function(){return this.N},oi.prototype.getStartByte=oi.prototype.Fb,oi.prototype.Db=function(){return this.D},oi.prototype.getEndByte=oi.prototype.Db,e("shaka.media.SegmentReference",ui),ui.prototype.U=function(){return this.position},ui.prototype.getPosition=ui.prototype.U,ui.prototype.Gb=function(){return this.startTime},ui.prototype.getStartTime=ui.prototype.Gb,ui.prototype.ld=function(){return this.endTime},ui.prototype.getEndTime=ui.prototype.ld,ui.prototype.Ab=function(){return this.a()},ui.prototype.createUris=ui.prototype.Ab,ui.prototype.Fb=function(){return this.N},ui.prototype.getStartByte=ui.prototype.Fb,ui.prototype.Db=function(){return this.D},ui.prototype.getEndByte=ui.prototype.Db,e("shaka.util.DataViewReader",hi);var uu=1;hi.Endianness={Ze:0,bf:uu},hi.prototype.ca=function(){return this.a<this.G.byteLength},hi.prototype.hasMoreData=hi.prototype.ca,hi.prototype.U=function(){return this.a},hi.prototype.getPosition=hi.prototype.U,hi.prototype.md=function(){return this.G.byteLength},hi.prototype.getLength=hi.prototype.md,hi.prototype.$=function(){try{var t=this.G.getUint8(this.a)}catch(t){ci()}return this.a+=1,t},hi.prototype.readUint8=hi.prototype.$,hi.prototype.Xa=function(){try{var t=this.G.getUint16(this.a,this.b)}catch(t){ci()}return this.a+=2,t},hi.prototype.readUint16=hi.prototype.Xa,hi.prototype.B=function(){try{var t=this.G.getUint32(this.a,this.b)}catch(t){ci()}return this.a+=4,t},hi.prototype.readUint32=hi.prototype.B,hi.prototype.Hc=function(){try{var t=this.G.getInt32(this.a,this.b)}catch(t){ci()}return this.a+=4,t},hi.prototype.readInt32=hi.prototype.Hc,hi.prototype.Na=function(){try{if(this.b)var t=this.G.getUint32(this.a,!0),e=this.G.getUint32(this.a+4,!0);else e=this.G.getUint32(this.a,!1),t=this.G.getUint32(this.a+4,!1)}catch(t){ci()}if(2097151<e)throw new h(2,3,3001);return this.a+=8,e*Math.pow(2,32)+t},hi.prototype.readUint64=hi.prototype.Na,hi.prototype.Ma=function(t){this.a+t>this.G.byteLength&&ci();var e=new Uint8Array(this.G.buffer,this.G.byteOffset+this.a,t);return this.a+=t,new Uint8Array(e)},hi.prototype.readBytes=hi.prototype.Ma,hi.prototype.H=function(t){this.a+t>this.G.byteLength&&ci(),this.a+=t},hi.prototype.skip=hi.prototype.H,hi.prototype.Lc=function(t){this.a<t&&ci(),this.a-=t},hi.prototype.rewind=hi.prototype.Lc,hi.prototype.seek=function(t){(0>t||t>this.G.byteLength)&&ci(),this.a=t},hi.prototype.seek=hi.prototype.seek,hi.prototype.Tb=function(){for(var t=this.a;this.ca()&&this.G.getUint8(this.a);)this.a+=1;return t=new Uint8Array(this.G.buffer,this.G.byteOffset+t,this.a-t),this.a+=1,tt(t)},hi.prototype.readTerminatedString=hi.prototype.Tb,e("shaka.util.Mp4Parser",li),li.prototype.C=function(t,e){var i=mi(t);return this.c[i]=0,this.b[i]=e,this},li.prototype.box=li.prototype.C,li.prototype.ba=function(t,e){var i=mi(t);return this.c[i]=1,this.b[i]=e,this},li.prototype.fullBox=li.prototype.ba,li.prototype.stop=function(){this.a=!0},li.prototype.stop=li.prototype.stop,li.prototype.parse=function(t,e){var i=new Uint8Array(t),i=new hi(new DataView(i.buffer,i.byteOffset,i.byteLength),0);for(this.a=!1;i.ca()&&!this.a;)this.rb(0,i,e)},li.prototype.parse=li.prototype.parse,li.prototype.rb=function(t,e,i){var n=e.U(),r=e.B(),a=e.B();switch(r){case 0:r=e.G.byteLength-n;break;case 1:r=e.Na()}var s=this.b[a];if(s){var o=null,u=null;1==this.c[a]&&(u=e.B(),o=u>>>24,u&=16777215),a=n+r,i&&a>e.G.byteLength&&(a=e.G.byteLength),a-=e.U(),e=0<a?e.Ma(a):new Uint8Array(0),e=new hi(new DataView(e.buffer,e.byteOffset,e.byteLength),0),s({oa:this,Ec:i||!1,version:o,lc:u,o:e,size:r,start:n+t})}else e.H(n+r-e.U())},li.prototype.parseNext=li.prototype.rb,li.children=fi,li.sampleDescription=di,li.allData=pi,e("shaka.media.SegmentIndex",gi),gi.prototype.destroy=function(){return this.a=null,Promise.resolve()},gi.prototype.destroy=gi.prototype.destroy,gi.prototype.find=function(t){for(var e=this.a.length-1;0<=e;--e){var i=this.a[e];if(t>=i.startTime&&t<i.endTime)return i.position}return this.a.length&&t<this.a[0].startTime?this.a[0].position:null},gi.prototype.find=gi.prototype.find,gi.prototype.get=function(t){return this.a.length?(t-=this.a[0].position,0>t||t>=this.a.length?null:this.a[t]):null},gi.prototype.get=gi.prototype.get,gi.prototype.offset=function(t){for(var e=0;e<this.a.length;++e)this.a[e].startTime+=t,this.a[e].endTime+=t},gi.prototype.offset=gi.prototype.offset,gi.prototype.Lb=function(t){for(var e,i,n,r=[],a=e=0;e<this.a.length&&a<t.length;)i=this.a[e],n=t[a],i.startTime<n.startTime?(r.push(i),e++):(i.startTime>n.startTime?e||r.push(n):(.1<Math.abs(i.endTime-n.endTime)?(n=new ui(i.position,n.startTime,n.endTime,n.a,n.N,n.D),r.push(n)):r.push(i),e++),a++);for(;e<this.a.length;)r.push(this.a[e++]);if(r.length)for(e=r[r.length-1].position+1;a<t.length;)n=t[a++],n=new ui(e++,n.startTime,n.endTime,n.a,n.N,n.D),r.push(n);else r=t;this.a=r},gi.prototype.merge=gi.prototype.Lb,gi.prototype.Bb=function(t){for(var e=0;e<this.a.length&&!(this.a[e].endTime>t);++e);this.a.splice(0,e)},gi.prototype.evict=gi.prototype.Bb;var hu;Ti.prototype.ca=function(){return this.a.ca()},ki.prototype.parse=function(t,e,i,n){var r;if(e=new Ti(new DataView(e)),440786851!=wi(e).id)throw new h(2,3,3008);var a=wi(e);if(408125543!=a.id)throw new h(2,3,3009);for(e=a.a.byteOffset,a=new Ti(a.a),r=null;a.ca();){var s=wi(a);if(357149030==s.id){r=s;break}}if(!r)throw new h(2,3,3010);for(a=new Ti(r.a),r=1e6,s=null;a.ca();){var o=wi(a);if(2807729==o.id)r=Ai(o);else if(17545==o.id)if(s=o,4==s.a.byteLength)s=s.a.getFloat32(0);else{if(8!=s.a.byteLength)throw new h(2,3,3003);s=s.a.getFloat64(0)}}if(null==s)throw new h(2,3,3011);if(a=r/1e9,r=s*a,t=wi(new Ti(new DataView(t))),475249515!=t.id)throw new h(2,3,3007);return Ii(t,e,a,r,i,n)};var cu={},lu={};e("shaka.media.ManifestParser.registerParserByExtension",function(t,e){lu[t]=e}),e("shaka.media.ManifestParser.registerParserByMime",function(t,e){cu[t]=e}),e("shaka.media.PresentationTimeline",Ki),Ki.prototype.T=function(){return this.a},Ki.prototype.getDuration=Ki.prototype.T,Ki.prototype.fa=function(t){this.a=t},Ki.prototype.setDuration=Ki.prototype.fa,Ki.prototype.qd=function(){return this.c},Ki.prototype.getPresentationStartTime=Ki.prototype.qd,Ki.prototype.Pc=function(t){this.i=t},Ki.prototype.setClockOffset=Ki.prototype.Pc,Ki.prototype.ub=function(t){this.h=t},Ki.prototype.setStatic=Ki.prototype.ub,Ki.prototype.sd=function(){return this.f},Ki.prototype.getSegmentAvailabilityDuration=Ki.prototype.sd,Ki.prototype.Zb=function(t){this.f=t},Ki.prototype.setSegmentAvailabilityDuration=Ki.prototype.Zb,Ki.prototype.Qc=function(t){this.j=t},Ki.prototype.setDelay=Ki.prototype.Qc,Ki.prototype.Ia=function(t,e){e.length&&(this.b=e.reduce(function(t,e){return Math.max(t,e.endTime-e.startTime)},this.b))},Ki.prototype.notifySegments=Ki.prototype.Ia,Ki.prototype.Mb=function(t){this.b=Math.max(this.b,t)},Ki.prototype.notifyMaxSegmentDuration=Ki.prototype.Mb,Ki.prototype.P=function(){return 1/0==this.a&&!this.h},Ki.prototype.isLive=Ki.prototype.P,Ki.prototype.wa=function(){return 1/0!=this.a&&!this.h},Ki.prototype.isInProgress=Ki.prototype.wa,Ki.prototype.ja=function(){return this.Fa(0)},Ki.prototype.getSegmentAvailabilityStart=Ki.prototype.ja,Ki.prototype.Fa=function(t){if(1/0==this.f)return this.g;var e=this.va();return Math.max(this.g,Math.min(e-this.f+t,e))},Ki.prototype.getSafeAvailabilityStart=Ki.prototype.Fa,Ki.prototype.Oc=function(t){this.g=t},Ki.prototype.setAvailabilityStart=Ki.prototype.Oc,Ki.prototype.va=function(){return this.P()||this.wa()?Math.min(Math.max(0,(Date.now()+this.i)/1e3-this.b-this.c),this.a):this.a},Ki.prototype.getSegmentAvailabilityEnd=Ki.prototype.va,Ki.prototype.pb=function(){var t=this.P()||this.wa()?this.j:0;return Math.max(0,this.va()-t)},Ki.prototype.getSeekRangeEnd=Ki.prototype.pb,e("shaka.dash.DashParser",qi),Lo=qi.prototype,Lo.configure=function(t){this.b=t},Lo.start=function(t,e){return this.g=[t],this.a=e,Gi(this).then(function(){return this.a&&Qi(this,0),this.c}.bind(this))},Lo.stop=function(){return this.b=this.a=null,this.g=[],this.c=null,this.i=[],this.j={},null!=this.f&&(t.clearTimeout(this.f),this.f=null),Promise.resolve()},Lo.update=function(){Gi(this).catch(function(t){this.a&&this.a.onError(t)}.bind(this))},Lo.onExpirationUpdated=function(){},Lo.ce=function(t,e){t.S=Zi(e,t.Z,null);var i=!1,n=Fe(e,"Role"),r=n.map(function(t){return t.getAttribute("value")}).filter(R),a=void 0;"text"==t.S.contentType&&(a="subtitle");for(var s=0;s<n.length;s++){var o=n[s].getAttribute("schemeIdUri");if(null==o||"urn:mpeg:dash:role:2011"==o)switch(o=n[s].getAttribute("value")){case"main":i=!0;break;case"caption":case"subtitle":a=o}}var u=null,c=!1;if(Fe(e,"EssentialProperty").forEach(function(t){"http://dashif.org/guidelines/trickmode"==t.getAttribute("schemeIdUri")?u=t.getAttribute("value"):c=!0}),c)return null;var n=Fe(e,"ContentProtection"),l=We(n,this.b.dash.customScheme,this.b.dash.ignoreDrmInfo),n=Zt(e.getAttribute("lang")||"und"),o=e.getAttribute("label"),s=Fe(e,"Representation"),r=s.map(this.fe.bind(this,t,l,a,n,o,i,r)).filter(function(t){return!!t});if(!r.length)throw new h(2,4,4003);return t.S.contentType&&"application"!=t.S.contentType||(t.S.contentType=an(r[0].mimeType,r[0].codecs),r.forEach(function(e){e.type=t.S.contentType})),r.forEach(function(t){l.drmInfos.forEach(function(e){t.keyId&&e.keyIds.push(t.keyId)})}),a=s.map(function(t){return t.getAttribute("id")}).filter(R),{id:t.S.id||"__fake__"+this.h++,contentType:t.S.contentType,language:n,Jb:i,streams:r,drmInfos:l.drmInfos,cc:u,qe:a}},Lo.fe=function(t,e,i,n,r,a,s,o){if(t.v=Zi(o,t.S,null),!en(t.v))return null;t.bandwidth=He(o,"bandwidth",Ye)||0;var u=this.re.bind(this);if(t.v.Ya)u=xi(t,u);else if(t.v.qa)u=Li(t,this.j);else if(t.v.Za)u=Oi(t,u,this.j,!!this.c);else{var h=t.v.aa,c=t.R.duration||0;u={createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:function(t){return 0<=t&&t<c?1:null},getSegmentReference:function(t){return 1!=t?null:new ui(1,0,c,function(){return h},0,null)},initSegmentReference:null,V:0}}return o=Fe(o,"ContentProtection"),o=Je(o,this.b.dash.customScheme,e,this.b.dash.ignoreDrmInfo),{id:this.h++,createSegmentIndex:u.createSegmentIndex,findSegmentPosition:u.findSegmentPosition,getSegmentReference:u.getSegmentReference,initSegmentReference:u.initSegmentReference,presentationTimeOffset:u.V,mimeType:t.v.mimeType,codecs:t.v.codecs,frameRate:t.v.frameRate,bandwidth:t.bandwidth,width:t.v.width,height:t.v.height,kind:i,encrypted:0<e.drmInfos.length,keyId:o,language:n,label:r,type:t.S.contentType,primary:a,trickModeVideo:null,containsEmsgBoxes:t.v.containsEmsgBoxes,roles:s,channelsCount:t.v.Nb}},Lo.Le=function(){this.f=null;var t=Date.now();Gi(this).then(function(){this.a&&Qi(this,(Date.now()-t)/1e3)}.bind(this)).catch(function(t){this.a&&(t.severity=1,this.a.onError(t),Qi(this,0))}.bind(this))},Lo.ee=function(t,e,i){var n=i.getAttribute("schemeIdUri")||"",r=i.getAttribute("value")||"",a=He(i,"timescale",ze)||1;Fe(i,"Event").forEach(function(i){var s=He(i,"presentationTime",ze)||0,o=He(i,"duration",ze)||0,s=s/a+t,o=s+o/a;null!=e&&(s=Math.min(s,t+e),o=Math.min(o,t+e)),i={schemeIdUri:n,value:r,startTime:s,endTime:o,id:i.getAttribute("id")||"",eventElement:i},this.a.onTimelineRegionAdded(i)}.bind(this))},Lo.re=function(t,e,i){return t=M(t,this.b.retryParameters),null!=e&&(t.headers.Range="bytes="+e+"-"+(null!=i?i:"")),this.a.networkingEngine.request(1,t).then(function(t){return t.data})},lu.mpd=qi,cu["application/dash+xml"]=qi,on.prototype.toString=function(){function t(t){return t.name+'="'+t.value+'"'}return this.value?"#"+this.name+":"+this.value:0<this.a.length?"#"+this.name+":"+this.a.map(t).join(","):"#"+this.name},on.prototype.getAttribute=function(t){var e=this.a.filter(function(e){return e.name==t});return e.length?e[0]:null};var fu="EXT-X-TARGETDURATION EXT-X-MEDIA-SEQUENCE EXT-X-DISCONTINUITY-SEQUENCE EXT-X-PLAYLIST-TYPE EXT-X-MAP EXT-X-I-FRAMES-ONLY EXT-X-ENDLIST".split(" "),du="EXTINF EXT-X-BYTERANGE EXT-X-DISCONTINUITY EXT-X-PROGRAM-DATE-TIME EXT-X-KEY EXT-X-DATERANGE".split(" ");e("shaka.net.DataUriPlugin",En),En.parse=function(e){var i=e.split(":");if(2>i.length||"data"!=i[0])throw new h(2,1,1004,e);if(i=i.slice(1).join(":").split(","),2>i.length)throw new h(2,1,1004,e);var n=i[0],i=t.decodeURIComponent(i.slice(1).join(",")),n=n.split(";"),r=null;if(1<n.length&&(r=n[1]),"base64"==r)e=ht(i).buffer;else{if(r)throw new h(2,1,1005,e);e=nt(i)}return{data:e,contentType:n[0]}},D("data",En),e("shaka.hls.HlsParser",Sn),Lo=Sn.prototype,Lo.configure=function(t){this.g=t},Lo.start=function(t,e){return this.c=e,this.l=t,Yn(this,t).then(function(e){return kn(this,e.data,t).then(function(){return zn(this,this.h),this.m}.bind(this))}.bind(this))},Lo.stop=function(){return this.g=this.c=null,this.u={},this.A={},this.m=null,Promise.resolve()},Lo.update=function(){if(this.f!=gu.na){var t,e=[];for(t in this.a)e.push(An(this,this.a[t],t));return Promise.all(e)}},Lo.onExpirationUpdated=function(){};var pu={audio:[/^vorbis$/,/^opus$/,/^flac$/,/^mp4a/,/^[ae]c-3$/],video:[/^avc/,/^hev/,/^hvc/,/^vp0?[89]/,/^av1$/],text:[/^vtt$/,/^wvtt/,/^stpp/]},mu={audio:{mp4:"audio/mp4",m4s:"audio/mp4",m4i:"audio/mp4",m4a:"audio/mp4",ts:"video/mp2t"},video:{mp4:"video/mp4",m4s:"video/mp4",m4i:"video/mp4",m4v:"video/mp4",ts:"video/mp2t"},text:{mp4:"application/mp4",m4s:"application/mp4",m4i:"application/mp4",vtt:"text/vtt",ttml:"application/ttml+xml"}};Sn.prototype.J=function(){this.c&&(this.i=null,this.update().then(function(){zn(this,this.h)}.bind(this)).catch(function(t){this.c&&(t.severity=1,this.c.onError(t),zn(this,0))}.bind(this)))};var yu={"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed":function(t){if("SAMPLE-AES-CENC"!=Gn(t,"METHOD"))return null;var e=Gn(t,"URI"),e=En.parse(e),e=new Uint8Array(e.data),e=z("com.widevine.alpha",[{initDataType:"cenc",initData:e}]);return(t=hn(t,"KEYID"))&&(e.keyIds=[t.substr(2).toLowerCase()]),e}},vu="VOD",gu={na:vu,Vc:"EVENT",ec:"LIVE"};lu.m3u8=Sn,cu["application/x-mpegurl"]=Sn,cu["application/vnd.apple.mpegurl"]=Sn,Lo=Wn.prototype,Lo.destroy=function(){var t=this.b.destroy();return this.b=null,this.f&&(this.f.cancel(),this.f=null),this.h&&(this.h.cancel(),this.h=null),this.g&&(this.g.cancel(),this.g=null),this.J=this.K=this.l=this.c=this.a=null,t},Lo.Eb=function(){return this.i},Lo.Qb=function(){this.u=!0,this.Ac()},Lo.Qd=function(){var t=this.j||0>this.i?0:this.i;this.a.playbackRate&&this.a.playbackRate!=t&&er(this,this.a.playbackRate)},Lo.yc=function(){var t=tr(this);this.b.ga(this.a,"timeupdate"),this.g.cancel(),.001>Math.abs(this.a.currentTime-t)?(H(this.b,this.a,"seeking",this.Bc.bind(this)),H(this.b,this.a,"playing",this.zc.bind(this))):(K(this.b,this.a,"seeking",this.Sd.bind(this)),this.a.currentTime=t)},Lo.Sd=function(){H(this.b,this.a,"seeking",this.Bc.bind(this)),H(this.b,this.a,"playing",this.zc.bind(this))},Lo.Ac=function(){if(this.a.readyState&&!this.a.paused){this.a.readyState!=this.F&&(this.s=!1,this.F=this.a.readyState);var t=this.l.smallGapLimit,e=this.a.currentTime,i=this.a.buffered,n=this.c.presentationTimeline.ja();if(e<n)i=ir(this,e),nr(this,e,i);else{t:{if(i&&i.length&&!(1==i.length&&1e-6>i.end(0)-i.start(0))){n=.1,/(Edge\/|Trident\/|Tizen)/.test(navigator.userAgent)&&(n=.5);for(var r=0;r<i.length;r++)if(i.start(r)>e&&(!r||i.end(r-1)-e<=n)){n=r;break t}}n=null}if(null==n){if(3>this.a.readyState&&0<this.a.playbackRate)if(this.A!=e)this.A=e,this.W=Date.now(),this.w=!1;else if(!this.w&&this.W<Date.now()-1e3)for(t=0;t<i.length;t++)if(e>=i.start(t)&&e<i.end(t)-.5){this.a.currentTime+=.1,this.A=this.a.currentTime,this.w=!0;break}}else if(n||this.u){var r=i.start(n),a=this.c.presentationTimeline.pb();if(!(r>=a)){var a=r-e,t=a<=t,s=!1;t||this.s||(this.s=!0,a=new X("largegap",{currentTime:e,gapSize:a}),a.cancelable=!0,this.J(a),this.l.jumpLargeGaps&&!a.defaultPrevented&&(s=!0)),(t||s)&&(n&&i.end(n-1),nr(this,e,r))}}}}},Lo.Dd=function(){this.m=ir(this,this.a.currentTime)},Lo.Bc=function(){this.u=!1;var t=this.a.currentTime,e=ir(this,t);.001<Math.abs(e-t)?nr(this,t,e):(this.s=!1,this.K())},Lo.zc=function(){var t=this.a.currentTime,e=ir(this,t);.001<Math.abs(e-t)&&nr(this,t,e)},ar.prototype.destroy=function(){var t=this.j?this.j.destroy():Promise.resolve();return this.j=null,ur(this),this.A=this.h=this.l=this.u=this.g=this.w=this.a=null,this.c=[],t},ar.prototype.s=function(t){if(!this.c.some(function(e){return e.info.schemeIdUri==t.schemeIdUri&&e.info.startTime==t.startTime&&e.info.endTime==t.endTime})){var e={info:t,status:1};this.c.push(e);var i=new X("timelineregionadded",{detail:sr(t)});this.h(i),this.m(!0,e)}},ar.prototype.m=function(t,e){var i=e.info.startTime>this.a.currentTime?1:e.info.endTime<this.a.currentTime?3:2,n=2==e.status,r=2==i;i!=e.status&&((!t||n||r)&&(n||this.h(new X("timelineregionenter",{detail:sr(e.info)})),r||this.h(new X("timelineregionexit",{detail:sr(e.info)}))),e.status=i)},ar.prototype.F=function(){this.f=null,or(this);var t=be(this.g,this.a.currentTime);t!=this.i&&(-1!=this.i&&this.A(),this.i=t);var t=Mt(this.a.buffered,this.a.currentTime),e=Lt(this.a.buffered),i=this.g.presentationTimeline,n=i.va(),e=i.P()&&e>=n,i="ended"==this.w.readyState,e=e||this.a.ended||i;this.b?(i=1*Math.max(this.g.minBufferTime||0,this.u.rebufferingGoal),(e||t>=i)&&0!=this.b&&(this.b=!1,this.l(!1))):!e&&.5>t&&1!=this.b&&(this.b=!0,this.l(!0)),this.c.forEach(this.m.bind(this,!1))},Lo=hr.prototype,Lo.destroy=function(){for(var t in this.c)Br(this.c[t]);return this.h=this.c=this.j=this.g=this.m=this.b=this.a=null,this.f=!0,Promise.resolve()},Lo.configure=function(t){this.h=t,this.A=new T({maxAttempts:Math.max(t.retryParameters.maxAttempts,2),baseDelay:t.retryParameters.baseDelay,backoffFactor:t.retryParameters.backoffFactor,fuzzFactor:t.retryParameters.fuzzFactor,timeout:0},!0)},Lo.init=function(){var t=Zn(this.a.Ka),t=this.a.tc(this.b.periods[be(this.b,t)]);return t.variant||t.text?wr(this,t).then(function(){this.a&&this.a.Hd&&this.a.Hd()}.bind(this)):Promise.reject(new h(2,5,5005))},Lo.Ne=function(t){if(!this.f&&!t.ya&&null!=t.ra&&!t.ta)if(t.ra=null,t.sa)Ur(this,t,t.wb);else{try{var e=Ir(this,t);null!=e&&(jr(this,t,e),t.Ua=!1)}catch(t){return void Fr(this,t)}e=W(this.c),Mr(this,t),e.every(function(t){return t.endOfStream})&&this.a.L.endOfStream().then(function(){this.b.presentationTimeline.fa(this.a.L.T())}.bind(this))}},Lo.de=function(t,e,i){var n=i.o.Tb(),r=i.o.Tb(),a=i.o.B(),s=i.o.B(),o=i.o.B(),u=i.o.B(),h=i.o.Ma(i.o.G.byteLength-i.o.U());t=t.startTime+e.startTime+s/a,"urn:mpeg:dash:event:2012"==n?this.a.Jd():this.a.onEvent(new X("emsg",{detail:{startTime:t,endTime:t+o/a,schemeIdUri:n,value:r,timescale:a,presentationTimeDelta:s,eventDuration:o,id:u,messageData:h}})),i.oa.stop()},e("shaka.net.HttpPlugin",Vr),D("http",Vr,1),D("https",Vr,1),Gr.prototype.a=function(t){t.createObjectStore("manifest-v2",{autoIncrement:!0}),t.createObjectStore("segment-v2",{autoIncrement:!0})},Xr.prototype.a=function(t,e){function i(){o.clear(),s.clear()}function n(t,e,i){e=Yr(e),a.add(e,t).onsuccess=i}var r=t.createObjectStore("segment-v2"),a=t.createObjectStore("manifest-v2"),s=e.objectStore("segment"),o=e.objectStore("manifest");Hr(s,function(t,e,i){r.add({data:e.data},t).onsuccess=i},function(){Hr(o,n,i)})},Qr.prototype.init=function(t){var e=this.c;return Promise.resolve().then(function(){return Kr(e,t)}).then(function(t){this.b=t}.bind(this))},Qr.prototype.destroy=function(){return Promise.all(this.a.map(function(t){try{t.transaction.abort()}catch(t){}return t.M.catch(x)})).then(function(){this.b&&(this.b.close(),this.b=null)}.bind(this))},Qr.prototype.Ea=function(t){return ta(this,"manifest-v2",t)},oa.prototype.destroy=function(){var t=this.h,e=this.i,i=this.g||Promise.resolve();return e.length&&(i=i.then(function(){return ra(t,"segment-v2",e,null)})),this.b={},this.i=[],this.g=this.a=this.m=this.j=this.h=null,i},oa.prototype.s=function(t){this.c+=null==t.D?t.gc:t.D-t.N+1},Lo=ka.prototype,Lo.configure=function(){},Lo.start=function(t){var e=da(t);if(null==e)return Promise.reject(new h(2,1,9004,t));this.a=e;var i;return Aa().then(function(t){return i=t,i.Ea(e)}.bind(this)).then(function(t){if(!t)throw new h(2,9,9003,e);return Ia(t)}).then(function(t){return i.destroy().then(function(){return t})},function(t){return i.destroy().then(function(){throw t})})},Lo.stop=function(){return Promise.resolve()},Lo.update=function(){},Lo.onExpirationUpdated=function(t,e){var i,n=this.a;Aa().then(function(t){return i=t,i.Ea(n)}).then(function(r){if(r&&!(0>r.sessionIds.indexOf(t))&&(void 0==r.expiration||r.expiration>e))return r.expiration=e,ia(i,n,r)}).catch(function(){}).then(function(){return i.destroy()})},cu["application/x-offline-manifest"]=ka,e("shaka.offline.OfflineScheme",_a),_a.a=function(t){return t={uri:t,data:new ArrayBuffer(0),headers:{"content-type":"application/x-offline-manifest"}},Promise.resolve(t)},_a.b=function(t,e){var i,n;return Aa().then(function(e){return i=e,ta(i,"segment-v2",t)}).then(function(t){return n=t,i.destroy()}).then(function(){if(!n)throw new h(2,9,9003,t);return{uri:e,data:n.data,headers:{}}})},D("offline",_a),e("shaka.text.SimpleTextDisplayer",Pa),Pa.prototype.remove=function(t,e){return!!this.a&&(Ra(this,function(i){return!(i.startTime>=e||i.endTime<=t)}),!0)},Pa.prototype.remove=Pa.prototype.remove,Pa.prototype.append=function(t){for(var e=[],i=0;i<t.length;i++){var n=xa(t[i]);n&&e.push(n)}e.slice().sort(function(t,i){return t.startTime!=i.startTime?t.startTime-i.startTime:t.endTime!=i.endTime?t.endTime-i.startTime:e.indexOf(i)-e.indexOf(t)}).forEach(function(t){this.a.addCue(t)}.bind(this))},Pa.prototype.append=Pa.prototype.append,Pa.prototype.destroy=function(){return this.a&&Ra(this,function(){return!0}),this.a=null,Promise.resolve()},Pa.prototype.destroy=Pa.prototype.destroy,Pa.prototype.isTextVisible=function(){return"showing"==this.a.mode},Pa.prototype.isTextVisible=Pa.prototype.isTextVisible,Pa.prototype.setTextVisibility=function(t){this.a.mode=t?"showing":"hidden"},Pa.prototype.setTextVisibility=Pa.prototype.setTextVisibility,Na.prototype.then=function(t){return this.a=this.a.then(t).then(function(t){return this.b?(this.g(),Promise.reject(this.h)):Promise.resolve(t)}.bind(this)),this},Na.prototype.cancel=function(t){return this.c?Promise.resolve():(this.b=!0,this.h=t,this.j.forEach(function(t){t()}),this.i)},i(Da),e("shaka.Player",Da),Da.prototype.destroy=function(){return this.F=!0,Ma(this).then(function(){var t=Promise.all([this.Ta,Ha(this),this.m?this.m.destroy():null,this.s?this.s.destroy():null]);return this.f=null,this.lb=!1,this.c=this.s=this.h=this.m=null,t}.bind(this))},Da.prototype.destroy=Da.prototype.destroy,Da.version="v2.3.0";var bu={};Da.registerSupportPlugin=function(t,e){bu[t]=e},Da.isBrowserSupported=function(){return!!(t.Promise&&t.Uint8Array&&Array.prototype.forEach&&t.MediaSource&&MediaSource.isTypeSupported&&t.MediaKeys&&t.navigator&&t.navigator.requestMediaKeySystemAccess&&t.MediaKeySystemAccess&&t.MediaKeySystemAccess.prototype.getConfiguration)},Da.probeSupport=function(){return xt().then(function(t){t={manifest:Vi(),media:Ht(),drm:t};for(var e in bu)t[e]=bu[e]();return t})},Da.prototype.load=function(t,e,i){var n=this.vb(),r=new Na;this.ha=r,this.dispatchEvent(new X("loading"));var a=Date.now();return La(r.then(function(){return n}).then(function(){return this.j=Xa(),H(this.m,this.f,"playing",this.ab.bind(this)),H(this.m,this.f,"pause",this.ab.bind(this)),H(this.m,this.f,"ended",this.ab.bind(this)),this.h=new this.c.abrFactory,this.h.configure(this.c.abr),this.u=new this.c.textDisplayFactory,this.u.setTextVisibility(this.lb),Hi(t,this.s,this.c.manifest.retryParameters,i)}.bind(this)).then(function(e){return this.i=new e,this.i.configure(this.c.manifest),this.i.start(t,{networkingEngine:this.s,filterNewPeriod:this.mb.bind(this),filterAllPeriods:this.$b.bind(this),onTimelineRegionAdded:this.Xd.bind(this),onEvent:this.$a.bind(this),onError:this.Pa.bind(this)})}.bind(this)).then(function(e){if(e.periods.some(function(t){return t.variants.some(function(t){return t.video&&t.audio})})&&e.periods.forEach(function(t){t.variants=t.variants.filter(function(t){return t.video&&t.audio})}),0==e.periods.length)throw new h(2,4,4014);return this.b=e,this.yb=t,this.l=new pt({Wa:this.s,onError:this.Pa.bind(this),Pb:this.Id.bind(this),onExpirationUpdated:this.Fd.bind(this),onEvent:this.$a.bind(this)}),this.l.configure(this.c.drm),this.l.init(e,!1)}.bind(this)).then(function(){this.$b(this.b.periods),this.fb=Date.now()/1e3,this.Qa=this.c.preferredAudioLanguage,this.Ra=this.c.preferredTextLanguage;var t=this.b.presentationTimeline.T(),e=this.c.playRangeEnd,i=this.c.playRangeStart;return 0<i&&(this.P()||this.b.presentationTimeline.Oc(i)),e<t&&(this.P()||this.b.presentationTimeline.fa(e)),Promise.all([mt(this.l,this.f),this.ib])}.bind(this)).then(function(){return this.h.init(this.Ge.bind(this)),this.g=new Wn(this.f,this.b,this.c.streaming,void 0==e?null:e,this.Ee.bind(this),this.$a.bind(this)),this.w=new ar(this.f,this.K,this.b,this.c.streaming,this.Rc.bind(this),this.$a.bind(this),this.De.bind(this)),this.J=new Vt(this.f,this.K,this.u),this.a=new hr(this.b,{Ka:this.g,L:this.J,Wa:this.s,tc:this.Cd.bind(this),sc:this.ad.bind(this),onError:this.Pa.bind(this),onEvent:this.$a.bind(this),Jd:this.Kd.bind(this),Qb:this.Td.bind(this),filterNewPeriod:this.mb.bind(this),filterAllPeriods:this.$b.bind(this)}),this.a.configure(this.c.streaming),this.dispatchEvent(new X("streaming")),Ca(this),this.a.init()}.bind(this)).then(function(){if(this.c.streaming.startAtSegmentBoundary){var t=$a(this,Zn(this.g));Jn(this.g,t)}this.b.periods.forEach(this.mb.bind(this)),Za(this),Qa(this);var t=cr(this.a),e=de(t,this.Qa,this.cb);this.h.setVariants(e),t.variants.some(function(t){return t.primary}),this.jb.forEach(this.w.s.bind(this.w)),this.jb=[],K(this.m,this.f,"loadeddata",function(){this.j.loadLatency=(Date.now()-a)/1e3}.bind(this)),this.ha=null}.bind(this))).catch(function(t){return this.ha==r&&(this.ha=null,this.dispatchEvent(new X("unloading"))),Promise.reject(t)}.bind(this))},Da.prototype.load=Da.prototype.load,Da.prototype.configure=function(t){k(this.c,t,Ga(this),qa(),""),Ua(this)},Da.prototype.configure=Da.prototype.configure,Da.prototype.getConfiguration=function(){var t=Ga(this);return k(t,this.c,Ga(this),qa(),""),t},Da.prototype.getConfiguration=Da.prototype.getConfiguration,Da.prototype.se=function(){this.c=Ga(this),Ua(this)},Da.prototype.resetConfiguration=Da.prototype.se,Da.prototype.nd=function(){return this.f},Da.prototype.getMediaElement=Da.prototype.nd,Da.prototype.oc=function(){return this.s},Da.prototype.getNetworkingEngine=Da.prototype.oc,Da.prototype.nc=function(){return this.yb},Da.prototype.getManifestUri=Da.prototype.nc,Da.prototype.P=function(){return!!this.b&&this.b.presentationTimeline.P()},Da.prototype.isLive=Da.prototype.P,Da.prototype.wa=function(){return!!this.b&&this.b.presentationTimeline.wa()},Da.prototype.isInProgress=Da.prototype.wa,Da.prototype.yd=function(){if(!this.b||!this.b.periods.length)return!1;var t=this.b.periods[0].variants;return!!t.length&&!t[0].video},Da.prototype.isAudioOnly=Da.prototype.yd,Da.prototype.ue=function(){var t=0,e=0;return this.b&&(e=this.b.presentationTimeline,t=e.ja(),e=e.pb()),{start:t,end:e}},Da.prototype.seekRange=Da.prototype.ue,Da.prototype.keySystem=function(){return this.l?this.l.keySystem():""},Da.prototype.keySystem=Da.prototype.keySystem,Da.prototype.drmInfo=function(){return this.l?this.l.b:null},Da.prototype.drmInfo=Da.prototype.drmInfo,Da.prototype.ob=function(){return this.l?this.l.ob():1/0},Da.prototype.getExpiration=Da.prototype.ob,Da.prototype.rc=function(){return this.kb},Da.prototype.isBuffering=Da.prototype.rc,Da.prototype.vb=function(){return this.F?Promise.resolve():(this.dispatchEvent(new X("unloading")),Ma(this).then(function(){return this.Ta||(this.Ta=Ka(this).then(function(){this.Ta=null}.bind(this))),this.Ta}.bind(this)))},Da.prototype.unload=Da.prototype.vb,Da.prototype.Eb=function(){return this.g?this.g.Eb():0},Da.prototype.getPlaybackRate=Da.prototype.Eb,Da.prototype.Qe=function(t){this.g&&er(this.g,t),this.a&&yr(this.a,1!=t)},Da.prototype.trickPlay=Da.prototype.Qe,Da.prototype.bd=function(){this.g&&er(this.g,1),this.a&&yr(this.a,!1)},Da.prototype.cancelTrickPlay=Da.prototype.bd,Da.prototype.wd=function(){if(!this.b||!this.g)return[];var t=be(this.b,Zn(this.g)),e=this.A[t]||{};return oe(this.b.periods[t],e.audio,e.video)},Da.prototype.getVariantTracks=Da.prototype.wd,Da.prototype.vd=function(){if(!this.b||!this.g)return[];var t=be(this.b,Zn(this.g));return ue(this.b.periods[t],(this.A[t]||{}).text).filter(function(t){return 0>this.gb.indexOf(t.id)}.bind(this))},Da.prototype.getTextTracks=Da.prototype.vd,Da.prototype.xe=function(t){if(this.a){(t=ce(cr(this.a),t))&&(Fa(this,t,!1),this.Ca?this.W=t:gr(this.a,t,!0))}},Da.prototype.selectTextTrack=Da.prototype.xe,Da.prototype.ye=function(t,e){if(this.a){this.c.abr.enabled&&o("Changing tracks while abr manager is enabled will likely result in the selected track being overriden. Consider disabling abr before calling selectVariantTrack().");var i=cr(this.a);(i=he(i,t))&&le(i)&&(Ba(this,i,!1),Ya(this,i,e))}},Da.prototype.selectVariantTrack=Da.prototype.ye,Da.prototype.kd=function(){if(!this.a)return[];var t=cr(this.a),t=fe(t.variants).map(function(t){return t.audio}).filter(N);return ja(t)},Da.prototype.getAudioLanguagesAndRoles=Da.prototype.kd,Da.prototype.ud=function(){return this.a?ja(cr(this.a).textStreams):[]},Da.prototype.getTextLanguagesAndRoles=Da.prototype.ud,Da.prototype.jd=function(){return this.a?fe(cr(this.a).variants).map(function(t){return t.language}).filter(N):[]},Da.prototype.getAudioLanguages=Da.prototype.jd,Da.prototype.td=function(){return this.a?cr(this.a).textStreams.map(function(t){return t.language}).filter(N):[]},Da.prototype.getTextLanguages=Da.prototype.td,Da.prototype.ve=function(t,e){if(this.a){var i=cr(this.a);this.Qa=t,this.cb=e||"",Ja(this,i)}},Da.prototype.selectAudioLanguage=Da.prototype.ve,Da.prototype.we=function(t,e){if(this.a){var i=cr(this.a);this.Ra=t,this.bb=e||"",Ja(this,i)}},Da.prototype.selectTextLanguage=Da.prototype.we,Da.prototype.Ib=function(){return this.u?this.u.isTextVisible():this.lb},Da.prototype.isTextTrackVisible=Da.prototype.Ib,Da.prototype.Be=function(t){this.u&&this.u.setTextVisibility(t),this.lb=t,ts(this),this.a&&(t?(t=cr(this.a),t=pe(t,this.Ra,this.bb)[0],mr(this.a,t)):(t=this.a,t.w=!0,t.c.text&&(Br(t.c.text),delete t.c.text)))},Da.prototype.setTextTrackVisibility=Da.prototype.Be,Da.prototype.pd=function(){return this.b?new Date(1e3*this.b.presentationTimeline.c+1e3*this.f.currentTime):null},Da.prototype.getPlayheadTimeAsDate=Da.prototype.pd,Da.prototype.rd=function(){return this.b?new Date(1e3*this.b.presentationTimeline.c):null},Da.prototype.getPresentationStartTimeAsDate=Da.prototype.rd,Da.prototype.Cb=function(){return this.J?this.J.Cb():{total:[],audio:[],video:[],text:[]}},Da.prototype.getBufferedInfo=Da.prototype.Cb,Da.prototype.getStats=function(){za(this),this.ab();var t=null,e=null,i=this.f,i=i&&i.getVideoPlaybackQuality?i.getVideoPlaybackQuality():{};if(this.g&&this.b){var n=be(this.b,Zn(this.g)),r=this.b.periods[n];(n=this.A[n])&&(e=ge(n.audio,n.video,r.variants),t=e.video||{})}return t||(t={}),e||(e={}),{width:t.width||0,height:t.height||0,streamBandwidth:e.bandwidth||0,decodedFrames:Number(i.totalVideoFrames),droppedFrames:Number(i.droppedVideoFrames),estimatedBandwidth:this.h?this.h.getBandwidthEstimate():NaN,loadLatency:this.j.loadLatency,playTime:this.j.playTime,bufferingTime:this.j.bufferingTime,switchHistory:I(this.j.switchHistory),stateHistory:I(this.j.stateHistory)}},Da.prototype.getStats=Da.prototype.getStats,Da.prototype.addTextTrack=function(t,e,i,n,r,a){if(!this.a)return Promise.reject();for(var s,o=cr(this.a),u=0;u<this.b.periods.length;u++)if(this.b.periods[u]==o){if(u==this.b.periods.length-1){if(s=this.b.presentationTimeline.T()-o.startTime,1/0==s)return Promise.reject()}else s=this.b.periods[u+1].startTime-o.startTime;break}var h={id:this.Yc++,createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:function(){return 1},getSegmentReference:function(e){return 1!=e?null:new ui(1,0,s,function(){return[t]},0,null)},initSegmentReference:null,presentationTimeOffset:0,mimeType:n,codecs:r||"",kind:i,encrypted:!1,keyId:null,language:e,label:a||null,type:"text",primary:!1,trickModeVideo:null,containsEmsgBoxes:!1,roles:[],channelsCount:null};return this.gb.push(h.id),o.textStreams.push(h),mr(this.a,h).then(function(){if(!this.F){var t=this.b.periods.indexOf(o),n=pr(this.a,"text");return n&&(this.A[t].text=n.id),this.gb.splice(this.gb.indexOf(h.id),1),Ja(this,o),Za(this),{id:h.id,active:!1,type:"text",bandwidth:0,language:e,label:a||null,kind:i,width:null,height:null}}}.bind(this))},Da.prototype.addTextTrack=Da.prototype.addTextTrack,Da.prototype.Yb=function(t,e){this.hb.width=t,this.hb.height=e},Da.prototype.setMaxHardwareResolution=Da.prototype.Yb,Da.prototype.Kc=function(){if(this.a){var t=this.a;if(t.f)t=!1;else if(t.l)t=!1;else{for(var e in t.c){var i=t.c[e];i.Ua&&(i.Ua=!1,jr(t,i,.1))}t=!0}}else t=!1;return t},Da.prototype.retryStreaming=Da.prototype.Kc,Da.prototype.Ea=function(){return this.b},Da.prototype.getManifest=Da.prototype.Ea,Lo=Da.prototype,Lo.ed=function(t){var e=[1001,1002,1003];this.P()&&0<=e.indexOf(t.code)&&(t.severity=1,this.Kc())},Lo.$b=function(t){t.forEach(ie.bind(null,this.l,this.a?fr(this.a):null,this.a?dr(this.a):null));var e=B(t,function(t){return t.variants.some(le)});if(!e)throw new h(2,4,9009);if(e<t.length)throw new h(2,4,4011);t.forEach(function(t){if(ee(t,this.c.restrictions,this.hb)&&this.a&&cr(this.a)==t&&Za(this),!t.variants.some(le))throw new h(2,4,4012)}.bind(this))},Lo.mb=function(t){ie(this.l,this.a?fr(this.a):null,this.a?dr(this.a):null,t);var e=t.variants,i=e.some(le);if(ee(t,this.c.restrictions,this.hb)&&this.a&&cr(this.a)==t&&Za(this),t=e.some(le),!i)throw new h(2,4,4011);if(!t)throw new h(2,4,4012)},Lo.Fe=function(t,e){this.h&&this.h.segmentDownloaded(t,e)},Lo.Rc=function(t){if(za(this),this.kb=t,this.ab(),this.g){var e=this.g;t!=e.j&&(e.j=t,er(e,e.i))}this.dispatchEvent(new X("buffering",{buffering:t}))},Lo.De=function(){Za(this)},Lo.ab=function(){if(!this.F){var t=this.kb?"buffering":this.f.ended?"ended":this.f.paused?"paused":"playing",e=Date.now()/1e3;if(this.j.stateHistory.length){var i=this.j.stateHistory[this.j.stateHistory.length-1];if(i.duration=e-i.timestamp,t==i.state)return}this.j.stateHistory.push({timestamp:e,state:t,duration:0})}},Lo.Ee=function(){if(this.w){var t=this.w;t.c.forEach(t.m.bind(t,!0))}this.a&&br(this.a)},Lo.Cd=function(t){this.Ca=!0,this.h.disable();var e={audio:!1,text:!1},i=de(t,this.Qa,this.cb,e);return t=pe(t,this.Ra,this.bb,e),i=Wa(this,i),t=t[0]||null,this.W=this.Sa=null,i&&Ba(this,i,!0),t&&(Fa(this,t,!0),!lr(this.a)&&i&&i.audio&&e.text&&t.language!=i.audio.language&&(this.u.setTextVisibility(!0),ts(this))),this.Ib()?{variant:i,text:t}:{variant:i,text:null}},Lo.ad=function(){this.Ca=!1,this.c.abr.enabled&&this.h.enable(),this.Sa&&(vr(this.a,this.Sa,this.fc),this.Sa=null),this.W&&(gr(this.a,this.W,!0),this.W=null)},Lo.Kd=function(){this.i&&this.i.update&&this.i.update()},Lo.Td=function(){this.g&&this.g.Qb()},Lo.Ge=function(t,e){Ba(this,t,!0),this.a&&(vr(this.a,t,e||!1),Qa(this))},Lo.Pa=function(t){if(!this.F){var e=new X("error",{detail:t});this.dispatchEvent(e),e.defaultPrevented&&(t.handled=!0)}},Lo.Xd=function(t){this.w?this.w.s(t):this.jb.push(t)},Lo.$a=function(t){this.dispatchEvent(t)},Lo.Yd=function(){if(this.f.error){var t=this.f.error.code;if(1!=t){var e=this.f.error.msExtendedCode;e&&(0>e&&(e+=Math.pow(2,32)),e=e.toString(16)),this.Pa(new h(2,3,3016,t,e,this.f.error.message))}}},Lo.Id=function(t){var e=["output-restricted","internal-error"],i=cr(this.a),n=!1,r=Object.keys(t),a=1==r.length&&"00"==r[0];r.length&&i.variants.forEach(function(i){var r=[];i.audio&&r.push(i.audio),i.video&&r.push(i.video),r.forEach(function(r){var s=i.allowedByKeySystem;r.keyId&&(r=t[a?"00":r.keyId],i.allowedByKeySystem=!!r&&0>e.indexOf(r)),s!=i.allowedByKeySystem&&(n=!0)})}),(r=ve(fr(this.a),dr(this.a),i.variants))&&!r.allowedByKeySystem&&Ja(this,i),n&&Za(this)},Lo.Fd=function(t,e){this.i&&this.i.onExpirationUpdated&&this.i.onExpirationUpdated(t,e),this.dispatchEvent(new X("expirationupdated"))},e("shaka.offline.Storage",es),es.support=is,es.prototype.destroy=function(){var t=this.g,e=this.c?this.c.destroy().catch(function(){}).then(function(){if(t)return t.destroy()}):Promise.resolve();return this.b=this.a=this.c=this.g=null,e},es.prototype.destroy=es.prototype.destroy,es.prototype.configure=function(t){k(this.b,t,os(this),{},"")},es.prototype.configure=es.prototype.configure,es.prototype.Oe=function(t,e,i){function n(t){a=t}if(this.l)return Promise.reject(new h(2,9,9006));this.l=!0;var r=e||{},a=null;return us(this).then(function(){return ps(this),ss(this,t,n,i)}.bind(this)).then(function(e){if(ps(this),a)throw a;return ns(this,t,e.manifest,r,e.fd)}.bind(this)).then(function(t){return ps(this),hs(this).then(function(){return t})}.bind(this)).catch(function(t){return a=a||t,hs(this).then(function(){throw a})}.bind(this))},es.prototype.store=es.prototype.Oe,es.prototype.remove=function(t){return t.offlineUri?(o("Removing downloaded content using shakaExtern.StoredContent is deprecated. Please remove using the offline uri."),rs(this,t.offlineUri)):rs(this,t)},es.prototype.remove=es.prototype.remove,es.prototype.list=function(){var t=[];return us(this).then(function(){return ps(this),Zr(this.g,function(e,i){var n=ma("offline:manifest/"+e,i);t.push(n)})}.bind(this)).then(function(){return t})},es.prototype.list=es.prototype.list,es.prototype.u=function(t){for(var e,i=[],n=Zt(this.a.getConfiguration().preferredAudioLanguage),r=[0,qo,Go],a=t.filter(function(t){return"variant"==t.type}),r=r.map(function(t){return a.filter(function(e){return e=Zt(e.language),Qt(t,n,e)})}),s=0;s<r.length;s++)if(r[s].length){e=r[s];break}e||(r=a.filter(function(t){return t.primary}),r.length&&(e=r)),e||(e=a,a.map(function(t){return t.language}).filter(N));var o=e.filter(function(t){return t.height&&480>=t.height});return o.length&&(o.sort(function(t,e){return e.height-t.height}),e=o.filter(function(t){return t.height==o[0].height})),e.sort(function(t,e){return t.bandwidth-e.bandwidth}),e.length&&i.push(e[Math.floor(e.length/2)]),i.push.apply(i,t.filter(function(t){return"text"==t.type})),i},es.prototype.j=function(t){t.forEach(this.m.bind(this))},es.prototype.m=function(t){var e=null;if(this.i){var i=this.i.filter(function(t){return"variant"==t.type})[0];i&&(e=he(t,i))}var n=i=null;e&&(e.audio&&(i=e.audio),e.video&&(n=e.video)),ie(this.f,i,n,t),ee(t,this.a.getConfiguration().restrictions,{width:1/0,height:1/0})},es.prototype.w=function(t){var e,i,n=oe(t,null,null),r=ue(t,null),n=this.b.trackSelectionCallback(n.concat(r));for(this.i||(this.i=n,this.j(this.h.periods)),r=n.length-1;0<r;--r){var a=!1;for(i=r-1;0<=i;--i)if(n[r].type==n[i].type&&n[r].kind==n[i].kind&&n[r].language==n[i].language){a=!0;break}if(a)break}for(a=[],r=0;r<n.length;r++)(e=he(t,n[r]))?(e.audio&&((i=a.filter(function(t){return t.id==e.audio.id})[0])?i.variantIds.push(e.id):(i=e.video?e.bandwidth/2:e.bandwidth,a.push(fs(this,e.audio,i,e.id)))),e.video&&((i=a.filter(function(t){return t.id==e.video.id})[0])?i.variantIds.push(e.id):(i=e.audio?e.bandwidth/2:e.bandwidth,a.push(fs(this,e.video,i,e.id))))):a.push(fs(this,ce(t,n[r]),0));return{startTime:t.startTime,streams:a}},bu.offline=is,e("shaka.polyfill.installAll",function(){for(var t=0;t<Tu.length;++t)Tu[t]()});var Tu=[];e("shaka.polyfill.register",ys),ys(function(){if(t.Document){var e=Element.prototype;e.requestFullscreen=e.requestFullscreen||e.mozRequestFullScreen||e.msRequestFullscreen||e.webkitRequestFullscreen,e=Document.prototype,e.exitFullscreen=e.exitFullscreen||e.mozCancelFullScreen||e.msExitFullscreen||e.webkitExitFullscreen,"fullscreenElement"in document||(Object.defineProperty(document,"fullscreenElement",{get:function(){return document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement}}),Object.defineProperty(document,"fullscreenEnabled",{get:function(){return document.mozFullScreenEnabled||document.msFullscreenEnabled||document.webkitFullscreenEnabled}})),document.addEventListener("webkitfullscreenchange",vs),document.addEventListener("webkitfullscreenerror",vs),document.addEventListener("mozfullscreenchange",vs),document.addEventListener("mozfullscreenerror",vs),document.addEventListener("MSFullscreenChange",vs),document.addEventListener("MSFullscreenError",vs)}}),ys(function(){var e=navigator.userAgent;e&&0<=e.indexOf("CrKey")&&delete t.indexedDB});var wu;ys(function(){0>navigator.userAgent.indexOf("Trident/")||HTMLInputElement.prototype.addEventListener==gs||(wu=HTMLInputElement.prototype.addEventListener,HTMLInputElement.prototype.addEventListener=gs)}),ys(function(){if(4503599627370497!=Math.round(4503599627370497)){var t=Math.round;Math.round=function(e){var i=e;return 4503599627370496>=e&&(i=t(e)),i}}}),bs.prototype.c=function(t){if(!(1<t.version)){var e=lt(t.o.Ma(16)),i=[];if(0<t.version)for(var n=t.o.B(),r=0;r<n;++r){var a=lt(t.o.Ma(16));i.push(a)}n=t.o.B(),t.o.H(n),this.b.push.apply(this.b,i),this.f.push(e),this.a.push({start:t.start,end:t.start+t.size-1})}},ws.prototype.createMediaKeys=function(){var t=new Ss(this.keySystem);return Promise.resolve(t)},ws.prototype.getConfiguration=function(){return this.a},Ss.prototype.createSession=function(t){if("temporary"!=(t||"temporary"))throw new TypeError("Session type "+t+" is unsupported on this platform.");return new ks(this.a)},Ss.prototype.setServerCertificate=function(){return Promise.resolve(!1)},i(ks),Lo=ks.prototype,Lo.generateRequest=function(t,e){this.a=new b;try{this.c=this.g.createSession("video/mp4",new Uint8Array(e),null),H(this.f,this.c,"mskeymessage",this.Od.bind(this)),H(this.f,this.c,"mskeyadded",this.Md.bind(this)),H(this.f,this.c,"mskeyerror",this.Nd.bind(this)),Ps(this,"status-pending")}catch(t){this.a.reject(t)}return this.a},Lo.load=function(){return Promise.reject(Error("MediaKeySession.load not yet supported"))},Lo.update=function(t){this.b=new b;try{this.c.update(new Uint8Array(t))}catch(t){this.b.reject(t)}return this.b},Lo.close=function(){try{this.c.close(),this.closed.resolve(),q(this.f)}catch(t){this.closed.reject(t)}return this.closed},Lo.remove=function(){return Promise.reject(Error("MediaKeySession.remove is only applicable for persistent licenses, which are not supported on this platform"))},Lo.Od=function(t){this.a&&(this.a.resolve(),this.a=null),this.dispatchEvent(new X("message",{messageType:void 0==this.keyStatuses.a?"licenserequest":"licenserenewal",message:t.message.buffer}))},Lo.Md=function(){this.a?(Ps(this,"usable"),this.a.resolve(),this.a=null):this.b&&(Ps(this,"usable"),this.b.resolve(),this.b=null)},Lo.Nd=function(){var t=Error("EME PatchedMediaKeysMs key error");if(t.errorCode=this.c.error,this.a)this.a.reject(t),this.a=null;else if(this.b)this.b.reject(t),this.b=null;else switch(this.c.error.code){case MSMediaKeyError.MS_MEDIA_KEYERR_OUTPUT:case MSMediaKeyError.MS_MEDIA_KEYERR_HARDWARECHANGE:Ps(this,"output-not-allowed");default:Ps(this,"internal-error")}};var Eu;Lo=xs.prototype,Lo.forEach=function(t){this.a&&t(this.a,Eu)},Lo.get=function(t){if(this.has(t))return this.a},Lo.has=function(t){var e=Eu;return!(!this.a||!ft(new Uint8Array(t),new Uint8Array(e)))},Lo.entries=function(){},Lo.keys=function(){},Lo.values=function(){},Ls.prototype.createSession=function(){},Ls.prototype.setServerCertificate=function(){},Ds.prototype.getConfiguration=function(){},Ds.prototype.createMediaKeys=function(){};var Su="";js.prototype.createMediaKeys=function(){var t=new Bs(this.a);return Promise.resolve(t)},js.prototype.getConfiguration=function(){return this.b},Lo=Bs.prototype,Lo.createSession=function(t){var e=t||"temporary";if("temporary"!=e&&"persistent-license"!=e)throw new TypeError("Session type "+t+" is unsupported on this platform.");return t=this.b||document.createElement("video"),t.src||(t.src="about:blank"),e=new Hs(t,this.g,e),this.c.push(e),e},Lo.setServerCertificate=function(){return Promise.resolve(!1)},Lo.be=function(t){var e=document.createEvent("CustomEvent");e.initCustomEvent("encrypted",!1,!1,null),e.initDataType="webm",e.initData=t.initData,this.b.dispatchEvent(e)},Lo.ae=function(t){var e=Vs(this,t.sessionId);e&&(t=new X("message",{messageType:void 0==e.keyStatuses.a?"licenserequest":"licenserenewal",message:t.message}),e.b&&(e.b.resolve(),e.b=null),e.dispatchEvent(t))},Lo.Zd=function(t){(t=Vs(this,t.sessionId))&&(qs(t,"usable"),t.a&&t.a.resolve(),t.a=null)},Lo.$d=function(t){var e=Vs(this,t.sessionId);if(e){var i=Error("EME v0.1b key error");i.errorCode=t.errorCode,i.errorCode.systemCode=t.systemCode,!t.sessionId&&e.b?(i.method="generateRequest",45==t.systemCode&&(i.message="Unsupported session type."),e.b.reject(i),e.b=null):t.sessionId&&e.a?(i.method="update",e.a.reject(i),e.a=null):(i=t.systemCode,t.errorCode.code==MediaKeyError.MEDIA_KEYERR_OUTPUT?qs(e,"output-restricted"):1==i?qs(e,"expired"):qs(e,"internal-error"))}},i(Hs),Lo=Hs.prototype,Lo.ac=function(t,e){if(this.a)this.a.then(this.ac.bind(this,t,e)).catch(this.ac.bind(this,t,e));else{if(this.a=t,"webkit-org.w3.clearkey"==this.c){var i=tt(e),n=JSON.parse(i);"oct"!=n.keys[0].kty&&(this.a.reject(Error("Response is not a valid JSON Web Key Set.")),this.a=null),i=ht(n.keys[0].k),n=ht(n.keys[0].kid)}else i=new Uint8Array(e),n=null;var r=Cs("addKey");try{this.f[r](this.c,i,n,this.sessionId)}catch(t){this.a.reject(t),this.a=null}}},Lo.generateRequest=function(t,e){return Ks(this,e,null)},Lo.load=function(t){return"persistent-license"==this.g?Ks(this,null,t):Promise.reject(Error("Not a persistent session."))},Lo.update=function(t){var e=new b;return this.ac(e,t),e},Lo.close=function(){if("persistent-license"!=this.g){if(!this.sessionId)return this.closed.reject(Error("The session is not callable.")),this.closed;var t=Cs("cancelKeyRequest");try{this.f[t](this.c,this.sessionId)}catch(t){}}return this.closed.resolve(),this.closed},Lo.remove=function(){return"persistent-license"!=this.g?Promise.reject(Error("Not a persistent session.")):this.close()};var Au;Lo=Gs.prototype,Lo.forEach=function(t){this.a&&t(this.a,Au)},Lo.get=function(t){if(this.has(t))return this.a},Lo.has=function(t){var e=Au;return!(!this.a||!ft(new Uint8Array(t),new Uint8Array(e)))},Lo.entries=function(){},Lo.keys=function(){},Lo.values=function(){},ys(function(){!t.HTMLVideoElement||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration||(HTMLMediaElement.prototype.webkitGenerateKeyRequest?Ms("webkit"):HTMLMediaElement.prototype.generateKeyRequest?Ms(""):t.MSMediaKeys?(Eu=new Uint8Array([0]).buffer,delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=Es,t.MediaKeys=Ss,t.MediaKeySystemAccess=ws,navigator.requestMediaKeySystemAccess=Ts):(navigator.requestMediaKeySystemAccess=Rs,delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=Ns,t.MediaKeys=Ls,t.MediaKeySystemAccess=Ds))}),ys(function(){if(t.MediaSource)if(t.cast&&cast.__platform__&&cast.__platform__.canDisplayType)Qs();else if(navigator.vendor&&0<=navigator.vendor.indexOf("Apple")){var e=navigator.appVersion;Js(),0<=e.indexOf("Version/8")?t.MediaSource=null:0<=e.indexOf("Version/9")?Xs():0<=e.indexOf("Version/10")?(Xs(),zs()):0<=e.indexOf("Version/11")&&(Xs(),Ys())}});var ku=0;Zs.prototype.then=function(t,e){var i=new Zs;switch(this.Aa){case 1:ro(this,i,t);break;case 2:ro(this,i,e);break;case ku:this.c.push({M:i,zb:t}),this.b.push({M:i,zb:e})}return i},Zs.prototype.catch=function(t){return this.then(void 0,t)},Zs.prototype.la=function(t){if(this.Aa==ku){for(this.f=t,this.Aa=1,t=0;t<this.c.length;++t)ro(this,this.c[t].M,this.c[t].zb);this.c=[],this.b=[]}},Zs.prototype.a=function(t){if(this.Aa==ku){for(this.f=t,this.Aa=2,t=0;t<this.b.length;++t)ro(this,this.b[t].M,this.b[t].zb);this.c=[],this.b=[]}};var Iu=null,_u=[];ys(function(e){t.setImmediate?(oo=function(e){return t.setImmediate(e)},uo=function(e){return t.clearImmediate(e)}):(oo=function(e){return t.setTimeout(e,0)},uo=function(e){return t.clearTimeout(e)}),t.Promise&&!e||(t.Promise=Zs,t.Promise.resolve=to,t.Promise.reject=eo,t.Promise.all=io,t.Promise.race=no,t.Promise.prototype.then=Zs.prototype.then,t.Promise.prototype.catch=Zs.prototype.catch)}),ys(function(){if(t.HTMLMediaElement){var e=HTMLMediaElement.prototype.play;HTMLMediaElement.prototype.play=function(){var t=e.apply(this,arguments);return t&&t.catch(function(){}),t}}}),ys(function(){if(t.HTMLVideoElement){var e=HTMLVideoElement.prototype;!e.getVideoPlaybackQuality&&"webkitDroppedFrameCount"in e&&(e.getVideoPlaybackQuality=ho)}}),ys(function(){if(!t.VTTCue&&t.TextTrackCue){var e=TextTrackCue.length;if(3==e)t.VTTCue=co;else if(6==e)t.VTTCue=lo;else{try{var i=!!co(1,2,"")}catch(t){i=!1}i&&(t.VTTCue=co)}}}),e("shaka.text.Cue",fo);var Pu="auto";fo.positionAlign={LEFT:"line-left",RIGHT:"line-right",CENTER:"center",AUTO:Pu};var xu="center",Ru={LEFT:"left",RIGHT:"right",CENTER:xu,START:"start",END:"end"};fo.textAlign=Ru;var Nu="before",Lu={BEFORE:Nu,CENTER:"center",AFTER:"after"};fo.displayAlign=Lu;var Du=0,Mu=2,Cu=3;fo.writingDirection={HORIZONTAL_LEFT_TO_RIGHT:Du,HORIZONTAL_RIGHT_TO_LEFT:1,VERTICAL_LEFT_TO_RIGHT:Mu,VERTICAL_RIGHT_TO_LEFT:Cu};var Ou=0,Uu=1;fo.lineInterpretation={LINE_NUMBER:Ou,PERCENTAGE:Uu};var ju="center",Bu={CENTER:ju,START:"start",END:"end"};fo.lineAlign=Bu;var Fu=400;fo.fontWeight={NORMAL:Fu,BOLD:700};var Vu="normal",Hu={NORMAL:Vu,ITALIC:"italic",OBLIQUE:"oblique"};fo.fontStyle=Hu,fo.textDecoration={UNDERLINE:"underline",LINE_THROUGH:"lineThrough",OVERLINE:"overline"},po.prototype.parseInit=function(){},po.prototype.parseMedia=function(t,e){var i=tt(t),n=[],r=new DOMParser,a=null;try{a=r.parseFromString(i,"text/xml")}catch(t){throw new h(2,2,2005)}if(a){var s=a.getElementsByTagName("tt")[0];if(!s)throw new h(2,2,2005);r=s.getAttribute("ttp:frameRate"),a=s.getAttribute("ttp:subFrameRate");var o=s.getAttribute("ttp:frameRateMultiplier"),u=s.getAttribute("ttp:tickRate");if("default"!=(i=s.getAttribute("xml:space")||"default")&&"preserve"!=i)throw new h(2,2,2005);for(i="default"==i,r=new Ao(r,a,o,u),a=mo(s.getElementsByTagName("styling")[0]),o=mo(s.getElementsByTagName("layout")[0]),s=mo(s.getElementsByTagName("body")[0]),u=0;u<s.length;u++){var c=s[u],l=e.periodStart,f=r,d=a,p=o,m=i;if(c.hasAttribute("begin")||c.hasAttribute("end")||!/^\s*$/.test(c.textContent)){yo(c,m);var m=Eo(c.getAttribute("begin"),f),y=Eo(c.getAttribute("end"),f),f=Eo(c.getAttribute("dur"),f),v=c.textContent;if(null==y&&null!=f&&(y=m+f),null==m||null==y)throw new h(2,2,2001);l=new fo(m+l,y+l,v),m=wo(c,"region",p),p=l,"rtl"==go(c,m,d,"tts:direction")&&(p.writingDirection=1),y=go(c,m,d,"tts:writingMode"),"tb"==y||"tblr"==y?p.writingDirection=Mu:"tbrl"==y?p.writingDirection=Cu:"rltb"==y||"rl"==y?p.writingDirection=1:y&&(p.writingDirection=Du),(y=go(c,m,d,"tts:origin"))&&(y=$u.exec(y))&&(p.region.x=Number(y[1]),p.region.y=Number(y[2])),(y=go(c,m,d,"tts:extent"))&&(y=$u.exec(y))&&(p.region.width=Number(y[1]),p.region.height=Number(y[2])),(y=go(c,m,d,"tts:textAlign"))&&(p.positionAlign=Qu[y],p.lineAlign=Ju[y],p.textAlign=Ru[y.toUpperCase()]),(y=go(c,m,d,"tts:displayAlign"))&&(p.displayAlign=Lu[y.toUpperCase()]),(y=go(c,m,d,"tts:color"))&&(p.color=y),(y=go(c,m,d,"tts:backgroundColor"))&&(p.backgroundColor=y),(y=go(c,m,d,"tts:fontFamily"))&&(p.fontFamily=y),(y=go(c,m,d,"tts:fontWeight"))&&"bold"==y&&(p.fontWeight=700),(y=go(c,m,d,"tts:wrapOption"))&&"noWrap"==y&&(p.wrapLine=!1),(y=go(c,m,d,"tts:lineHeight"))&&y.match(Wu)&&(p.lineHeight=y),(y=go(c,m,d,"tts:fontSize"))&&y.match(Wu)&&(p.fontSize=y),(y=go(c,m,d,"tts:fontStyle"))&&(p.fontStyle=Hu[y.toUpperCase()]),(m=bo(m,d,"tts:textDecoration"))&&vo(p,m),(c=To(c,d,"tts:textDecoration"))&&vo(p,c)}else l=null;l&&n.push(l)}}return n};var Ku=/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/,qu=/^(?:(\d{2,}):)?(\d{2}):(\d{2})$/,Gu=/^(?:(\d{2,}):)?(\d{2}):(\d{2}\.\d{2,})$/,Xu=/^(\d*\.?\d*)f$/,Yu=/^(\d*\.?\d*)t$/,zu=/^(?:(\d*\.?\d*)h)?(?:(\d*\.?\d*)m)?(?:(\d*\.?\d*)s)?(?:(\d*\.?\d*)ms)?$/,$u=/^(\d{1,2}|100)% (\d{1,2}|100)%$/,Wu=/^(\d+px|\d+em)$/,Ju={left:"start",center:"center",right:"end",start:"start",end:"end"},Qu={left:"line-left",center:"center",right:"line-right"};Ko["application/ttml+xml"]=po,ko.prototype.parseInit=function(t){var e=!1;if((new li).C("moov",fi).C("trak",fi).C("mdia",fi).C("minf",fi).C("stbl",fi).ba("stsd",di).C("stpp",function(t){e=!0,t.oa.stop()}).parse(t),!e)throw new h(2,2,2007)},ko.prototype.parseMedia=function(t,e){var i=!1,n=[];if((new li).C("mdat",pi(function(t){i=!0,n=n.concat(this.a.parseMedia(t,e))}.bind(this))).parse(t),!i)throw new h(2,2,2007);return n},Ko['application/mp4; codecs="stpp"']=ko,Ko['application/mp4; codecs="stpp.TTML.im1t"']=ko,Io.prototype.parseInit=function(){},Io.prototype.parseMedia=function(t,e){var i=tt(t),i=i.replace(/\r\n|\r(?=[^\n]|$)/gm,"\n"),i=i.split(/\n{2,}/m);if(!/^WEBVTT($|[ \t\n])/m.test(i[0]))throw new h(2,2,2e3);var n=e.segmentStart;if(0<=i[0].indexOf("X-TIMESTAMP-MAP")){var r=i[0].match(/LOCAL:((?:(\d{1,}):)?(\d{2}):(\d{2})\.(\d{3}))/m),a=i[0].match(/MPEGTS:(\d+)/m);r&&a&&(n=Po(new mn(r[1])),n=e.periodStart+(Number(a[1])/9e4-n))}for(a=[],r=1;r<i.length;r++){var s=i[r].split("\n"),o=n;if(1==s.length&&!s[0]||/^NOTE($|[ \t])/.test(s[0])||"STYLE"==s[0])var u=null;else{u=null,0>s[0].indexOf("--\x3e")&&(u=s[0],s.splice(0,1));var c=new mn(s[0]),l=Po(c),f=yn(c,/[ \t]+--\x3e[ \t]+/g),d=Po(c);if(null==l||!f||null==d)throw new h(2,2,2001);for(s=new fo(l+o,d+o,s.slice(1).join("\n").trim()),yn(c,/[ \t]+/gm),o=vn(c);o;)_o(s,o),yn(c,/[ \t]+/gm),o=vn(c);null!=u&&(s.id=u),u=s}u&&a.push(u)}return a},Ko["text/vtt"]=Io,Ko['text/vtt; codecs="vtt"']=Io,xo.prototype.parseInit=function(t){var e=!1;if((new li).C("moov",fi).C("trak",fi).C("mdia",fi).ba("mdhd",function(t){0==t.version?(t.o.H(4),t.o.H(4),this.a=t.o.B(),t.o.H(4)):(t.o.H(8),t.o.H(8),this.a=t.o.B(),t.o.H(8)),t.o.H(4)}.bind(this)).C("minf",fi).C("stbl",fi).ba("stsd",di).C("wvtt",function(){e=!0}).parse(t),!this.a)throw new h(2,2,2008);if(!e)throw new h(2,2,2008)},xo.prototype.parseMedia=function(t,e){if(!this.a)throw new h(2,2,2008);var i=0,n=[],r=[],a=[],s=!1,o=!1,u=!1,c=null;if((new li).C("moof",fi).C("traf",fi).ba("tfdt",function(t){s=!0,i=t.version?t.o.Na():t.o.B()}).ba("tfhd",function(t){var e=t.lc;t=t.o,t.H(4),1&e&&t.H(8),2&e&&t.H(4),c=8&e?t.B():null}).ba("trun",function(t){o=!0;var e=t.version,i=t.lc;t=t.o;var r=t.B();1&i&&t.H(4),4&i&&t.H(4);for(var a=[],s=0;s<r;s++){var u={duration:null,bc:null};256&i&&(u.duration=t.B()),512&i&&t.H(4),1024&i&&t.H(4),2048&i&&(u.bc=e?t.Hc():t.B()),a.push(u)}n=a}).C("vtte",function(){r.push(null)}).C("vttc",pi(function(t){r.push(t)})).C("mdat",function(t){u=!0,fi(t)}).parse(t),!u&&!s&&!o)throw new h(2,2,2008);for(var l=i,f=0;f<n.length;f++){var d=n[f],p=r[f],m=d.duration||c;m&&(d=d.bc?i+d.bc:l,l=d+m,p&&a.push(Ro(p,e.periodStart+d/this.a,e.periodStart+l/this.a)))}return a.filter(R)},Ko['application/mp4; codecs="wvtt"']=xo}).call(r,this),void 0!==t&&t.exports?t.exports=r.shaka:void 0!==(n=function(){return r.shaka}.call(e,i,e,t))&&(t.exports=n)}()}])});
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("clappr")):"function"==typeof define&&define.amd?define(["clappr"],e):"object"==typeof exports?exports.DashShakaPlayback=e(require("clappr")):t.DashShakaPlayback=e(t.Clappr)}("undefined"!=typeof self?self:this,function(t){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="dist/",e(e.s=0)}([function(t,e,n){"use strict";function i(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(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}function o(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)}Object.defineProperty(e,"__esModule",{value:!0});var s=function t(e,n,i){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,n);if(void 0===r){var a=Object.getPrototypeOf(e);return null===a?void 0:t(a,n,i)}if("value"in r)return r.value;var o=r.get;if(void 0!==o)return o.call(i)},u=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),c=n(1),h=n(2),l=function(t){return t&&t.__esModule?t:{default:t}}(h),f=function(t){function e(){var t;r(this,e);for(var n=arguments.length,i=Array(n),o=0;o<n;o++)i[o]=arguments[o];var s=a(this,(t=e.__proto__||Object.getPrototypeOf(e)).call.apply(t,[this].concat(i)));return s._levels=[],s._pendingAdaptationEvent=!1,s._isShakaReadyState=!1,s._minDvrSize=void 0===s.options.dashMinimumDvrSize?60:s.options.dashMinimumDvrSize,s}return o(e,t),u(e,[{key:"name",get:function(){return"dash_shaka_playback"}},{key:"shakaVersion",get:function(){return l.default.player.Player.version}},{key:"shakaPlayerInstance",get:function(){return this._player}},{key:"levels",get:function(){return this._levels}},{key:"currentLevel",set:function(t){var e=this;this._currentLevelId=t;var n=-1===this._currentLevelId;this.trigger(c.Events.PLAYBACK_LEVEL_SWITCH_START),n?(this._player.configure({abr:{enabled:!0}}),this.trigger(c.Events.PLAYBACK_LEVEL_SWITCH_END)):(this._player.configure({abr:{enabled:!1}}),this._pendingAdaptationEvent=!0,this.selectTrack(this.videoTracks.filter(function(t){return t.id===e._currentLevelId})[0]))},get:function(){return this._currentLevelId||-1}}],[{key:"canPlay",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";l.default.polyfill.installAll();var n=l.default.Player.isBrowserSupported(),i=t.split("?")[0].match(/.*\.(.*)$/)||[];return n&&("mpd"===i[1]||e.indexOf("application/dash+xml")>-1)}},{key:"Events",get:function(){return{SHAKA_READY:"shaka:ready"}}}]),u(e,[{key:"play",value:function(){if(this._player||this._setup(),!this.isReady)return void this.once(e.Events.SHAKA_READY,this.play);this._stopped=!1,this._src=this.el.src,s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"play",this).call(this),this._startUpdateTimers()}},{key:"pause",value:function(){s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"pause",this).call(this),this.dvrEnabled&&this._updateDvr(!0)}},{key:"_setupSrc",value:function(){}},{key:"_startUpdateTimers",value:function(){var t=this;this._timeUpdateTimer||(this._timeUpdateTimer=setInterval(function(){t._onDurationChange(),t._onTimeUpdate()},200))}},{key:"_stopUpdateTimers",value:function(){clearInterval(this._timeUpdateTimer),this._timeUpdateTimer=null,clearInterval(this._progressUpdateTimer),this._progressUpdateTimer=null}},{key:"_ready",value:function(){}},{key:"_onShakaReady",value:function(){this._isShakaReadyState=!0,this.trigger(e.Events.SHAKA_READY),this.trigger(c.Events.PLAYBACK_READY,this.name)}},{key:"error",value:function(t){c.Log.error("an error was raised by the video tag",t,this.el.error)}},{key:"isHighDefinitionInUse",value:function(){return!1}},{key:"stop",value:function(){var t=this;clearInterval(this.sendStatsId),this._stopUpdateTimers(),this._stopped=!0,this._player?(this._sendStats(),this._player.unload().then(function(){s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"stop",t).call(t),t._player=null,t._isShakaReadyState=!1}).catch(function(){c.Log.error("shaka could not be unloaded")})):s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"stop",this).call(this)}},{key:"getPlaybackType",value:function(){return this._playbackType}},{key:"getCurrentTime",value:function(){return Math.max(0,this.el.currentTime-this._startTime)}},{key:"getDuration",value:function(){return this._duration}},{key:"isSeekEnabled",value:function(){return this._playbackType===c.Playback.VOD||this.dvrEnabled}},{key:"seekPercentage",value:function(t){var e=this._duration;t>0&&(e=this._duration*(t/100)),this.seek(e)}},{key:"seek",value:function(t){t<0&&(c.Log.warn("Attempt to seek to a negative time. Resetting to live point."),t=this.getDuration()),this.dvrEnabled&&this._updateDvr(t<this.getDuration()-3),t+=this._startTime,s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"seek",this).call(this,t)}},{key:"selectAudioLanguage",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this._player.selectAudioLanguage(t,e)}},{key:"selectTrack",value:function(t){if("text"===t.type)this._player.selectTextTrack(t);else{if("variant"!==t.type)throw new Error("Unhandled track type:",t.type);this._player.selectVariantTrack(t),t.mimeType.startsWith("video/")&&this._onAdaptation()}}},{key:"_enableShakaTextTrack",value:function(t){this.el.textTracks&&(this._shakaTTVisible=t,Array.from(this.el.textTracks).filter(function(t){return"subtitles"===t.kind}).forEach(function(e){return e.mode=!0===t?"showing":"hidden"}))}},{key:"_checkForClosedCaptions",value:function(){if(!this._ccIsSetup){if(this.hasClosedCaptionsTracks){this.trigger(c.Events.PLAYBACK_SUBTITLE_AVAILABLE);var t=this.closedCaptionsTrackId;this.closedCaptionsTrackId=t}this._ccIsSetup=!0}}},{key:"destroy",value:function(){var t=this;this._stopUpdateTimers(),clearInterval(this.sendStatsId),this._player?this._player.destroy().then(function(){return t._destroy()}).catch(function(){t._destroy(),c.Log.error("shaka could not be destroyed")}):this._destroy(),s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"destroy",this).call(this)}},{key:"_setup",value:function(){var t=this;this._isShakaReadyState=!1,this._ccIsSetup=!1,this._player=this._createPlayer(),this._options.shakaConfiguration&&this._player.configure(this._options.shakaConfiguration),this._options.shakaOnBeforeLoad&&this._options.shakaOnBeforeLoad(this._player),this._player.load(this._options.src).then(function(){return t._loaded()}).catch(function(e){return t._setupError(e)})}},{key:"_createPlayer",value:function(){var t=new l.default.Player(this.el);return t.addEventListener("error",this._onError.bind(this)),t.addEventListener("adaptation",this._onAdaptation.bind(this)),t.addEventListener("buffering",this._onBuffering.bind(this)),t}},{key:"_onBuffering",value:function(t){if(!this._stopped){var e=t.buffering?c.Events.PLAYBACK_BUFFERING:c.Events.PLAYBACK_BUFFERFULL;this.trigger(e)}}},{key:"_onProgress",value:function(){if(this.el.buffered.length){for(var t=[],e=0,n=0;n<this.el.buffered.length;n++)t=[].concat(i(t),[{start:Math.max(0,this.el.buffered.start(n)-this._startTime),end:Math.max(0,this.el.buffered.end(n)-this._startTime)}]),this.el.currentTime>=t[n].start&&this.el.currentTime<=t[n].end&&(e=n);var r={start:t[e].start,current:t[e].end,total:this.getDuration()};this.trigger(c.Events.PLAYBACK_PROGRESS,r,t)}}},{key:"_onDurationChange",value:function(){var t=this.getDuration();this._lastDuration!==t&&(this._lastDuration=t,s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"_onDurationChange",this).call(this))}},{key:"_updateSettings",value:function(){this._playbackType===c.Playback.VOD?this.settings.left=["playpause","position","duration"]:this.dvrEnabled?this.settings.left=["playpause"]:this.settings.left=["playstop"],this.settings.seekEnabled=this.isSeekEnabled(),this.trigger(c.Events.PLAYBACK_SETTINGSUPDATE)}},{key:"_onTimeUpdate",value:function(){var t={current:this.getCurrentTime(),total:this.getDuration(),firstFragDateTime:this._player.getPresentationStartTimeAsDate()};this._lastTimeUpdate&&t.current===this._lastTimeUpdate.current&&t.total===this._lastTimeUpdate.total||(this._lastTimeUpdate=t,this.trigger(c.Events.PLAYBACK_TIMEUPDATE,t,this.name))}},{key:"_updateDvr",value:function(t){this.trigger(c.Events.PLAYBACK_DVR,t),this.trigger(c.Events.PLAYBACK_STATS_ADD,{dvr:t})}},{key:"_loaded",value:function(){this._onShakaReady(),this._startToSendStats(),this._fillLevels(),this._checkForClosedCaptions()}},{key:"_fillLevels",value:function(){0===this._levels.length&&(this._levels=this.videoTracks.slice(0).reverse(),this.trigger(c.Events.PLAYBACK_LEVELS_AVAILABLE,this.levels))}},{key:"_startToSendStats",value:function(){var t=this,e=this._options.shakaSendStatsInterval||3e4;this.sendStatsId=setInterval(function(){return t._sendStats()},e)}},{key:"_sendStats",value:function(){this.trigger(c.Events.PLAYBACK_STATS_ADD,this._player.getStats())}},{key:"_setupError",value:function(t){this._onError(t)}},{key:"_onError",value:function(t){var n=this,i={shakaError:t,videoError:this.el.error},r=i.shakaError.detail||i.shakaError,a=r.category,o=r.code,u=r.severity;if(i.videoError||!o&&!a)return s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"_onError",this).call(this);var h=u===l.default.util.Error.Severity.CRITICAL,f={code:a+"_"+o,description:"Category: "+a+", code: "+o+", severity: "+u,level:h?c.PlayerError.Levels.FATAL:c.PlayerError.Levels.WARN,raw:t},d=this.createError(f);c.Log.error("Shaka error event:",d),this.trigger(c.Events.PLAYBACK_ERROR,d),t.detail&&2==t.detail.severity&&1002==t.detail.code&&(console.log("retrying"),this.stop(),setTimeout(function(){return n.play()},1e3))}},{key:"_onAdaptation",value:function(){var t=this.videoTracks.filter(function(t){return!0===t.active})[0];this._fillLevels(),this._sendStats(),this._pendingAdaptationEvent_&&(this.trigger(c.Events.PLAYBACK_LEVEL_SWITCH_END),this._pendingAdaptationEvent=!1),c.Log.debug("an adaptation has happened:",t),this.trigger(c.Events.PLAYBACK_BITRATE,{bandwidth:t.bandwidth,language:t.language,width:t.width,height:t.height,level:t.id})}},{key:"_destroy",value:function(){this._isShakaReadyState=!1,c.Log.debug("shaka was destroyed")}},{key:"isReady",get:function(){return this._isShakaReadyState}},{key:"textTracks",get:function(){return this.isReady&&this._player.getTextTracks()}},{key:"audioLanguages",get:function(){return this.isReady&&this._player.getAudioLanguages()}},{key:"audioTracks",get:function(){return this.isReady&&this._player.getVariantTracks().filter(function(t){return t.mimeType.startsWith("audio/")})}},{key:"videoTracks",get:function(){return this.isReady&&this._player.getVariantTracks().filter(function(t){return t.mimeType.startsWith("video/")})}},{key:"dvrEnabled",get:function(){return this._player.isLive()&&this._duration>=this._minDvrSize}},{key:"_startTime",get:function(){return this._player.seekRange().start}},{key:"_duration",get:function(){if(!this._player)return 0;var t=this._player.seekRange(),e=t.start;return t.end-e}},{key:"_playbackType",get:function(){return(this.isReady&&this._player.isLive()?c.Playback.LIVE:c.Playback.VOD)||""}},{key:"closedCaptionsTracks",get:function(){var t=0,e=function(){return t++};return(this.textTracks||[]).filter(function(t){return"subtitle"===t.kind}).map(function(t){return{id:e(),name:t.label||t.language,track:t}})}},{key:"closedCaptionsTrackId",get:function(){return s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"closedCaptionsTrackId",this)},set:function(t){if(this._player){var e=this.closedCaptionsTracks,n=void 0;if(-1!==t){if(!(n=e.find(function(e){return e.id===t})))return void c.Log.warn('Track id "'+t+'" not found');if(this._shakaTTVisible&&!0===n.track.active)return void c.Log.info('Track id "'+t+'" already showing')}n?(this._player.selectTextTrack(n.track),this._enableShakaTextTrack(!0)):this._enableShakaTextTrack(!1),this._ccTrackId=t,this.trigger(c.Events.PLAYBACK_SUBTITLE_CHANGED,{id:t})}}}]),e}(c.HTML5Video);e.default=f,t.exports=e.default},function(e,n){e.exports=t},function(t,e,n){(function(t){!function(){var n="undefined"!=typeof window?window:t,i={};(function(t,e){function n(){n=function(){},Bu.Symbol||(Bu.Symbol=Fu)}function i(){n();var t=Bu.Symbol.iterator;t||(t=Bu.Symbol.iterator=Bu.Symbol("iterator")),"function"!=typeof Array.prototype[t]&&ju(Array.prototype,t,{configurable:!0,writable:!0,value:function(){return r(this)}}),i=function(){}}function r(t){var e=0;return a(function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}})}function a(t){return i(),t={next:t},t[Bu.Symbol.iterator]=function(){return this},t}function o(t){i();var e=t[Symbol.iterator];return e?e.call(t):r(t)}function s(t,e){if(e){for(var n=Bu,i=t.split("."),r=0;r<i.length-1;r++){var a=i[r];a in n||(n[a]={}),n=n[a]}i=i[i.length-1],r=n[i],a=e(r),a!=r&&null!=a&&ju(n,i,{configurable:!0,writable:!0,value:a})}}function u(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise(function(i,r){function a(t){t.done?i(t.value):Promise.resolve(t.value).then(e,n).then(a,r)}a(t.next())})}function c(t){return u(t())}function h(){this.g=!1,this.c=null,this.K=void 0,this.w=1,this.b=this.f=0,this.i=this.a=null}function l(t){if(t.g)throw new TypeError("Generator is already running");t.g=!0}function f(t,e){t.a={rc:e,yc:!0},t.w=t.f||t.b}function d(t,e,n){return t.w=n,{value:e}}function p(t,e,n){t.f=e,void 0!=n&&(t.b=n)}function m(t){t.f=0,t.b=2}function v(t){t.w=0,t.f=0}function y(t){t.f=0;var e=t.a.rc;return t.a=null,e}function g(t){t.i=[t.a],t.f=0,t.b=0}function b(t,e){var n=t.i.splice(0)[0];(n=t.a=t.a||n)?n.yc?t.w=t.f||t.b:void 0!=n.V&&t.b<n.V?(t.w=n.V,t.a=null):t.w=t.b:t.w=e}function w(t){this.a=new h,this.b=t}function T(t,e){l(t.a);var n=t.a.c;return n?E(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.a.return):(t.a.return(e),S(t))}function E(t,e,n,i){try{var r=e.call(t.a.c,n);if(!(r instanceof Object))throw new TypeError("Iterator result "+r+" is not an object");if(!r.done)return t.a.g=!1,r;var a=r.value}catch(e){return t.a.c=null,f(t.a,e),S(t)}return t.a.c=null,i.call(t.a,a),S(t)}function S(t){for(;t.a.w;)try{var e=t.b(t.a);if(e)return t.a.g=!1,{value:e.value,done:!1}}catch(e){t.a.K=void 0,f(t.a,e)}if(t.a.g=!1,t.a.a){if(e=t.a.a,t.a.a=null,e.yc)throw e.rc;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function k(t){this.next=function(e){return l(t.a),t.a.c?e=E(t,t.a.c.next,e,t.a.h):(t.a.h(e),e=S(t)),e},this.throw=function(e){return l(t.a),t.a.c?e=E(t,t.a.c.throw,e,t.a.h):(f(t.a,e),e=S(t)),e},this.return=function(e){return T(t,e)},i(),this[Symbol.iterator]=function(){return this}}function A(t,e){return k.prototype=t.prototype,new k(new w(e))}function _(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function I(t,e){var n=t.split("."),i=Vu;n[0]in i||!i.execScript||i.execScript("var "+n[0]);for(var r;n.length&&(r=n.shift());)n.length||void 0===e?i=i[r]?i[r]:i[r]={}:i[r]=e}function x(t,e){function n(){}n.prototype=e.prototype,t.hf=e.prototype,t.prototype=new n,t.prototype.constructor=t,t.ff=function(t,n,i){return e.prototype[n].apply(t,Array.prototype.slice.call(arguments,2))}}function P(t){this.c=Math.exp(Math.log(.5)/t),this.b=this.a=0}function R(t,e,n){var i=Math.pow(t.c,e);n=n*(1-i)+i*t.a,isNaN(n)||(t.a=n,t.b+=e)}function N(t){return t.a/(1-Math.pow(t.c,t.b))}function D(){this.b=new P(2),this.c=new P(5),this.a=0}function C(){}function M(){}function L(t){var e;t instanceof L?(O(this,t.ia),this.Fa=t.Fa,this.la=t.la,U(this,t.Qa),this.aa=t.aa,j(this,H(t.a)),this.za=t.za):t&&(e=String(t).match(Ku))?(O(this,e[1]||"",!0),this.Fa=B(e[2]||""),this.la=B(e[3]||"",!0),U(this,e[4]),this.aa=B(e[5]||"",!0),j(this,e[6]||"",!0),this.za=B(e[7]||"")):this.a=new K(null)}function O(t,e,n){t.ia=n?B(e,!0):e,t.ia&&(t.ia=t.ia.replace(/:$/,""))}function U(t,e){if(e){if(e=Number(e),isNaN(e)||0>e)throw Error("Bad port number "+e);t.Qa=e}else t.Qa=null}function j(t,e,n){e instanceof K?t.a=e:(n||(e=F(e,Xu)),t.a=new K(e))}function B(t,e){return t?e?decodeURI(t):decodeURIComponent(t):""}function F(t,e,n){return"string"==typeof t?(t=encodeURI(t).replace(e,V),n&&(t=t.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),t):null}function V(t){return t=t.charCodeAt(0),"%"+(t>>4&15).toString(16)+(15&t).toString(16)}function K(t){this.b=t||null}function H(t){var e=new K;if(e.b=t.b,t.a){var n,i={};for(n in t.a)i[n]=t.a[n].concat();e.a=i,e.c=t.c}return e}function q(){var t,e,n=new Promise(function(n,i){t=n,e=i});return n.resolve=t,n.reject=e,n}function G(t,e){var n=Y();this.i=null==t.maxAttempts?n.maxAttempts:t.maxAttempts,this.f=null==t.baseDelay?n.baseDelay:t.baseDelay,this.h=null==t.fuzzFactor?n.fuzzFactor:t.fuzzFactor,this.g=null==t.backoffFactor?n.backoffFactor:t.backoffFactor,this.a=0,this.b=this.f,(this.c=e||!1)&&(this.a=1)}function X(e){if(e.a>=e.i){if(!e.c)return Promise.reject();e.a=1,e.b=e.f}var n=new q;return e.a?(t.setTimeout(n.resolve,e.b*(1+(2*Math.random()-1)*e.h)),e.b*=e.g):n.resolve(),e.a++,n}function Y(){return{maxAttempts:2,baseDelay:1e3,backoffFactor:2,fuzzFactor:.5,timeout:0}}function z(t,e,n,i){this.severity=t,this.category=e,this.code=n,this.data=Array.prototype.slice.call(arguments,3),this.handled=!1}function W(t,e){this.promise=t,this.b=e,this.a=!1}function $(t){return new W(Promise.reject(t),function(){return Promise.resolve()})}function J(){var t=Promise.reject(new z(2,7,7001));return t.catch(function(){}),new W(t,function(){return Promise.resolve()})}function Q(t){return new W(Promise.resolve(t),function(){return Promise.resolve()})}function Z(t){return new W(t,function(){return t.catch(function(){})})}function tt(t){return new W(Promise.all(t.map(function(t){return t.promise})),function(){return Promise.all(t.map(function(t){return t.abort()}))})}function et(t,e,n){try{var i=t(e);return i&&i.promise&&i.abort?(n.resolve(i.promise),function(){return i.abort()}):(n.resolve(i),function(){return Promise.resolve(i).then(function(){}).catch(function(){})})}catch(t){return n.reject(t),function(){return Promise.resolve()}}}function nt(t,e){return!("number"!=typeof t||"number"!=typeof e||!isNaN(t)||!isNaN(e))||t===e}function it(t,e){e||(e=nt);for(var n=[],i=o(t),r=i.next();!r.done;r=i.next())r=r.value,-1==rt(n,r,e)&&n.push(r);return n}function rt(t,e,n){for(var i=0;i<t.length;++i)if(n(t[i],e))return i;return-1}function at(t,e){var n=t.indexOf(e);-1<n&&t.splice(n,1)}function ot(t,e){var n=0;return t.forEach(function(t){n+=e(t)?1:0}),n}function st(t,e,n,i,r){var a,o=r in i,s=!0;for(a in e){var u=r+"."+a,c=o?i[r]:n[a];o||a in t?void 0===e[a]?void 0===c||o?delete t[a]:t[a]=ut(c):c.constructor==Object&&e[a]&&e[a].constructor==Object?(t[a]||(t[a]=ut(c)),u=st(t[a],e[a],c,i,u),s=s&&u):typeof e[a]!=typeof c||null==e[a]||e[a].constructor!=c.constructor?s=!1:t[a]=e[a]:s=!1}return s}function ut(t){function e(t){switch(typeof t){case"undefined":case"boolean":case"number":case"string":case"symbol":case"function":return t;default:if(!t||t.buffer&&t.buffer.constructor==ArrayBuffer)return t;if(0<=n.indexOf(t))return null;var i=t.constructor==Array;if(t.constructor!=Object&&!i)return null;n.push(t);var r,a=i?[]:{};for(r in t)a[r]=e(t[r]);return i&&(a.length=t.length),a}}var n=[];return e(t)}function ct(t,e){function n(){return Promise.all(t.map(function(t){return t.destroy()}))}return Promise.resolve(e()).then(function(t){return n().then(function(){return t})},function(t){return n().then(function(){throw t})})}function ht(){this.a=[]}function lt(t,e){t.a.push(e.finally(function(){at(t.a,e)}))}function ft(t){this.c=!1,this.g=new ht,this.a=[],this.b=[],this.f=t||null}function dt(t,e,n){n=n||3;var i=zu[t];(!i||n>=i.priority)&&(zu[t]={priority:n,me:e})}function pt(t,e){return{uris:t,method:"GET",body:null,headers:{},allowCrossSiteCredentials:!1,retryParameters:e}}function mt(t){return t.then=function(e,n){return C("The network request interface has changed! Please update your application to the new interface, which allows operations to be aborted. Support for the old API will be removed in v2.5."),t.promise.then(e,n)},t.catch=function(e){return C("The network request interface has changed! Please update your application to the new interface, which allows operations to be aborted. Support for the old API will be removed in v2.5."),t.promise.catch(e)},t}function vt(t,e,n){var i=Q(void 0);return t.a.forEach(function(t){i=i.X(function(){return t(e,n)})}),i.X(void 0,function(t){if(t&&7001==t.code)throw t;throw new z(2,1,1006,t)})}function yt(t,e,n,i,r,a){var o=new L(n.uris[r]),s=o.ia;s||(s=location.protocol,s=s.slice(0,-1),O(o,s),n.uris[r]=o.toString());var u=(s=zu[s])?s.me:null;if(!u)return $(new z(2,1,1e3,o));var c;return Z(X(i)).X(function(){if(t.c)return J();c=Date.now();var i=u(n.uris[r],n,e);return void 0==i.promise&&(C("The scheme plugin interface has changed! Please update your scheme plugins to the new interface to add support for abort(). Support for the old plugin interface will be removed in v2.5."),i=Z(i)),i}).X(function(t){return void 0==t.timeMs&&(t.timeMs=Date.now()-c),t},function(o){if(o&&7001==o.code)throw o;if(t.c)return J();if(o&&1==o.severity)return r=(r+1)%n.uris.length,yt(t,e,n,i,r,o);throw o||a})}function gt(t,e,n){var i=Q(void 0);return t.b.forEach(function(t){i=i.X(function(){return t(e,n)})}),i.X(function(){return n},function(t){if(t&&7001==t.code)throw t;var e=2;throw t instanceof z&&(e=t.severity),new z(e,1,1007,t)})}function bt(){this.a={}}function wt(){this.a=new bt}function Tt(t,e,n,i){t.a&&(e=new kt(e,n,i),t.a.push(n,e))}function Et(t,e,n,i){Tt(t,e,n,function(t){this.pa(e,n),i(t)}.bind(t))}function St(t){if(t.a){var e,n=t.a,i=[];for(e in n.a)i.push.apply(i,n.a[e]);for(n=0;n<i.length;++n)i[n].pa();t.a.a={}}}function kt(t,e,n){this.target=t,this.type=e,this.a=n,this.target.addEventListener(e,n,!1)}function At(e,n){var i,r=n||{};for(i in r)this[i]=r[i];this.defaultPrevented=this.cancelable=this.bubbles=!1,this.timeStamp=t.performance&&t.performance.now?t.performance.now():Date.now(),this.type=e,this.isTrusted=!1,this.target=this.currentTarget=null,this.a=!1}function _t(t,e){return t.reduce(function(t,e,n){return e.catch(t.bind(null,n))}.bind(null,e),Promise.reject())}function It(t,e){return t.concat(e)}function xt(){}function Pt(t){return null!=t}function Rt(t,e,n){return n.indexOf(t)==e}function Nt(t,e){if(0==e.length)return t;var n=e.map(function(t){return new L(t)});return t.map(function(t){return new L(t)}).map(function(t){return n.map(t.resolve.bind(t))}).reduce(It,[]).map(function(t){return t.toString()})}function Dt(t,e){return{keySystem:t,licenseServerUri:"",distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,initData:e||[],keyIds:[]}}function Ct(t,e){var n=t;return e&&(n+='; codecs="'+e+'"'),n}function Mt(t){if(!t)return"";t=new Uint8Array(t),239==t[0]&&187==t[1]&&191==t[2]&&(t=t.subarray(3)),t=escape(jt(t));try{return decodeURIComponent(t)}catch(t){throw new z(2,2,2004)}}function Lt(t,e,n){if(!t)return"";if(!n&&0!=t.byteLength%2)throw new z(2,2,2004);if(t instanceof ArrayBuffer)var i=t;else n=new Uint8Array(t.byteLength),n.set(new Uint8Array(t)),i=n.buffer;t=Math.floor(t.byteLength/2),n=new Uint16Array(t),i=new DataView(i);for(var r=0;r<t;r++)n[r]=i.getUint16(2*r,e);return jt(n)}function Ot(t){var e=new Uint8Array(t);if(239==e[0]&&187==e[1]&&191==e[2])return Mt(e);if(254==e[0]&&255==e[1])return Lt(e.subarray(2),!1);if(255==e[0]&&254==e[1])return Lt(e.subarray(2),!0);var n=function(t,e){return t.byteLength<=e||32<=t[e]&&126>=t[e]}.bind(null,e);if(0==e[0]&&0==e[2])return Lt(t,!1);if(0==e[1]&&0==e[3])return Lt(t,!0);if(n(0)&&n(1)&&n(2)&&n(3))return Mt(t);throw new z(2,2,2003)}function Ut(t){t=encodeURIComponent(t),t=unescape(t);for(var e=new Uint8Array(t.length),n=0;n<t.length;++n)e[n]=t.charCodeAt(n);return e.buffer}function jt(t){for(var e="",n=0;n<t.length;n+=16e3)e+=String.fromCharCode.apply(null,t.subarray(n,n+16e3));return e}function Bt(t){this.a=null,this.b=function(){this.a=null,t()}.bind(this)}function Ft(t){var e=tc;t.cancel(),t.a=setTimeout(t.b,1e3*e)}function Vt(t,e){t.cancel();var n=function(){this.b(),this.a=setTimeout(n,1e3*e)}.bind(t);t.a=setTimeout(n,1e3*e)}function Kt(e,n){var i=void 0==n||n,r=t.btoa(jt(e)).replace(/\+/g,"-").replace(/\//g,"_");return i?r:r.replace(/=*$/,"")}function Ht(e){e=t.atob(e.replace(/-/g,"+").replace(/_/g,"/"));for(var n=new Uint8Array(e.length),i=0;i<e.length;++i)n[i]=e.charCodeAt(i);return n}function qt(e){for(var n=new Uint8Array(e.length/2),i=0;i<e.length;i+=2)n[i/2]=t.parseInt(e.substr(i,2),16);return n}function Gt(t){for(var e="",n=0;n<t.length;++n){var i=t[n].toString(16);1==i.length&&(i="0"+i),e+=i}return e}function Xt(t,e){if(!t&&!e)return!0;if(!t||!e||t.length!=e.length)return!1;for(var n=0;n<t.length;++n)if(t[n]!=e[n])return!1;return!0}function Yt(t){for(var e=0,n=0;n<arguments.length;++n)e+=arguments[n].length;e=new Uint8Array(e);for(var i=n=0;i<arguments.length;++i)e.set(arguments[i],n),n+=arguments[i].length;return e}function zt(t){this.s=t,this.l=this.j=this.u=null,this.L=!1,this.b=null,this.g=new wt,this.a=[],this.o=[],this.i=new q,this.f=null,this.h=function(e){this.i.reject(e),t.onError(e)}.bind(this),this.S={},this.m={},this.G=new Bt(this.oe.bind(this)),this.ga=this.c=!1,this.I=[],this.Y=!1,this.A=new Bt(this.ne.bind(this)),Vt(this.A,1),this.i.catch(function(){})}function Wt(t,e){return Promise.all(e.map(function(t){return oe(this,t).then(function(t){if(t){for(var e=new q,n=0;n<this.a.length;n++)if(this.a[n].ja==t){this.a[n].qa=e;break}return Promise.all([t.remove(),e])}}.bind(this))}.bind(t)))}function $t(t){var e=t.b?t.b.initData:[];return e.forEach(function(t){se(this,t.initDataType,t.initData)}.bind(t)),t.o.forEach(function(t){oe(this,t)}.bind(t)),e.length||t.o.length||t.i.resolve(),t.i}function Jt(t,e,n){for(var i=o(t.a),r=i.next();!r.done;r=i.next())if(Xt(n,r.value.initData))return;se(t,e,n)}function Qt(t){return t.a.map(function(t){return t.ja.sessionId})}function Zt(e,n,i,r,a){var o=ne(e),s=ie(e,n);n.periods.forEach(function(e){e.variants.forEach(function(e){o&&(e.drmInfos=[o]),s&&(e.drmInfos=s),e.drmInfos.forEach(function(n){ee(this,n),t.cast&&t.cast.__platform__&&"com.microsoft.playready"==n.keySystem&&(n.keySystem="com.chromecast.playready");var o=r[n.keySystem];o||(o={audioCapabilities:[],videoCapabilities:[],distinctiveIdentifier:"optional",persistentState:i?"required":"optional",sessionTypes:[i?"persistent-license":"temporary"],label:n.keySystem,drmInfos:[]},r[n.keySystem]=o,a.push(n.keySystem)),o.drmInfos.push(n),n.distinctiveIdentifierRequired&&(o.distinctiveIdentifier="required"),n.persistentStateRequired&&(o.persistentState="required");var s=[];e.video&&s.push(e.video),e.audio&&s.push(e.audio),s.forEach(function(t){("video"==t.type?o.videoCapabilities:o.audioCapabilities).push({robustness:("video"==t.type?n.videoRobustness:n.audioRobustness)||"",contentType:Ct(t.mimeType,t.codecs)})}.bind(this))}.bind(this))}.bind(this))}.bind(e))}function te(t,e,n,i){if(1==n.length&&""==n[0])return Promise.reject(new z(2,6,6e3));var r=new q,a=r;return[!0,!1].forEach(function(t){n.forEach(function(n){var i=e[n];i.drmInfos.some(function(t){return!!t.licenseServerUri})==t&&(0==i.audioCapabilities.length&&delete i.audioCapabilities,0==i.videoCapabilities.length&&delete i.videoCapabilities,a=a.catch(function(){return this.c?Promise.reject():navigator.requestMediaKeySystemAccess(n,[i])}.bind(this)))}.bind(this))}.bind(t)),a=a.catch(function(){return Promise.reject(new z(2,6,6001))}),a=a.then(function(t){if(this.c)return Promise.reject();var n=0<=navigator.userAgent.indexOf("Edge/"),i=t.getConfiguration();return this.u=(i.audioCapabilities||[]).concat(i.videoCapabilities||[]).map(function(t){return t.contentType}),n&&(this.u=null),n=e[t.keySystem],re(this,t.keySystem,n,n.drmInfos),this.b.licenseServerUri?t.createMediaKeys():Promise.reject(new z(2,6,6012))}.bind(t)).then(function(t){if(this.c)return Promise.reject();this.j=t,this.L=!0}.bind(t)).catch(function(t){return this.c?Promise.resolve():(this.u=this.b=null,t instanceof z?Promise.reject(t):Promise.reject(new z(2,6,6002,t.message)))}.bind(t)),i||(a=a.catch(function(){})),r.reject(),a}function ee(t,e){var n=e.keySystem;if(n){if(!e.licenseServerUri){var i=t.f.servers[n];i&&(e.licenseServerUri=i)}e.keyIds||(e.keyIds=[]),(n=t.f.advanced[n])&&(e.distinctiveIdentifierRequired||(e.distinctiveIdentifierRequired=n.distinctiveIdentifierRequired),e.persistentStateRequired||(e.persistentStateRequired=n.persistentStateRequired),e.videoRobustness||(e.videoRobustness=n.videoRobustness),e.audioRobustness||(e.audioRobustness=n.audioRobustness),e.serverCertificate||(e.serverCertificate=n.serverCertificate))}}function ne(e){if($u.empty(e.f.clearKeys))return null;var n,i=[],r=[];for(n in e.f.clearKeys){var a=e.f.clearKeys[n],o=qt(n);a=qt(a),o={kty:"oct",kid:Kt(o,!1),k:Kt(a,!1)},i.push(o),r.push(o.kid)}return e=JSON.stringify({keys:i}),r=JSON.stringify({kids:r}),r=[{initData:new Uint8Array(Ut(r)),initDataType:"keyids"}],{keySystem:"org.w3.clearkey",licenseServerUri:"data:application/json;base64,"+t.btoa(e),distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,initData:r,keyIds:[]}}function ie(t,e){var n=t.f,i=Object.keys(n.servers);return!i.length||e.periods.some(function(t){return t.variants.some(function(t){return t.drmInfos.length})})?null:i.map(function(t){return{keySystem:t,licenseServerUri:n.servers[t],distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,initData:[],keyIds:[]}})}function re(t,e,n,i){var r=[],a=[],o=[],s=[];ae(i,r,a,o,s),t.b={keySystem:e,licenseServerUri:r[0],distinctiveIdentifierRequired:"required"==n.distinctiveIdentifier,persistentStateRequired:"required"==n.persistentState,audioRobustness:n.audioCapabilities?n.audioCapabilities[0].robustness:"",videoRobustness:n.videoCapabilities?n.videoCapabilities[0].robustness:"",serverCertificate:a[0],initData:o,keyIds:s}}function ae(t,e,n,i,r){function a(t,e){return!(!t.keyId||t.keyId!=e.keyId)||t.initDataType==e.initDataType&&Xt(t.initData,e.initData)}t.forEach(function(t){if(-1==e.indexOf(t.licenseServerUri)&&e.push(t.licenseServerUri),t.serverCertificate&&-1==rt(n,t.serverCertificate,Xt)&&n.push(t.serverCertificate),t.initData&&t.initData.forEach(function(t){-1==rt(i,t,a)&&i.push(t)}),t.keyIds)for(var o=0;o<t.keyIds.length;++o)-1==r.indexOf(t.keyIds[o])&&r.push(t.keyIds[o])})}function oe(t,e){try{var n=t.j.createSession("persistent-license")}catch(e){var i=new z(2,6,6005,e.message);return t.h(i),Promise.reject(i)}Tt(t.g,n,"message",t.Ic.bind(t)),Tt(t.g,n,"keystatuseschange",t.Ec.bind(t));var r={initData:null,ja:n,loaded:!1,Tb:1/0,qa:null};return t.a.push(r),n.load(e).then(function(t){if(!this.c){if(t)return r.loaded=!0,this.a.every(function(t){return t.loaded})&&this.i.resolve(),n;this.a.splice(this.a.indexOf(r),1),this.h(new z(2,6,6013))}}.bind(t),function(t){this.c||(this.a.splice(this.a.indexOf(r),1),this.h(new z(2,6,6005,t.message)))}.bind(t))}function se(t,e,n){try{var i=t.ga?t.j.createSession("persistent-license"):t.j.createSession()}catch(e){return void t.h(new z(2,6,6005,e.message))}Tt(t.g,i,"message",t.Ic.bind(t)),Tt(t.g,i,"keystatuseschange",t.Ec.bind(t)),t.a.push({initData:n,ja:i,loaded:!1,Tb:1/0,qa:null}),i.generateRequest(e,n.buffer).catch(function(t){if(!this.c){for(var e=0;e<this.a.length;++e)if(this.a[e].ja==i){this.a.splice(e,1);break}this.h(new z(2,6,6006,t.message))}}.bind(t))}function ue(t,e){for(var n,i=e.target,r=0;r<t.a.length;r++)if(t.a[r].ja==i){n=t.a[r];break}r=pt([t.b.licenseServerUri],t.f.retryParameters),r.body=e.message,r.method="POST","com.microsoft.playready"!=t.b.keySystem&&"com.chromecast.playready"!=t.b.keySystem||ce(r),t.s.$a.request(2,r).promise.then(function(t){return this.c?Promise.reject():i.update(t.data).then(function(){this.s.onEvent(new At("drmsessionupdate")),n&&(n.qa&&n.qa.resolve(),setTimeout(function(){n.loaded=!0,this.a.every(function(t){return t.loaded})&&this.i.resolve()}.bind(this),1e3*Zu))}.bind(this))}.bind(t),function(t){if(this.c)return Promise.resolve();t=new z(2,6,6007,t),this.h(t),n&&n.qa&&n.qa.reject(t)}.bind(t)).catch(function(t){if(this.c)return Promise.resolve();t=new z(2,6,6008,t.message),this.h(t),n&&n.qa&&n.qa.reject(t)}.bind(t))}function ce(t){var e=Lt(t.body,!0,!0);if(-1==e.indexOf("PlayReadyKeyMessage"))t.headers["Content-Type"]="text/xml; charset=utf-8";else{e=(new DOMParser).parseFromString(e,"application/xml");for(var n=e.getElementsByTagName("HttpHeader"),i=0;i<n.length;++i)t.headers[n[i].querySelector("name").textContent]=n[i].querySelector("value").textContent;t.body=Ht(e.querySelector("Challenge").textContent).buffer}}function he(){var t=[],e=[{contentType:'video/mp4; codecs="avc1.42E01E"'},{contentType:'video/webm; codecs="vp8"'}],n=[{videoCapabilities:e,persistentState:"required",sessionTypes:["persistent-license"]},{videoCapabilities:e}],i={};return"org.w3.clearkey com.widevine.alpha com.microsoft.playready com.apple.fps.2_0 com.apple.fps.1_0 com.apple.fps com.adobe.primetime".split(" ").forEach(function(e){var r=navigator.requestMediaKeySystemAccess(e,n).then(function(t){var n=t.getConfiguration().sessionTypes;return n=!!n&&0<=n.indexOf("persistent-license"),0<=navigator.userAgent.indexOf("Tizen 3")&&(n=!1),i[e]={persistentState:n},t.createMediaKeys()}).catch(function(){i[e]=null});t.push(r)}),Promise.all(t).then(function(){return i})}function le(t,e){var n=t.keySystem();return 0==e.drmInfos.length||e.drmInfos.some(function(t){return t.keySystem==n})}function fe(t,e){if(!t.length)return e;if(!e.length)return t;for(var n=[],i=0;i<t.length;i++)for(var r=0;r<e.length;r++)if(t[i].keySystem==e[r].keySystem){var a=t[i];r=e[r];var o=[];o=o.concat(a.initData||[]),o=o.concat(r.initData||[]);var s=[];s=s.concat(a.keyIds),s=s.concat(r.keyIds),n.push({keySystem:a.keySystem,licenseServerUri:a.licenseServerUri||r.licenseServerUri,distinctiveIdentifierRequired:a.distinctiveIdentifierRequired||r.distinctiveIdentifierRequired,persistentStateRequired:a.persistentStateRequired||r.persistentStateRequired,videoRobustness:a.videoRobustness||r.videoRobustness,audioRobustness:a.audioRobustness||r.audioRobustness,serverCertificate:a.serverCertificate||r.serverCertificate,initData:o,keyIds:s});break}return n}function de(t){return!t||1==t.length&&1e-6>t.end(0)-t.start(0)?null:t.length?t.end(t.length-1):null}function pe(t,e,n){return n=void 0===n?0:n,!(!t||!t.length||1==t.length&&1e-6>t.end(0)-t.start(0)||e>t.end(t.length-1))&&e+n>=t.start(0)}function me(t,e){if(!t||!t.length||1==t.length&&1e-6>t.end(0)-t.start(0))return 0;for(var n=0,i=t.length-1;0<=i&&t.end(i)>e;--i)n+=t.end(i)-Math.max(t.start(i),e);return n}function ve(t){if(!t)return[];for(var e=[],n=0;n<t.length;n++)e.push({start:t.start(n),end:t.end(n)});return e}function ye(t,e,n){this.startTime=t,this.endTime=e,this.payload=n,this.region=new ge,this.position=null,this.positionAlign=ec,this.size=100,this.textAlign=nc,this.writingDirection=oc,this.lineInterpretation=sc,this.line=null,this.lineHeight="",this.lineAlign=uc,this.displayAlign=rc,this.fontSize=this.backgroundColor=this.color="",this.fontWeight=hc,this.fontStyle=lc,this.fontFamily="",this.textDecoration=[],this.wrapLine=!0,this.id=""}function ge(){this.id="",this.regionAnchorY=this.regionAnchorX=this.viewportAnchorY=this.viewportAnchorX=0,this.height=this.width=100,this.viewportAnchorUnits=this.widthUnits=this.heightUnits=dc,this.scroll=pc}function be(){this.a=new muxjs.mp4.Transmuxer({keepOriginalTimestamps:!0}),this.b=null,this.g=[],this.c=[],this.f=!1,this.a.on("data",this.i.bind(this)),this.a.on("done",this.h.bind(this))}function we(e,n){return!(!t.muxjs||"mp2t"!=e.split(";")[0].split("/")[1])&&(n?MediaSource.isTypeSupported(Te(n,e)):MediaSource.isTypeSupported(Te("audio",e))||MediaSource.isTypeSupported(Te("video",e)))}function Te(t,e){var n=e.replace("mp2t","mp4");"audio"==t&&(n=n.replace("video","audio"));var i=/avc1\.(66|77|100)\.(\d+)/.exec(n);if(i){var r="avc1.",a=i[1],o=Number(i[2]);r=("66"==a?r+"4200":"77"==a?r+"4d00":r+"6400")+(o>>4).toString(16),r+=(15&o).toString(16),n=n.replace(i[0],r)}return n}function Ee(t,e){t.f=!0,t.b=new q,t.g=[],t.c=[];var n=new Uint8Array(e);return t.a.push(n),t.a.flush(),t.f&&t.b.reject(new z(2,3,3018)),t.b}function Se(t){this.f=null,this.c=t,this.h=this.i=0,this.g=1/0,this.b=this.a=null}function ke(t,e,n,i){return Promise.resolve().then(function(){if(this.f&&this.c)if(null==n||null==i)this.f.parseInit(new Uint8Array(e));else{var t={periodStart:this.i,segmentStart:n,segmentEnd:i};t=this.f.parseMedia(new Uint8Array(e),t).filter(function(t){return t.startTime>=this.h&&t.startTime<this.g}.bind(this)),this.c.append(t),null==this.a&&(this.a=Math.max(n,this.h)),this.b=Math.min(i,this.g)}}.bind(t))}function Ae(e){this.f=e,this.o=null,this.b={},this.a=null,this.c={},this.h=new wt,this.m=!1,this.i={},this.l=!1,e=this.j=new q;var n=new MediaSource;Et(this.h,n,"sourceopen",e.resolve),this.f.src=t.URL.createObjectURL(n),this.g=n}function _e(){var t={};return'video/mp4; codecs="avc1.42E01E",video/mp4; codecs="avc3.42E01E",video/mp4; codecs="hev1.1.6.L93.90",video/mp4; codecs="hvc1.1.6.L93.90",video/mp4; codecs="hev1.2.4.L153.B0"; eotf="smpte2084",video/mp4; codecs="hvc1.2.4.L153.B0"; eotf="smpte2084",video/mp4; codecs="vp9",video/mp4; codecs="vp09.00.10.08",audio/mp4; codecs="mp4a.40.2",audio/mp4; codecs="ac-3",audio/mp4; codecs="ec-3",audio/mp4; codecs="opus",audio/mp4; codecs="flac",video/webm; codecs="vp8",video/webm; codecs="vp9",video/webm; codecs="vp09.00.10.08",audio/webm; codecs="vorbis",audio/webm; codecs="opus",video/mp2t; codecs="avc1.42E01E",video/mp2t; codecs="avc3.42E01E",video/mp2t; codecs="hvc1.1.6.L93.90",video/mp2t; codecs="mp4a.40.2",video/mp2t; codecs="ac-3",video/mp2t; codecs="ec-3",text/vtt,application/mp4; codecs="wvtt",application/ttml+xml,application/mp4; codecs="stpp"'.split(",").forEach(function(e){t[e]=!!mc[e]||MediaSource.isTypeSupported(e)||we(e);var n=e.split(";")[0];t[n]=t[n]||t[e]}),t}function Ie(t,e){t.a||(t.a=new Se(t.o)),t.a.f=new mc[e]}function xe(t,e){if("text"==e)var n=t.a.a;else n=Ne(t,e),n=!n||1==n.length&&1e-6>n.end(0)-n.start(0)?null:1==n.length&&0>n.start(0)?0:n.length?n.start(0):null;return n}function Pe(t,e){return"text"==e?t.a.b:de(Ne(t,e))}function Re(t,e,n){return"text"==e?(t=t.a,null==t.b||t.b<n?0:t.b-Math.max(n,t.a)):(t=Ne(t,e),me(t,n))}function Ne(t,e){try{return t.b[e].buffered}catch(t){return null}}function De(t,e,n,i,r){return"text"==e?ke(t.a,n,i,r):t.i[e]?Ee(t.i[e],n).then(function(t){return this.a||Ie(this,"text/vtt"),this.l&&this.a.lc(t.cues),Le(this,e,this.Vc.bind(this,e,t.data.buffer))}.bind(t)):Le(t,e,t.Vc.bind(t,e,n))}function Ce(t,e){return"text"==e?t.a?t.a.remove(0,1/0):Promise.resolve():Le(t,e,t.Wc.bind(t,e,0,t.g.duration))}function Me(t,e,n,i,r){return"text"==e?(t.a.i=n,t=t.a,t.h=i,t.g=r,Promise.resolve()):Promise.all([Le(t,e,t.cd.bind(t,e)),Le(t,e,t.Ge.bind(t,e,n)),Le(t,e,t.De.bind(t,e,i,r))])}function Le(t,e,n){if(t.m)return Promise.reject();if(n={start:n,p:new q},t.c[e].push(n),1==t.c[e].length)try{n.start()}catch(i){"QuotaExceededError"==i.name?n.p.reject(new z(2,3,3017,e)):n.p.reject(new z(2,3,3015,i)),Ue(t,e)}return n.p}function Oe(t,e){if(t.m)return Promise.reject();var n,i=[];for(n in t.b){var r=new q,a={start:function(t){t.resolve()}.bind(null,r),p:r};t.c[n].push(a),i.push(r),1==t.c[n].length&&a.start()}return Promise.all(i).then(function(){try{e()}catch(e){var t=Promise.reject(new z(2,3,3015,e))}for(var n in this.b)Ue(this,n);return t}.bind(t),function(){return Promise.reject()}.bind(t))}function Ue(t,e){t.c[e].shift();var n=t.c[e][0];if(n)try{n.start()}catch(i){n.p.reject(new z(2,3,3015,i)),Ue(t,e)}}function je(t,e,n){return n==e||t>=vc&&n==e.split("-")[0]||t>=yc&&n.split("-")[0]==e.split("-")[0]}function Be(t){t=t.toLowerCase().split("-");var e=gc[t[0]];return e&&(t[0]=e),t.join("-")}function Fe(t,e,n){var i=t.video;return!(i&&(i.width<e.minWidth||i.width>e.maxWidth||i.width>n.width||i.height<e.minHeight||i.height>e.maxHeight||i.height>n.height||i.width*i.height<e.minPixels||i.width*i.height>e.maxPixels)||t.bandwidth<e.minBandwidth||t.bandwidth>e.maxBandwidth)}function Ve(t,e,n){var i=!1;return t.variants.forEach(function(t){var r=t.allowedByApplication;t.allowedByApplication=Fe(t,e,n),r!=t.allowedByApplication&&(i=!0)}),i}function Ke(t,e,n,i){i.variants=i.variants.filter(function(i){return!(t&&t.L&&!le(t,i))&&(He(i.audio,t,e)&&He(i.video,t,n))}),i.textStreams=i.textStreams.filter(function(t){return!!mc[Ct(t.mimeType,t.codecs)]})}function He(t,e,n){if(!t)return!0;var i=null;e&&e.L&&(i=e.u),e=Ct(t.mimeType,t.codecs);var r,a=Ct(t.mimeType,t.codecs),o=t.mimeType;for(r in Ju){var s=t[r],u=Ju[r];s&&(o+="; "+u+'="'+s+'"')}return!(!(mc[a]||MediaSource.isTypeSupported(o)||we(a,t.type))||i&&t.encrypted&&0>i.indexOf(e)||n&&(t.mimeType!=n.mimeType||t.codecs.split(".")[0]!=n.codecs.split(".")[0]))}function qe(t){var e=t.audio,n=t.video,i=e?e.codecs:null,r=n?n.codecs:null,a=[];r&&a.push(r),i&&a.push(i);var o=[];n&&o.push(n.mimeType),e&&o.push(e.mimeType),o=o[0]||null;var s=[];e&&s.push(e.kind),n&&s.push(n.kind),s=s[0]||null;var u=[];return e&&u.push.apply(u,e.roles),n&&u.push.apply(u,n.roles),u=it(u),t={id:t.id,active:!1,type:"variant",bandwidth:t.bandwidth,language:t.language,label:null,kind:s,width:null,height:null,frameRate:null,mimeType:o,codecs:a.join(", "),audioCodec:i,videoCodec:r,primary:t.primary,roles:u,videoId:null,audioId:null,channelsCount:null,audioBandwidth:null,videoBandwidth:null},n&&(t.videoId=n.id,t.width=n.width||null,t.height=n.height||null,t.frameRate=n.frameRate||null,t.videoBandwidth=n.bandwidth||null),e&&(t.audioId=e.id,t.channelsCount=e.channelsCount,t.audioBandwidth=e.bandwidth||null,t.label=e.label),t}function Ge(t){return{id:t.id,active:!1,type:"text",bandwidth:0,language:t.language,label:t.label,kind:t.kind||null,width:null,height:null,frameRate:null,mimeType:t.mimeType,codecs:t.codecs||null,audioCodec:null,videoCodec:null,primary:t.primary,roles:t.roles,videoId:null,audioId:null,channelsCount:null,audioBandwidth:null,videoBandwidth:null}}function Xe(t){var e=[],n=Je(t.variants);return t=t.textStreams,n.forEach(function(t){e.push(qe(t))}),t.forEach(function(t){e.push(Ge(t))}),e}function Ye(t,e,n){return Je(t.variants).map(function(t){var i=qe(t);return t.video&&t.audio?i.active=n==t.video.id&&e==t.audio.id:t.video?i.active=n==t.video.id:t.audio&&(i.active=e==t.audio.id),i})}function ze(t,e){return t.textStreams.map(function(t){var n=Ge(t);return n.active=e==t.id,n})}function We(t,e){for(var n=0;n<t.variants.length;n++)if(t.variants[n].id==e.id)return t.variants[n];return null}function $e(t){return t.allowedByApplication&&t.allowedByKeySystem}function Je(t){return t.filter(function(t){return $e(t)})}function Qe(t,e,n,i,r){return t=Ze(t,e,n,r),tn(t,i)}function Ze(t,e,n,i){var r=Je(t),a=r;t=r.filter(function(t){return t.primary}),t.length&&(a=t);var o=a.length?a[0].language:"";if(a=a.filter(function(t){return t.language==o}),e){var s=Be(e);[yc,vc,0].forEach(function(t){var e=!1;r.forEach(function(n){s=Be(s);var r=Be(n.language);je(t,s,r)&&(e?a.push(n):(a=[n],e=!0),i&&(i.audio=!0))})})}return n&&(e=nn(a,n),e.length)?e:(e=a.map(function(t){return(t.audio?t.audio.roles:[]).concat(t.video?t.video.roles:[])}).reduce(It,[]),e.length?nn(a,e[0]):a)}function tn(t,e){var n=t.filter(function(t){return t.audio&&t.audio.channelsCount}).reduce(function(t,e){var n=e.audio.channelsCount;return t[n]?t[n].push(e):t[n]=[e],t},{}),i=Object.keys(n);if(0==i.length)return t;var r=i.filter(function(t){return t<=e});return r.length?n[Math.max.apply(null,r)]:n[Math.min.apply(null,i)]}function en(t,e,n,i){var r=t,a=t.filter(function(t){return t.primary});a.length&&(r=a);var o=r.length?r[0].language:"";if(r=r.filter(function(t){return t.language==o}),e){var s=Be(e);[yc,vc,0].forEach(function(e){var n=!1;t.forEach(function(t){var a=Be(t.language);je(e,s,a)&&(n?r.push(t):(r=[t],n=!0),i&&(i.text=!0))})})}if(n){if(e=rn(r,n),e.length)return e}else if(e=r.filter(function(t){return 0==t.roles.length}),e.length)return e;return e=r.map(function(t){return t.roles}).reduce(It,[]),e.length?rn(r,e[0]):r}function nn(t,e){return t.filter(function(t){return t.audio&&0<=t.audio.roles.indexOf(e)||t.video&&0<=t.video.roles.indexOf(e)})}function rn(t,e){return t.filter(function(t){return 0<=t.roles.indexOf(e)})}function an(t,e,n){for(var i=0;i<n.length;i++)if(n[i].audio==t&&n[i].video==e)return n[i];return null}function on(t,e,n){function i(t,e){return null==t?null==e:e.id==t}for(var r=0;r<n.length;r++)if(i(t,n[r].audio)&&i(e,n[r].video))return n[r];return null}function sn(t,e){for(var n=t.periods.length-1;0<n;--n)if(e+Wu>=t.periods[n].startTime)return n;return 0}function un(t,e){for(var n=0;n<t.periods.length;++n){var i=t.periods[n];if("text"==e.type){for(var r=0;r<i.textStreams.length;++r)if(i.textStreams[r]==e)return n}else for(r=0;r<i.variants.length;++r){var a=i.variants[r];if(a.audio==e||a.video==e||a.video&&a.video.trickModeVideo==e)return n}}return-1}function cn(){this.h=null,this.f=!1,this.b=new D,this.c=[],this.i=!1,this.a=this.g=null}function hn(t,e){return t&&(e=e.filter(function(e){return Fe(e,t,{width:1/0,height:1/0})})),e.sort(function(t,e){return t.bandwidth-e.bandwidth})}function ln(t){return JSON.stringify(t,function(t,e){if("function"!=typeof e){if(e instanceof Event||e instanceof At){var n,i={};for(n in e){var r=e[n];r&&"object"==typeof r?"detail"==n&&(i[n]=r):n in Event||(i[n]=r)}return i}if(e instanceof TimeRanges)for(i={__type__:"TimeRanges",length:e.length,start:[],end:[]},n=0;n<e.length;++n)i.start.push(e.start(n)),i.end.push(e.end(n));else i="number"==typeof e?isNaN(e)?"NaN":isFinite(e)?e:0>e?"-Infinity":"Infinity":e;return i}})}function fn(t){return JSON.parse(t,function(t,e){return"NaN"==e?NaN:"-Infinity"==e?-1/0:"Infinity"==e?1/0:e&&"object"==typeof e&&"TimeRanges"==e.__type__?dn(e):e})}function dn(t){return{length:t.length,start:function(e){return t.start[e]},end:function(e){return t.end[e]}}}function pn(t,e,n,i,r,a){this.I=t,this.g=e,this.L=n,this.j=!1,this.A=i,this.G=r,this.s=a,this.b=this.h=!1,this.u="",this.i=null,this.l=this.Cc.bind(this),this.m=this.Pd.bind(this),this.a={video:{},player:{}},this.o=0,this.c={},this.f=null}function mn(t){var e=Nc;e.removeUpdateListener(t.l),e.removeMessageListener("urn:x-cast:com.google.shaka.v2",t.m)}function vn(t){for(var e in t.c){var n=t.c[e];delete t.c[e],n.reject(new z(1,7,7e3))}}function yn(t){t=ln(t),Nc.sendMessage("urn:x-cast:com.google.shaka.v2",t,function(){},M)}function gn(){this.Bb=new bt,this.jb=this}function bn(t,e,n){gn.call(this),this.c=t,this.b=e,this.i=this.g=this.f=this.j=this.h=null,this.a=new pn(n,this.Le.bind(this),this.Me.bind(this),this.Ne.bind(this),this.Oe.bind(this),this.tc.bind(this)),wn(this)}function wn(t){t.a.init(),t.i=new wt,bc.forEach(function(t){Tt(this.i,this.c,t,this.$e.bind(this))}.bind(t)),Sc.forEach(function(t){Tt(this.i,this.b,t,this.le.bind(this))}.bind(t)),t.h={};for(var e in t.c)Object.defineProperty(t.h,e,{configurable:!1,enumerable:!0,get:t.Ze.bind(t,e),set:t.af.bind(t,e)});t.j={};for(var n in t.b)Object.defineProperty(t.j,n,{configurable:!1,enumerable:!0,get:t.ke.bind(t,n)});t.f=new gn,t.f.jb=t.h,t.g=new gn,t.g.jb=t.j}function Tn(t,e,n,i){gn.call(this),this.a=t,this.b=e,this.c=new wt,this.s={video:t,player:e},this.u=n||function(){},this.A=i||function(t){return t},this.o=!1,this.h=!0,this.g=0,this.m=!1,this.j=!0,this.l=this.i=this.f=null,En(this)}function En(e){var n=cast.receiver.CastReceiverManager.getInstance();n.onSenderConnected=e.Hc.bind(e),n.onSenderDisconnected=e.Hc.bind(e),n.onSystemVolumeChanged=e.ld.bind(e),e.i=n.getCastMessageBus("urn:x-cast:com.google.cast.media"),e.i.onMessage=e.Kd.bind(e),e.f=n.getCastMessageBus("urn:x-cast:com.google.shaka.v2"),e.f.onMessage=e.Zd.bind(e),n.start(),bc.forEach(function(t){Tt(this.c,this.a,t,this.Kc.bind(this,"video"))}.bind(e)),Sc.forEach(function(t){Tt(this.c,this.b,t,this.Kc.bind(this,"player"))}.bind(e)),cast.__platform__&&cast.__platform__.canDisplayType('video/mp4; codecs="avc1.640028"; width=3840; height=2160')?e.b.cc(3840,2160):e.b.cc(1920,1080),Tt(e.c,e.a,"loadeddata",function(){this.m=!0}.bind(e)),Tt(e.c,e.b,"loading",function(){this.h=!1,Sn(this)}.bind(e)),Tt(e.c,e.a,"playing",function(){this.h=!1,Sn(this)}.bind(e)),Tt(e.c,e.a,"pause",function(){Sn(this)}.bind(e)),Tt(e.c,e.b,"unloading",function(){this.h=!0,Sn(this)}.bind(e)),Tt(e.c,e.a,"ended",function(){t.setTimeout(function(){this.a&&this.a.ended&&(this.h=!0,Sn(this))}.bind(this),5e3)}.bind(e))}function Sn(t){Promise.resolve().then(function(){this.b&&(this.dispatchEvent(new At("caststatuschanged")),An(this)||xn(this,0))}.bind(t))}function kn(t,e,n){for(var i in e.player)t.b[i](e.player[i]);t.u(n),n=Promise.resolve();var r=t.a.autoplay;e.manifest&&(t.a.autoplay=!1,n=t.b.load(e.manifest,e.startTime)),n.then(function(){if(t.b){for(var n in e.video)t.a[n]=e.video[n];for(var i in e.playerAfterLoad)t.b[i](e.playerAfterLoad[i]);t.a.autoplay=r,e.manifest&&(t.a.play(),xn(t,0))}},function(e){t.b.dispatchEvent(new At("error",{detail:e}))})}function An(t){return!(!t.j||!t.a.duration&&!t.b.P())&&(_n(t),t.j=!1,!0)}function _n(t){xn(t,0,{contentId:t.b.Ib(),streamType:t.b.P()?"LIVE":"BUFFERED",duration:t.a.duration,contentType:""})}function In(t,e,n,i){t.o&&(t=ln(e),i?n.getCastChannel(i).send(t):n.broadcast(t))}function xn(t,e,n){var i=t.a.playbackRate,r=Dc;r=t.h?r.IDLE:t.b.xc()?r.Yc:t.a.paused?r.$c:r.ad,i={mediaSessionId:0,playbackRate:i,playerState:r,currentTime:t.a.currentTime,supportedMediaCommands:15,volume:{level:t.a.volume,muted:t.a.muted}},n&&(i.media=n),In(t,{requestId:e,type:"MEDIA_STATUS",status:[i]},t.i)}function Pn(t,e){var n=Rn(t,e);return 1!=n.length?null:n[0]}function Rn(t,e){return Array.prototype.filter.call(t.childNodes,function(t){return t instanceof Element&&t.tagName==e})}function Nn(t){return Array.prototype.filter.call(t.childNodes,function(t){return t instanceof Element&&"pssh"==t.localName&&"urn:mpeg:cenc:2013"==t.namespaceURI})}function Dn(t,e,n){return t.hasAttributeNS(e,n)?t.getAttributeNS(e,n):null}function Cn(t){return Array.prototype.every.call(t.childNodes,function(t){return t.nodeType==Node.TEXT_NODE||t.nodeType==Node.CDATA_SECTION_NODE})?t.textContent.trim():null}function Mn(t,e,n,i){var r=null;return t=t.getAttribute(e),null!=t&&(r=n(t)),null==r?void 0!=i?i:null:r}function Ln(t){return t?(/^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(t)&&(t+="Z"),t=Date.parse(t),isNaN(t)?null:Math.floor(t/1e3)):null}function On(t){return t&&(t=/^P(?:([0-9]*)Y)?(?:([0-9]*)M)?(?:([0-9]*)D)?(?:T(?:([0-9]*)H)?(?:([0-9]*)M)?(?:([0-9.]*)S)?)?$/.exec(t))?(t=31536e3*Number(t[1]||null)+2592e3*Number(t[2]||null)+86400*Number(t[3]||null)+3600*Number(t[4]||null)+60*Number(t[5]||null)+Number(t[6]||null),isFinite(t)?t:null):null}function Un(t){var e=/([0-9]+)-([0-9]+)/.exec(t);return e?(t=Number(e[1]),isFinite(t)?(e=Number(e[2]),isFinite(e)?{start:t,end:e}:null):null):null}function jn(t){return t=Number(t),0==t%1?t:null}function Bn(t){return t=Number(t),0==t%1&&0<t?t:null}function Fn(t){return t=Number(t),0==t%1&&0<=t?t:null}function Vn(t){var e;return t=(e=t.match(/^(\d+)\/(\d+)$/))?Number(e[1]/e[2]):Number(t),isNaN(t)?null:t}function Kn(t,e,n){t=Gn(t);var i=null,r=[],a=[],o=t.map(function(t){return t.keyId}).filter(Pt);if(o.length&&1<o.filter(Rt).length)throw new z(2,4,4010);n||(a=t.filter(function(t){return"urn:mpeg:dash:mp4protection:2011"!=t.Pc||(i=t.init||i,!1)}),a.length&&(r=qn(i,e,a),0==r.length&&(r=[Dt("",i)]))),!t.length||!n&&a.length||(r=$u.values(Cc).filter(function(t){return"org.w3.clearkey"!=t}).map(function(t){return Dt(t,i)}));var s=o[0]||null;return s&&r.forEach(function(t){t.initData.forEach(function(t){t.keyId=s})}),{nc:s,gf:i,drmInfos:r,sc:!0}}function Hn(t,e,n,i){var r=Kn(t,e,i);if(n.sc)t=1==n.drmInfos.length&&!n.drmInfos[0].keySystem,e=0==r.drmInfos.length,(0==n.drmInfos.length||t&&!e)&&(n.drmInfos=r.drmInfos),n.sc=!1;else if(0<r.drmInfos.length&&(n.drmInfos=n.drmInfos.filter(function(t){return r.drmInfos.some(function(e){return e.keySystem==t.keySystem})}),0==n.drmInfos.length))throw new z(2,4,4008);return r.nc||n.nc}function qn(t,e,n){return n.map(function(n){var i=Cc[n.Pc];return i?[Dt(i,n.init||t)]:e(n.node)||[]}).reduce(It,[])}function Gn(t){return t.map(function(t){var e=t.getAttribute("schemeIdUri"),n=Dn(t,"urn:mpeg:cenc:2013","default_KID"),i=Nn(t).map(Cn);if(!e)return null;if(e=e.toLowerCase(),n&&(n=n.replace(/-/g,"").toLowerCase(),0<=n.indexOf(" ")))throw new z(2,4,4009);var r=[];try{r=i.map(function(t){return{initDataType:"cenc",initData:Ht(t),keyId:null}})}catch(t){throw new z(2,4,4007)}return{node:t,Pc:e,keyId:n,init:0<r.length?r:null}}).filter(Pt)}function Xn(e,n,i,r,a){var o={RepresentationID:n,Number:i,Bandwidth:r,Time:a};return e.replace(/\$(RepresentationID|Number|Bandwidth|Time)?(?:%0([0-9]+)([diouxX]))?\$/g,function(e,n,i,r){if("$$"==e)return"$";var a=o[n];if(null==a)return e;switch("RepresentationID"==n&&i&&(i=void 0),"Time"==n&&(a=Math.round(a)),r){case void 0:case"d":case"i":case"u":e=a.toString();break;case"o":e=a.toString(8);break;case"x":e=a.toString(16);break;case"X":e=a.toString(16).toUpperCase();break;default:e=a.toString()}return i=t.parseInt(i,10)||1,Array(Math.max(0,i-e.length)+1).join("0")+e})}function Yn(t,e){var n=zn(t,e,"timescale"),i=1;n&&(i=Bn(n)||1),n=zn(t,e,"duration"),(n=Bn(n||""))&&(n/=i);var r=zn(t,e,"startNumber"),a=Number(zn(t,e,"presentationTimeOffset"))||0,o=Fn(r||"");null!=r&&null!=o||(o=1);var s=Wn(t,e,"SegmentTimeline");if(r=null,s){r=i;var u=t.M.duration||1/0;s=Rn(s,"S");for(var c=[],h=0,l=0;l<s.length;++l){var f=s[l],d=Mn(f,"t",Fn),p=Mn(f,"d",Fn);if(f=Mn(f,"r",jn),null!=d&&(d-=a),!p)break;if(d=null!=d?d:h,0>(f=f||0))if(l+1<s.length){if(null==(f=Mn(s[l+1],"t",Fn)))break;if(d>=f)break;f=Math.ceil((f-d)/p)-1}else{if(1/0==u)break;if(d/r>=u)break;f=Math.ceil((u*r-d)/p)-1}0<c.length&&d!=h&&(c[c.length-1].end=d/r);for(var m=0;m<=f;++m)h=d+p,c.push({start:d/r,end:h/r,We:d}),d=h}r=c}return{timescale:i,R:n,Ea:o,da:a/i||0,ic:a,H:r}}function zn(t,e,n){return[e(t.v),e(t.W),e(t.ba)].filter(Pt).map(function(t){return t.getAttribute(n)}).reduce(function(t,e){return t||e})}function Wn(t,e,n){return[e(t.v),e(t.W),e(t.ba)].filter(Pt).map(function(t){return Pn(t,n)}).reduce(function(t,e){return t||e})}function $n(t,e){var n=new DOMParser;try{var i=Mt(t),r=n.parseFromString(i,"text/xml")}catch(t){}if(r&&r.documentElement.tagName==e)var a=r.documentElement;return a&&0<a.getElementsByTagName("parsererror").length?null:a}function Jn(t,e,n,i,r,a){for(var o=Dn(t,"http://www.w3.org/1999/xlink","href"),s=Dn(t,"http://www.w3.org/1999/xlink","actuate")||"onRequest",u=0;u<t.attributes.length;u++){var c=t.attributes[u];"http://www.w3.org/1999/xlink"==c.namespaceURI&&(t.removeAttributeNS(c.namespaceURI,c.localName),--u)}if(5<=a)return $(new z(2,4,4028));if("onLoad"!=s)return $(new z(2,4,4027));var h=Nt([i],[o]);return r.request(0,pt(h,e)).X(function(i){if(!(i=$n(i.data,t.tagName)))return $(new z(2,4,4001,o));for(;t.childNodes.length;)t.removeChild(t.childNodes[0]);for(;i.childNodes.length;){var s=i.childNodes[0];i.removeChild(s),t.appendChild(s)}for(s=0;s<i.attributes.length;s++){var u=i.attributes[s].nodeName,c=i.getAttribute(u);t.setAttribute(u,c)}return Qn(t,e,n,h[0],r,a+1)})}function Qn(t,e,n,i,r,a){if(a=a||0,Dn(t,"http://www.w3.org/1999/xlink","href")){var o=Jn(t,e,n,i,r,a);return n&&(o=o.X(void 0,function(){return Qn(t,e,n,i,r,a)})),o}o=[];for(var s=0;s<t.childNodes.length;s++){var u=t.childNodes[s];u instanceof Element&&("urn:mpeg:dash:resolve-to-zero:2013"==Dn(u,"http://www.w3.org/1999/xlink","href")?(t.removeChild(u),--s):"SegmentTimeline"!=u.tagName&&o.push(Qn(u,e,n,i,r,a)))}return tt(o).X(function(){return t})}function Zn(t,e,n){this.c=t,this.b=e,this.a=n}function ti(t,e,n,i,r,a){this.position=t,this.startTime=e,this.endTime=n,this.c=i,this.b=r,this.a=a}function ei(t,e){this.D=t,this.b=e==Mc,this.a=0}function ni(){throw new z(2,3,3e3)}function ii(){this.c=[],this.b=[],this.a=!1}function ri(t){for(;t.reader.ha()&&!t.parser.a;)t.parser.xb(t.start,t.reader,t.partialOkay)}function ai(t){for(var e=t.reader.B();0<e&&!t.parser.a;--e)t.parser.xb(t.start,t.reader,t.partialOkay)}function oi(t){return function(e){t(e.reader.Da(e.reader.D.byteLength-e.reader.U()))}}function si(t){for(var e=0,n=0;n<t.length;n++)e=e<<8|t.charCodeAt(n);return e}function ui(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,255&t)}function ci(t,e,n,i){var r,a=(new ii).Z("sidx",function(t){r=hi(e,i,n,t)});if(t&&a.parse(t),r)return r;throw new z(2,3,3004)}function hi(t,e,n,i){var r=[];i.reader.F(4);var a=i.reader.B();if(0==a)throw new z(2,3,3005);if(0==i.version)var o=i.reader.B(),s=i.reader.B();else o=i.reader.Ra(),s=i.reader.Ra();i.reader.F(2);var u=i.reader.bb();for(t=t+i.size+s,s=0;s<u;s++){var c=i.reader.B(),h=(2147483648&c)>>>31;c&=2147483647;var l=i.reader.B();if(i.reader.F(4),1==h)throw new z(2,3,3006);r.push(new ti(r.length,o/a-e,(o+l)/a-e,function(){return n},t,t+c-1)),o+=l,t+=c}return i.parser.stop(),r}function li(t){this.a=t}function fi(t,e){for(;t.a.length&&t.a[t.a.length-1].startTime>=e;)t.a.pop();for(;t.a.length&&0>=t.a[0].endTime;)t.a.shift();if(0!=t.a.length){var n=t.a[t.a.length-1];t.a[t.a.length-1]=new ti(n.position,n.startTime,e,n.c,n.b,n.a)}}function di(t){this.b=t,this.a=new ei(t,0),Lc||(Lc=[new Uint8Array([255]),new Uint8Array([127,255]),new Uint8Array([63,255,255]),new Uint8Array([31,255,255,255]),new Uint8Array([15,255,255,255,255]),new Uint8Array([7,255,255,255,255,255]),new Uint8Array([3,255,255,255,255,255,255]),new Uint8Array([1,255,255,255,255,255,255,255])])}function pi(t){var e=mi(t);if(7<e.length)throw new z(2,3,3002);for(var n=0,i=0;i<e.length;i++)n=256*n+e[i];e=n,n=mi(t);t:{for(i=0;i<Lc.length;i++)if(Xt(n,Lc[i])){i=!0;break t}i=!1}if(i)n=t.b.byteLength-t.a.U();else{if(8==n.length&&224&n[1])throw new z(2,3,3001);i=n[0]&(1<<8-n.length)-1;for(var r=1;r<n.length;r++)i=256*i+n[r];n=i}return n=t.a.U()+n<=t.b.byteLength?n:t.b.byteLength-t.a.U(),i=new DataView(t.b.buffer,t.b.byteOffset+t.a.U(),n),t.a.F(n),new vi(e,i)}function mi(t){var e,n=t.a.ca();for(e=1;8>=e&&!(n&1<<8-e);e++);if(8<e)throw new z(2,3,3002);var i=new Uint8Array(e);for(i[0]=n,n=1;n<e;n++)i[n]=t.a.ca();return i}function vi(t,e){this.id=t,this.a=e}function yi(t){if(8<t.a.byteLength)throw new z(2,3,3002);if(8==t.a.byteLength&&224&t.a.getUint8(0))throw new z(2,3,3001);for(var e=0,n=0;n<t.a.byteLength;n++){e=256*e+t.a.getUint8(n)}return e}function gi(){}function bi(t,e,n,i,r,a){function o(){return r}var s=[];t=new di(t.a);for(var u=null,c=null;t.ha();){var h=pi(t);if(187==h.id){var l=wi(h);l&&(h=n*l.Xe,l=e+l.re,null!=u&&s.push(new ti(s.length,u-a,h-a,o,c,l-1)),u=h,c=l)}}return null!=u&&s.push(new ti(s.length,u-a,i-a,o,c,null)),s}function wi(t){var e=new di(t.a);if(t=pi(e),179!=t.id)throw new z(2,3,3013);if(t=yi(t),e=pi(e),183!=e.id)throw new z(2,3,3012);e=new di(e.a);for(var n=0;e.ha();){var i=pi(e);if(241==i.id){n=yi(i);break}}return{Xe:t,re:n}}function Ti(t,e){var n=Wn(t,e,"Initialization");if(!n)return null;var i=t.v.ea,r=n.getAttribute("sourceURL");r&&(i=Nt(t.v.ea,[r])),r=0;var a=null;return(n=Mn(n,"range",Un))&&(r=n.start,a=n.end),new Zn(function(){return i},r,a)}function Ei(t,e){var n=Number(zn(t,ki,"presentationTimeOffset"))||0,i=zn(t,ki,"timescale"),r=1;i&&(r=Bn(i)||1),n=n/r||0,i=Ti(t,ki);var a=t.v.contentType;if(r=t.v.mimeType.split("/")[1],"text"!=a&&"mp4"!=r&&"webm"!=r)throw new z(2,4,4006);if("webm"==r&&!i)throw new z(2,4,4005);a=Wn(t,ki,"RepresentationIndex");var o=zn(t,ki,"indexRange"),s=t.v.ea;if(o=Un(o||""),a){var u=a.getAttribute("sourceURL");u&&(s=Nt(t.v.ea,[u])),o=Mn(a,"range",Un,o)}if(!o)throw new z(2,4,4002);return r=Si(t,e,i,s,o.start,o.end,r,n),{createSegmentIndex:r.createSegmentIndex,findSegmentPosition:r.findSegmentPosition,getSegmentReference:r.getSegmentReference,initSegmentReference:i,da:n}}function Si(t,e,n,i,r,a,o,s){var u=t.presentationTimeline,c=!t.Ia||!t.M.Lb,h=t.M.index,l=t.M.duration,f=e,d=null;return{createSegmentIndex:function(){var t=[f(i,r,a),"webm"==o?f(n.c(),n.b,n.a):null];return f=null,Promise.all(t).then(function(t){var e=t[0];t=t[1]||null,e="mp4"==o?ci(e,r,i,s):(new gi).parse(e,t,i,s),u.Na(e,0==h),d=new li(e),c&&fi(d,l)})},findSegmentPosition:function(t){return d.find(t)},getSegmentReference:function(t){return d.get(t)}}}function ki(t){return t.cb}function Ai(t,e){var n=Ti(t,_i),i=xi(t),r=Yn(t,_i),a=r.Ea;0==a&&(a=1);var o=0;if(r.R?o=r.R*(a-1):r.H&&0<r.H.length&&(o=r.H[0].start),i={R:r.R,startTime:o,Ea:a,da:r.da,H:r.H,Ma:i},!i.R&&!i.H&&1<i.Ma.length)throw new z(2,4,4002);if(!i.R&&!t.M.duration&&!i.H&&1==i.Ma.length)throw new z(2,4,4002);if(i.H&&0==i.H.length)throw new z(2,4,4002);return a=r=null,t.ba.id&&t.v.id&&(a=t.ba.id+","+t.v.id,r=e[a]),o=Ii(t.M.duration,i.Ea,t.v.ea,i),r?(r.Pb(o),a=t.presentationTimeline.Xa(),r.Fb(a-t.M.start)):(t.presentationTimeline.Na(o,0==t.M.index),r=new li(o),a&&t.Ia&&(e[a]=r)),t.Ia&&t.M.Lb||fi(r,t.M.duration),{createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:r.find.bind(r),getSegmentReference:r.get.bind(r),initSegmentReference:n,da:i.da}}function _i(t){return t.ta}function Ii(t,e,n,i){var r=i.Ma.length;i.H&&i.H.length!=i.Ma.length&&(r=Math.min(i.H.length,i.Ma.length));for(var a=[],o=i.startTime,s=0;s<r;s++){var u=i.Ma[s],c=Nt(n,[u.Gd]),h=void 0;h=null!=i.R?o+i.R:i.H?i.H[s].end:o+t,a.push(new ti(s+e,o,h,function(t){return t}.bind(null,c),u.start,u.end)),o=h}return a}function xi(t){return[t.v.ta,t.W.ta,t.ba.ta].filter(Pt).map(function(t){return Rn(t,"SegmentURL")}).reduce(function(t,e){return 0<t.length?t:e}).map(function(e){e.getAttribute("indexRange")&&!t.wc&&(t.wc=!0);var n=e.getAttribute("media");return e=Mn(e,"mediaRange",Un,{start:0,end:null}),{Gd:n,start:e.start,end:e.end}})}function Pi(t,e,n,i){var r=Ci(t),a=Yn(t,Ri),o=zn(t,Ri,"media"),s=zn(t,Ri,"index");if(a={R:a.R,timescale:a.timescale,Ea:a.Ea,da:a.da,ic:a.ic,H:a.H,Ob:o,Za:s},o=a.Za?1:0,o+=a.H?1:0,0==(o+=a.R?1:0))throw new z(2,4,4002);if(1!=o&&(a.Za&&(a.H=null),a.R=null),!a.Za&&!a.Ob)throw new z(2,4,4002);if(a.Za){if("mp4"!=(n=t.v.mimeType.split("/")[1])&&"webm"!=n)throw new z(2,4,4006);if("webm"==n&&!r)throw new z(2,4,4005);i=Xn(a.Za,t.v.id,null,t.bandwidth||null,null),i=Nt(t.v.ea,[i]),t=Si(t,e,r,i,0,null,n,a.da)}else a.R?(i||t.presentationTimeline.Rb(a.R),t=Ni(t,a)):(o=e=null,t.ba.id&&t.v.id&&(o=t.ba.id+","+t.v.id,e=n[o]),s=Di(t,a),i=!t.Ia||!t.M.Lb,e?(i&&fi(new li(s),t.M.duration),e.Pb(s),n=t.presentationTimeline.Xa(),e.Fb(n-t.M.start)):(t.presentationTimeline.Na(s,0==t.M.index),e=new li(s),o&&t.Ia&&(n[o]=e)),i&&fi(e,t.M.duration),t={createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:e.find.bind(e),getSegmentReference:e.get.bind(e)});return{createSegmentIndex:t.createSegmentIndex,findSegmentPosition:t.findSegmentPosition,getSegmentReference:t.getSegmentReference,initSegmentReference:r,da:a.da}}function Ri(t){return t.fb}function Ni(t,e){var n=t.M.duration,i=e.R,r=e.Ea,a=e.timescale,o=e.Ob,s=t.bandwidth||null,u=t.v.id,c=t.v.ea;return{createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:function(t){return 0>t||n&&t>=n?null:Math.floor(t/i)},getSegmentReference:function(t){var e=t*i,h=e+i;return n&&(h=Math.min(h,n)),0>h||n&&e>=n?null:new ti(t,e,h,function(){var n=Xn(o,u,t+r,s,e*a);return Nt(c,[n])},0,null)}}}function Di(t,e){for(var n=[],i=0;i<e.H.length;i++){var r=i+e.Ea;n.push(new ti(r,e.H[i].start,e.H[i].end,function(t,e,n,i,r,a){return t=Xn(t,e,r,n,a),Nt(i,[t]).map(function(t){return t.toString()})}.bind(null,e.Ob,t.v.id,t.bandwidth||null,t.v.ea,r,e.H[i].We+e.ic),0,null))}return n}function Ci(t){var e=zn(t,Ri,"initialization");if(!e)return null;var n=t.v.id,i=t.bandwidth||null,r=t.v.ea;return new Zn(function(){var t=Xn(e,n,null,i,null);return Nt(r,[t])},0,null)}function Mi(){var t,e={};for(t in Oc)e[t]=!0;for(var n in Uc)e[n]=!0;return["application/dash+xml","application/x-mpegurl","application/vnd.apple.mpegurl","application/vnd.ms-sstr+xml"].forEach(function(t){e[t]=!!Oc[t]}),["mpd","m3u8","ism"].forEach(function(t){e[t]=!!Uc[t]}),e}function Li(t,e,n,i){var r=i;return r||(i=new L(t).aa.split("/").pop().split("."),1<i.length&&(i=i.pop().toLowerCase(),r=Uc[i])),r?Promise.resolve(r):(n=pt([t],n),n.method="HEAD",e.request(0,n).promise.then(function(e){return(e=e.headers["content-type"])&&(e=e.toLowerCase()),(r=Oc[e])?r:Promise.reject(new z(2,4,4e3,t))},function(t){return t.severity=2,Promise.reject(t)}))}function Oi(t,e){this.f=t,this.l=e,this.c=this.b=1/0,this.a=1,this.j=this.h=0,this.i=!0,this.g=0}function Ui(){this.a=this.b=null,this.h=[],this.c=null,this.j=[],this.i=1,this.l={},this.m=0,this.o=new P(5),this.g=null,this.f=new ht}function ji(t){var e=Date.now(),n=t.a.networkingEngine.request(0,pt(t.h,t.b.retryParameters));return lt(t.f,n),n.promise.then(function(e){if(t.a)return Bi(t,e.data,e.uri)}).then(function(){var n=(Date.now()-e)/1e3;return R(t.o,1,n),n})}function Bi(t,e,n){if(!(e=$n(e,"MPD")))throw new z(2,4,4001,n);return e=Qn(e,t.b.retryParameters,t.b.dash.xlinkFailGracefully,n,t.a.networkingEngine),lt(t.f,e),e.promise.then(function(e){return Fi(t,e,n)})}function Fi(t,e,n){n=[n];var i=Rn(e,"Location").map(Cn).filter(Pt);0<i.length&&(n=t.h=i),i=Rn(e,"BaseURL").map(Cn),n=Nt(n,i);var r=Mn(e,"minBufferTime",On);t.m=Mn(e,"minimumUpdatePeriod",On,-1);var a=Mn(e,"availabilityStartTime",Ln);i=Mn(e,"timeShiftBufferDepth",On);var o=Mn(e,"suggestedPresentationDelay",On),s=Mn(e,"maxSegmentDuration",On),u=e.getAttribute("type")||"static";if(t.c)var c=t.c.presentationTimeline;else{var h=Math.max(t.b.dash.defaultPresentationDelay,1.5*r);c=new Oi(a,null!=o?o:h)}a=Vi(t,{Ia:"static"!=u,presentationTimeline:c,ba:null,M:null,W:null,v:null,bandwidth:0,wc:!1},n,e),o=a.duration;var l=a.periods;return c.yb("static"==u),"static"!=u&&a.oc||c.ka(o||1/0),(u=c.P())&&!isNaN(t.b.availabilityWindowOverride)&&(i=t.b.availabilityWindowOverride),null==i&&(i=1/0),c.dc(i),c.Rb(s||1),t.c?Promise.resolve():(e=Rn(e,"UTCTiming"),$i(t,n,e,u).then(function(t){this.a&&(c.Rc(t),this.c={presentationTimeline:c,periods:l,offlineSessionIds:[],minBufferTime:r||0})}.bind(t)))}function Vi(t,e,n,i){var r=Mn(i,"mediaPresentationDuration",On),a=[],o=0;i=Rn(i,"Period");for(var s=0;s<i.length;s++){var u=i[s];o=Mn(u,"start",On,o);var c=Mn(u,"duration",On),h=null;if(s!=i.length-1){var l=Mn(i[s+1],"start",On);null!=l&&(h=l-o)}else null!=r&&(h=r-o);if(null==h&&(h=c),u=Ki(t,e,n,{start:o,duration:h,node:u,index:s,Lb:null==h||s==i.length-1}),a.push(u),c=e.ba.id,-1==t.j.indexOf(c)&&(t.j.push(c),t.c&&(t.a.filterNewPeriod(u),t.c.periods.push(u))),null==h){o=null;break}o+=h}return null==t.c&&t.a.filterAllPeriods(a),null!=r?{periods:a,duration:r,oc:!1}:{periods:a,duration:o,oc:!0}}function Ki(t,e,n,i){e.ba=Xi(i.node,null,n),e.M=i,e.ba.id||(e.ba.id="__shaka_period_"+i.start),Rn(i.node,"EventStream").forEach(t.ie.bind(t,i.start,i.duration)),n=Rn(i.node,"AdaptationSet").map(t.ge.bind(t,e)).filter(Pt);var r=n.map(function(t){return t.te}).reduce(It,[]),a=r.filter(Rt);if(e.Ia&&r.length!=a.length)throw new z(2,4,4018);var o=n.filter(function(t){return!t.hc});if(n.filter(function(t){return t.hc}).forEach(function(t){var e=t.streams[0],n=t.hc;o.forEach(function(t){t.id==n&&t.streams.forEach(function(t){t.trickModeVideo=e})})}),n=Hi(o,"video"),r=Hi(o,"audio"),!n.length&&!r.length)throw new z(2,4,4004);for(r.length||(r=[null]),n.length||(n=[null]),e=[],a=0;a<r.length;a++)for(var s=0;s<n.length;s++)qi(t,r[a],n[s],e);for(t=Hi(o,"text"),n=[],r=0;r<t.length;r++)n.push.apply(n,t[r].streams);return{startTime:i.start,textStreams:n,variants:e}}function Hi(t,e){return t.filter(function(t){return t.contentType==e})}function qi(t,e,n,i){if(e||n)if(e&&n){var r=e.drmInfos,a=n.drmInfos;if(r.length&&a.length?0<fe(r,a).length:1){a=fe(e.drmInfos,n.drmInfos);for(var o=0;o<e.streams.length;o++)for(var s=0;s<n.streams.length;s++)r=(n.streams[s].bandwidth||0)+(e.streams[o].bandwidth||0),r={id:t.i++,language:e.language,primary:e.Nb||n.Nb,audio:e.streams[o],video:n.streams[s],bandwidth:r,drmInfos:a,allowedByApplication:!0,allowedByKeySystem:!0},i.push(r)}}else for(a=e||n,o=0;o<a.streams.length;o++)r=a.streams[o].bandwidth||0,r={id:t.i++,language:a.language||"und",primary:a.Nb,audio:e?a.streams[o]:null,video:n?a.streams[o]:null,bandwidth:r,drmInfos:a.drmInfos,allowedByApplication:!0,allowedByKeySystem:!0},i.push(r)}function Gi(e,n){0>e.m||(e.g=t.setTimeout(e.Pe.bind(e),1e3*Math.max(3,e.m-n,N(e.o))))}function Xi(t,e,n){e=e||{contentType:"",mimeType:"",codecs:"",containsEmsgBoxes:!1,frameRate:void 0,Sb:null},n=n||e.ea;var i=Rn(t,"BaseURL").map(Cn),r=t.getAttribute("contentType")||e.contentType,a=t.getAttribute("mimeType")||e.mimeType,o=t.getAttribute("codecs")||e.codecs,s=Mn(t,"frameRate",Vn)||e.frameRate,u=!!Rn(t,"InbandEventStream").length,c=Rn(t,"AudioChannelConfiguration");return c=Yi(c)||e.Sb,r||(r=Ji(a,o)),{ea:Nt(n,i),cb:Pn(t,"SegmentBase")||e.cb,ta:Pn(t,"SegmentList")||e.ta,fb:Pn(t,"SegmentTemplate")||e.fb,width:Mn(t,"width",Fn)||e.width,height:Mn(t,"height",Fn)||e.height,contentType:r,mimeType:a,codecs:o,frameRate:s,containsEmsgBoxes:u||e.containsEmsgBoxes,id:t.getAttribute("id"),Sb:c}}function Yi(t){for(var e=0;e<t.length;++e){var n=t[e],i=n.getAttribute("schemeIdUri");if(i&&(n=n.getAttribute("value")))switch(i){case"urn:mpeg:dash:outputChannelPositionList:2012":return n.trim().split(/ +/).length;case"urn:mpeg:dash:23003:3:audio_channel_configuration:2011":case"urn:dts:dash:audio_channel_configuration:2012":if(!(i=parseInt(n,10)))continue;return i;case"tag:dolby.com,2014:dash:audio_channel_configuration:2011":case"urn:dolby:dash:audio_channel_configuration:2011":if(i=parseInt(n,16)){for(t=0;i;)1&i&&++t,i>>=1;return t}}}return null}function zi(t){var e=t.cb?1:0;return e+=t.ta?1:0,0==(e+=t.fb?1:0)?"text"==t.contentType||"application"==t.contentType:(1!=e&&(t.cb&&(t.ta=null),t.fb=null),!0)}function Wi(t,e,n,i){return e=Nt(e,[n]),e=pt(e,t.b.retryParameters),e.method=i,e=t.a.networkingEngine.request(0,e),lt(t.f,e),e.promise.then(function(t){if("HEAD"==i){if(!t.headers||!t.headers.date)return 0;t=t.headers.date}else t=Mt(t.data);return t=Date.parse(t),isNaN(t)?0:t-Date.now()})}function $i(t,e,n,i){n=n.map(function(t){return{scheme:t.getAttribute("schemeIdUri"),value:t.getAttribute("value")}});var r=t.b.dash.clockSyncUri;return i&&!n.length&&r&&n.push({scheme:"urn:mpeg:dash:utc:http-head:2014",value:r}),_t(n,function(t){var n=t.value;switch(t.scheme){case"urn:mpeg:dash:utc:http-head:2014":case"urn:mpeg:dash:utc:http-head:2012":return Wi(this,e,n,"HEAD");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":return Wi(this,e,n,"GET");case"urn:mpeg:dash:utc:direct:2014":case"urn:mpeg:dash:utc:direct:2012":return t=Date.parse(n),isNaN(t)?0:t-Date.now();case"urn:mpeg:dash:utc:http-ntp:2014":case"urn:mpeg:dash:utc:ntp:2014":case"urn:mpeg:dash:utc:sntp:2014":default:return Promise.reject()}}.bind(t)).catch(function(){return 0})}function Ji(t,e){return mc[Ct(t,e)]?"text":t.split("/")[0]}function Qi(t,e,n,i){this.uri=t,this.type=e,this.a=n,this.segments=i||null}function Zi(t,e,n,i){this.id=t,this.name=e,this.a=n,this.value=i||null}function tr(t,e){this.name=t,this.value=e}function er(t,e,n){return n=n||null,(t=t.getAttribute(e))?t.value:n}function nr(t,e){this.a=e,this.uri=t}function ir(t,e){return t.filter(function(t){return t.name==e})}function rr(t,e){var n=ir(t,e);return n.length?n[0]:null}function ar(t,e,n){return t.filter(function(t){var i=t.getAttribute("TYPE");return t=t.getAttribute("GROUP-ID"),i.value==e&&t.value==n})}function or(t,e){return Nt([t],[e])[0]}function sr(t){this.b=t,this.a=0}function ur(t){cr(t,/[ \t]+/gm)}function cr(t,e){e.lastIndex=t.a;var n=e.exec(t.b);return n=null==n?null:{position:n.index,length:n[0].length,we:n},t.a==t.b.length||null==n||n.position!=t.a?null:(t.a+=n.length,n.we)}function hr(t){return t.a==t.b.length?null:(t=cr(t,/[^ \t\n]*/gm))?t[0]:null}function lr(){this.a=0}function fr(t,e,n){e=Mt(e),e=e.replace(/\r\n|\r(?=[^\n]|$)/gm,"\n").trim();var i=e.split(/\n+/m);if(!/^#EXTM3U($|[ \t\n])/m.test(i[0]))throw new z(2,4,4015);e=0;for(var r=1;r<i.length;r++)if(!/^#(?!EXT)/m.test(i[r])){var a=pr(t,i[r]);if(--t.a,0<=jc.indexOf(a.name)){e=1;break}"EXT-X-STREAM-INF"==a.name&&(r+=1)}for(r=[],a=1;a<i.length;)if(/^#(?!EXT)/m.test(i[a]))a+=1;else{var o=pr(t,i[a]);if(0<=Bc.indexOf(o.name)){if(1!=e)throw new z(2,4,4017);return i=i.splice(a,i.length-a),t=dr(t,i,r),new Qi(n,e,r,t)}r.push(o),a+=1,"EXT-X-STREAM-INF"==o.name&&(o.a.push(new tr("URI",i[a])),a+=1)}return new Qi(n,e,r)}function dr(t,e,n){var i=[],r=[];return e.forEach(function(e){if(/^(#EXT)/.test(e))e=pr(t,e),0<=jc.indexOf(e.name)?n.push(e):r.push(e);else{if(/^#(?!EXT)/m.test(e))return[];i.push(new nr(e.trim(),r)),r=[]}}),i}function pr(t,e){t:{var n=t.a++,i=e.match(/^#(EXT[^:]*)(?::(.*))?$/);if(!i)throw new z(2,4,4016,e);var r=i[1],a=i[2];if(i=[],a&&0<=a.indexOf("=")){a=new sr(a);for(var o,s=/([^=]+)=(?:"([^"]*)"|([^",]*))(?:,|$)/g;o=cr(a,s);)i.push(new tr(o[1],o[2]||o[3]))}else if(a){n=new Zi(n,r,i,a);break t}n=new Zi(n,r,i)}return n}function mr(t){try{var e=mr.parse(t);return Q({uri:t,data:e.data,headers:{"content-type":e.contentType}})}catch(t){return $(t)}}function vr(){this.g=this.c=null,this.L=1,this.u={},this.I={},this.Y={},this.a={},this.b=null,this.m="",this.s=new lr,this.j=this.i=null,this.f=Hc,this.o=null,this.l=0,this.A=1/0,this.h=new ht,this.G=[]}function yr(t,e,n){Vr(t,n).then(function(t){var i=qc,r=fr(this.s,t.data,n);if(1!=r.type)throw new z(2,4,4017);t=rr(r.a,"EXT-X-MEDIA-SEQUENCE");var a=e.stream;Dr(this,r,t?Number(t.value):0,a.mimeType,a.codecs).then(function(t){e.eb.a=t,t=t[t.length-1],rr(r.a,"EXT-X-ENDLIST")&&(Hr(this,i.ra),this.b.ka(t.endTime))}.bind(this))}.bind(t))}function gr(t,e,n){if(e=fr(t.s,e,n),0!=e.type)throw new z(2,4,4022);return br(t,e).then(function(t){this.c.filterAllPeriods([t]);var e=1/0,n=0,i=0,r=1/0;for(o in this.a){var a=this.a[o];e=Math.min(e,a.Qb),n=Math.max(n,a.Qb),i=Math.max(i,a.Fd),"text"!=a.stream.type&&(r=Math.min(r,a.duration))}var o=null;if(a=0,this.f!=qc.ra&&(o=Date.now()/1e3-i,a=3*this.l),this.b=new Oi(o,a),this.b.yb(this.f==qc.ra),Nr(this),this.f!=qc.ra){for(e=3*this.l,this.b.Sc(e),this.i=this.A,this.f==qc.jc&&(isNaN(this.g.availabilityWindowOverride)||(e=this.g.availabilityWindowOverride),this.b.dc(e)),e=0;95443.7176888889<=n;)e+=95443.7176888889,n-=95443.7176888889;if(e)for(var s in this.a)n=this.a[s],95443.7176888889>n.Qb&&(n.stream.presentationTimeOffset=-e,n.eb.offset(e))}else{this.b.ka(r);for(var u in this.a)s=this.a[u],s.stream.presentationTimeOffset=e,s.eb.offset(-e),fi(s.eb,r)}this.o={presentationTimeline:this.b,periods:[t],offlineSessionIds:[],minBufferTime:0}}.bind(t))}function br(t,e){var n=e.a,i=ir(e.a,"EXT-X-MEDIA").filter(function(t){return"SUBTITLES"==Br(t,"TYPE")}.bind(t)).map(function(t){return kr(this,t)}.bind(t));return Promise.all(i).then(function(t){var i=ir(n,"EXT-X-STREAM-INF").map(function(t){return wr(this,t,e)}.bind(this));return Promise.all(i).then(function(e){return{startTime:0,variants:e.reduce(It,[]),textStreams:t}}.bind(this))}.bind(t))}function wr(t,e,n){var i=er(e,"CODECS","avc1.42E01E,mp4a.40.2").split(/\s*,\s*/),r=e.getAttribute("RESOLUTION"),a=null,o=null,s=er(e,"FRAME-RATE"),u=Number(Br(e,"BANDWIDTH"));if(r){var c=r.value.split("x");a=c[0],o=c[1]}n=ir(n.a,"EXT-X-MEDIA");var h=er(e,"AUDIO"),l=er(e,"VIDEO");if(h?n=ar(n,"AUDIO",h):l&&(n=ar(n,"VIDEO",l)),c=Ur("text",i)){var f=er(e,"SUBTITLES");f&&(f=ar(n,"SUBTITLES",f),f.length&&(t.u[f[0].id].stream.codecs=c)),i.splice(i.indexOf(c),1)}n=n.map(function(t){return Ar(this,t,i)}.bind(t));var d=[],p=[];return Promise.all(n).then(function(t){if(h?d=t:l&&(p=t),t=!1,d.length||p.length)if(d.length)if(Br(e,"URI")==d[0].$b){var n="audio";t=!0}else n="video";else n="audio";else 1==i.length?(n=Ur("video",i),n=r||s||n?"video":"audio"):(n="video",i=[i.join(",")]);return t?Promise.resolve():Ir(this,e,i,n)}.bind(t)).then(function(t){return t&&("audio"==t.stream.type?d=[t]:p=[t]),p&&Tr(p),d&&Tr(d),Er(this,d,p,u,a,o,s)}.bind(t))}function Tr(t){t.forEach(function(t){var e=t.stream.codecs.split(",");e=e.filter(function(t){return"mp4a.40.34"!=t}),t.stream.codecs=e.join(",")})}function Er(t,e,n,i,r,a,o){n.forEach(function(t){(t=t.stream)&&(t.width=Number(r)||void 0,t.height=Number(a)||void 0,t.frameRate=Number(o)||void 0)}.bind(t)),e.length||(e=[null]),n.length||(n=[null]);for(var s=[],u=0;u<e.length;u++)for(var c=0;c<n.length;c++){var h=e[u]?e[u].stream:null,l=n[c]?n[c].stream:null,f=e[u]?e[u].drmInfos:null,d=n[c]?n[c].drmInfos:null,p=void 0;if(h&&l){if(!(f.length&&d.length?0<fe(f,d).length:1))continue;p=fe(f,d)}else h?p=f:l&&(p=d);f=(n[u]?n[u].$b:"")+" - "+(e[u]?e[u].$b:""),t.I[f]||(h=Sr(t,h,l,i,p),s.push(h),t.I[f]=h)}return s}function Sr(t,e,n,i,r){return{id:t.L++,language:e?e.language:"und",primary:!!e&&e.primary||!!n&&n.primary,audio:e,video:n,bandwidth:i,drmInfos:r,allowedByApplication:!0,allowedByKeySystem:!0}}function kr(t,e){return Br(e,"TYPE"),Ar(t,e,[]).then(function(t){return t.stream})}function Ar(t,e,n){var i=Br(e,"URI");if(i=or(t.m,i),t.a[i])return Promise.resolve(t.a[i]);var r=Br(e,"TYPE").toLowerCase();"subtitles"==r&&(r="text");var a=Be(er(e,"LANGUAGE","und")),o=er(e,"NAME"),s=e.getAttribute("DEFAULT"),u=e.getAttribute("AUTOSELECT"),c=er(e,"CHANNELS");return xr(t,i,n,r,a,!!s||!!u,o,"audio"==r?_r(c):null).then(function(t){return this.a[i]?this.a[i]:(this.u[e.id]=t,this.a[i]=t)}.bind(t))}function _r(t){return t?(t=t.split("/")[0],parseInt(t,10)):null}function Ir(t,e,n,i){var r=Br(e,"URI");return r=or(t.m,r),t.a[r]?Promise.resolve(t.a[r]):xr(t,r,n,i,"und",!1,null,null).then(function(t){return this.a[r]?this.a[r]:this.a[r]=t}.bind(t))}function xr(t,e,n,i,r,a,o,s){var u=e;e=or(t.m,e);var c,h,l="";return Vr(t,e).then(function(t){if(c=fr(this.s,t.data,e),1!=c.type)throw new z(2,4,4017);t=c;var r=qc,a=rr(t.a,"EXT-X-PLAYLIST-TYPE"),o=rr(t.a,"EXT-X-ENDLIST");if(o=a&&"VOD"==a.value||o,a=a&&"EVENT"==a.value&&!o,a=!o&&!a,o?Hr(this,r.ra):(a?Hr(this,r.jc):Hr(this,r.Zc),t=Fr(t.a,"EXT-X-TARGETDURATION"),t=Number(t.value),this.l=Math.max(t,this.l),this.A=Math.min(t,this.A)),1==n.length)l=n[0];else{if(null==(t=Ur(i,n)))throw new z(2,4,4025,n);l=t}return jr(this,i,l,c)}.bind(t)).then(function(t){return h=t,t=rr(c.a,"EXT-X-MEDIA-SEQUENCE"),Dr(this,c,t?Number(t.value):0,h,l)}.bind(t)).then(function(t){var e=t[0].startTime,n=t[t.length-1].endTime,f=n-e;t=new li(t);var d=Pr(c),p=void 0;"text"==i&&(p="subtitle");var m=[];c.segments.forEach(function(t){t=ir(t.a,"EXT-X-KEY"),m.push.apply(m,t)});var v=!1,y=[],g=null;if(m.forEach(function(t){if("NONE"!=Br(t,"METHOD")){v=!0;var e=Br(t,"KEYFORMAT");(t=(e=Kc[e])?e(t):null)&&(t.keyIds.length&&(g=t.keyIds[0]),y.push(t))}}),v&&!y.length)throw new z(2,4,4026);return d={id:this.L++,createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:t.find.bind(t),getSegmentReference:t.get.bind(t),initSegmentReference:d,presentationTimeOffset:0,mimeType:h,codecs:l,kind:p,encrypted:v,keyId:g,language:r,label:o||null,type:i,primary:a,trickModeVideo:null,containsEmsgBoxes:!1,frameRate:void 0,width:void 0,height:void 0,bandwidth:void 0,roles:[],channelsCount:s},this.Y[d.id]=t,{stream:d,eb:t,drmInfos:y,$b:u,Qb:e,Fd:n,duration:f}}.bind(t))}function Pr(t){var e=ir(t.a,"EXT-X-MAP");if(!e.length)return null;if(1<e.length)throw new z(2,4,4020);e=e[0];var n=Br(e,"URI"),i=or(t.uri,n);return t=0,n=null,(e=er(e,"BYTERANGE"))&&(t=e.split("@"),e=Number(t[0]),t=Number(t[1]),n=t+e-1),new Zn(function(){return[i]},t,n)}function Rr(t,e,n,i,r){var a=n.a,o=or(t.uri,n.uri);t=Fr(a,"EXTINF").value.split(","),t=r+Number(t[0]),n=0;var s=null;return(a=rr(a,"EXT-X-BYTERANGE"))&&(n=a.value.split("@"),a=Number(n[0]),n=n[1]?Number(n[1]):e.a+1,s=n+a-1),new ti(i,r,t,function(){return[o]},n,s)}function Nr(t){t.b&&(t.G.forEach(function(e){t.b.Na(e,!0)}),t.G=[])}function Dr(t,e,n,i,r){var a=e.segments,o=[],s=or(e.uri,a[0].uri),u=Rr(e,null,a[0],n,0),c=Pr(e);return Mr(t,e.uri,c,u,i,r).then(function(t){s.split("/").pop();for(var i=0;i<a.length;++i){var r=o[o.length-1];r=Rr(e,r,a[i],n+i,0==i?t:r.endTime),o.push(r)}return this.G.push(o),Nr(this),o}.bind(t))}function Cr(t,e){var n=t.c.networkingEngine,i=pt(e.c(),t.g.retryParameters),r={},a=e.b;r.Range="bytes="+a+"-"+(a+2048-1);var o={};return 0==a&&null==e.a||(a="bytes="+a+"-",null!=e.a&&(a+=e.a),o.Range=a),i.headers=r,r=n.request(1,i),lt(t.h,r),r.promise.catch(function(){C("Unable to fetch a partial HLS segment! Falling back to a full segment request, which is expensive! Your server should support Range requests and CORS preflights.",i.uris[0]),i.headers=o;var e=n.request(1,i);return lt(t.h,e),e.promise})}function Mr(t,e,n,i,r,a){return t.o&&(e=t.a[e].eb.get(i.position))?Promise.resolve(e.startTime):(i=[Cr(t,i)],"video/mp4"!=r&&"audio/mp4"!=r||(n?i.push(Cr(t,n)):i.push(i[0])),Promise.all(i).then(function(t){if("video/mp4"==r||"audio/mp4"==r)return Lr(t[0].data,t[1].data);if("audio/mpeg"==r)return 0;if("video/mp2t"==r)return Or(t[0].data);if("application/mp4"==r||0==r.indexOf("text/")){t=t[0].data;var e=Ct(r,a);if(mc[e]){var n=new Se(null);n.f=new mc[e],t=n.Kb(t)}else t=0;return t}throw new z(2,4,4030)}.bind(t)))}function Lr(t,e){var n=0;if((new ii).C("moov",ri).C("trak",ri).C("mdia",ri).Z("mdhd",function(t){t.reader.F(0==t.version?8:16),n=t.reader.B(),t.parser.stop()}).parse(e,!0),!n)throw new z(2,4,4030);var i=0,r=!1;if((new ii).C("moof",ri).C("traf",ri).Z("tfdt",function(t){i=(0==t.version?t.reader.B():t.reader.Ra())/n,r=!0,t.parser.stop()}).parse(t,!0),!r)throw new z(2,4,4030);return i}function Or(t){function e(){throw new z(2,4,4030)}t=new ei(new DataView(t),0);for(var n=0,i=0;;){if(n=t.U(),i=t.ca(),71!=i&&e(),16384&t.bb()||e(),i=(48&t.ca())>>4,0!=i&&2!=i||e(),3==i&&(i=t.ca(),t.F(i)),1==t.B()>>8)return t.F(3),n=t.ca()>>6,0!=n&&1!=n||e(),0==t.ca()&&e(),n=t.ca(),i=t.bb(),t=t.bb(),(1073741824*((14&n)>>1)+((65534&i)<<14|(65534&t)>>1))/9e4;t.seek(n+188),i=t.ca(),71!=i&&(t.seek(n+192),i=t.ca()),71!=i&&(t.seek(n+204),i=t.ca()),71!=i&&e(),t.Oc(1)}}function Ur(t,e){for(var n=Fc[t],i=0;i<n.length;i++)for(var r=0;r<e.length;r++)if(n[i].test(e[r].trim()))return e[r].trim();return"text"==t?"":null}function jr(t,e,n,i){i=or(i.uri,i.segments[0].uri);var r=new L(i).aa.split(".").pop(),a=Vc[e][r];return a?Promise.resolve(a):"text"==e?n&&"vtt"!=n?Promise.resolve("application/mp4"):Promise.resolve("text/vtt"):(e=pt([i],t.g.retryParameters),e.method="HEAD",e=t.c.networkingEngine.request(1,e),lt(t.h,e),e.promise.then(function(t){if(!(t=t.headers["content-type"]))throw new z(2,4,4021,r);return t.split(";")[0]}))}function Br(t,e){var n=t.getAttribute(e);if(!n)throw new z(2,4,4023,e);return n.value}function Fr(t,e){var n=rr(t,e);if(!n)throw new z(2,4,4024,e);return n}function Vr(t,e){var n=t.c.networkingEngine.request(0,pt([e],t.g.retryParameters));return lt(t.h,n),n.promise}function Kr(e,n){null!=e.i&&null!=n&&(e.j=t.setTimeout(e.S.bind(e),1e3*n))}function Hr(e,n){e.f=n,e.b&&e.b.yb(e.f==qc.ra),e.f==qc.ra&&null!=e.j&&(t.clearTimeout(e.j),e.j=null,e.i=null)}function qr(t,e,n,i){this.a=t,this.s=e,this.o=n,this.u=i,this.h=new wt,this.b=null,this.g=!1,this.m=t.readyState,this.c=!1,this.j=this.A=-1,this.f=this.i=!1,e=this.l.bind(this),Tt(this.h,t,"waiting",e),this.b=new Bt(e),Vt(this.b,.25)}function Gr(t,e,n){this.a=t,this.i=e,this.h=n,this.c=new wt,this.f=1,this.g=!1,this.b=null,0<t.readyState?this.Fc():Et(this.c,t,"loadedmetadata",this.Fc.bind(this)),Tt(this.c,t,"ratechange",this.Vd.bind(this))}function Xr(t){return 0<t.a.readyState?t.a.currentTime:t.h}function Yr(t,e){0<t.a.readyState?Wr(t,t.a.currentTime,e):(t.h=e,setTimeout(t.i,0))}function zr(t,e){null!=t.b&&(t.b.cancel(),t.b=null),t.f=e,t.a.playbackRate=t.g||0>e?0:e,!t.g&&0>e&&(t.b=new Bt(function(){t.a.currentTime+=e/4}),Vt(t.b,.25))}function Wr(t,e,n){function i(){!t.a||10<=r++||t.a.currentTime!=e||(t.a.currentTime=n,setTimeout(i,100))}t.a.currentTime=n;var r=0;setTimeout(i,100)}function $r(t,e,n,i,r,a){this.c=t,this.b=e,this.h=n,this.j=r,this.f=null,this.g=new qr(t,e,n,a),e=this.Xd.bind(this),n=this.b.presentationTimeline,null==i?i=1/0>n.T()?n.Ja():n.ma():0>i&&(i=n.ma()+i),i=Qr(this,ta(this,i)),this.a=new Gr(t,e,i),this.f=new Bt(this.Ud.bind(this)),Vt(this.f,.25)}function Jr(t){var e=Xr(t.a);return 0<t.c.readyState&&(t.c.paused||(e=ta(t,e))),e}function Qr(t,e){var n=t.b.presentationTimeline.T();return e>=n?n-t.h.durationBackoff:e}function Zr(t,e){var n=pe.bind(null,t.c.buffered),i=Math.max(t.b.minBufferTime||0,t.h.rebufferingGoal),r=t.b.presentationTimeline,a=r.Ja(),o=r.ma(),s=r.T();3>o-a&&(a=o-3);var u=r.Wa(i),c=r.Wa(5);return i=r.Wa(i+5),e>=s?Qr(t,e):e>o?o:e<a?n(c)?c:i:e>=u||n(e)?e:i}function ta(t,e){var n=t.b.presentationTimeline.Ja();return e<n?n:(n=t.b.presentationTimeline.ma(),e>n?n:e)}function ea(t,e,n,i,r,a,o){this.a=t,this.u=e,this.g=n,this.s=i,this.l=r,this.h=a,this.A=o,this.c=[],this.j=new wt,this.b=!1,this.i=-1,this.f=null,ia(this)}function na(t){var e=ut(t);return e.eventElement=t.eventElement,e}function ia(e){ra(e),e.f=t.setTimeout(e.G.bind(e),250)}function ra(e){e.f&&(t.clearTimeout(e.f),e.f=null)}function aa(t,e){this.a=e,this.b=t,this.g=null,this.j=1,this.m=Promise.resolve(),this.h=[],this.i={},this.c={},this.o=!1,this.A=null,this.u=this.f=this.l=!1,this.s=0}function oa(t){var e=Jr(t.a.Pa);return t.b.periods[sn(t.b,e)]}function sa(t){var e=t.c.video||t.c.audio;return e?t.b.periods[e.Ba]:null}function ua(t){return ha(t,"audio")}function ca(t){return ha(t,"video")}function ha(t,e){var n=t.c[e];return n?n.sa||n.stream:null}function la(t,e){Ce(t.a.J,"text"),t.s++,t.u=!1;var n=t.s;return t.a.J.init({text:e},!1).then(function(){return Ta(t,[e])}).then(function(){if(!t.f&&t.s==n&&!t.c.text&&!t.u){var i=Jr(t.a.Pa);t.c.text=ba(e,sn(t.b,i)),Oa(t,t.c.text,0)}})}function fa(t){t.u=!0,t.c.text&&(Ua(t.c.text),delete t.c.text)}function da(t,e){var n=t.c.video;if(n){var i=n.stream;if(i)if(e){var r=i.trickModeVideo;r&&!n.sa&&(ma(t,r,!1),n.sa=i)}else(i=n.sa)&&(n.sa=null,ma(t,i,!0))}}function pa(t,e,n){e.video&&ma(t,e.video,n),e.audio&&ma(t,e.audio,n)}function ma(t,e,n){var i=t.c[e.type];if(!i&&"text"==e.type&&t.g.ignoreTextStreamFailures)la(t,e);else if(i){var r=un(t.b,e);n&&r!=i.Ba?ya(t):(i.sa&&(e.trickModeVideo?(i.sa=e,e=e.trickModeVideo):i.sa=null),(r=t.h[r])&&r.Sa&&(r=t.i[e.id])&&r.Sa&&i.stream!=e&&("text"==e.type&&Ie(t.a.J,Ct(e.mimeType,e.codecs)),i.stream=e,i.wb=!0,n&&(i.ya?i.zb=!0:i.Ca?(i.va=!0,i.zb=!0):(Ua(i),La(t,i,!0)))))}}function va(t){var e=Jr(t.a.Pa),n=t.g.smallGapLimit;Object.keys(t.c).every(function(t){var i=this.a.J;return"text"==t?(t=i.a,t=e>=t.a&&e<t.b):(t=Ne(i,t),t=pe(t,e,n)),t}.bind(t))||ya(t)}function ya(t){for(var e in t.c){var n=t.c[e];n.ya||n.va||(n.Ca?n.va=!0:null==xe(t.a.J,e)?null==n.ua&&Oa(t,n,0):(Ua(n),La(t,n,!1)))}}function ga(t,e,n){var i=Jr(t.a.Pa),r=sn(t.b,i),a={},o=[];return e.variant&&e.variant.audio&&(a.audio=e.variant.audio,o.push(e.variant.audio)),e.variant&&e.variant.video&&(a.video=e.variant.video,o.push(e.variant.video)),e.text&&(a.text=e.text,o.push(e.text)),t.a.J.init(a,t.g.forceTransmuxTS).then(function(){if(!t.f){var e=t.b.presentationTimeline.T();return 1/0>e?t.a.J.ka(e):t.a.J.ka(Math.pow(2,32)),Ta(t,o)}}).then(function(){if(!t.f)for(var e in a){var i=a[e];t.c[e]||(t.c[e]=ba(i,r,n),Oa(t,t.c[e],0))}})}function ba(t,e,n){return{stream:t,type:t.type,La:null,na:null,sa:null,wb:!0,Ba:e,endOfStream:!1,Ca:!1,ua:null,va:!1,zb:!1,ya:!1,Zb:!1,Ya:!1,Nc:n||0}}function wa(t,e){var n=t.h[e];if(n)return n.promise;n={promise:new q,Sa:!1},t.h[e]=n;var i=t.b.periods[e].variants.map(function(t){var e=[];return t.audio&&e.push(t.audio),t.video&&e.push(t.video),t.video&&t.video.trickModeVideo&&e.push(t.video.trickModeVideo),e}).reduce(It,[]).filter(Rt);return i.push.apply(i,t.b.periods[e].textStreams),t.m=t.m.then(function(){if(!this.f)return Ta(this,i)}.bind(t)).then(function(){this.f||(this.h[e].promise.resolve(),this.h[e].Sa=!0)}.bind(t)).catch(function(t){this.f||(this.h[e].promise.catch(function(){}),this.h[e].promise.reject(),delete this.h[e],this.a.onError(t))}.bind(t)),n.promise}function Ta(t,e){e.map(function(t){return t.id}).filter(Rt);for(var n=[],i=0;i<e.length;++i){var r=e[i],a=t.i[r.id];a?n.push(a.promise):(t.i[r.id]={promise:new q,Sa:!1},n.push(r.createSegmentIndex()))}return Promise.all(n).then(function(){if(!this.f)for(var t=0;t<e.length;++t){var n=this.i[e[t].id];n.Sa||(n.promise.resolve(),n.Sa=!0)}}.bind(t)).catch(function(t){if(!this.f){for(var n=0;n<e.length;n++)this.i[e[n].id].promise.catch(function(){}),this.i[e[n].id].promise.reject(),delete this.i[e[n].id];return Promise.reject(t)}}.bind(t))}function Ea(t,e){var n=Jr(t.a.Pa),i=Sa(t,e,n),r=un(t.b,e.stream),a=sn(t.b,i),o=Re(t.a.J,e.type,n),s=Math.max(t.j*Math.max(t.b.minBufferTime||0,t.g.rebufferingGoal),t.j*t.g.bufferingGoal);if(i>=t.b.presentationTimeline.T())return e.endOfStream=!0,null;if(e.endOfStream=!1,e.Ba=a,a!=r)return null;if(o>=s)return.5;if(a=Pe(t.a.J,e.type),!(a=ka(t,e,n,a,r)))return 1;var u=1/0;return $u.values(t.c).forEach(function(e){u=Math.min(u,Sa(t,e,n))}),i>=u+t.b.presentationTimeline.a?1:(e.Nc=0,_a(t,e,n,r,a),null)}function Sa(t,e,n){return e.La&&e.na?t.b.periods[un(t.b,e.La)].startTime+e.na.endTime:Math.max(n,e.Nc)}function ka(t,e,n,i,r){if(e.na&&e.stream==e.La)return Aa(t,e,r,e.na.position+1);if(null==(n=e.na?e.stream.findSegmentPosition(Math.max(0,t.b.periods[un(t.b,e.La)].startTime+e.na.endTime-t.b.periods[r].startTime)):e.stream.findSegmentPosition(Math.max(0,(i||n)-t.b.periods[r].startTime))))return null;var a=null;return null==i&&(a=Aa(t,e,r,Math.max(0,n-1))),a||Aa(t,e,r,n)}function Aa(t,e,n,i){return n=t.b.periods[n],(e=e.stream.getSegmentReference(i))?(i=t.b.presentationTimeline,t=i.Xa(),i=i.Ka(),n.startTime+e.endTime<t||n.startTime+e.startTime>i?null:e):null}function _a(t,e,n,i,r){var a=t.b.periods[i],o=e.stream,s=t.b.presentationTimeline.T(),u=t.b.periods[i+1];i=xa(t,e,i,Math.max(0,a.startTime-.1),u?u.startTime:s),e.Ca=!0,e.wb=!1,s=Ma(t,r),Promise.all([i,s]).then(function(t){if(!this.f&&!this.l)return Pa(this,e,n,a,o,r,t[1])}.bind(t)).then(function(){this.f||this.l||(e.Ca=!1,e.Zb=!1,e.va||this.a.ab(),Oa(this,e,0),Na(this,o))}.bind(t)).catch(function(t){this.f||this.l||(e.Ca=!1,"text"==e.type&&this.g.ignoreTextStreamFailures?delete this.c.text:3017==t.code?Ia(this,e,t):(e.Ya=!0,t.severity=2,ja(this,t)))}.bind(t))}function Ia(t,e,n){if(!$u.values(t.c).some(function(t){return t!=e&&t.Zb})){var i=Math.round(100*t.j);if(20<i)t.j-=.2;else{if(!(4<i))return e.Ya=!0,t.l=!0,void t.a.onError(n);t.j-=.04}e.Zb=!0}Oa(t,e,4)}function xa(t,e,n,i,r){return e.wb?(n=Me(t.a.J,e.type,t.b.periods[n].startTime-e.stream.presentationTimeOffset,i,r),e.stream.initSegmentReference?(t=Ma(t,e.stream.initSegmentReference).then(function(t){if(!this.f)return De(this.a.J,e.type,t,null,null)}.bind(t)).catch(function(t){return e.wb=!0,Promise.reject(t)}),Promise.all([n,t])):n):Promise.resolve()}function Pa(t,e,n,i,r,a,o){return r.containsEmsgBoxes&&(new ii).Z("emsg",t.he.bind(t,i,a)).parse(o),Ra(t,e,n).then(function(){if(!this.f)return De(this.a.J,e.type,o,a.startTime+i.startTime,a.endTime+i.startTime)}.bind(t)).then(function(){if(!this.f)return e.La=r,e.na=a,Promise.resolve()}.bind(t))}function Ra(t,e,n){var i=Math.max(t.g.bufferBehind,t.b.presentationTimeline.a),r=xe(t.a.J,e.type);return null==r?Promise.resolve():(n=n-r-i,0>=n?Promise.resolve():t.a.J.remove(e.type,r,r+n).then(function(){}.bind(t)))}function Na(t,e){if(!t.o&&(t.o=$u.values(t.c).every(function(t){return"text"==t.type||!t.va&&!t.ya&&t.na}),t.o)){var n=un(t.b,e);for(t.h[n]||wa(t,n).then(function(){this.f||this.a.zc()}.bind(t)).catch(xt),n=0;n<t.b.periods.length;++n)wa(t,n).catch(xt);t.a.$d&&t.a.$d()}}function Da(t,e){if(e.Ba!=un(t.b,e.stream)){var n=e.Ba,i=$u.values(t.c);i.every(function(t){return t.Ba==n})&&i.every(Ca)&&wa(t,n).then(function(){if(!this.f&&i.every(function(t){var e=un(this.b,t.stream);return Ca(t)&&t.Ba==n&&e!=n}.bind(this))){var t=this.b.periods[n],e=this.a.Ac(t),r={};e.variant&&e.variant.video&&(r.video=e.variant.video),e.variant&&e.variant.audio&&(r.audio=e.variant.audio),e.text&&(r.text=e.text);for(var a in this.c)if(!r[a]&&"text"!=a)return void this.a.onError(new z(2,5,5005));for(var o in r)if(!this.c[o]){if("text"!=o)return void this.a.onError(new z(2,5,5005));ga(this,{text:r.text},t.startTime),delete r[o]}for(var s in this.c)(t=r[s])?(ma(this,t,!1),Oa(this,this.c[s],0)):delete this.c[s];this.a.zc()}}.bind(t)).catch(xt)}}function Ca(t){return!t.Ca&&null==t.ua&&!t.va&&!t.ya}function Ma(t,e){var n=pt(e.c(),t.g.retryParameters);if(0!=e.b||null!=e.a){var i="bytes="+e.b+"-";null!=e.a&&(i+=e.a),n.headers.Range=i}return t.a.$a.request(1,n).promise.then(function(t){return t.data})}function La(t,e,n){e.va=!1,e.zb=!1,e.ya=!0,Ce(t.a.J,e.type).then(function(){if(!this.f&&n)return this.a.J.flush(e.type)}.bind(t)).then(function(){this.f||(e.La=null,e.na=null,e.ya=!1,e.endOfStream=!1,Oa(this,e,0))}.bind(t))}function Oa(e,n,i){n.ua=t.setTimeout(e.Re.bind(e,n),1e3*i)}function Ua(e){null!=e.ua&&(t.clearTimeout(e.ua),e.ua=null)}function ja(t,e){X(t.A).then(function(){this.f||(this.a.onError(e),e.handled||this.g.failureCallback(e))}.bind(t))}function Ba(t,e,n,i,r,a){if(200<=n&&299>=n&&202!=n)return r&&(i=r),{uri:i,data:e,headers:t,fromCache:!!t["x-shaka-from-cache"]};r=null;try{r=Ot(e)}catch(t){}throw new z(401==n||403==n?2:1,1,1001,i,n,r,t,a)}function Fa(t,e,n){var i=new Fa.b;$u.forEach(e.headers,function(t,e){i.append(t,e)});var r,a=new Fa.a,o={body:e.body||void 0,headers:i,method:e.method,signal:a.signal,credentials:e.allowCrossSiteCredentials?"include":void 0},s={mc:!1,Xc:!1};return e.retryParameters.timeout&&(r=setTimeout(function(){s.Xc=!0,a.abort()},e.retryParameters.timeout)),t=Fa.f(t,n,o,s,r),new W(t,function(){return s.mc=!0,a.abort(),Promise.resolve()})}function Va(t,e,n){var i=new Va.g;return new W(new Promise(function(r,a){i.open(e.method,t,!0),i.responseType="arraybuffer",i.timeout=e.retryParameters.timeout,i.withCredentials=e.allowCrossSiteCredentials,i.onabort=function(){a(new z(1,1,7001,t,n))},i.onload=function(e){e=e.target;var i=e.getAllResponseHeaders().trim().split("\r\n").reduce(function(t,e){var n=e.split(": ");return t[n[0].toLowerCase()]=n.slice(1).join(": "),t},{});try{var o=Ba(i,e.response,e.status,t,e.responseURL,n);r(o)}catch(t){a(t)}},i.onerror=function(e){a(new z(1,1,1002,t,e,n))},i.ontimeout=function(){a(new z(1,1,1003,t,n))};for(var o in e.headers)i.setRequestHeader(o.toLowerCase(),e.headers[o]);i.send(e.body)}),function(){return i.abort(),Promise.resolve()})}function Ka(t){this.a={},this.c=Promise.resolve(),this.h=!1,this.i=t,this.f=this.b=this.g=0}function Ha(t,e,n,i,r){t.a[e]=t.a[e]||[],t.a[e].push({request:n,pc:i,Id:r})}function qa(t,e){var n=$u.values(t.a);t.a={},n.forEach(function(e){e.forEach(function(e){t.b+=e.pc})});var i=Promise.resolve().then(function(){return Ya(t),Promise.all(n.map(function(n){return Ga(t,e,n)}))});return t.c=t.c.then(function(){return i}),i}function Ga(t,e,n){var i=Promise.resolve();return n.forEach(function(n){i=i.then(function(){return Ya(t),Xa(t,e,n)})}),i}function Xa(t,e,n){return Promise.resolve().then(function(){return Ya(t),e.request(1,n.request).promise}).then(function(e){return Ya(t),t.g+=n.pc,t.f+=e.data.byteLength,t.i(t.b?t.g/t.b:0,t.f),n.Id(e.data)})}function Ya(t){if(t.h)throw new z(2,9,7001)}function za(t,e){var n=this;this.c=t,this.b=t.objectStore(e),this.a=new q,t.onabort=function(t){t.preventDefault(),n.a.reject()},t.onerror=function(t){t.preventDefault(),n.a.reject()},t.oncomplete=function(){n.a.resolve()}}function Wa(t){this.b=t,this.a=[]}function $a(t,e){return Ja(t,e,"readwrite")}function Ja(t,e,n){n=t.b.transaction([e],n);var i=new za(n,e);return t.a.push(i),i.promise().then(function(){at(t.a,i)},function(){at(t.a,i)}),i}function Qa(){this.a={}}function Za(t){var e=null;if($u.forEach(t.a,function(t,n){$u.forEach(n.getCells(),function(n,i){i.hasFixedKeySpace()||e||(e={path:{fa:t,N:n},N:i})})}),e)return e;throw new z(2,9,9013,"Could not find a cell that supports add-operations")}function to(t,e){$u.forEach(t.a,function(t,n){$u.forEach(n.getCells(),function(n,i){e({fa:t,N:n},i)})})}function eo(t,e,n){if(!(t=t.a[e]))throw new z(2,9,9013,"Could not find mechanism with name "+e);if(!(e=t.getCells()[n]))throw new z(2,9,9013,"Could not find cell with name "+n);return e}function no(t){return c(function e(){var n,i,r,a;return A(e,function(e){switch(e.w){case 1:return n=$u,i=Object.values(t.a),r=0<i.length,r||(a=Gc,n.forEach(a,function(t,e){var n=e();n&&i.push(n)})),d(e,Promise.all(i.map(function(t){return t.erase()})),2);case 2:if(!r)return d(e,Promise.all(i.map(function(t){return t.destroy()})),0);e.V(0)}})})}function io(){return $u.values(Gc).some(function(t){return!!(t=t())&&(t.destroy(),!0)})}function ro(t){this.a=new Wa(t)}function ao(t){return Promise.reject(new z(2,9,9011,"Cannot add new value to "+t))}function oo(t,e,n,i){t=$a(t.a,e);var r=t.store();return n.forEach(function(t){r.delete(t).onsuccess=function(){return i(t)}}),t.promise()}function so(t,e,n){t=Ja(t.a,e,"readonly");var i=t.store(),r={},a=[];return n.forEach(function(t){i.get(t).onsuccess=function(e){e=e.target.result,void 0==e&&a.push(t),r[t]=e}}),t.promise().then(function(){return a.length?Promise.reject(new z(2,9,9012,"Could not find values for "+a)):n.map(function(t){return r[t]})})}function uo(t){return{originalManifestUri:t.originalManifestUri,duration:t.duration,size:t.size,expiration:null==t.expiration?1/0:t.expiration,periods:t.periods.map(co),sessionIds:t.sessionIds,drmInfo:t.drmInfo,appMetadata:t.appMetadata}}function co(t){return mo(t),t.streams.forEach(function(){}),{startTime:t.startTime,streams:t.streams.map(ho)}}function ho(t){var e=t.Cd?po(t.Cd):null;return{id:t.id,primary:t.primary,presentationTimeOffset:t.presentationTimeOffset,contentType:t.contentType,mimeType:t.mimeType,codecs:t.codecs,frameRate:t.frameRate,kind:t.kind,language:t.language,label:t.label,width:t.width,height:t.height,initSegmentKey:e,encrypted:t.encrypted,keyId:t.keyId,segments:t.segments.map(lo),variantIds:t.variantIds}}function lo(t){var e=po(t.uri);return{startTime:t.startTime,endTime:t.endTime,dataKey:e}}function fo(t){return{data:t.data}}function po(t){var e;if((e=/^offline:[0-9]+\/[0-9]+\/([0-9]+)$/.exec(t))||(e=/^offline:segment\/([0-9]+)$/.exec(t)))return Number(e[1]);throw new z(2,9,9004,"Could not parse uri "+t)}function mo(t){var e=t.streams.filter(function(t){return"audio"==t.contentType}),n=t.streams.filter(function(t){return"video"==t.contentType});if(!e.every(function(t){return t.variantIds})||!n.every(function(t){return t.variantIds})){e.forEach(function(t){t.variantIds=[]}),n.forEach(function(t){t.variantIds=[]});var i=0;if(n.length&&!e.length){var r=i++;n.forEach(function(t){t.variantIds.push(r)})}if(!n.length&&e.length){var a=i++;e.forEach(function(t){t.variantIds.push(a)})}n.length&&e.length&&e.forEach(function(t){n.forEach(function(e){var n=i++;t.variantIds.push(n),e.variantIds.push(n)})})}}function vo(t,e,n,i){this.a=new Wa(t),this.c=e,this.b=n,this.f=i}function yo(t,e,n){if(t.f)return Promise.reject(new z(1,9,9011,"Cannot add new value to "+e));t=$a(t.a,e);var i=t.store(),r=[];return n.forEach(function(t){i.add(t).onsuccess=function(t){r.push(t.target.result)}}),t.promise().then(function(){return r})}function go(t,e,n,i){t=$a(t.a,e);var r=t.store();return n.forEach(function(t){r.delete(t).onsuccess=function(){return i(t)}}),t.promise()}function bo(t,e,n){t=Ja(t.a,e,"readonly");var i=t.store(),r={},a=[];return n.forEach(function(t){var e=i.get(t);e.onsuccess=function(){void 0==e.result&&a.push(t),r[t]=e.result}}),t.promise().then(function(){return a.length?Promise.reject(new z(1,9,9012,"Could not find values for "+a)):n.map(function(t){return r[t]})})}function wo(){this.c=this.b=this.a=this.f=null}function To(){var e=new q,n=t.indexedDB.deleteDatabase("shaka_offline_db");return n.onblocked=function(){},n.onsuccess=function(){e.resolve()},n.onerror=function(t){e.reject(new z(2,9,9001,n.error)),t.preventDefault()},e}function Eo(t,e,n,i){this.a=t,this.g=e,this.f=n,this.c=i,this.b=["offline:",t,"/",e,"/",n,"/",i].join("")}function So(t){if(null==(t=/^offline:([a-z]+)\/([^\/]+)\/([^\/]+)\/([0-9]+)$/.exec(t)))return null;var e=t[1];if("manifest"!=e&&"segment"!=e)return null;var n=t[2];if(!n)return null;var i=t[3];return i&&null!=e?new Eo(e,n,i,Number(t[4])):null}function ko(t,e){this.b=t,this.a=e}function Ao(t,e){var n=new Oi(null,0);n.ka(e.duration);var i=e.periods.map(function(e){return _o(t,e,n)}),r=e.drmInfo?[e.drmInfo]:[];return e.drmInfo&&i.forEach(function(t){t.variants.forEach(function(t){t.drmInfos=r})}),{presentationTimeline:n,minBufferTime:2,offlineSessionIds:e.sessionIds,periods:i}}function _o(t,e,n){var i=e.streams.filter(function(t){return"audio"==t.contentType}),r=e.streams.filter(function(t){return"video"==t.contentType});return i=Io(t,i,r),r=e.streams.filter(function(t){return"text"==t.contentType}).map(function(e){return xo(t,e)}),e.streams.forEach(function(e,i){var r=e.segments.map(function(e,n){return Po(t,n,e)});n.Na(r,0==i)}),{startTime:e.startTime,variants:i,textStreams:r}}function Io(t,e,n){var i={},r=[];return r.push.apply(r,e),r.push.apply(r,n),r.forEach(function(t){t.variantIds.forEach(function(t){i[t]=i[t]||{id:t,language:"",primary:!1,audio:null,video:null,bandwidth:0,drmInfos:[],allowedByApplication:!0,allowedByKeySystem:!0}})}),e.forEach(function(e){var n=xo(t,e);e.variantIds.forEach(function(t){t=i[t],t.language=n.language,t.primary=t.primary||n.primary,t.audio=n})}),n.forEach(function(e){var n=xo(t,e);e.variantIds.forEach(function(t){t=i[t],t.primary=t.primary||n.primary,t.video=n})}),$u.values(i)}function xo(t,e){var n=e.segments.map(function(e,n){return Po(t,n,e)}),i=new li(n);return n={id:e.id,createSegmentIndex:function(){return Promise.resolve()},findSegmentPosition:function(t){return i.find(t)},getSegmentReference:function(t){return i.get(t)},initSegmentReference:null,presentationTimeOffset:e.presentationTimeOffset,mimeType:e.mimeType,codecs:e.codecs,width:e.width||void 0,height:e.height||void 0,frameRate:e.frameRate||void 0,kind:e.kind,encrypted:e.encrypted,keyId:e.keyId,language:e.language,label:e.label||null,type:e.contentType,primary:e.primary,trickModeVideo:null,containsEmsgBoxes:!1,roles:[],channelsCount:null},null!=e.initSegmentKey&&(n.initSegmentReference=Ro(t,e.initSegmentKey)),n}function Po(t,e,n){var i=new Eo("segment",t.b,t.a,n.dataKey);return new ti(e,n.startTime,n.endTime,function(){return[i.toString()]},0,null)}function Ro(t,e){var n=new Eo("segment",t.b,t.a,e);return new Zn(function(){return[n.toString()]},0,null)}function No(){this.a=null}function Do(t){var e=So(t);return e&&"manifest"==e.a?Do.a(t):e&&"segment"==e.a?Do.b(e.key(),e):$(new z(2,1,9004,t))}function Co(t){this.a=null;for(var e=0;e<t.textTracks.length;++e){var n=t.textTracks[e];n.mode="disabled","Shaka Player TextTrack"==n.label&&(this.a=n)}this.a||(this.a=t.addTextTrack("subtitles","Shaka Player TextTrack")),this.a.mode="hidden"}function Mo(t){if(t.startTime>=t.endTime)return null;var e=new VTTCue(t.startTime,t.endTime,t.payload);e.lineAlign=t.lineAlign,e.positionAlign=t.positionAlign,e.size=t.size;try{e.align=t.textAlign}catch(t){}return"center"==t.textAlign&&"center"!=e.align&&(e.align="middle"),2==t.writingDirection?e.vertical="lr":3==t.writingDirection&&(e.vertical="rl"),1==t.lineInterpretation&&(e.snapToLines=!1),null!=t.line&&(e.line=t.line),null!=t.position&&(e.position=t.position),e}function Lo(t,e){var n=t.mode;t.mode="showing"==n?"showing":"hidden";for(var i=t.cues,r=i.length-1;0<=r;r--){var a=i[r];a&&e(a)&&t.removeCue(a)}t.mode=n}function Oo(e,n){var i=this;gn.call(this),this.wa=!1,this.f=null,this.pb=!1,this.u=null,this.o=new wt,this.Ab=this.h=this.Cb=this.b=this.m=this.a=this.A=this.g=this.j=this.i=this.s=null,this.bd=1e9,this.lb=[],this.ob=!1,this.xa=!0,this.S=this.qb=this.Ha=null,this.kc=!1,this.G=null,this.nb=[],this.I={},this.c=Wo(this),this.mb={width:1/0,height:1/0},this.l=$o(),this.kb=0,this.L=this.c.preferredAudioLanguage,this.ga=this.c.preferredTextLanguage,this.Ga=this.c.preferredVariantRole,this.Ua=this.c.preferredTextRole,this.Y=this.c.preferredAudioChannelCount,n&&n(this),this.s=new ft(this.Je.bind(this)),e&&this.rb(e,!0),Tt(this.o,t,"online",function(){i.ac()})}function Uo(t){if(!t.Ha)return Promise.resolve();var e=Promise.resolve();return t.m&&(e=t.m.stop(),t.m=null),Promise.all([e,t.Ha()])}function jo(t,e,n){return c(function i(){var r,a;return A(i,function(i){switch(i.w){case 1:return d(i,Li(e,t.s,t.c.manifest.retryParameters,n),2);case 2:return r=i.K,t.m=new r,t.m.configure(t.c.manifest),a={networkingEngine:t.s,filterNewPeriod:t.tb.bind(t),filterAllPeriods:t.ec.bind(t),onTimelineRegionAdded:t.ae.bind(t),onEvent:t.gb.bind(t),onError:t.Ta.bind(t)},i.return(t.m.start(e,a))}})})}function Bo(t){function e(t){return t.video&&t.audio||t.video&&t.video.codecs.includes(",")}if(t.b.periods.some(function(t){return t.variants.some(e)})&&t.b.periods.forEach(function(t){t.variants=t.variants.filter(e)}),0==t.b.periods.length)throw new z(2,4,4014)}function Fo(t){var e=t.b.presentationTimeline.T(),n=t.c.playRangeEnd,i=t.c.playRangeStart;0<i&&(t.P()||t.b.presentationTimeline.Tc(i)),n<e&&(t.P()||t.b.presentationTimeline.ka(n))}function Vo(t){function e(t){return(t.video?t.video.codecs.split(".")[0]:"")+"-"+(t.audio?t.audio.codecs.split(".")[0]:"")}var n=t.b.periods.reduce(function(t,e){return t.concat(e.variants)},[]);n=tn(n,t.c.preferredAudioChannelCount);var i={};n.forEach(function(t){var n=e(t);n in i||(i[n]=[]),i[n].push(t)});var r=null,a=1/0;$u.forEach(i,function(t,e){var n=0,i=0;e.forEach(function(t){n+=t.bandwidth||0,++i});var o=n/i;o<a&&(r=t,a=o)}),t.b.periods.forEach(function(t){t.variants=t.variants.filter(function(t){return e(t)==r})})}function Ko(t){if(t.m&&t.m.configure(t.c.manifest),t.i&&t.i.configure(t.c.drm),t.a){t.a.configure(t.c.streaming);try{t.b.periods.forEach(t.tb.bind(t))}catch(e){t.Ta(e)}var e=ua(t.a),n=ca(t.a),i=oa(t.a);(e=an(e,n,i.variants))&&e.allowedByApplication&&e.allowedByKeySystem||es(t,i)}t.h&&(t.h.configure(t.c.abr),t.c.abr.enabled&&!t.xa?t.h.enable():t.h.disable())}function Ho(t){var e=[];return t.forEach(function(t){if(t){var n=t.language;t.roles.length?t.roles.forEach(function(t){e.push({language:n,role:t})}):e.push({language:n,role:""})}else e.push({language:"und",role:""})}),it(e,function(t,e){return t.language==e.language&&t.role==e.role})}function qo(t,e,n){e.video&&Xo(t,e.video),e.audio&&Xo(t,e.audio);var i=sa(t.a);e!=an(ua(t.a),ca(t.a),i?i.variants:[])&&t.l.switchHistory.push({timestamp:Date.now()/1e3,id:e.id,type:"variant",fromAdaptation:n,bandwidth:e.bandwidth})}function Go(t,e,n){Xo(t,e),t.l.switchHistory.push({timestamp:Date.now()/1e3,id:e.id,type:"text",fromAdaptation:n,bandwidth:null})}function Xo(t,e){var n=un(t.b,e);t.I[n]||(t.I[n]={}),t.I[n][e.type]=e.id}function Yo(t){t.o&&(t.o.pa(t.f,"loadeddata"),t.o.pa(t.f,"playing"),t.o.pa(t.f,"pause"),t.o.pa(t.f,"ended"));var e=t.i,n=Promise.all([t.h?t.h.stop():null,t.j?t.j.destroy():null,t.g?t.g.destroy():null,t.A?t.A.destroy():null,t.a?t.a.destroy():null,t.m?t.m.stop():null,t.u?t.u.destroy():null]).then(function(){return e?e.destroy():null});return t.xa=!0,t.i=null,t.j=null,t.g=null,t.A=null,t.a=null,t.m=null,t.u=null,t.b=null,t.Cb=null,t.nb=[],t.I={},t.l=$o(),n}function zo(){return{".drm.servers":"",".drm.clearKeys":"",".drm.advanced":{distinctiveIdentifierRequired:!1,persistentStateRequired:!1,videoRobustness:"",audioRobustness:"",serverCertificate:new Uint8Array(0)}}}function Wo(t){var e=5e5,n=1/0;return navigator.connection&&navigator.connection.type&&(e=1e6*navigator.connection.downlink,navigator.connection.saveData&&(n=360)),{drm:{retryParameters:Y(),servers:{},clearKeys:{},advanced:{},delayLicenseRequestUntilPlayed:!1},manifest:{retryParameters:Y(),availabilityWindowOverride:NaN,dash:{customScheme:function(t){if(t)return null},clockSyncUri:"",ignoreDrmInfo:!1,xlinkFailGracefully:!1,defaultPresentationDelay:10}},streaming:{retryParameters:Y(),failureCallback:t.kd.bind(t),rebufferingGoal:2,bufferingGoal:10,bufferBehind:30,ignoreTextStreamFailures:!1,alwaysStreamText:!1,startAtSegmentBoundary:!1,smallGapLimit:.5,jumpLargeGaps:!1,durationBackoff:1,forceTransmuxTS:!1},abrFactory:cn,textDisplayFactory:function(){return new Co(t.f)},abr:{enabled:!0,defaultBandwidthEstimate:e,switchInterval:8,bandwidthUpgradeTarget:.85,bandwidthDowngradeTarget:.95,restrictions:{minWidth:0,maxWidth:1/0,minHeight:0,maxHeight:n,minPixels:0,maxPixels:1/0,minBandwidth:0,maxBandwidth:1/0}},preferredAudioLanguage:"",preferredTextLanguage:"",preferredVariantRole:"",preferredTextRole:"",preferredAudioChannelCount:2,restrictions:{minWidth:0,maxWidth:1/0,minHeight:0,maxHeight:1/0,minPixels:0,maxPixels:1/0,minBandwidth:0,maxBandwidth:1/0},playRangeStart:0,playRangeEnd:1/0}}function $o(){return{width:NaN,height:NaN,streamBandwidth:NaN,decodedFrames:NaN,droppedFrames:NaN,estimatedBandwidth:NaN,loadLatency:NaN,playTime:0,bufferingTime:0,switchHistory:[],stateHistory:[]}}function Jo(t,e,n){t.xa?(t.S=e,t.kc=n||!1):pa(t.a,e,n||!1)}function Qo(t){if(t.b){var e=Date.now()/1e3;t.ob?t.l.bufferingTime+=e-t.kb:t.l.playTime+=e-t.kb,t.kb=e}}function Zo(t,e){function n(t,e){if(!t)return null;var n=t.findSegmentPosition(e-a.startTime);return null==n?null:(n=t.getSegmentReference(n))?n.startTime+a.startTime:null}var i=ua(t.a),r=ca(t.a),a=oa(t.a);return i=n(i,e),r=n(r,e),null!=r&&null!=i?Math.max(r,i):null!=r?r:null!=i?i:e}function ts(t,e){return e&&e.length?(t.h.setVariants(e),t.h.chooseVariant()):(t.Ta(new z(2,4,4012)),null)}function es(t,e){var n=Qe(e.variants,t.L,t.Ga,t.Y),i=en(e.textStreams,t.ga,t.Ua);(n=ts(t,n))&&(qo(t,n,!0),Jo(t,n,!0)),(i=i[0])&&(t.c.streaming.alwaysStreamText||t.Mb())&&(Go(t,i,!0),t.xa?t.G=i:ma(t.a,i,!0)),ns(t)}function ns(t){Promise.resolve().then(function(){this.wa||this.dispatchEvent(new At("adaptation"))}.bind(t))}function is(t){Promise.resolve().then(function(){this.wa||this.dispatchEvent(new At("trackschanged"))}.bind(t))}function rs(t){t.dispatchEvent(new At("texttrackvisibility"))}function as(t,e,n){var i=void 0==e.expiration?1/0:e.expiration,r=e.presentationTimeline.T();return e=Xe(e.periods[0]),{offlineUri:null,originalManifestUri:t,duration:r,size:0,expiration:i,tracks:e,appMetadata:n}}function os(t,e){var n=_o(new ko(t.fa(),t.N()),e.periods[0],new Oi(null,0)),i=e.appMetadata||{};return n=Xe(n),{offlineUri:t.toString(),originalManifestUri:e.originalManifestUri,duration:e.duration,size:e.size,expiration:e.expiration,tracks:n,appMetadata:i}}function ss(){this.a={}}function us(t,e,n){return n=n.endTime-n.startTime,cs(t,e)*n}function cs(t,e){var n=t.a[e];return null==n&&(n=0),n}function hs(t){if(!t||t.constructor!=Oo)throw new z(2,9,9008);this.a=t,this.b=ys(this),this.g=!1,this.c=null,this.f=[]}function ls(){return io()}function fs(t,e,n,i,r,a){var o,s=as(r,i,a),u=new Ka(function(e,n){s.size=n,t.b.progressCallback(s,e)});return ct([u],function(){return o=Ts(t,u,e,n,i,r,a),qa(u,t.a.s)}).then(function(){return o.size=s.size,o})}function ds(t,e,n){var i,r=new zt({$a:t.a.s,onError:function(t){6013!=t.code&&(i=t)},Ub:function(){},onExpirationUpdated:function(){},onEvent:function(){}});r.configure(t.a.getConfiguration().drm);var a=Ao(new ko(e.fa(),e.N()),n);return ct([r],function(){return c(function e(){return A(e,function(e){switch(e.w){case 1:return d(e,r.init(a,t.b.usePersistentLicense),2);case 2:return d(e,Wt(r,n.sessionIds),0)}})})}).then(function(){if(i)throw i})}function ps(t,e,n,i){function r(){s+=1,t.b.progressCallback(u,s/o)}var a=xs(i),o=a.length+1,s=0,u=os(n,i);return Promise.all([e.removeSegments(a,r),e.removeManifests([n.key()],r)])}function ms(t,e,n,i){function r(){}var a,o,s,u=t.a.s,c=t.a.getConfiguration();return Li(e,u,c.manifest.retryParameters,i).then(function(t){var i=this;As(this),o=new zt({$a:u,onError:n,Ub:r,onExpirationUpdated:function(){},onEvent:function(){}}),o.configure(c.drm);var a={networkingEngine:u,filterAllPeriods:function(t){gs(i,o,t)},filterNewPeriod:function(t){bs(i,o,t)},onTimelineRegionAdded:function(){},onEvent:function(){},onError:n};return s=new t,s.configure(c.manifest),s.start(e,a)}.bind(t)).then(function(t){return As(this),a=t,o.init(a,this.b.usePersistentLicense)}.bind(t)).then(function(){return As(this),ws(a)}.bind(t)).then(function(){return As(this),$t(o)}.bind(t)).then(function(){return As(this),s.stop()}.bind(t)).then(function(){return As(this),{manifest:a,Eb:o}}.bind(t)).catch(function(t){if(s)return s.stop().then(function(){throw t});throw t})}function vs(t,e){var n=[],i=Be(t),r=[0,vc,yc],a=e.filter(function(t){return"variant"==t.type});r=r.map(function(t){return a.filter(function(e){return e=Be(e.language),je(t,i,e)})});for(var o,s=0;s<r.length;s++)if(r[s].length){o=r[s];break}o||(r=a.filter(function(t){return t.primary}),r.length&&(o=r)),o||(o=a,a.map(function(t){return t.language}).filter(Rt));var u=o.filter(function(t){return t.height&&480>=t.height});return u.length&&(u.sort(function(t,e){return e.height-t.height}),o=u.filter(function(t){return t.height==u[0].height})),o.sort(function(t,e){return t.bandwidth-e.bandwidth}),o.length&&n.push(o[Math.floor(o.length/2)]),n.push.apply(n,e.filter(function(t){return"text"==t.type})),n}function ys(t){return{trackSelectionCallback:function(e){return vs(t.a.getConfiguration().preferredAudioLanguage,e)},progressCallback:function(t,e){if(t||e)return null},usePersistentLicense:!0}}function gs(t,e,n){n.forEach(function(n){return bs(t,e,n)})}function bs(t,e,n){var i=null;if(t.c){var r=t.c.filter(function(t){return"variant"==t.type})[0];r&&(i=We(n,r))}var a=r=null;i&&(i.audio&&(r=i.audio),i.video&&(a=i.video)),Ke(e,r,a,n),Ve(n,t.a.getConfiguration().restrictions,{width:1/0,height:1/0})}function ws(t){var e=t.periods.map(function(t){return t.variants}).reduce(It,[]).map(function(t){var e=[];return t.audio&&e.push(t.audio),t.video&&e.push(t.video),e}).reduce(It,[]).filter(Rt);return t=t.periods.map(function(t){return t.textStreams}).reduce(It,[]),e.push.apply(e,t),Promise.all(e.map(function(t){return t.createSegmentIndex()}))}function Ts(t,e,n,i,r,a,o){var s=new ss,u=r.periods.map(function(a){return Es(t,e,n,s,i,r,a)}),c=i.b,h=Qt(i);if(c&&t.b.usePersistentLicense){if(!h.length)throw new z(2,9,9007,a);c.initData=[]}return{originalManifestUri:a,duration:r.presentationTimeline.T(),size:0,expiration:i.vb(),periods:u,sessionIds:t.b.usePersistentLicense?h:[],drmInfo:c,appMetadata:o}}function Es(t,e,n,i,r,a,o){var s=Ye(o,null,null),u=ze(o,null);s=t.b.trackSelectionCallback(s.concat(u)),null==t.c&&(t.c=s,gs(t,r,a.periods)),Ps(s),a.periods.forEach(function(t){t.variants.forEach(function(t){var e=t.audio,n=t.video;if(e&&!n&&(i.a[e.id]=e.bandwidth||t.bandwidth),!e&&n&&(i.a[n.id]=n.bandwidth||t.bandwidth),e&&n){var r=e.bandwidth||393216,a=n.bandwidth||t.bandwidth-r;0>=a&&(a=t.bandwidth),i.a[e.id]=r,i.a[n.id]=a}}),t.textStreams.forEach(function(t){i.a[t.id]=52})});var c={};s.forEach(function(t){"variant"==t.type&&null!=t.audioId&&(c[t.audioId]=!0),"variant"==t.type&&null!=t.videoId&&(c[t.videoId]=!0),"text"==t.type&&(c[t.id]=!0)});var h={};return Rs(a).filter(function(t){return!!c[t.id]}).forEach(function(r){h[r.id]=Ss(t,e,n,i,a,r)}),s.forEach(function(t){"variant"==t.type&&null!=t.audioId&&h[t.audioId].variantIds.push(t.id),"variant"==t.type&&null!=t.videoId&&h[t.videoId].variantIds.push(t.id)}),{startTime:o.startTime,streams:$u.values(h)}}function Ss(t,e,n,i,r,a){var o={id:a.id,primary:a.primary,presentationTimeOffset:a.presentationTimeOffset||0,contentType:a.type,mimeType:a.mimeType,codecs:a.codecs,frameRate:a.frameRate,kind:a.kind,language:a.language,label:a.label,width:a.width||null,height:a.height||null,initSegmentKey:null,encrypted:a.encrypted,keyId:a.keyId,segments:[],variantIds:[]};r=r.presentationTimeline.Xa();var s=a.id;return ks(a,r,function(r){Ha(e,s,Is(t,r),us(i,a.id,r),function(e){return n.addSegments([{data:e}]).then(function(e){t.f.push(e[0]),o.segments.push({startTime:r.startTime,endTime:r.endTime,dataKey:e[0]})})})}),(r=a.initSegmentReference)&&Ha(e,s,Is(t,r),.5*cs(i,a.id),function(e){return n.addSegments([{data:e}]).then(function(e){t.f.push(e[0]),o.initSegmentKey=e[0]})}),o}function ks(t,e,n){e=t.findSegmentPosition(e);for(var i=null==e?null:t.getSegmentReference(e);i;)n(i),i=t.getSegmentReference(++e)}function As(t){if(!t.a)throw new z(2,9,7001)}function _s(){if(!io())throw new z(2,9,9e3)}function Is(t,e){var n=t.a.getConfiguration().streaming.retryParameters;return n=pt(e.c(),n),0==e.b&&null==e.a||(n.headers.Range="bytes="+e.b+"-"+(null==e.a?"":e.a)),n}function xs(t){var e=[];return t.periods.forEach(function(t){t.streams.forEach(function(t){null!=t.initSegmentKey&&e.push(t.initSegmentKey),t.segments.forEach(function(t){e.push(t.dataKey)})})}),e}function Ps(t){t.some(function(e){return t.some(function(t){return e!=t&&e.type==t.type&&e.kind==t.kind&&e.language==t.language})})}function Rs(t){var e={};return t.periods.forEach(function(t){t.textStreams.forEach(function(t){e[t.id]=t}),t.variants.forEach(function(t){t.audio&&(e[t.audio.id]=t.audio),t.video&&(e[t.video.id]=t.video)})}),$u.values(e)}function Ns(t,e){e=e||0;for(var n={priority:e,dd:t},i=0;i<Yc.length;i++)if(Yc[i].priority<e)return void Yc.splice(i,0,n);Yc.push(n)}function Ds(t){var e=t.type.replace(/^(webkit|moz|MS)/,"").toLowerCase();if("function"==typeof Event)var n=new Event(e,t);else n=document.createEvent("Event"),n.initEvent(e,t.bubbles,t.cancelable);t.target.dispatchEvent(n)}function Cs(t,e,n){if("input"==t)switch(this.type){case"range":t="change"}zc.call(this,t,e,n)}function Ms(){var t=MediaSource.prototype.addSourceBuffer;MediaSource.prototype.addSourceBuffer=function(){var e=t.apply(this,arguments);return e.abort=function(){},e}}function Ls(){var t=SourceBuffer.prototype.remove;SourceBuffer.prototype.remove=function(e,n){return t.call(this,e,n-.001)}}function Os(){var t=MediaSource.prototype.endOfStream;MediaSource.prototype.endOfStream=function(){for(var e=0,n=0;n<this.sourceBuffers.length;++n){var i=this.sourceBuffers[n];i=i.buffered.end(i.buffered.length-1),e=Math.max(e,i)}if(!isNaN(this.duration)&&e<this.duration)for(this.vc=!0,e=0;e<this.sourceBuffers.length;++e)this.sourceBuffers[e].qc=!1;return t.apply(this,arguments)};var e=!1,n=MediaSource.prototype.addSourceBuffer;MediaSource.prototype.addSourceBuffer=function(){var t=n.apply(this,arguments);return t.mediaSource_=this,t.addEventListener("updateend",Us,!1),e||(this.addEventListener("sourceclose",js,!1),e=!0),t}}function Us(t){var e=t.target,n=e.mediaSource_;if(n.vc){for(t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),e.qc=!0,t=0;t<n.sourceBuffers.length;++t)if(0==n.sourceBuffers[t].qc)return;n.vc=!1}}function js(t){t=t.target;for(var e=0;e<t.sourceBuffers.length;++e)t.sourceBuffers[e].removeEventListener("updateend",Us,!1);t.removeEventListener("sourceclose",js,!1)}function Bs(){var t=MediaSource.isTypeSupported;MediaSource.isTypeSupported=function(e){return"mp2t"!=e.split(/ *; */)[0].split("/")[1]&&t(e)}}function Fs(){var t=MediaSource.isTypeSupported,e=/^dv(?:he|av)\./;MediaSource.isTypeSupported=function(n){for(var i=n.split(/ *; */),r=i[0],a={},o=1;o<i.length;++o){var s=i[o].split("="),u=s[0];s=s[1].replace(/"(.*)"/,"$1"),a[u]=s}if(!(i=a.codecs))return t(n);var c=!1,h=!1;n=i.split(",").filter(function(t){return e.test(t)?(h=!0,!1):(/^(hev|hvc)1\.2/.test(t)&&(c=!0),!0)}),h&&(c=!1),a.codecs=n.join(","),c&&(a.eotf="smpte2084");for(var l in a)r+="; "+l+'="'+a[l]+'"';return cast.__platform__.canDisplayType(r)}}function Vs(t){this.f=[],this.b=[],this.a=[],(new ii).Z("pssh",this.c.bind(this)).parse(t.buffer)}function Ks(t,e){try{var n=new Hs(t,e);return Promise.resolve(n)}catch(t){return Promise.reject(t)}}function Hs(t,e){this.keySystem=t;for(var n=!1,i=0;i<e.length;++i){var r=e[i],a={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:r.initDataTypes,sessionTypes:["temporary"],label:r.label},o=!1;if(r.audioCapabilities)for(var s=0;s<r.audioCapabilities.length;++s){var u=r.audioCapabilities[s];if(u.contentType){o=!0;var c=u.contentType.split(";")[0];MSMediaKeys.isTypeSupported(this.keySystem,c)&&(a.audioCapabilities.push(u),n=!0)}}if(r.videoCapabilities)for(s=0;s<r.videoCapabilities.length;++s)u=r.videoCapabilities[s],u.contentType&&(o=!0,c=u.contentType.split(";")[0],MSMediaKeys.isTypeSupported(this.keySystem,c)&&(a.videoCapabilities.push(u),n=!0));if(o||(n=MSMediaKeys.isTypeSupported(this.keySystem,"video/mp4")),"required"==r.persistentState&&(n=!1),n)return void(this.a=a)}throw n=Error("Unsupported keySystem"),n.name="NotSupportedError",n.code=DOMException.NOT_SUPPORTED_ERR,n}function qs(t){var e=this.mediaKeys;return e&&e!=t&&Xs(e,null),delete this.mediaKeys,(this.mediaKeys=t)?Xs(t,this):Promise.resolve()}function Gs(t){this.a=new MSMediaKeys(t),this.b=new wt}function Xs(t,e){function n(){e.msSetMediaKeys(i.a),e.removeEventListener("loadedmetadata",n)}if(St(t.b),!e)return Promise.resolve();Tt(t.b,e,"msneedkey",zs);var i=t;try{return 1<=e.readyState?e.msSetMediaKeys(t.a):e.addEventListener("loadedmetadata",n),Promise.resolve()}catch(t){return Promise.reject(t)}}function Ys(t){gn.call(this),this.c=null,this.g=t,this.b=this.a=null,this.f=new wt,this.sessionId="",this.expiration=NaN,this.closed=new q,this.keyStatuses=new Js}function zs(t){var e=document.createEvent("CustomEvent");if(e.initCustomEvent("encrypted",!1,!1,null),e.initDataType="cenc",t=t.initData){var n=new Vs(t);if(!(1>=n.a.length)){for(var i=[],r=0;r<n.a.length;r++)i.push(t.subarray(n.a[r].start,n.a[r].end+1));for(t=it(i,Ws),i=n=0;i<t.length;i++)n+=t[i].length;for(n=new Uint8Array(n),r=i=0;r<t.length;r++)n.set(t[r],i),i+=t[r].length;t=n}}e.initData=t,this.dispatchEvent(e)}function Ws(t,e){return Xt(t,e)}function $s(t,e){var n=t.keyStatuses;n.size=void 0==e?0:1,n.a=e,t.dispatchEvent(new At("keystatuseschange"))}function Js(){this.size=0,this.a=void 0}function Qs(){return Promise.reject(Error("The key system specified is not supported."))}function Zs(t){return null==t?Promise.resolve():Promise.reject(Error("MediaKeys not supported."))}function tu(){throw new TypeError("Illegal constructor.")}function eu(){throw new TypeError("Illegal constructor.")}function nu(t){var e=$c;return e?e+t.charAt(0).toUpperCase()+t.slice(1):t}function iu(t,e){try{var n=new au(t,e);return Promise.resolve(n)}catch(t){return Promise.reject(t)}}function ru(t){var e=this.mediaKeys;return e&&e!=t&&su(e,null),delete this.mediaKeys,(this.mediaKeys=t)&&su(t,this),Promise.resolve()}function au(t,e){this.a=this.keySystem=t;var n=!1;"org.w3.clearkey"==t&&(this.a="webkit-org.w3.clearkey",n=!1);var i=!1,r=document.getElementsByTagName("video");r=r.length?r[0]:document.createElement("video");for(var a=0;a<e.length;++a){var o=e[a],s={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:o.initDataTypes,sessionTypes:["temporary"],label:o.label},u=!1;if(o.audioCapabilities)for(var c=0;c<o.audioCapabilities.length;++c){var h=o.audioCapabilities[c];if(h.contentType){u=!0;var l=h.contentType.split(";")[0];r.canPlayType(l,this.a)&&(s.audioCapabilities.push(h),i=!0)}}if(o.videoCapabilities)for(c=0;c<o.videoCapabilities.length;++c)h=o.videoCapabilities[c],h.contentType&&(u=!0,r.canPlayType(h.contentType,this.a)&&(s.videoCapabilities.push(h),i=!0));if(u||(i=r.canPlayType("video/mp4",this.a)||r.canPlayType("video/webm",this.a)),"required"==o.persistentState&&(n?(s.persistentState="required",s.sessionTypes=["persistent-license"]):i=!1),i)return void(this.b=s)}throw n="Unsupported keySystem","org.w3.clearkey"!=t&&"com.widevine.alpha"!=t||(n="None of the requested configurations were supported."),n=Error(n),n.name="NotSupportedError",n.code=DOMException.NOT_SUPPORTED_ERR,n}function ou(t){this.g=t,this.b=null,this.a=new wt,this.c=[],this.f={}}function su(t,e){t.b=e,St(t.a);var n=$c;e&&(Tt(t.a,e,n+"needkey",t.fe.bind(t)),Tt(t.a,e,n+"keymessage",t.ee.bind(t)),Tt(t.a,e,n+"keyadded",t.ce.bind(t)),Tt(t.a,e,n+"keyerror",t.de.bind(t)))}function uu(t,e){var n=t.f[e];return n||((n=t.c.shift())?(n.sessionId=e,t.f[e]=n):null)}function cu(t,e,n){gn.call(this),this.f=t,this.h=!1,this.a=this.b=null,this.c=e,this.g=n,this.sessionId="",this.expiration=NaN,this.closed=new q,this.keyStatuses=new fu}function hu(t,e,n){if(t.h)return Promise.reject(Error("The session is already initialized."));t.h=!0;try{if("persistent-license"==t.g)if(n)var i=new Uint8Array(Ut("LOAD_SESSION|"+n));else{var r=Ut("PERSISTENT|"),a=new Uint8Array(r.byteLength+e.byteLength);a.set(new Uint8Array(r),0),a.set(new Uint8Array(e),r.byteLength),i=a}else i=new Uint8Array(e)}catch(t){return Promise.reject(t)}t.b=new q;var o=nu("generateKeyRequest");try{t.f[o](t.c,i)}catch(e){if("InvalidStateError"!=e.name)return t.b=null,Promise.reject(e);setTimeout(function(){try{this.f[o](this.c,i)}catch(t){this.b.reject(t),this.b=null}}.bind(t),10)}return t.b}function lu(t,e){var n=t.keyStatuses;n.size=void 0==e?0:1,n.a=e,t.dispatchEvent(new At("keystatuseschange"))}function fu(){this.size=0,this.a=void 0}function du(){return{droppedVideoFrames:this.webkitDroppedFrameCount,totalVideoFrames:this.webkitDecodedFrameCount,corruptedVideoFrames:0,creationTime:NaN,totalFrameDelay:0}}function pu(e,n,i){return new t.TextTrackCue(e,n,i)}function mu(e,n,i){return new t.TextTrackCue(e+"-"+n+"-"+i,e,n,i)}function vu(){}function yu(t){var e=[];if(!t)return e;for(var n=t.childNodes,i=0;i<n.length;i++){var r="span"==n[i].nodeName&&"p"==t.nodeName;n[i].nodeType!=Node.ELEMENT_NODE||"br"==n[i].nodeName||r||(r=yu(n[i]),e=e.concat(r))}return e.length||e.push(t),e}function gu(t,e){for(var n=t.childNodes,i=0;i<n.length;i++)if("br"==n[i].nodeName&&0<i)n[i-1].textContent+="\n";else if(0<n[i].childNodes.length)gu(n[i],e);else if(e){var r=n[i].textContent.trim();r=r.replace(/\s+/g," "),n[i].textContent=r}}function bu(t,e,n,i,r,a,o){if(!t.hasAttribute("begin")&&!t.hasAttribute("end")&&/^\s*$/.test(t.textContent))return null;gu(t,o),o=_u(t.getAttribute("begin"),n);var s=_u(t.getAttribute("end"),n);n=_u(t.getAttribute("dur"),n);var u=t.textContent;if(null==s&&null!=n&&(s=o+n),null==o||null==s)throw new z(2,2,2001);if(e=new ye(o+e,s+e,u),(r=Au(t,"region",r))&&r.getAttribute("xml:id")){var c=r.getAttribute("xml:id");a=a.filter(function(t){return t.id==c}),e.region=a[0]}return wu(e,t,r,i),e}function wu(t,e,n,i){"rtl"==Eu(e,n,i,"direction")&&(t.writingDirection=1);var r=Eu(e,n,i,"writingMode");"tb"==r||"tblr"==r?t.writingDirection=2:"tbrl"==r?t.writingDirection=3:"rltb"==r||"rl"==r?t.writingDirection=1:r&&(t.writingDirection=oc),(r=Eu(e,n,i,"textAlign"))&&(t.positionAlign=uh[r],t.lineAlign=sh[r],t.textAlign=ic[r.toUpperCase()]),(r=Eu(e,n,i,"displayAlign"))&&(t.displayAlign=ac[r.toUpperCase()]),(r=Eu(e,n,i,"color"))&&(t.color=r),(r=Eu(e,n,i,"backgroundColor"))&&(t.backgroundColor=r),(r=Eu(e,n,i,"fontFamily"))&&(t.fontFamily=r),(r=Eu(e,n,i,"fontWeight"))&&"bold"==r&&(t.fontWeight=700),(r=Eu(e,n,i,"wrapOption"))&&"noWrap"==r&&(t.wrapLine=!1),(r=Eu(e,n,i,"lineHeight"))&&r.match(Zc)&&(t.lineHeight=r),(r=Eu(e,n,i,"fontSize"))&&r.match(Zc)&&(t.fontSize=r),(r=Eu(e,n,i,"fontStyle"))&&(t.fontStyle=fc[r.toUpperCase()]),(n=Su(n,i,"textDecoration"))&&Tu(t,n),(e=ku(e,i,"textDecoration"))&&Tu(t,e)}function Tu(t,e){for(var n=e.split(" "),i=0;i<n.length;i++)switch(n[i]){case"underline":0>t.textDecoration.indexOf("underline")&&t.textDecoration.push("underline");break;case"noUnderline":0<=t.textDecoration.indexOf("underline")&&at(t.textDecoration,"underline");break;case"lineThrough":0>t.textDecoration.indexOf("lineThrough")&&t.textDecoration.push("lineThrough");break;case"noLineThrough":0<=t.textDecoration.indexOf("lineThrough")&&at(t.textDecoration,"lineThrough");break;case"overline":0>t.textDecoration.indexOf("overline")&&t.textDecoration.push("overline");break;case"noOverline":0<=t.textDecoration.indexOf("overline")&&at(t.textDecoration,"overline")}}function Eu(t,e,n,i){return(t=ku(t,n,i))?t:Su(e,n,i)}function Su(t,e,n){for(var i=yu(t),r=0;r<i.length;r++){var a=Dn(i[r],"http://www.w3.org/ns/ttml#styling",n);if(a)return a}return(t=Au(t,"style",e))?Dn(t,"http://www.w3.org/ns/ttml#styling",n):null}function ku(t,e,n){return(t=Au(t,"style",e))?Dn(t,"http://www.w3.org/ns/ttml#styling",n):null}function Au(t,e,n){if(!t||1>n.length)return null;var i=null,r=t;for(t=null;r&&!(t=r.getAttribute(e))&&(r=r.parentNode)instanceof Element;);if(e=t)for(t=0;t<n.length;t++)if(n[t].getAttribute("xml:id")==e){i=n[t];break}return i}function _u(t,e){var n=null;if(eh.test(t)){n=eh.exec(t);var i=Number(n[1]),r=Number(n[2]),a=Number(n[3]),o=Number(n[4]);o+=(Number(n[5])||0)/e.b,a+=o/e.frameRate,n=a+60*r+3600*i}else nh.test(t)?n=Iu(nh,t):ih.test(t)?n=Iu(ih,t):rh.test(t)?(n=rh.exec(t),n=Number(n[1])/e.frameRate):ah.test(t)?(n=ah.exec(t),n=Number(n[1])/e.a):oh.test(t)&&(n=Iu(oh,t));return n}function Iu(t,e){var n=t.exec(e);return null==n||""==n[0]?null:(Number(n[4])||0)/1e3+(Number(n[3])||0)+60*(Number(n[2])||0)+3600*(Number(n[1])||0)}function xu(t,e,n,i){this.frameRate=Number(t)||30,this.b=Number(e)||1,this.a=Number(i),0==this.a&&(this.a=t?this.frameRate*this.b:1),n&&(t=/^(\d+) (\d+)$/g.exec(n))&&(this.frameRate*=t[1]/t[2])}function Pu(){this.a=new vu}function Ru(){}function Nu(t,e,n){var i;(i=/^align:(start|middle|center|end|left|right)$/.exec(e))?(e=i[1],t.textAlign="middle"==e?nc:ic[e.toUpperCase()]):(i=/^vertical:(lr|rl)$/.exec(e))?t.writingDirection="lr"==i[1]?2:3:(i=/^size:([\d.]+)%$/.exec(e))?t.size=Number(i[1]):(i=/^position:([\d.]+)%(?:,(line-left|line-right|center|start|end))?$/.exec(e))?(t.position=Number(i[1]),i[2]&&(e=i[2],t.positionAlign="line-left"==e||"start"==e?"line-left":"line-right"==e||"end"==e?"line-right":"center")):(i=/^region:(.*)$/.exec(e))?(e=Du(n,i[1]))&&(t.region=e):(n=/^line:([\d.]+)%(?:,(start|end|center))?$/.exec(e))?(t.lineInterpretation=1,t.line=Number(n[1]),n[2]&&(t.lineAlign=cc[n[2].toUpperCase()])):(n=/^line:(-?\d+)(?:,(start|end|center))?$/.exec(e))&&(t.lineInterpretation=sc,t.line=Number(n[1]),n[2]&&(t.lineAlign=cc[n[2].toUpperCase()]))}function Du(t,e){var n=t.filter(function(t){return t.id==e});return n.length?n[0]:null}function Cu(t){if(null==(t=cr(t,/(?:(\d{1,}):)?(\d{2}):(\d{2})\.(\d{3})/g)))return null;var e=Number(t[2]),n=Number(t[3]);return 59<e||59<n?null:Number(t[4])/1e3+n+60*e+3600*(Number(t[1])||0)}function Mu(){this.a=null}function Lu(t,e,n){var i,r,a;return(new ii).C("payl",oi(function(t){i=Mt(t)})).C("iden",oi(function(t){r=Mt(t)})).C("sttg",oi(function(t){a=Mt(t)})).parse(t),i?Ou(i,r,a,e,n):null}function Ou(t,e,n,i,r){if(t=new ye(i,r,t),e&&(t.id=e),n)for(e=new sr(n),n=hr(e);n;)Nu(t,n,[]),ur(e),n=hr(e);return t}var Uu,ju="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){t!=Array.prototype&&t!=Object.prototype&&(t[e]=n.value)},Bu=void 0!==t&&t===this?this:void 0!==e&&null!=e?e:this,Fu=function(){var t=0;return function(e){return"jscomp_symbol_"+(e||"")+t++}}();s("Promise",function(t){function e(t){this.b=0,this.g=void 0,this.a=[];var e=this.c();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.a=null}function i(t){return t instanceof e?t:new e(function(e){e(t)})}if(t)return t;n.prototype.b=function(t){null==this.a&&(this.a=[],this.f()),this.a.push(t)},n.prototype.f=function(){var t=this;this.c(function(){t.h()})};var r=Bu.setTimeout;n.prototype.c=function(t){r(t,0)},n.prototype.h=function(){for(;this.a&&this.a.length;){var t=this.a;this.a=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.g(t)}}}this.a=null},n.prototype.g=function(t){this.c(function(){throw t})},e.prototype.c=function(){function t(t){return function(i){n||(n=!0,t.call(e,i))}}var e=this,n=!1;return{resolve:t(this.m),reject:t(this.f)}},e.prototype.m=function(t){if(t===this)this.f(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.o(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.l(t):this.h(t)}},e.prototype.l=function(t){var e=void 0;try{e=t.then}catch(t){return void this.f(t)}"function"==typeof e?this.s(e,t):this.h(t)},e.prototype.f=function(t){this.i(2,t)},e.prototype.h=function(t){this.i(1,t)},e.prototype.i=function(t,e){if(0!=this.b)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.b);this.b=t,this.g=e,this.j()},e.prototype.j=function(){if(null!=this.a){for(var t=0;t<this.a.length;++t)a.b(this.a[t]);this.a=null}};var a=new n;return e.prototype.o=function(t){var e=this.c();t.sb(e.resolve,e.reject)},e.prototype.s=function(t,e){var n=this.c();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function i(t,e){return"function"==typeof t?function(e){try{r(t(e))}catch(t){a(t)}}:e}var r,a,o=new e(function(t,e){r=t,a=e});return this.sb(i(t,r),i(n,a)),o},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.sb=function(t,e){function n(){switch(i.b){case 1:t(i.g);break;case 2:e(i.g);break;default:throw Error("Unexpected state: "+i.b)}}var i=this;null==this.a?a.b(n):this.a.push(n)},e.resolve=i,e.reject=function(t){return new e(function(e,n){n(t)})},e.race=function(t){return new e(function(e,n){for(var r=o(t),a=r.next();!a.done;a=r.next())i(a.value).sb(e,n)})},e.all=function(t){var n=o(t),r=n.next();return r.done?i([]):new e(function(t,e){var a=[],o=0;do{a.push(void 0),o++,i(r.value).sb(function(e){return function(n){a[e]=n,0==--o&&t(a)}}(a.length-1),e),r=n.next()}while(!r.done)})},e}),s("Promise.prototype.finally",function(t){return t||function(t){return this.then(function(e){return Promise.resolve(t()).then(function(){return e})},function(e){return Promise.resolve(t()).then(function(){throw e})})}}),h.prototype.h=function(t){this.K=t},h.prototype.return=function(t){this.a={return:t},this.w=this.b},h.prototype.V=function(t){this.w=t},s("WeakMap",function(t){function e(t){if(this.a=(u+=Math.random()+1).toString(),t){n(),i(),t=o(t);for(var e;!(e=t.next()).done;)e=e.value,this.set(e[0],e[1])}}function r(t){_(t,s)||ju(t,s,{value:{}})}function a(t){var e=Object[t];e&&(Object[t]=function(t){return r(t),e(t)})}if(function(){if(!t||!Object.seal)return!1;try{var e=Object.seal({}),n=Object.seal({}),i=new t([[e,2],[n,3]]);return 2==i.get(e)&&3==i.get(n)&&(i.delete(e),i.set(n,4),!i.has(e)&&4==i.get(n))}catch(t){return!1}}())return t;var s="$jscomp_hidden_"+Math.random();a("freeze"),a("preventExtensions"),a("seal");var u=0;return e.prototype.set=function(t,e){if(r(t),!_(t,s))throw Error("WeakMap key fail: "+t);return t[s][this.a]=e,this},e.prototype.get=function(t){return _(t,s)?t[s][this.a]:void 0},e.prototype.has=function(t){return _(t,s)&&_(t[s],this.a)},e.prototype.delete=function(t){return!(!_(t,s)||!_(t[s],this.a))&&delete t[s][this.a]},e}),s("Map",function(t){function e(){var t={};return t.oa=t.next=t.head=t}function r(t,e){var n=t.a;return a(function(){if(n){for(;n.head!=t.a;)n=n.oa;for(;n.next!=n.head;)return n=n.next,{done:!1,value:e(n)};n=null}return{done:!0,value:void 0}})}function s(t,e){var n=e&&typeof e;"object"==n||"function"==n?c.has(e)?n=c.get(e):(n=""+ ++h,c.set(e,n)):n="p_"+e;var i=t.b[n];if(i&&_(t.b,n))for(var r=0;r<i.length;r++){var a=i[r];if(e!==e&&a.key!==a.key||e===a.key)return{id:n,list:i,index:r,O:a}}return{id:n,list:i,index:-1,O:void 0}}function u(t){if(this.b={},this.a=e(),this.size=0,t){t=o(t);for(var n;!(n=t.next()).done;)n=n.value,this.set(n[0],n[1])}}if(function(){if(!t||"function"!=typeof t||!t.prototype.entries||"function"!=typeof Object.seal)return!1;try{var e=Object.seal({x:4}),n=new t(o([[e,"s"]]));if("s"!=n.get(e)||1!=n.size||n.get({x:4})||n.set({x:4},"t")!=n||2!=n.size)return!1;var i=n.entries(),r=i.next();return!r.done&&r.value[0]==e&&"s"==r.value[1]&&(r=i.next(),!(r.done||4!=r.value[0].x||"t"!=r.value[1]||!i.next().done))}catch(t){return!1}}())return t;n(),i();var c=new WeakMap;u.prototype.set=function(t,e){var n=s(this,t);return n.list||(n.list=this.b[n.id]=[]),n.O?n.O.value=e:(n.O={next:this.a,oa:this.a.oa,head:this.a,key:t,value:e},n.list.push(n.O),this.a.oa.next=n.O,this.a.oa=n.O,this.size++),this},u.prototype.delete=function(t){return t=s(this,t),!(!t.O||!t.list)&&(t.list.splice(t.index,1),t.list.length||delete this.b[t.id],t.O.oa.next=t.O.next,t.O.next.oa=t.O.oa,t.O.head=null,this.size--,!0)},u.prototype.clear=function(){this.b={},this.a=this.a.oa=e(),this.size=0},u.prototype.has=function(t){return!!s(this,t).O},u.prototype.get=function(t){return(t=s(this,t).O)&&t.value},u.prototype.entries=function(){return r(this,function(t){return[t.key,t.value]})},u.prototype.keys=function(){return r(this,function(t){return t.key})},u.prototype.values=function(){return r(this,function(t){return t.value})},u.prototype.forEach=function(t,e){for(var n,i=this.entries();!(n=i.next()).done;)n=n.value,t.call(e,n[1],n[0],this)},u.prototype[Symbol.iterator]=u.prototype.entries;var h=0;return u}),s("Array.prototype.find",function(t){return t||function(t,e){t:{var n=this;n instanceof String&&(n=String(n));for(var i=n.length,r=0;r<i;r++){var a=n[r];if(t.call(e,a,r,n)){n=a;break t}}n=void 0}return n}}),s("Object.values",function(t){return t||function(t){var e,n=[];for(e in t)_(t,e)&&n.push(t[e]);return n}}),s("Object.is",function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!==t&&e!==e}}),s("Array.prototype.includes",function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var i=n.length,r=e||0;for(0>r&&(r=Math.max(r+i,0));r<i;r++){var a=n[r];if(a===t||Object.is(a,t))return!0}return!1}}),s("String.prototype.includes",function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}});var Vu=this;Vu.a=!0,D.prototype.getBandwidthEstimate=function(t){return 128e3>this.a?t:Math.min(N(this.b),N(this.c))},t.console&&t.console.log.bind&&(C=console.warn.bind(console));var Ku=/^(?:([^:\/?#.]+):)?(?:\/\/(?:([^\/?#]*)@)?([^\/#?]*?)(?::([0-9]+))?(?=[\/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/;Uu=L.prototype,Uu.ia="",Uu.Fa="",Uu.la="",Uu.Qa=null,Uu.aa="",Uu.za="",Uu.toString=function(){var t=[],e=this.ia;if(e&&t.push(F(e,Hu,!0),":"),e=this.la){t.push("//");var n=this.Fa;n&&t.push(F(n,Hu,!0),"@"),t.push(encodeURIComponent(e).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),e=this.Qa,null!=e&&t.push(":",String(e))}return(e=this.aa)&&(this.la&&"/"!=e.charAt(0)&&t.push("/"),t.push(F(e,"/"==e.charAt(0)?Gu:qu,!0))),(e=this.a.toString())&&t.push("?",e),(e=this.za)&&t.push("#",F(e,Yu)),t.join("")},Uu.resolve=function(t){var e=new L(this);"data"===e.ia&&(e=new L);var n=!!t.ia;n?O(e,t.ia):n=!!t.Fa,n?e.Fa=t.Fa:n=!!t.la,n?e.la=t.la:n=null!=t.Qa;var i=t.aa;if(n)U(e,t.Qa);else if(n=!!t.aa){if("/"!=i.charAt(0))if(this.la&&!this.aa)i="/"+i;else{var r=e.aa.lastIndexOf("/");-1!=r&&(i=e.aa.substr(0,r+1)+i)}if(".."==i||"."==i)i="";else if(-1!=i.indexOf("./")||-1!=i.indexOf("/.")){r=0==i.lastIndexOf("/",0),i=i.split("/");for(var a=[],o=0;o<i.length;){var s=i[o++];"."==s?r&&o==i.length&&a.push(""):".."==s?((1<a.length||1==a.length&&""!=a[0])&&a.pop(),r&&o==i.length&&a.push("")):(a.push(s),r=!0)}i=a.join("/")}}return n?e.aa=i:n=""!==t.a.toString(),n?j(e,H(t.a)):n=!!t.za,n&&(e.za=t.za),e};var Hu=/[#\/\?@]/g,qu=/[#\?:]/g,Gu=/[#\?]/g,Xu=/[#\?@]/g,Yu=/#/g;K.prototype.a=null,K.prototype.c=null,K.prototype.add=function(t,e){if(!this.a&&(this.a={},this.c=0,this.b))for(var n=this.b.split("&"),i=0;i<n.length;i++){var r=n[i].indexOf("="),a=null;if(0<=r){var o=n[i].substring(0,r);a=n[i].substring(r+1)}else o=n[i];o=decodeURIComponent(o.replace(/\+/g," ")),a=a||"",this.add(o,decodeURIComponent(a.replace(/\+/g," ")))}return this.b=null,(n=this.a.hasOwnProperty(t)&&this.a[t])||(this.a[t]=n=[]),n.push(e),this.c++,this},K.prototype.toString=function(){if(this.b)return this.b;if(!this.a)return"";var t,e=[];for(t in this.a)for(var n=encodeURIComponent(t),i=this.a[t],r=0;r<i.length;r++){var a=n;""!==i[r]&&(a+="="+encodeURIComponent(i[r])),e.push(a)}return this.b=e.join("&")},q.prototype.resolve=function(){},q.prototype.reject=function(){},I("shaka.util.Error",z),z.prototype.toString=function(){return"shaka.util.Error "+JSON.stringify(this,null," ")},z.Severity={RECOVERABLE:1,CRITICAL:2},z.Category={NETWORK:1,TEXT:2,MEDIA:3,MANIFEST:4,STREAMING:5,DRM:6,PLAYER:7,CAST:8,STORAGE:9},z.Code={UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,UNKNOWN_DATA_URI_ENCODING:1005,REQUEST_FILTER_ERROR:1006,RESPONSE_FILTER_ERROR:1007,MALFORMED_TEST_URI:1008,UNEXPECTED_TEST_REQUEST:1009,INVALID_TEXT_HEADER:2e3,INVALID_TEXT_CUE:2001,UNABLE_TO_DETECT_ENCODING:2003,BAD_ENCODING:2004,INVALID_XML:2005,INVALID_MP4_TTML:2007,INVALID_MP4_VTT:2008,UNABLE_TO_EXTRACT_CUE_START_TIME:2009,BUFFER_READ_OUT_OF_BOUNDS:3e3,JS_INTEGER_OVERFLOW:3001,EBML_OVERFLOW:3002,EBML_BAD_FLOATING_POINT_SIZE:3003,MP4_SIDX_WRONG_BOX_TYPE:3004,MP4_SIDX_INVALID_TIMESCALE:3005,MP4_SIDX_TYPE_NOT_SUPPORTED:3006,WEBM_CUES_ELEMENT_MISSING:3007,WEBM_EBML_HEADER_ELEMENT_MISSING:3008,WEBM_SEGMENT_ELEMENT_MISSING:3009,WEBM_INFO_ELEMENT_MISSING:3010,WEBM_DURATION_ELEMENT_MISSING:3011,WEBM_CUE_TRACK_POSITIONS_ELEMENT_MISSING:3012,WEBM_CUE_TIME_ELEMENT_MISSING:3013,MEDIA_SOURCE_OPERATION_FAILED:3014,MEDIA_SOURCE_OPERATION_THREW:3015,VIDEO_ERROR:3016,QUOTA_EXCEEDED_ERROR:3017,TRANSMUXING_FAILED:3018,UNABLE_TO_GUESS_MANIFEST_TYPE:4e3,DASH_INVALID_XML:4001,DASH_NO_SEGMENT_INFO:4002,DASH_EMPTY_ADAPTATION_SET:4003,DASH_EMPTY_PERIOD:4004,DASH_WEBM_MISSING_INIT:4005,DASH_UNSUPPORTED_CONTAINER:4006,DASH_PSSH_BAD_ENCODING:4007,DASH_NO_COMMON_KEY_SYSTEM:4008,DASH_MULTIPLE_KEY_IDS_NOT_SUPPORTED:4009,DASH_CONFLICTING_KEY_IDS:4010,UNPLAYABLE_PERIOD:4011,RESTRICTIONS_CANNOT_BE_MET:4012,NO_PERIODS:4014,HLS_PLAYLIST_HEADER_MISSING:4015,INVALID_HLS_TAG:4016,HLS_INVALID_PLAYLIST_HIERARCHY:4017,DASH_DUPLICATE_REPRESENTATION_ID:4018,HLS_MULTIPLE_MEDIA_INIT_SECTIONS_FOUND:4020,HLS_COULD_NOT_GUESS_MIME_TYPE:4021,HLS_MASTER_PLAYLIST_NOT_PROVIDED:4022,HLS_REQUIRED_ATTRIBUTE_MISSING:4023,HLS_REQUIRED_TAG_MISSING:4024,HLS_COULD_NOT_GUESS_CODECS:4025,HLS_KEYFORMATS_NOT_SUPPORTED:4026,DASH_UNSUPPORTED_XLINK_ACTUATE:4027,DASH_XLINK_DEPTH_LIMIT:4028,HLS_COULD_NOT_PARSE_SEGMENT_START_TIME:4030,CONTENT_UNSUPPORTED_BY_BROWSER:4032,CANNOT_ADD_EXTERNAL_TEXT_TO_LIVE_STREAM:4033,INVALID_STREAMS_CHOSEN:5005,NO_RECOGNIZED_KEY_SYSTEMS:6e3,REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE:6001,FAILED_TO_CREATE_CDM:6002,FAILED_TO_ATTACH_TO_VIDEO:6003,INVALID_SERVER_CERTIFICATE:6004,FAILED_TO_CREATE_SESSION:6005,FAILED_TO_GENERATE_LICENSE_REQUEST:6006,LICENSE_REQUEST_FAILED:6007,LICENSE_RESPONSE_REJECTED:6008,ENCRYPTED_CONTENT_WITHOUT_DRM_INFO:6010,NO_LICENSE_SERVER_GIVEN:6012,OFFLINE_SESSION_REMOVED:6013,EXPIRED:6014,LOAD_INTERRUPTED:7e3,OPERATION_ABORTED:7001,NO_VIDEO_ELEMENT:7002,CAST_API_UNAVAILABLE:8e3,NO_CAST_RECEIVERS:8001,ALREADY_CASTING:8002,UNEXPECTED_CAST_ERROR:8003,CAST_CANCELED_BY_USER:8004,CAST_CONNECTION_TIMED_OUT:8005,CAST_RECEIVER_APP_UNAVAILABLE:8006,STORAGE_NOT_SUPPORTED:9e3,INDEXED_DB_ERROR:9001,DEPRECATED_OPERATION_ABORTED:9002,REQUESTED_ITEM_NOT_FOUND:9003,MALFORMED_OFFLINE_URI:9004,CANNOT_STORE_LIVE_OFFLINE:9005,STORE_ALREADY_IN_PROGRESS:9006,NO_INIT_DATA_FOR_OFFLINE:9007,LOCAL_PLAYER_INSTANCE_REQUIRED:9008,NEW_KEY_OPERATION_NOT_SUPPORTED:9011,KEY_NOT_FOUND:9012,MISSING_STORAGE_CELL:9013},I("shaka.util.AbortableOperation",W),W.failed=$,W.aborted=J,W.completed=Q,W.notAbortable=Z,W.prototype.abort=function(){return this.a=!0,this.b()},W.prototype.abort=W.prototype.abort,W.all=tt,W.prototype.finally=function(t){return this.promise.then(function(){return t(!0)},function(){return t(!1)}),this},W.prototype.finally=W.prototype.finally,W.prototype.X=function(t,e){function n(){return r.reject(new z(2,7,7001)),i.abort()}var i=this,r=new q;return this.promise.then(function(e){i.a?r.reject(new z(2,7,7001)):t?n=et(t,e,r):r.resolve(e)},function(t){e?n=et(e,t,r):r.reject(t)}),new W(r,function(){return n()})},W.prototype.chain=W.prototype.X,ht.prototype.destroy=function(){var t=[];return this.a.forEach(function(e){e.promise.catch(function(){}),t.push(e.abort())}),this.a=[],Promise.all(t)},I("shaka.net.NetworkingEngine",ft),ft.RequestType={MANIFEST:0,SEGMENT:1,LICENSE:2,APP:3},ft.PluginPriority={FALLBACK:1,PREFERRED:2,APPLICATION:3};var zu={};ft.registerScheme=dt,ft.unregisterScheme=function(t){delete zu[t]},ft.prototype.pe=function(t){this.a.push(t)},ft.prototype.registerRequestFilter=ft.prototype.pe,ft.prototype.Ue=function(t){at(this.a,t)},ft.prototype.unregisterRequestFilter=ft.prototype.Ue,ft.prototype.hd=function(){this.a=[]},ft.prototype.clearAllRequestFilters=ft.prototype.hd,ft.prototype.qe=function(t){this.b.push(t)},ft.prototype.registerResponseFilter=ft.prototype.qe,ft.prototype.Ve=function(t){at(this.b,t)},ft.prototype.unregisterResponseFilter=ft.prototype.Ve,ft.prototype.jd=function(){this.b=[]},ft.prototype.clearAllResponseFilters=ft.prototype.jd,ft.prototype.destroy=function(){return this.c=!0,this.a=[],this.b=[],this.g.destroy()},ft.prototype.destroy=ft.prototype.destroy,ft.prototype.request=function(t,e){var n=this;if(this.c)return mt(J());e.method=e.method||"GET",e.headers=e.headers||{},e.retryParameters=e.retryParameters?ut(e.retryParameters):Y(),e.uris=ut(e.uris);var i=vt(this,t,e),r=i.X(function(){return yt(n,t,e,new G(e.retryParameters,!1),0,null)}),a=r.X(function(e){return gt(n,t,e)}),o=Date.now(),s=0;i.promise.then(function(){s=Date.now()-o},function(){});var u=0;return r.promise.then(function(){u=Date.now()},function(){}),i=a.X(function(e){var i=Date.now()-u;return e.timeMs+=s,e.timeMs+=i,n.f&&!e.fromCache&&1==t&&n.f(e.timeMs,e.data.byteLength),e},function(t){throw t&&(t.severity=2),t}),lt(this.g,i),mt(i)},ft.prototype.request=ft.prototype.request,bt.prototype.push=function(t,e){this.a.hasOwnProperty(t)?this.a[t].push(e):this.a[t]=[e]},bt.prototype.get=function(t){return(t=this.a[t])?t.slice():null},bt.prototype.remove=function(t,e){var n=this.a[t];if(n)for(var i=0;i<n.length;++i)n[i]==e&&(n.splice(i,1),--i)},wt.prototype.destroy=function(){return St(this),this.a=null,Promise.resolve()},wt.prototype.pa=function(t,e){if(this.a)for(var n=this.a.get(e)||[],i=0;i<n.length;++i){var r=n[i];r.target==t&&(r.pa(),this.a.remove(e,r))}},kt.prototype.pa=function(){this.target.removeEventListener(this.type,this.a,!1),this.a=this.target=null},At.prototype.preventDefault=function(){this.cancelable&&(this.defaultPrevented=!0)},At.prototype.stopImmediatePropagation=function(){this.a=!0},At.prototype.stopPropagation=function(){};var Wu=1/15,$u={empty:function(t){return!t||0==Object.keys(t).length},values:function(t){return Object.keys(t).map(function(e){return t[e]})},map:function(t,e){return Object.keys(t).reduce(function(n,i){return n[i]=e(t[i],i),n},{})},every:function(t,e){return Object.keys(t).every(function(n){return e(n,t[n])})},forEach:function(t,e){Object.keys(t).forEach(function(n){e(n,t[n])})},df:function(t){var e=new Map;return Object.keys(t).forEach(function(n){e.set(n,t[n])}),e},ef:function(t){var e={};return t.forEach(function(t,n){e[n]=t}),e}},Ju={codecs:"codecs",frameRate:"framerate",bandwidth:"bitrate",width:"width",height:"height",channelsCount:"channels"};I("shaka.util.StringUtils.fromUTF8",Mt),I("shaka.util.StringUtils.fromUTF16",Lt),I("shaka.util.StringUtils.fromBytesAutoDetect",Ot),I("shaka.util.StringUtils.toUTF8",Ut),Bt.prototype.cancel=function(){null!=this.a&&(clearTimeout(this.a),this.a=null)},I("shaka.util.Uint8ArrayUtils.toBase64",Kt),I("shaka.util.Uint8ArrayUtils.fromBase64",Ht),I("shaka.util.Uint8ArrayUtils.fromHex",qt),I("shaka.util.Uint8ArrayUtils.toHex",Gt),I("shaka.util.Uint8ArrayUtils.equal",Xt),I("shaka.util.Uint8ArrayUtils.concat",Yt),Uu=zt.prototype,Uu.destroy=function(){this.c=!0;var t=[];return this.a.forEach(function(e){e=e.ja.close().catch(xt);var n=new Promise(function(t){setTimeout(t,1e3*Qu)});t.push(Promise.race([e,n]))}),this.i.reject(),this.g&&t.push(this.g.destroy()),this.l&&t.push(this.l.setMediaKeys(null).catch(xt)),this.A&&(this.A.cancel(),this.A=null),this.G&&(this.G.cancel(),this.G=null),this.g=this.l=this.j=this.u=this.b=null,this.a=[],this.o=[],this.s=this.h=this.f=null,Promise.all(t)},Uu.configure=function(t){this.f=t},Uu.init=function(t,e){var n={},i=[],r=t.periods.some(function(t){return t.variants.some(function(t){return t.drmInfos.length})});return this.ga=e,this.o=t.offlineSessionIds,Zt(this,t,e||0<t.offlineSessionIds.length,n,i),i.length?te(this,n,i,r):(this.L=!0,Promise.resolve())},Uu.rb=function(t){if(!this.j)return Et(this.g,t,"encrypted",function(){this.h(new z(2,6,6010))}.bind(this)),Promise.resolve();this.l=t,Et(this.g,this.l,"play",this.Td.bind(this)),t=this.l.setMediaKeys(this.j),t=t.catch(function(t){return Promise.reject(new z(2,6,6003,t.message))});var e=null;return this.b.serverCertificate&&this.b.serverCertificate.length&&(e=this.j.setServerCertificate(this.b.serverCertificate).then(function(){}).catch(function(t){return Promise.reject(new z(2,6,6004,t.message))})),Promise.all([t,e]).then(function(){var t=this;if(this.c)return Promise.reject();$t(this),this.b.initData.length||this.o.length||Tt(this.g,this.l,"encrypted",function(e){return Jt(t,e.initDataType,new Uint8Array(e.initData))})}.bind(this)).catch(function(t){return this.c?Promise.resolve():Promise.reject(t)}.bind(this))},Uu.keySystem=function(){return this.b?this.b.keySystem:""},Uu.vb=function(){var t=this.a.map(function(t){return t=t.ja.expiration,isNaN(t)?1/0:t});return Math.min.apply(Math,t)},Uu.Ic=function(t){this.f.delayLicenseRequestUntilPlayed&&this.l.paused&&!this.Y?this.I.push(t):ue(this,t)},Uu.Ec=function(t){t=t.target;var e;for(e=0;e<this.a.length&&this.a[e].ja!=t;++e);if(e!=this.a.length){var n=!1;t.keyStatuses.forEach(function(t,i){if("string"==typeof i){var r=i;i=t,t=r}if("com.microsoft.playready"==this.b.keySystem&&16==i.byteLength){r=new DataView(i);var a=r.getUint32(0,!0),o=r.getUint16(4,!0),s=r.getUint16(6,!0);r.setUint32(0,a,!1),r.setUint16(4,o,!1),r.setUint16(6,s,!1)}"com.microsoft.playready"==this.b.keySystem&&"status-pending"==t&&(t="usable"),"status-pending"!=t&&(this.a[e].loaded=!0),"expired"==t&&(n=!0),r=Gt(new Uint8Array(i)),this.S[r]=t}.bind(this));var i=t.expiration-Date.now();(0>i||n&&1e3>i)&&!this.a[e].qa&&(this.a.splice(e,1),t.close().catch(function(){})),this.a.every(function(t){return t.loaded})&&(this.i.resolve(),Ft(this.G))}},Uu.oe=function(){function t(t,e){return"expired"==e}this.m={};for(var e in this.S)this.m[e]=this.S[e];!$u.empty(this.m)&&$u.every(this.m,t)&&this.h(new z(2,6,6014)),this.s.Ub(this.m)},Uu.Td=function(){for(var t=0;t<this.I.length;t++)ue(this,this.I[t]);this.Y=!0,this.I=[]},Uu.ne=function(){this.a.forEach(function(t){var e=t.Tb,n=t.ja.expiration;isNaN(n)&&(n=1/0),n!=e&&(this.s.onExpirationUpdated(t.ja.sessionId,n),t.Tb=n)}.bind(this))};var Qu=1,Zu=5,tc=.5;I("shaka.text.Cue",ye);var ec="auto";ye.positionAlign={LEFT:"line-left",RIGHT:"line-right",CENTER:"center",AUTO:ec};var nc="center",ic={LEFT:"left",RIGHT:"right",CENTER:nc,START:"start",END:"end"};ye.textAlign=ic;var rc="before",ac={BEFORE:rc,CENTER:"center",AFTER:"after"};ye.displayAlign=ac;var oc=0;ye.writingDirection={HORIZONTAL_LEFT_TO_RIGHT:oc,HORIZONTAL_RIGHT_TO_LEFT:1,VERTICAL_LEFT_TO_RIGHT:2,VERTICAL_RIGHT_TO_LEFT:3};var sc=0;ye.lineInterpretation={LINE_NUMBER:sc,PERCENTAGE:1};var uc="center",cc={CENTER:uc,START:"start",END:"end"};ye.lineAlign=cc;var hc=400;ye.fontWeight={NORMAL:hc,BOLD:700};var lc="normal",fc={NORMAL:lc,ITALIC:"italic",OBLIQUE:"oblique"};ye.fontStyle=fc,ye.textDecoration={UNDERLINE:"underline",LINE_THROUGH:"lineThrough",OVERLINE:"overline"},I("shaka.text.CueRegion",ge);var dc=1;ge.units={PX:0,PERCENTAGE:dc,LINES:2};var pc="";ge.scrollMode={NONE:pc,UP:"up"},be.prototype.destroy=function(){return this.a.dispose(),this.a=null,Promise.resolve()},be.prototype.i=function(t){for(var e=0;e<t.captions.length;e++){var n=t.captions[e];this.c.push(new ye(n.startTime,n.endTime,n.text))}e=new Uint8Array(t.data.byteLength+t.initSegment.byteLength),e.set(t.initSegment,0),e.set(t.data,t.initSegment.byteLength),this.g.push(e)},be.prototype.h=function(){var t={data:Yt.apply(null,this.g),cues:this.c};this.b.resolve(t),this.f=!1};var mc={};I("shaka.text.TextEngine.registerParser",function(t,e){mc[t]=e}),I("shaka.text.TextEngine.unregisterParser",function(t){delete mc[t]}),Se.prototype.destroy=function(){return this.c=this.f=null,Promise.resolve()},Se.prototype.Ee=function(t){this.c=t},Se.prototype.setDisplayer=Se.prototype.Ee,Se.prototype.Kb=function(t){var e={periodStart:0,segmentStart:null,segmentEnd:0};try{return this.f.parseMedia(new Uint8Array(t),e)[0].startTime}catch(t){throw new z(2,2,2009,t)}},Se.prototype.remove=function(t,e){return Promise.resolve().then(function(){!this.c||!this.c.remove(t,e)||null==this.a||e<=this.a||t>=this.b||(t<=this.a&&e>=this.b?this.a=this.b=null:t<=this.a&&e<this.b?this.a=e:t>this.a&&e>=this.b&&(this.b=t))}.bind(this))},Se.prototype.lc=function(t){this.c.append(t)},Se.prototype.appendCues=Se.prototype.lc,Uu=Ae.prototype,Uu.destroy=function(){this.m=!0;var t,e=[];for(t in this.c){var n=this.c[t],i=n[0];for(this.c[t]=n.slice(0,1),i&&e.push(i.p.catch(xt)),i=1;i<n.length;++i)n[i].p.catch(xt),n[i].p.reject()}this.a&&e.push(this.a.destroy());for(var r in this.i)e.push(this.i[r].destroy());return Promise.all(e).then(function(){var t=this.h?this.h.destroy():null;return this.f&&(this.f.removeAttribute("src"),this.f.load()),this.o=this.a=this.g=this.f=this.h=null,this.b={},this.i={},this.c={},t}.bind(this))},Uu.init=function(t,e){var n=this;return this.j.then(function(){for(var i in t){var r=t[i];r=Ct(r.mimeType,r.codecs),"text"==i?Ie(n,r):(!e&&MediaSource.isTypeSupported(r)||!we(r,i)||(n.i[i]=new be,r=Te(i,r)),r=n.g.addSourceBuffer(r),Tt(n.h,r,"error",n.Qe.bind(n,i)),Tt(n.h,r,"updateend",n.Oa.bind(n,i)),n.b[i]=r,n.c[i]=[])}})},Uu.Gb=function(){var t=this.a&&null!=this.a.a?[{start:this.a.a,end:this.a.b}]:[];return{total:ve(this.f.buffered),audio:ve(Ne(this,"audio")),video:ve(Ne(this,"video")),text:t}},Uu.remove=function(t,e,n){return"text"==t?this.a.remove(e,n):Le(this,t,this.Wc.bind(this,t,e,n))},Uu.flush=function(t){return"text"==t?Promise.resolve():Le(this,t,this.md.bind(this,t))},Uu.endOfStream=function(t){return Oe(this,function(){t?this.g.endOfStream(t):this.g.endOfStream()}.bind(this))},Uu.ka=function(t){return Oe(this,function(){this.g.duration=t}.bind(this))},Uu.T=function(){return this.g.duration},Uu.Vc=function(t,e){this.b[t].appendBuffer(e)},Uu.Wc=function(t,e,n){n<=e?this.Oa(t):this.b[t].remove(e,n)},Uu.cd=function(t){var e=this.b[t].appendWindowStart,n=this.b[t].appendWindowEnd;this.b[t].abort(),this.b[t].appendWindowStart=e,this.b[t].appendWindowEnd=n,this.Oa(t)},Uu.md=function(t){this.f.currentTime-=.001,this.Oa(t)},Uu.Ge=function(t,e){0>e&&(e+=.001),this.b[t].timestampOffset=e,this.Oa(t)},Uu.De=function(t,e,n){this.b[t].appendWindowStart=0,this.b[t].appendWindowEnd=n,this.b[t].appendWindowStart=e,this.Oa(t)},Uu.Qe=function(t){this.c[t][0].p.reject(new z(2,3,3014,this.f.error?this.f.error.code:0))},Uu.Oa=function(t){var e=this.c[t][0];e&&(e.p.resolve(),Ue(this,t))};var vc=1,yc=2,gc={aar:"aa",abk:"ab",afr:"af",aka:"ak",alb:"sq",amh:"am",ara:"ar",arg:"an",arm:"hy",asm:"as",ava:"av",ave:"ae",aym:"ay",aze:"az",bak:"ba",bam:"bm",baq:"eu",bel:"be",ben:"bn",bih:"bh",bis:"bi",bod:"bo",bos:"bs",bre:"br",bul:"bg",bur:"my",cat:"ca",ces:"cs",cha:"ch",che:"ce",chi:"zh",chu:"cu",chv:"cv",cor:"kw",cos:"co",cre:"cr",cym:"cy",cze:"cs",dan:"da",deu:"de",div:"dv",dut:"nl",dzo:"dz",ell:"el",eng:"en",epo:"eo",est:"et",eus:"eu",ewe:"ee",fao:"fo",fas:"fa",fij:"fj",fin:"fi",fra:"fr",fre:"fr",fry:"fy",ful:"ff",geo:"ka",ger:"de",gla:"gd",gle:"ga",glg:"gl",glv:"gv",gre:"el",grn:"gn",guj:"gu",hat:"ht",hau:"ha",heb:"he",her:"hz",hin:"hi",hmo:"ho",hrv:"hr",hun:"hu",hye:"hy",ibo:"ig",ice:"is",ido:"io",iii:"ii",iku:"iu",ile:"ie",ina:"ia",ind:"id",ipk:"ik",isl:"is",ita:"it",jav:"jv",jpn:"ja",kal:"kl",kan:"kn",kas:"ks",kat:"ka",kau:"kr",kaz:"kk",khm:"km",kik:"ki",kin:"rw",kir:"ky",kom:"kv",kon:"kg",kor:"ko",kua:"kj",kur:"ku",lao:"lo",lat:"la",lav:"lv",lim:"li",lin:"ln",lit:"lt",ltz:"lb",lub:"lu",lug:"lg",mac:"mk",mah:"mh",mal:"ml",mao:"mi",mar:"mr",may:"ms",mkd:"mk",mlg:"mg",mlt:"mt",mon:"mn",mri:"mi",msa:"ms",mya:"my",nau:"na",nav:"nv",nbl:"nr",nde:"nd",ndo:"ng",nep:"ne",nld:"nl",nno:"nn",nob:"nb",nor:"no",nya:"ny",oci:"oc",oji:"oj",ori:"or",orm:"om",oss:"os",pan:"pa",per:"fa",pli:"pi",pol:"pl",por:"pt",pus:"ps",que:"qu",roh:"rm",ron:"ro",rum:"ro",run:"rn",rus:"ru",sag:"sg",san:"sa",sin:"si",slk:"sk",slo:"sk",slv:"sl",sme:"se",smo:"sm",sna:"sn",snd:"sd",som:"so",sot:"st",spa:"es",sqi:"sq",srd:"sc",srp:"sr",ssw:"ss",sun:"su",swa:"sw",swe:"sv",tah:"ty",tam:"ta",tat:"tt",tel:"te",tgk:"tg",tgl:"tl",tha:"th",tib:"bo",tir:"ti",ton:"to",tsn:"tn",tso:"ts",tuk:"tk",tur:"tr",twi:"tw",uig:"ug",ukr:"uk",urd:"ur",uzb:"uz",ven:"ve",vie:"vi",vol:"vo",wel:"cy",wln:"wa",wol:"wo",xho:"xh",yid:"yi",yor:"yo",zha:"za",zho:"zh",zul:"zu"};I("shaka.abr.SimpleAbrManager",cn),cn.prototype.stop=function(){this.h=null,this.f=!1,this.c=[],this.g=null},cn.prototype.stop=cn.prototype.stop,cn.prototype.init=function(t){this.h=t},cn.prototype.init=cn.prototype.init,cn.prototype.chooseVariant=function(){var t=hn(this.a.restrictions,this.c),e=this.b.getBandwidthEstimate(this.a.defaultBandwidthEstimate);this.c.length&&!t.length&&(t=hn(null,this.c),t=[t[0]]);for(var n=t[0]||null,i=0;i<t.length;++i){var r=t[i],a=(t[i+1]||{bandwidth:1/0}).bandwidth/this.a.bandwidthUpgradeTarget;e>=r.bandwidth/this.a.bandwidthDowngradeTarget&&e<=a&&(n=r)}return this.g=Date.now(),n},cn.prototype.chooseVariant=cn.prototype.chooseVariant,cn.prototype.enable=function(){this.f=!0},cn.prototype.enable=cn.prototype.enable,cn.prototype.disable=function(){this.f=!1},cn.prototype.disable=cn.prototype.disable,cn.prototype.segmentDownloaded=function(t,e){var n=this.b;if(!(16e3>e)){var i=8e3*e/t,r=t/1e3;n.a+=e,R(n.b,r,i),R(n.c,r,i)}if(null!=this.g&&this.f)t:{if(this.i){if(Date.now()-this.g<1e3*this.a.switchInterval)break t}else{if(!(128e3<=this.b.a))break t;this.i=!0}n=this.chooseVariant(),this.b.getBandwidthEstimate(this.a.defaultBandwidthEstimate),this.h(n)}},cn.prototype.segmentDownloaded=cn.prototype.segmentDownloaded,cn.prototype.getBandwidthEstimate=function(){return this.b.getBandwidthEstimate(this.a.defaultBandwidthEstimate)},cn.prototype.getBandwidthEstimate=cn.prototype.getBandwidthEstimate,cn.prototype.setVariants=function(t){this.c=t},cn.prototype.setVariants=cn.prototype.setVariants,cn.prototype.configure=function(t){this.a=t},cn.prototype.configure=cn.prototype.configure;var bc="ended play playing pause pausing ratechange seeked seeking timeupdate volumechange".split(" "),wc="buffered currentTime duration ended loop muted paused playbackRate seeking videoHeight videoWidth volume".split(" "),Tc=["loop","playbackRate"],Ec=["pause","play"],Sc="adaptation buffering emsg error loading streaming texttrackvisibility timelineregionadded timelineregionenter timelineregionexit trackschanged unloading".split(" "),kc={getAudioLanguages:2,getAudioLanguagesAndRoles:2,getBufferedInfo:2,getConfiguration:2,getExpiration:2,getManifestUri:2,getPlaybackRate:2,getTextLanguages:2,getTextLanguagesAndRoles:2,getTextTracks:2,getStats:5,usingEmbeddedTextTrack:2,getVariantTracks:2,isAudioOnly:10,isBuffering:1,isInProgress:1,isLive:10,isTextTrackVisible:1,keySystem:10,seekRange:1},Ac={getPlayheadTimeAsDate:1,getPresentationStartTimeAsDate:20},_c=[["getConfiguration","configure"]],Ic=[["isTextTrackVisible","setTextTrackVisibility"]],xc="addTextTrack cancelTrickPlay configure resetConfiguration retryStreaming selectAudioLanguage selectEmbeddedTextTrack selectTextLanguage selectTextTrack selectVariantTrack setTextTrackVisibility trickPlay".split(" "),Pc=["attach","detach","load","unload"],Rc=!1,Nc=null;Uu=pn.prototype,Uu.destroy=function(){return vn(this),Nc&&mn(this),this.G=this.A=this.g=null,this.b=this.h=!1,this.m=this.l=this.f=this.c=this.a=this.i=null,Promise.resolve()},Uu.$=function(){return this.b},Uu.Yb=function(){return this.u},Uu.init=function(){if(t.chrome&&chrome.cast&&chrome.cast.isAvailable){delete t.__onGCastApiAvailable,this.h=!0,this.g();var e=new chrome.cast.SessionRequest(this.I);e=new chrome.cast.ApiConfig(e,this.Dc.bind(this),this.Wd.bind(this),"origin_scoped"),chrome.cast.initialize(e,function(){},function(){}),Rc&&setTimeout(this.g.bind(this),20),(e=Nc)&&e.status!=chrome.cast.SessionStatus.STOPPED?this.Dc(e):Nc=null}else t.__onGCastApiAvailable=function(t){t&&this.init()}.bind(this)},Uu.bc=function(t){this.i=t,this.b&&yn({type:"appData",appData:this.i})},Uu.cast=function(t){return this.h?Rc?this.b?Promise.reject(new z(1,8,8002)):(this.f=new q,chrome.cast.requestSession(this.Vb.bind(this,t),this.Bc.bind(this)),this.f):Promise.reject(new z(1,8,8001)):Promise.reject(new z(1,8,8e3))},Uu.ub=function(){this.b&&(vn(this),Nc&&(mn(this),Nc.stop(function(){},function(){}),Nc=null))},Uu.get=function(t,e){if("video"==t){if(0<=Ec.indexOf(e))return this.Mc.bind(this,t,e)}else if("player"==t){if(Ac[e]&&!this.get("player","isLive")())return function(){};if(0<=xc.indexOf(e))return this.Mc.bind(this,t,e);if(0<=Pc.indexOf(e))return this.se.bind(this,t,e);if(kc[e])return this.Jc.bind(this,t,e)}return this.Jc(t,e)},Uu.set=function(t,e,n){this.a[t][e]=n,yn({type:"set",targetName:t,property:e,value:n})},Uu.Vb=function(t,e){Nc=e,e.addUpdateListener(this.l),e.addMessageListener("urn:x-cast:com.google.shaka.v2",this.m),this.Cc(),yn({type:"init",initState:t,appData:this.i}),this.f.resolve()},Uu.Bc=function(t){var e=8003;switch(t.code){case"cancel":e=8004;break;case"timeout":e=8005;break;case"receiver_unavailable":e=8006}this.f.reject(new z(2,8,e,t))},Uu.Jc=function(t,e){return this.a[t][e]},Uu.Mc=function(t,e){yn({type:"call",targetName:t,methodName:e,args:Array.prototype.slice.call(arguments,2)})},Uu.se=function(t,e){var n=Array.prototype.slice.call(arguments,2),i=new q,r=this.o.toString();return this.o++,this.c[r]=i,yn({type:"asyncCall",targetName:t,methodName:e,args:n,id:r}),i},Uu.Dc=function(t){var e=this.s();this.f=new q,this.j=!0,this.Vb(e,t)},Uu.Wd=function(t){Rc="available"==t,this.g()},Uu.Cc=function(){var t=!!Nc&&"connected"==Nc.status;if(this.b&&!t){this.G();for(var e in this.a)this.a[e]={};vn(this)}this.u=(this.b=t)?Nc.receiver.friendlyName:"",this.g()},Uu.Pd=function(t,e){var n=fn(e);switch(n.type){case"event":var i=n.event;this.A(n.targetName,new At(i.type,i));break;case"update":i=n.update;for(var r in i){n=this.a[r]||{};for(var a in i[r])n[a]=i[r][a]}this.j&&(this.L(),this.j=!1);break;case"asyncComplete":if(r=n.id,n=n.error,a=this.c[r],delete this.c[r],a)if(n){r=new z(n.severity,n.category,n.code);for(i in n)r[i]=n[i];a.reject(r)}else a.resolve()}},gn.prototype.addEventListener=function(t,e){this.Bb.push(t,e)},gn.prototype.removeEventListener=function(t,e){this.Bb.remove(t,e)},gn.prototype.dispatchEvent=function(t){for(var e=this.Bb.get(t.type)||[],n=0;n<e.length;++n){t.target=this.jb,t.currentTarget=this.jb;var i=e[n];try{i.handleEvent?i.handleEvent(t):i.call(this,t)}catch(t){}if(t.a)break}return t.defaultPrevented},x(bn,gn),I("shaka.cast.CastProxy",bn),bn.prototype.destroy=function(t){return t&&this.a&&this.a.ub(),t=[this.i?this.i.destroy():null,this.b?this.b.destroy():null,this.a?this.a.destroy():null],this.a=this.i=this.j=this.h=this.b=this.c=null,Promise.all(t)},bn.prototype.destroy=bn.prototype.destroy,bn.prototype.Bd=function(){return this.h},bn.prototype.getVideo=bn.prototype.Bd,bn.prototype.td=function(){return this.j},bn.prototype.getPlayer=bn.prototype.td,bn.prototype.ed=function(){return!!this.a&&(this.a.h&&Rc)},bn.prototype.canCast=bn.prototype.ed,bn.prototype.$=function(){return!!this.a&&this.a.$()},bn.prototype.isCasting=bn.prototype.$,bn.prototype.Yb=function(){return this.a?this.a.Yb():""},bn.prototype.receiverName=bn.prototype.Yb,bn.prototype.cast=function(){var t=this.tc();return this.a.cast(t).then(function(){if(this.b)return this.b.hb()}.bind(this))},bn.prototype.cast=bn.prototype.cast,bn.prototype.bc=function(t){this.a.bc(t)},bn.prototype.setAppData=bn.prototype.bc,bn.prototype.Se=function(){var t=this.a;if(t.b){var e=t.s();chrome.cast.requestSession(t.Vb.bind(t,e),t.Bc.bind(t))}},bn.prototype.suggestDisconnect=bn.prototype.Se,bn.prototype.ub=function(){this.a.ub()},bn.prototype.forceDisconnect=bn.prototype.ub,Uu=bn.prototype,Uu.tc=function(){var t={video:{},player:{},playerAfterLoad:{},manifest:this.b.Ib(),startTime:null};return this.c.pause(),Tc.forEach(function(e){t.video[e]=this.c[e]}.bind(this)),this.c.ended||(t.startTime=this.c.currentTime),_c.forEach(function(e){var n=e[1];e=this.b[e[0]](),t.player[n]=e}.bind(this)),Ic.forEach(function(e){var n=e[1];e=this.b[e[0]](),t.playerAfterLoad[n]=e}.bind(this)),t},Uu.Le=function(){this.dispatchEvent(new At("caststatuschanged"))},Uu.Me=function(){this.f.dispatchEvent(new At(this.h.paused?"pause":"play"))},Uu.Oe=function(){var t=this;_c.forEach(function(t){var e=t[1];t=this.a.get("player",t[0])(),this.b[e](t)}.bind(this));var e=this.a.get("player","getManifestUri")(),n=this.a.get("video","ended"),i=Promise.resolve(),r=this.c.autoplay,a=null;n||(a=this.a.get("video","currentTime")),e&&(this.c.autoplay=!1,i=this.b.load(e,a));var o={};Tc.forEach(function(t){o[t]=this.a.get("video",t)}.bind(this)),i.then(function(){t.c&&(Tc.forEach(function(t){this.c[t]=o[t]}.bind(t)),Ic.forEach(function(t){var e=t[1];t=this.a.get("player",t[0])(),this.b[e](t)}.bind(t)),t.c.autoplay=r,e&&t.c.play())},function(e){t.b.dispatchEvent(new At("error",{detail:e}))})},Uu.Ze=function(t){if("addEventListener"==t)return this.f.addEventListener.bind(this.f);if("removeEventListener"==t)return this.f.removeEventListener.bind(this.f);if(this.a.$()&&0==Object.keys(this.a.a.video).length){var e=this.c[t];if("function"!=typeof e)return e}return this.a.$()?this.a.get("video",t):(t=this.c[t],"function"==typeof t&&(t=t.bind(this.c)),t)},Uu.af=function(t,e){this.a.$()?this.a.set("video",t,e):this.c[t]=e},Uu.$e=function(t){this.a.$()||this.f.dispatchEvent(new At(t.type,t))},Uu.ke=function(t){if("addEventListener"==t)return this.g.addEventListener.bind(this.g);if("removeEventListener"==t)return this.g.removeEventListener.bind(this.g);if("getMediaElement"==t)return function(){return this.h}.bind(this);if("getNetworkingEngine"==t)return this.b.uc.bind(this.b);if(this.a.$()){if("getManifest"==t||"drmInfo"==t)return function(){return C(t+"() does not work while casting!"),null};if("attach"==t||"detach"==t)return function(){return C(t+"() does not work while casting!"),Promise.resolve()}}return this.a.$()&&0==Object.keys(this.a.a.video).length&&kc[t]||!this.a.$()?this.b[t].bind(this.b):this.a.get("player",t)},Uu.le=function(t){this.a.$()||this.g.dispatchEvent(t)},Uu.Ne=function(t,e){this.a.$()&&("video"==t?this.f.dispatchEvent(e):"player"==t&&this.g.dispatchEvent(e))},x(Tn,gn),I("shaka.cast.CastReceiver",Tn),Tn.prototype.isConnected=function(){return this.o},Tn.prototype.isConnected=Tn.prototype.isConnected,Tn.prototype.Ed=function(){return this.h},Tn.prototype.isIdle=Tn.prototype.Ed,Tn.prototype.destroy=function(){var e=[this.c?this.c.destroy():null,this.b?this.b.destroy():null];return null!=this.l&&t.clearTimeout(this.l),this.u=this.s=this.c=this.b=this.a=null,this.o=!1,this.h=!0,this.l=this.i=this.f=null,Promise.all(e).then(function(){cast.receiver.CastReceiverManager.getInstance().stop()})},Tn.prototype.destroy=Tn.prototype.destroy,Uu=Tn.prototype,Uu.Hc=function(){this.g=0,this.j=!0,this.o=0!=cast.receiver.CastReceiverManager.getInstance().getSenders().length,Sn(this)},Uu.Kc=function(t,e){this.b&&(this.Wb(),In(this,{type:"event",targetName:t,event:e},this.f))},Uu.Wb=function(){null!=this.l&&t.clearTimeout(this.l),this.l=t.setTimeout(this.Wb.bind(this),500);var e={video:{},player:{}};if(wc.forEach(function(t){e.video[t]=this.a[t]}.bind(this)),this.b.P())for(var n in Ac)0==this.g%Ac[n]&&(e.player[n]=this.b[n]());for(var i in kc)0==this.g%kc[i]&&(e.player[i]=this.b[i]());(n=cast.receiver.CastReceiverManager.getInstance().getSystemVolume())&&(e.video.volume=n.level,e.video.muted=n.muted),this.m&&(this.g+=1),In(this,{type:"update",update:e},this.f),An(this)},Uu.ld=function(){var t=cast.receiver.CastReceiverManager.getInstance().getSystemVolume();t&&In(this,{type:"update",update:{video:{volume:t.level,muted:t.muted}}},this.f),In(this,{type:"event",targetName:"video",event:{type:"volumechange"}},this.f)},Uu.Zd=function(t){var e=fn(t.data);switch(e.type){case"init":this.g=0,this.m=!1,this.j=!0,kn(this,e.initState,e.appData),this.Wb();break;case"appData":this.u(e.appData);break;case"set":var n=e.targetName,i=e.property;if(e=e.value,"video"==n){var r=cast.receiver.CastReceiverManager.getInstance();if("volume"==i){r.setSystemVolumeLevel(e);break}if("muted"==i){r.setSystemVolumeMuted(e);break}}this.s[n][i]=e;break;case"call":n=this.s[e.targetName],n[e.methodName].apply(n,e.args);break;case"asyncCall":n=e.targetName,i=e.methodName,"player"==n&&"load"==i&&(this.g=0,this.m=!1),r=e.id,t=t.senderId;var a=this.s[n];e=a[i].apply(a,e.args),"player"==n&&"load"==i&&(e=e.then(function(){this.j=!0}.bind(this))),e.then(this.Qc.bind(this,t,r,null),this.Qc.bind(this,t,r))}},Uu.Kd=function(t){var e=fn(t.data);switch(e.type){case"PLAY":this.a.play(),xn(this,0);break;case"PAUSE":this.a.pause(),xn(this,0);break;case"SEEK":t=e.currentTime;var n=e.resumeState;null!=t&&(this.a.currentTime=Number(t)),n&&"PLAYBACK_START"==n?(this.a.play(),xn(this,0)):n&&"PLAYBACK_PAUSE"==n&&(this.a.pause(),xn(this,0));break;case"STOP":this.b.hb().then(function(){this.b&&xn(this,0)}.bind(this));break;case"GET_STATUS":xn(this,Number(e.requestId));break;case"VOLUME":n=e.volume,t=n.level,n=n.muted;var i=this.a.volume,r=this.a.muted;null!=t&&(this.a.volume=Number(t)),null!=n&&(this.a.muted=n),i==this.a.volume&&r==this.a.muted||xn(this,0);break;case"LOAD":this.g=0,this.j=this.m=!1,t=e.currentTime,n=this.A(e.media.contentId),this.a.autoplay=!0,this.b.load(n,t).then(function(){this.b&&_n(this)}.bind(this)).catch(function(t){var n="LOAD_FAILED";7==t.category&&7e3==t.code&&(n="LOAD_CANCELLED"),In(this,{requestId:Number(e.requestId),type:n},this.i)}.bind(this));break;default:In(this,{requestId:Number(e.requestId),type:"INVALID_REQUEST",reason:"INVALID_COMMAND"},this.i)}},Uu.Qc=function(t,e,n){this.b&&In(this,{type:"asyncComplete",id:e,error:n},this.f,t)};var Dc={IDLE:"IDLE",ad:"PLAYING",Yc:"BUFFERING",$c:"PAUSED"},Cc={"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"};I("shaka.media.InitSegmentReference",Zn),Zn.prototype.Db=function(){return this.c()},Zn.prototype.createUris=Zn.prototype.Db,Zn.prototype.Jb=function(){return this.b},Zn.prototype.getStartByte=Zn.prototype.Jb,Zn.prototype.Hb=function(){return this.a},Zn.prototype.getEndByte=Zn.prototype.Hb,I("shaka.media.SegmentReference",ti),ti.prototype.U=function(){return this.position},ti.prototype.getPosition=ti.prototype.U,ti.prototype.Kb=function(){return this.startTime},ti.prototype.getStartTime=ti.prototype.Kb,ti.prototype.pd=function(){return this.endTime},ti.prototype.getEndTime=ti.prototype.pd,ti.prototype.Db=function(){return this.c()},ti.prototype.createUris=ti.prototype.Db,ti.prototype.Jb=function(){return this.b},ti.prototype.getStartByte=ti.prototype.Jb,ti.prototype.Hb=function(){return this.a},ti.prototype.getEndByte=ti.prototype.Hb,I("shaka.util.DataViewReader",ei);var Mc=1;ei.Endianness={bf:0,cf:Mc},ei.prototype.ha=function(){return this.a<this.D.byteLength},ei.prototype.hasMoreData=ei.prototype.ha,ei.prototype.U=function(){return this.a},ei.prototype.getPosition=ei.prototype.U,ei.prototype.qd=function(){return this.D.byteLength},ei.prototype.getLength=ei.prototype.qd,ei.prototype.ca=function(){try{var t=this.D.getUint8(this.a);return this.a+=1,t}catch(t){ni()}},ei.prototype.readUint8=ei.prototype.ca,ei.prototype.bb=function(){try{var t=this.D.getUint16(this.a,this.b);return this.a+=2,t}catch(t){ni()}},ei.prototype.readUint16=ei.prototype.bb,ei.prototype.B=function(){try{var t=this.D.getUint32(this.a,this.b);return this.a+=4,t}catch(t){ni()}},ei.prototype.readUint32=ei.prototype.B,ei.prototype.Lc=function(){try{var t=this.D.getInt32(this.a,this.b);return this.a+=4,t}catch(t){ni()}},ei.prototype.readInt32=ei.prototype.Lc,ei.prototype.Ra=function(){try{if(this.b)var t=this.D.getUint32(this.a,!0),e=this.D.getUint32(this.a+4,!0);else e=this.D.getUint32(this.a,!1),t=this.D.getUint32(this.a+4,!1)}catch(t){ni()}if(2097151<e)throw new z(2,3,3001);return this.a+=8,e*Math.pow(2,32)+t},ei.prototype.readUint64=ei.prototype.Ra,ei.prototype.Da=function(t){this.a+t>this.D.byteLength&&ni();var e=new Uint8Array(this.D.buffer,this.D.byteOffset+this.a,t);return this.a+=t,new Uint8Array(e)},ei.prototype.readBytes=ei.prototype.Da,ei.prototype.F=function(t){this.a+t>this.D.byteLength&&ni(),this.a+=t},ei.prototype.skip=ei.prototype.F,ei.prototype.Oc=function(t){this.a<t&&ni(),this.a-=t},ei.prototype.rewind=ei.prototype.Oc,ei.prototype.seek=function(t){(0>t||t>this.D.byteLength)&&ni(),this.a=t},ei.prototype.seek=ei.prototype.seek,ei.prototype.Xb=function(){for(var t=this.a;this.ha()&&0!=this.D.getUint8(this.a);)this.a+=1;return t=new Uint8Array(this.D.buffer,this.D.byteOffset+t,this.a-t),this.a+=1,Mt(t)},ei.prototype.readTerminatedString=ei.prototype.Xb,I("shaka.util.Mp4Parser",ii),ii.prototype.C=function(t,e){var n=si(t);return this.c[n]=0,this.b[n]=e,this},ii.prototype.box=ii.prototype.C,ii.prototype.Z=function(t,e){var n=si(t);return this.c[n]=1,this.b[n]=e,this},ii.prototype.fullBox=ii.prototype.Z,ii.prototype.stop=function(){this.a=!0},ii.prototype.stop=ii.prototype.stop,ii.prototype.parse=function(t,e){var n=new Uint8Array(t);for(n=new ei(new DataView(n.buffer,n.byteOffset,n.byteLength),0),this.a=!1;n.ha()&&!this.a;)this.xb(0,n,e)},ii.prototype.parse=ii.prototype.parse,ii.prototype.xb=function(t,e,n){var i=e.U(),r=e.B(),a=e.B();switch(r){case 0:r=e.D.byteLength-i;break;case 1:r=e.Ra()}var o=this.b[a];if(o){var s=null,u=null;1==this.c[a]&&(u=e.B(),s=u>>>24,u&=16777215),a=i+r,n&&a>e.D.byteLength&&(a=e.D.byteLength),a-=e.U(),e=0<a?e.Da(a):new Uint8Array(0),e=new ei(new DataView(e.buffer,e.byteOffset,e.byteLength),0),o({parser:this,partialOkay:n||!1,version:s,flags:u,reader:e,size:r,start:i+t})}else e.F(Math.min(i+r-e.U(),e.D.byteLength-e.U()))},ii.prototype.parseNext=ii.prototype.xb,ii.children=ri,ii.sampleDescription=ai,ii.allData=oi,ii.typeToString=ui,I("shaka.media.SegmentIndex",li),li.prototype.destroy=function(){return this.a=null,Promise.resolve()},li.prototype.destroy=li.prototype.destroy,li.prototype.find=function(t){for(var e=this.a.length-1;0<=e;--e){var n=this.a[e];if(t>=n.startTime&&t<n.endTime)return n.position}return this.a.length&&t<this.a[0].startTime?this.a[0].position:null},li.prototype.find=li.prototype.find,li.prototype.get=function(t){return 0==this.a.length?null:(t-=this.a[0].position,0>t||t>=this.a.length?null:this.a[t])},li.prototype.get=li.prototype.get,li.prototype.offset=function(t){for(var e=0;e<this.a.length;++e)this.a[e].startTime+=t,this.a[e].endTime+=t},li.prototype.offset=li.prototype.offset,li.prototype.Pb=function(t){for(var e=[],n=0,i=0;n<this.a.length&&i<t.length;){var r=this.a[n],a=t[i];r.startTime<a.startTime?(e.push(r),n++):(r.startTime>a.startTime?0==n&&e.push(a):(.1<Math.abs(r.endTime-a.endTime)?e.push(new ti(r.position,a.startTime,a.endTime,a.c,a.b,a.a)):e.push(r),n++),i++)}for(;n<this.a.length;)e.push(this.a[n++]);if(e.length)for(n=e[e.length-1].position+1;i<t.length;)r=t[i++],r=new ti(n++,r.startTime,r.endTime,r.c,r.b,r.a),e.push(r);else e=t;this.a=e},li.prototype.merge=li.prototype.Pb,li.prototype.Fb=function(t){for(var e=0;e<this.a.length;++e)if(this.a[e].endTime>t)return void this.a.splice(0,e);this.a=[]},li.prototype.evict=li.prototype.Fb;var Lc;di.prototype.ha=function(){return this.a.ha()},gi.prototype.parse=function(t,e,n,i){var r;if(e=new di(new DataView(e)),440786851!=pi(e).id)throw new z(2,3,3008);var a=pi(e);if(408125543!=a.id)throw new z(2,3,3009);for(e=a.a.byteOffset,a=new di(a.a),r=null;a.ha();){var o=pi(a);if(357149030==o.id){r=o;break}}if(!r)throw new z(2,3,3010);for(a=new di(r.a),r=1e6,o=null;a.ha();){var s=pi(a);if(2807729==s.id)r=yi(s);else if(17545==s.id)if(o=s,4==o.a.byteLength)o=o.a.getFloat32(0);else{if(8!=o.a.byteLength)throw new z(2,3,3003);o=o.a.getFloat64(0)}}if(null==o)throw new z(2,3,3011);if(a=r/1e9,r=o*a,t=pi(new di(new DataView(t))),475249515!=t.id)throw new z(2,3,3007);return bi(t,e,a,r,n,i)};var Oc={},Uc={};I("shaka.media.ManifestParser.registerParserByExtension",function(t,e){Uc[t]=e}),I("shaka.media.ManifestParser.registerParserByMime",function(t,e){Oc[t]=e}),I("shaka.media.PresentationTimeline",Oi),Oi.prototype.T=function(){return this.b},Oi.prototype.getDuration=Oi.prototype.T,Oi.prototype.ka=function(t){this.b=t},Oi.prototype.setDuration=Oi.prototype.ka,Oi.prototype.vd=function(){return this.f},Oi.prototype.getPresentationStartTime=Oi.prototype.vd,Oi.prototype.Rc=function(t){this.j=t},Oi.prototype.setClockOffset=Oi.prototype.Rc,Oi.prototype.yb=function(t){this.i=t},Oi.prototype.setStatic=Oi.prototype.yb,Oi.prototype.dc=function(t){this.c=t},Oi.prototype.setSegmentAvailabilityDuration=Oi.prototype.dc,Oi.prototype.Sc=function(t){this.l=t},Oi.prototype.setDelay=Oi.prototype.Sc,Oi.prototype.Na=function(t,e){0!=t.length&&(e&&(this.h=Math.max(this.h,t[0].startTime)),this.a=t.reduce(function(t,e){return Math.max(t,e.endTime-e.startTime)},this.a))},Oi.prototype.notifySegments=Oi.prototype.Na,Oi.prototype.Rb=function(t){this.a=Math.max(this.a,t)},Oi.prototype.notifyMaxSegmentDuration=Oi.prototype.Rb,Oi.prototype.P=function(){return 1/0==this.b&&!this.i},Oi.prototype.isLive=Oi.prototype.P,Oi.prototype.Aa=function(){return 1/0!=this.b&&!this.i},Oi.prototype.isInProgress=Oi.prototype.Aa,Oi.prototype.Xa=function(){if(1/0==this.c)return this.g;var t=this.Ka()-this.c;return Math.max(this.g,t)},Oi.prototype.getSegmentAvailabilityStart=Oi.prototype.Xa,Oi.prototype.Tc=function(t){this.g=t},Oi.prototype.setUserSeekStart=Oi.prototype.Tc,Oi.prototype.Ka=function(){return this.P()||this.Aa()?Math.min(Math.max(0,(Date.now()+this.j)/1e3-this.a-this.f),this.b):this.b},Oi.prototype.getSegmentAvailabilityEnd=Oi.prototype.Ka,Oi.prototype.Wa=function(t){var e=Math.max(this.h,this.g);if(1/0==this.c)return e;var n=this.Ka()-this.c;return t=Math.min(n+t,this.ma()),Math.max(e,t)},Oi.prototype.getSafeSeekRangeStart=Oi.prototype.Wa,Oi.prototype.Ja=function(){return this.Wa(0)},Oi.prototype.getSeekRangeStart=Oi.prototype.Ja,Oi.prototype.ma=function(){var t=this.P()||this.Aa()?this.l:0;return Math.max(0,this.Ka()-t)},Oi.prototype.getSeekRangeEnd=Oi.prototype.ma,I("shaka.dash.DashParser",Ui),Uu=Ui.prototype,Uu.configure=function(t){this.b=t},Uu.start=function(t,e){return this.h=[t],this.a=e,ji(this).then(function(t){return this.a&&Gi(this,t),this.c}.bind(this))},Uu.stop=function(){return this.b=this.a=null,this.h=[],this.c=null,this.j=[],this.l={},null!=this.g&&(t.clearTimeout(this.g),this.g=null),this.f.destroy()},Uu.update=function(){ji(this).catch(function(t){this.a&&this.a.onError(t)}.bind(this))},Uu.onExpirationUpdated=function(){},Uu.ge=function(t,e){t.W=Xi(e,t.ba,null);var n=!1,i=Rn(e,"Role"),r=i.map(function(t){return t.getAttribute("value")}).filter(Pt),a=void 0,o="text"==t.W.contentType;o&&(a="subtitle");for(var s=0;s<i.length;s++){var u=i[s].getAttribute("schemeIdUri");if(null==u||"urn:mpeg:dash:role:2011"==u)switch(u=i[s].getAttribute("value")){case"main":n=!0;break;case"caption":case"subtitle":a=u}}var c=null,h=!1;if(Rn(e,"EssentialProperty").forEach(function(t){"http://dashif.org/guidelines/trickmode"==t.getAttribute("schemeIdUri")?c=t.getAttribute("value"):h=!0}),h)return null;i=Rn(e,"ContentProtection");var l=Kn(i,this.b.dash.customScheme,this.b.dash.ignoreDrmInfo);if(i=Be(e.getAttribute("lang")||"und"),u=e.getAttribute("label"),s=Rn(e,"Representation"),r=s.map(this.je.bind(this,t,l,a,i,u,n,r)).filter(function(t){return!!t}),0==r.length){if(o)return null;throw new z(2,4,4003)}return t.W.contentType&&"application"!=t.W.contentType||(t.W.contentType=Ji(r[0].mimeType,r[0].codecs),r.forEach(function(e){e.type=t.W.contentType})),r.forEach(function(t){l.drmInfos.forEach(function(e){t.keyId&&e.keyIds.push(t.keyId)})}),o=s.map(function(t){return t.getAttribute("id")}).filter(Pt),{id:t.W.id||"__fake__"+this.i++,contentType:t.W.contentType,language:i,Nb:n,streams:r,drmInfos:l.drmInfos,hc:c,te:o}},Uu.je=function(t,e,n,i,r,a,o,s){if(t.v=Xi(s,t.W,null),!zi(t.v))return null;t.bandwidth=Mn(s,"bandwidth",Bn)||0;var u=t.v.contentType;u="text"==u||"application"==u;try{var c=this.ue.bind(this);if(t.v.cb)var h=Ei(t,c);else if(t.v.ta)h=Ai(t,this.l);else if(t.v.fb)h=Pi(t,c,this.l,!!this.c);else{var l=t.v.ea,f=t.M.duration||0;h={createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:function(t){return 0<=t&&t<f?1:null},getSegmentReference:function(t){return 1!=t?null:new ti(1,0,f,function(){return l},0,null)},initSegmentReference:null,da:0}}}catch(t){if(u&&4002==t.code)return null;throw t}return s=Rn(s,"ContentProtection"),s=Hn(s,this.b.dash.customScheme,e,this.b.dash.ignoreDrmInfo),{id:this.i++,createSegmentIndex:h.createSegmentIndex,findSegmentPosition:h.findSegmentPosition,getSegmentReference:h.getSegmentReference,initSegmentReference:h.initSegmentReference,presentationTimeOffset:h.da,mimeType:t.v.mimeType,codecs:t.v.codecs,frameRate:t.v.frameRate,bandwidth:t.bandwidth,width:t.v.width,height:t.v.height,kind:n,encrypted:0<e.drmInfos.length,keyId:s,language:i,label:r,type:t.W.contentType,primary:a,trickModeVideo:null,containsEmsgBoxes:t.v.containsEmsgBoxes,roles:o,channelsCount:t.v.Sb}},Uu.Pe=function(){this.g=null,ji(this).then(function(t){this.a&&Gi(this,t)}.bind(this)).catch(function(t){this.a&&(t.severity=1,this.a.onError(t),Gi(this,0))}.bind(this))},Uu.ie=function(t,e,n){var i=n.getAttribute("schemeIdUri")||"",r=n.getAttribute("value")||"",a=Mn(n,"timescale",Fn)||1;Rn(n,"Event").forEach(function(n){var o=Mn(n,"presentationTime",Fn)||0,s=Mn(n,"duration",Fn)||0;o=o/a+t,s=o+s/a,null!=e&&(o=Math.min(o,t+e),s=Math.min(s,t+e)),n={schemeIdUri:i,value:r,startTime:o,endTime:s,id:n.getAttribute("id")||"",eventElement:n},this.a.onTimelineRegionAdded(n)}.bind(this))},Uu.ue=function(t,e,n){return t=pt(t,this.b.retryParameters),null!=e&&(t.headers.Range="bytes="+e+"-"+(null!=n?n:"")),e=this.a.networkingEngine.request(1,t),lt(this.f,e),e.promise.then(function(t){return t.data})},Uc.mpd=Ui,Oc["application/dash+xml"]=Ui,Zi.prototype.toString=function(){function t(t){return t.name+'="'+t.value+'"'}return this.value?"#"+this.name+":"+this.value:0<this.a.length?"#"+this.name+":"+this.a.map(t).join(","):"#"+this.name},Zi.prototype.getAttribute=function(t){var e=this.a.filter(function(e){return e.name==t});return e.length?e[0]:null};var jc="EXT-X-TARGETDURATION EXT-X-MEDIA-SEQUENCE EXT-X-DISCONTINUITY-SEQUENCE EXT-X-PLAYLIST-TYPE EXT-X-MAP EXT-X-I-FRAMES-ONLY EXT-X-ENDLIST".split(" "),Bc="EXTINF EXT-X-BYTERANGE EXT-X-DISCONTINUITY EXT-X-PROGRAM-DATE-TIME EXT-X-KEY EXT-X-DATERANGE".split(" ");I("shaka.net.DataUriPlugin",mr),mr.parse=function(e){var n=e.split(":");if(2>n.length||"data"!=n[0])throw new z(2,1,1004,e);if(n=n.slice(1).join(":").split(","),2>n.length)throw new z(2,1,1004,e);var i=n[0];n=t.decodeURIComponent(n.slice(1).join(",")),i=i.split(";");var r=null;if(1<i.length&&(r=i[1]),"base64"==r)e=Ht(n).buffer;else{if(r)throw new z(2,1,1005,e);e=Ut(n)}return{data:e,contentType:i[0]}},dt("data",mr),I("shaka.hls.HlsParser",vr),Uu=vr.prototype,Uu.configure=function(t){this.g=t},Uu.start=function(t,e){return this.c=e,this.m=t,Vr(this,t).then(function(e){return gr(this,e.data,t).then(function(){return Kr(this,this.i),this.o}.bind(this))}.bind(this))},Uu.stop=function(){return this.g=this.c=null,this.u={},this.I={},this.o=null,this.h.destroy()},Uu.update=function(){if(this.f!=qc.ra){var t,e=[];for(t in this.a)e.push(yr(this,this.a[t],t));return Promise.all(e)}},Uu.onExpirationUpdated=function(){};var Fc={audio:[/^vorbis$/,/^opus$/,/^flac$/,/^mp4a/,/^[ae]c-3$/],video:[/^avc/,/^hev/,/^hvc/,/^vp0?[89]/,/^av1$/],text:[/^vtt$/,/^wvtt/,/^stpp/]},Vc={audio:{mp4:"audio/mp4",m4s:"audio/mp4",m4i:"audio/mp4",m4a:"audio/mp4",ts:"video/mp2t"},video:{mp4:"video/mp4",m4s:"video/mp4",m4i:"video/mp4",m4v:"video/mp4",ts:"video/mp2t"},text:{mp4:"application/mp4",m4s:"application/mp4",m4i:"application/mp4",vtt:"text/vtt",ttml:"application/ttml+xml"}};vr.prototype.S=function(){this.c&&(this.j=null,this.update().then(function(){Kr(this,this.i)}.bind(this)).catch(function(t){this.c&&(t.severity=1,this.c.onError(t),Kr(this,0))}.bind(this)))};var Kc={"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed":function(t){var e=Br(t,"METHOD");return"SAMPLE-AES-CENC"!=e&&"SAMPLE-AES-CTR"!=e?null:(e=Br(t,"URI"),e=mr.parse(e),e=new Uint8Array(e.data),e=Dt("com.widevine.alpha",[{initDataType:"cenc",initData:e}]),(t=er(t,"KEYID"))&&(e.keyIds=[t.substr(2).toLowerCase()]),e)}},Hc="VOD",qc={ra:Hc,Zc:"EVENT",jc:"LIVE"};Uc.m3u8=vr,Oc["application/x-mpegurl"]=vr,Oc["application/vnd.apple.mpegurl"]=vr,qr.prototype.destroy=function(){var t=this.h.destroy();return this.u=this.s=this.a=this.h=null,null!=this.b&&(this.b.cancel(),this.b=null),t},qr.prototype.ab=function(){this.f=!0,this.l()},qr.prototype.l=function(){if(0!=this.a.readyState){if(this.a.seeking){if(!this.g)return}else this.g=!1;if(!this.a.paused){this.a.readyState!=this.m&&(this.c=!1,this.m=this.a.readyState);var t=this.o.smallGapLimit,e=this.a.currentTime,n=this.a.buffered;t:{if(n&&n.length&&!(1==n.length&&1e-6>n.end(0)-n.start(0))){var i=.1;/(Edge\/|Trident\/|Tizen)/.test(navigator.userAgent)&&(i=.5);for(var r=0;r<n.length;r++)if(n.start(r)>e&&(0==r||n.end(r-1)-e<=i)){i=r;break t}}i=null}if(null==i){if(n=this.a.currentTime,e=this.a.buffered,!this.a.paused&&0<this.a.playbackRate)if(this.j!=n)this.j=n,this.A=Date.now(),this.i=!1;else if(!this.i&&this.A<Date.now()-1e3)for(i=0;i<e.length;i++)if(n>=e.start(i)&&n<e.end(i)-.5){this.a.currentTime+=.1,this.j=this.a.currentTime,this.i=!0;break}}else if(0!=i||this.f){r=n.start(i);var a=this.s.presentationTimeline.ma();if(!(r>=a)){a=r-e,t=a<=t;var o=!1;.001>a||(t||this.c||(this.c=!0,e=new At("largegap",{currentTime:e,gapSize:a}),e.cancelable=!0,this.u(e),this.o.jumpLargeGaps&&!e.defaultPrevented&&(o=!0)),!t&&!o)||(0!=i&&n.end(i-1),this.a.currentTime=r)}}}}},Uu=Gr.prototype,Uu.destroy=function(){var t=this.c.destroy();return this.c=null,null!=this.b&&(this.b.cancel(),this.b=null),this.i=this.a=null,t},Uu.Va=function(){return this.f},Uu.Vd=function(){var t=this.g||0>this.f?0:this.f;this.a.playbackRate&&this.a.playbackRate!=t&&zr(this,this.a.playbackRate)},Uu.Fc=function(){.001>Math.abs(this.a.currentTime-this.h)?this.Gc():(Et(this.c,this.a,"seeking",this.Gc.bind(this)),this.a.currentTime=0==this.a.currentTime?this.h:this.a.currentTime)},Uu.Gc=function(){var t=this;Tt(this.c,this.a,"seeking",function(){return t.i()})},Uu=$r.prototype,Uu.destroy=function(){var t=Promise.all([this.a.destroy(),this.g.destroy()]);return this.g=this.a=null,null!=this.f&&(this.f.cancel(),this.f=null),this.j=this.h=this.b=this.c=null,t},Uu.Va=function(){return this.a.Va()},Uu.ab=function(){this.g.ab()},Uu.Ud=function(){if(0!=this.c.readyState&&!this.c.paused){var t=this.c.currentTime,e=this.b.presentationTimeline,n=e.Ja();e=e.ma(),3>e-n&&(n=e-3),t<n&&(t=Zr(this,t),this.c.currentTime=t)}},Uu.Xd=function(){var t=this.g;t.g=!0,t.f=!1,t.c=!1;var e=Xr(this.a);if(t=Zr(this,e),.001<Math.abs(t-e)&&(e=(new Date).getTime()/1e3,!this.i||this.i<e-1))return this.i=e,void Yr(this.a,t);this.j()},ea.prototype.destroy=function(){var t=this.j?this.j.destroy():Promise.resolve();return this.j=null,ra(this),this.A=this.h=this.l=this.s=this.g=this.u=this.a=null,this.c=[],t},ea.prototype.o=function(t){if(!this.c.some(function(e){return e.info.schemeIdUri==t.schemeIdUri&&e.info.startTime==t.startTime&&e.info.endTime==t.endTime})){var e={info:t,status:1};this.c.push(e);var n=new At("timelineregionadded",{detail:na(t)});this.h(n),this.m(!0,e)}},ea.prototype.m=function(t,e){var n=e.info.startTime>this.a.currentTime?1:e.info.endTime<this.a.currentTime?3:2,i=2==e.status,r=2==n;n!=e.status&&((!t||i||r)&&(i||this.h(new At("timelineregionenter",{detail:na(e.info)})),r||this.h(new At("timelineregionexit",{detail:na(e.info)}))),e.status=n)},ea.prototype.G=function(){this.f=null,ia(this);var t=sn(this.g,this.a.currentTime);t!=this.i&&(-1!=this.i&&this.A(),this.i=t),t=me(this.a.buffered,this.a.currentTime);var e=de(this.a.buffered),n=this.g.presentationTimeline,i=n.Ka();e=n.P()&&e>=i,n=this.u,n=!n.g||"ended"==n.g.readyState,e=e||this.a.ended||n,this.b?(n=Math.max(this.g.minBufferTime||0,this.s.rebufferingGoal),(e||t>=n)&&0!=this.b&&(this.b=!1,this.l(!1))):!e&&.5>t&&1!=this.b&&(this.b=!0,this.l(!0)),this.c.forEach(this.m.bind(this,!1))},Uu=aa.prototype,Uu.destroy=function(){for(var t in this.c)Ua(this.c[t]);return this.g=this.c=this.i=this.h=this.m=this.b=this.a=null,this.f=!0,Promise.resolve()},Uu.configure=function(t){this.g=t,this.A=new G({maxAttempts:Math.max(t.retryParameters.maxAttempts,2),baseDelay:t.retryParameters.baseDelay,backoffFactor:t.retryParameters.backoffFactor,fuzzFactor:t.retryParameters.fuzzFactor,timeout:0},!0)},Uu.init=function(){var t=Jr(this.a.Pa);return t=this.a.Ac(this.b.periods[sn(this.b,t)]),t.variant||t.text?ga(this,t).then(function(){!this.f&&this.a&&this.a.Ld&&this.a.Ld()}.bind(this)):Promise.reject(new z(2,5,5005))},Uu.Re=function(t){if(!this.f&&!t.Ca&&null!=t.ua&&!t.ya)if(t.ua=null,t.va)La(this,t,t.zb);else{try{var e=Ea(this,t);null!=e&&(Oa(this,t,e),t.Ya=!1)}catch(t){return void ja(this,t)}e=$u.values(this.c),Da(this,t),e.every(function(t){return t.endOfStream})&&this.a.J.endOfStream().then(function(){if(!this.f){var t=this.a.J.T();t<this.b.presentationTimeline.T()&&this.b.presentationTimeline.ka(t)}}.bind(this))}},Uu.he=function(t,e,n){var i=n.reader.Xb(),r=n.reader.Xb(),a=n.reader.B(),o=n.reader.B(),s=n.reader.B(),u=n.reader.B();n=n.reader.Da(n.reader.D.byteLength-n.reader.U()),t=t.startTime+e.startTime+o/a,"urn:mpeg:dash:event:2012"==i?this.a.Nd():this.a.onEvent(new At("emsg",{detail:{startTime:t,endTime:t+s/a,schemeIdUri:i,value:r,timescale:a,presentationTimeDelta:o,eventDuration:s,id:u,messageData:n}}))},I("shaka.net.HttpFetchPlugin",Fa),Fa.f=function(t,e,n,i,r){return c(function a(){var o,s,u,c,h,l;return A(a,function(a){switch(a.w){case 1:return o=Fa.c,p(a,2,3),d(a,o(t,n),5);case 5:return s=a.K,d(a,s.arrayBuffer(),6);case 6:u=a.K;case 3:g(a),clearTimeout(r),b(a,4);break;case 2:if(c=y(a),i.mc)throw new z(1,1,7001,t,e);if(i.Xc)throw new z(1,1,1003,t,e);throw new z(1,1,1002,t,c,e);case 4:return h={},l=s.headers,l.forEach(function(t,e){h[e.trim()]=t}),a.return(Ba(h,u,s.status,t,s.url,e))}})})},Fa.isSupported=function(){return!(!t.fetch||!t.AbortController)},Fa.isSupported=Fa.isSupported,Fa.c=t.fetch,Fa.a=t.AbortController,Fa.b=t.Headers,Fa.isSupported()&&(dt("http",Fa,2),dt("https",Fa,2)),I("shaka.net.HttpXHRPlugin",Va),Va.g=t.XMLHttpRequest,dt("http",Va,1),dt("https",Va,1),Ka.prototype.destroy=function(){this.h=!0;var t=this.c.catch(function(){});return this.c=Promise.resolve(),t},za.prototype.abort=function(){try{this.c.abort()}catch(t){}return this.a.catch(function(){})},za.prototype.store=function(){return this.b},za.prototype.promise=function(){return this.a},Wa.prototype.destroy=function(){return Promise.all(this.a.map(function(t){return t.abort()}))},Qa.prototype.destroy=function(){var t=$u.values(this.a).map(function(t){return t.destroy()});return this.a={},Promise.all(t)},Qa.prototype.init=function(){var t=this;$u.forEach(Gc,function(e,n){var i=n();i&&(t.a[e]=i)});var e=$u.values(this.a).map(function(t){return t.init()});return Promise.all(e)},I("shaka.offline.StorageMuxer.register",function(t,e){Gc[t]=e}),I("shaka.offline.StorageMuxer.unregister",function(t){delete Gc[t]});var Gc={};Uu=ro.prototype,Uu.destroy=function(){return this.a.destroy()},Uu.hasFixedKeySpace=function(){return!0},Uu.addSegments=function(){return ao("segment")},Uu.removeSegments=function(t,e){return oo(this,"segment",t,e)},Uu.getSegments=function(t){return so(this,"segment",t).then(function(t){return t.map(fo)})},Uu.addManifests=function(){return ao("manifest")},Uu.updateManifestExpiration=function(t,e){var n=$a(this.a,"manifest"),i=n.store(),r=new q;return i.get(t).onsuccess=function(n){(n=n.target.result)?(n.expiration=e,i.put(n),r.resolve()):r.reject(new z(2,9,9012,"Could not find values for "+t))},n.promise().then(function(){return r})},Uu.removeManifests=function(t,e){return oo(this,"manifest",t,e)},Uu.getManifests=function(t){return so(this,"manifest",t).then(function(t){return t.map(uo)})},Uu.getAllManifests=function(){var t=Ja(this.a,"manifest","readonly"),e={};return t.store().openCursor().onsuccess=function(t){(t=t.target.result)&&(e[t.key]=uo(t.value),t.continue())},t.promise().then(function(){return e})},Uu=vo.prototype,Uu.destroy=function(){return this.a.destroy()},Uu.hasFixedKeySpace=function(){return this.f},Uu.addSegments=function(t){return yo(this,this.c,t)},Uu.removeSegments=function(t,e){return go(this,this.c,t,e)},Uu.getSegments=function(t){return bo(this,this.c,t)},Uu.addManifests=function(t){return yo(this,this.b,t)},Uu.updateManifestExpiration=function(t,e){var n=$a(this.a,this.b),i=n.store();return i.get(t).onsuccess=function(n){(n=n.target.result)&&(n.expiration=e,i.put(n,t))},n.promise()},Uu.removeManifests=function(t,e){return go(this,this.b,t,e)},Uu.getManifests=function(t){return bo(this,this.b,t)},Uu.getAllManifests=function(){var t=Ja(this.a,this.b,"readonly"),e={};return t.store().openCursor().onsuccess=function(t){(t=t.target.result)&&(e[t.key]=t.value,t.continue())},t.promise().then(function(){return e})},wo.prototype.init=function(){var e=this,n=new q,i=t.indexedDB.open("shaka_offline_db",3);return i.onsuccess=function(t){t=t.target.result,e.f=t;var i=t.objectStoreNames;i=i.contains("manifest")&&i.contains("segment")?new ro(t):null,e.a=i,i=t.objectStoreNames,i=i.contains("manifest-v2")&&i.contains("segment-v2")?new vo(t,"segment-v2","manifest-v2",!0):null,e.b=i,i=t.objectStoreNames,t=i.contains("manifest-v3")&&i.contains("segment-v3")?new vo(t,"segment-v3","manifest-v3",!1):null,e.c=t,n.resolve()},i.onupgradeneeded=function(t){t=t.target.result;var e={autoIncrement:!0};t.createObjectStore("manifest-v3",e),t.createObjectStore("segment-v3",e)},i.onerror=function(t){n.reject(new z(2,9,9001,i.error)),t.preventDefault()},n},wo.prototype.destroy=function(){var t=this;return c(function e(){return A(e,function(e){switch(e.w){case 1:if(!t.a){e.V(2);break}return d(e,t.a.destroy(),2);case 2:if(!t.b){e.V(4);break}return d(e,t.b.destroy(),4);case 4:if(!t.c){e.V(6);break}return d(e,t.c.destroy(),6);case 6:t.f&&t.f.close(),e.w=0}})})},wo.prototype.getCells=function(){var t={};return this.a&&(t.v1=this.a),this.b&&(t.v2=this.b),this.c&&(t.v3=this.c),t},wo.prototype.erase=function(){var t=this;return c(function e(){return A(e,function(e){switch(e.w){case 1:if(!t.a){e.V(2);break}return d(e,t.a.destroy(),2);case 2:if(!t.b){e.V(4);break}return d(e,t.b.destroy(),4);case 4:if(!t.c){e.V(6);break}return d(e,t.c.destroy(),6);case 6:return t.f&&t.f.close(),d(e,To(),8);case 8:return t.f=null,t.a=null,t.b=null,t.c=null,d(e,t.init(),0)}})})},Gc.idb=function(){return t.indexedDB?new wo:null},Eo.prototype.fa=function(){return this.g},Eo.prototype.N=function(){return this.f},Eo.prototype.key=function(){return this.c},Eo.prototype.toString=function(){return this.b},Uu=No.prototype,Uu.configure=function(){},Uu.start=function(t){var e=So(t);if(this.a=e,null==e||"manifest"!=e.a)return Promise.reject(new z(2,1,9004,e));var n=new Qa;return ct([n],function(){return c(function t(){var i,r,a,o;return A(t,function(t){switch(t.w){case 1:return d(t,n.init(),2);case 2:return d(t,eo(n,e.fa(),e.N()),3);case 3:return i=t.K,d(t,i.getManifests([e.key()]),4);case 4:return r=t.K,a=r[0],o=new ko(e.fa(),e.N()),t.return(Ao(o,a))}})})})},Uu.stop=function(){return Promise.resolve()},Uu.update=function(){},Uu.onExpirationUpdated=function(t,e){var n=this.a,i=new Qa;return ct([i],function(){return c(function r(){var a,o,s,u,c;return A(r,function(r){switch(r.w){case 1:return d(r,i.init(),2);case 2:return d(r,eo(i,n.fa(),n.N()),3);case 3:return a=r.K,d(r,a.getManifests([n.key()]),4);case 4:if(o=r.K,s=o[0],u=0<=s.sessionIds.indexOf(t),c=void 0==s.expiration||s.expiration>e,u&&c)return d(r,a.updateManifestExpiration(n.key(),e),0);r.V(0)}})})}).catch(function(){})},Oc["application/x-offline-manifest"]=No,I("shaka.offline.OfflineScheme",Do),Do.a=function(t){return t={uri:t,data:new ArrayBuffer(0),headers:{"content-type":"application/x-offline-manifest"}},Q(t)},Do.b=function(t,e){var n=new Qa;return Z(ct([n],function(){return c(function t(){var i,r,a;return A(t,function(t){switch(t.w){case 1:return d(t,n.init(),2);case 2:return d(t,eo(n,e.fa(),e.N()),3);case 3:return i=t.K,d(t,i.getSegments([e.key()]),4);case 4:return r=t.K,a=r[0],t.return({uri:e,data:a.data,headers:{}})}})})}))},dt("offline",Do),I("shaka.text.SimpleTextDisplayer",Co),Co.prototype.remove=function(t,e){return!!this.a&&(Lo(this.a,function(n){return!(n.startTime>=e||n.endTime<=t)}),!0)},Co.prototype.remove=Co.prototype.remove,Co.prototype.append=function(t){for(var e=Mo,n=[],i=0;i<t.length;i++){var r=e(t[i]);r&&n.push(r)}n.slice().sort(function(t,e){return t.startTime!=e.startTime?t.startTime-e.startTime:t.endTime!=e.endTime?t.endTime-e.startTime:n.indexOf(e)-n.indexOf(t)}).forEach(function(t){this.a.addCue(t)}.bind(this))},Co.prototype.append=Co.prototype.append,Co.prototype.destroy=function(){return this.a&&Lo(this.a,function(){return!0}),this.a=null,Promise.resolve()},Co.prototype.destroy=Co.prototype.destroy,Co.prototype.isTextVisible=function(){return"showing"==this.a.mode},Co.prototype.isTextVisible=Co.prototype.isTextVisible,Co.prototype.setTextVisibility=function(t){this.a.mode=t?"showing":"hidden"},Co.prototype.setTextVisibility=Co.prototype.setTextVisibility,x(Oo,gn),I("shaka.Player",Oo),Oo.prototype.destroy=function(){var t=this;return c(function e(){var n;return A(e,function(e){switch(e.w){case 1:return d(e,t.detach(),2);case 2:return t.wa=!0,n=Promise.all([t.o?t.o.destroy():null,t.s?t.s.destroy():null]),t.pb=!1,t.o=null,t.h=null,t.Ab=null,t.s=null,t.c=null,d(e,n,0)}})})},Oo.prototype.destroy=Oo.prototype.destroy,Oo.version="v2.4.5";var Xc={};Oo.registerSupportPlugin=function(t,e){Xc[t]=e},Oo.isBrowserSupported=function(){return!!(t.Promise&&t.Uint8Array&&Array.prototype.forEach&&t.MediaSource&&MediaSource.isTypeSupported&&t.MediaKeys&&t.navigator&&t.navigator.requestMediaKeySystemAccess&&t.MediaKeySystemAccess&&t.MediaKeySystemAccess.prototype.getConfiguration)},Oo.probeSupport=function(){return he().then(function(t){t={manifest:Mi(),media:_e(),drm:t};for(var e in Xc)t[e]=Xc[e]();return t})},Oo.prototype.rb=function(t,e){var n=this;return c(function i(){return A(i,function(i){switch(i.w){case 1:if(void 0===e&&(e=!0),!n.f){i.V(2);break}return d(i,n.detach(),2);case 2:if(n.f=t,Tt(n.o,n.f,"error",n.be.bind(n)),e)return n.j=new Ae(n.f),d(i,n.j.j,0);i.V(0)}})})},Oo.prototype.attach=Oo.prototype.rb,Oo.prototype.detach=function(){var t=this;return c(function e(){return A(e,function(e){switch(e.w){case 1:return t.f?d(e,t.hb(!1),2):e.return();case 2:t.o.pa(t.f,"error"),t.f=null,e.w=0}})})},Oo.prototype.detach=Oo.prototype.detach,Oo.prototype.load=function(t,e,n){var i=this;return c(function r(){var a,o,s,u,c,h,l,f,m,g,b;return A(r,function(r){switch(r.w){case 1:if(!i.f)throw new z(2,7,7002);return o=new q,s=function(){return a=new z(2,7,7e3),o},i.dispatchEvent(new At("loading")),u=Date.now(),p(r,2),c=i.hb(),i.Ha=s,d(r,c,4);case 4:if(i.l=$o(),Tt(i.o,i.f,"playing",i.ib.bind(i)),Tt(i.o,i.f,"pause",i.ib.bind(i)),Tt(i.o,i.f,"ended",i.ib.bind(i)),h=i.c.abrFactory,i.h&&i.Ab==h||(i.Ab=h,i.h=new h,i.h.configure(i.c.abr)),i.u=new i.c.textDisplayFactory,i.u.setTextVisibility(i.pb),a)throw a;return l=i,d(r,jo(i,t,n),5);case 5:if(l.b=r.K,i.Cb=t,a)throw a;return Bo(i),i.i=new zt({$a:i.s,onError:i.Ta.bind(i),Ub:i.Md.bind(i),onExpirationUpdated:i.Jd.bind(i),onEvent:i.gb.bind(i)}),i.i.configure(i.c.drm),d(r,i.i.init(i.b,!1),6);case 6:if(a)throw a;return i.ec(i.b.periods),i.kb=Date.now()/1e3,i.L=i.c.preferredAudioLanguage,i.ga=i.c.preferredTextLanguage,i.Y=i.c.preferredAudioChannelCount,Fo(i),d(r,i.i.rb(i.f),7);case 7:if(a)throw a;return i.h.init(i.Ke.bind(i)),i.j||(i.j=new Ae(i.f)),i.j.o=i.u,i.g=new $r(i.f,i.b,i.c.streaming,void 0==e?null:e,i.Ie.bind(i),i.gb.bind(i)),i.A=new ea(i.f,i.j,i.b,i.c.streaming,i.Uc.bind(i),i.gb.bind(i),i.He.bind(i)),i.a=new aa(i.b,{Pa:i.g,J:i.j,$a:i.s,Ac:i.Hd.bind(i),zc:i.fd.bind(i),onError:i.Ta.bind(i),onEvent:i.gb.bind(i),Nd:i.Od.bind(i),ab:i.Yd.bind(i),filterNewPeriod:i.tb.bind(i),filterAllPeriods:i.ec.bind(i)}),i.a.configure(i.c.streaming),Vo(i),i.dispatchEvent(new At("streaming")),d(r,i.a.init(),8);case 8:if(a)throw a;if(i.c.streaming.startAtSegmentBoundary&&(f=Zo(i,Jr(i.g)),Yr(i.g.a,f)),i.b.periods.forEach(i.tb.bind(i)),is(i),ns(i),m=oa(i.a),g=Qe(m.variants,i.L,i.Ga,i.Y),i.h.setVariants(g),m.variants.some(function(t){return t.primary}),i.nb.forEach(i.A.o.bind(i.A)),i.nb=[],Et(i.o,i.f,"loadeddata",function(){this.l.loadLatency=(Date.now()-u)/1e3}.bind(i)),a)throw a;i.Ha=null,v(r);break;case 2:return b=y(r),o.resolve(),i.Ha==s&&(i.Ha=null,i.dispatchEvent(new At("unloading"))),a?r.return(Promise.reject(a)):r.return(Promise.reject(b))}})})},Oo.prototype.load=Oo.prototype.load,Oo.prototype.configure=function(t,e){if(2==arguments.length&&"string"==typeof t){for(var n=t,i={},r=i,a=0,o=0;!(0>(a=n.indexOf(".",a)));)0!=a&&"\\"==n[a-1]||(o=n.substring(o,a).replace(/\\\./g,"."),r[o]={},r=r[o],o=a+1),a+=1;r[n.substring(o).replace(/\\\./g,".")]=e,t=i}return n=st(this.c,t,Wo(this),zo(),""),Ko(this),n},Oo.prototype.configure=Oo.prototype.configure,Oo.prototype.getConfiguration=function(){var t=Wo(this);return st(t,this.c,Wo(this),zo(),""),t},Oo.prototype.getConfiguration=Oo.prototype.getConfiguration,Oo.prototype.ve=function(){this.c=Wo(this),Ko(this)},Oo.prototype.resetConfiguration=Oo.prototype.ve,Oo.prototype.sd=function(){return this.f},Oo.prototype.getMediaElement=Oo.prototype.sd,Oo.prototype.uc=function(){return this.s},Oo.prototype.getNetworkingEngine=Oo.prototype.uc,Oo.prototype.Ib=function(){return this.Cb},Oo.prototype.getManifestUri=Oo.prototype.Ib,Oo.prototype.P=function(){return!!this.b&&this.b.presentationTimeline.P()},Oo.prototype.isLive=Oo.prototype.P,Oo.prototype.Aa=function(){return!!this.b&&this.b.presentationTimeline.Aa()},Oo.prototype.isInProgress=Oo.prototype.Aa,Oo.prototype.Dd=function(){if(!this.b||!this.b.periods.length)return!1;var t=this.b.periods[0].variants;return!!t.length&&!t[0].video},Oo.prototype.isAudioOnly=Oo.prototype.Dd,Oo.prototype.xe=function(){var t=0,e=0;return this.b&&(e=this.b.presentationTimeline,t=e.Ja(),e=e.ma()),{start:t,end:e}},Oo.prototype.seekRange=Oo.prototype.xe,Oo.prototype.keySystem=function(){return this.i?this.i.keySystem():""},Oo.prototype.keySystem=Oo.prototype.keySystem,Oo.prototype.drmInfo=function(){return this.i?this.i.b:null},Oo.prototype.drmInfo=Oo.prototype.drmInfo,Oo.prototype.vb=function(){return this.i?this.i.vb():1/0},Oo.prototype.getExpiration=Oo.prototype.vb,Oo.prototype.xc=function(){return this.ob},Oo.prototype.isBuffering=Oo.prototype.xc,Oo.prototype.hb=function(t){var e=this;return c(function n(){return A(n,function(n){switch(n.w){case 1:return e.wa?n.return():(void 0===t&&(t=!0),e.dispatchEvent(new At("unloading")),d(n,Uo(e),2));case 2:return e.qb||(e.qb=Yo(e).then(function(){e.Uc(!1),e.qb=null})),d(n,e.qb,3);case 3:if(t)return e.j=new Ae(e.f),d(n,e.j.j,0);n.V(0)}})})},Oo.prototype.unload=Oo.prototype.hb,Oo.prototype.Va=function(){return this.g?this.g.Va():0},Oo.prototype.getPlaybackRate=Oo.prototype.Va,Oo.prototype.Te=function(t){this.g&&zr(this.g.a,t),this.a&&da(this.a,1!=t)},Oo.prototype.trickPlay=Oo.prototype.Te,Oo.prototype.gd=function(){this.g&&zr(this.g.a,1),this.a&&da(this.a,!1)},Oo.prototype.cancelTrickPlay=Oo.prototype.gd,Oo.prototype.Ad=function(){if(!this.b||!this.g)return[];var t=sn(this.b,Jr(this.g)),e=this.I[t]||{};return Ye(this.b.periods[t],e.audio,e.video)},Oo.prototype.getVariantTracks=Oo.prototype.Ad,Oo.prototype.zd=function(){if(!this.b||!this.g)return[];var t=sn(this.b,Jr(this.g)),e=this.I[t]||{};if(!e.text){var n=en(this.b.periods[t].textStreams,this.ga,this.Ua);n.length&&(e.text=n[0].id)}return ze(this.b.periods[t],e.text).filter(function(t){return 0>this.lb.indexOf(t.id)}.bind(this))},Oo.prototype.getTextTracks=Oo.prototype.zd,Oo.prototype.Be=function(t){if(this.a){var e=oa(this.a);t:{for(var n=0;n<e.textStreams.length;n++)if(e.textStreams[n].id==t.id){t=e.textStreams[n];break t}t=null}t&&(this.j.l=!1,Go(this,t,!1),e=t,this.xa?this.G=e:ma(this.a,e,!0),this.ga=t.language)}},Oo.prototype.selectTextTrack=Oo.prototype.Be,Oo.prototype.ze=function(){this.j.l=!0,fa(this.a)},Oo.prototype.selectEmbeddedTextTrack=Oo.prototype.ze,Oo.prototype.Ye=function(){return!!this.j&&this.j.l},Oo.prototype.usingEmbeddedTextTrack=Oo.prototype.Ye,Oo.prototype.Ce=function(t,e){if(this.a){this.c.abr.enabled&&C("Changing tracks while abr manager is enabled will likely result in the selected track being overriden. Consider disabling abr before calling selectVariantTrack().");var n=oa(this.a),i=We(n,t);i&&$e(i)&&(qo(this,i,!1),Jo(this,i,e),this.L=i.language,i.audio&&i.audio.channelsCount&&(this.Y=i.audio.channelsCount),n=Qe(n.variants,this.L,this.Ga,this.Y),this.h.setVariants(n))}},Oo.prototype.selectVariantTrack=Oo.prototype.Ce,Oo.prototype.od=function(){if(!this.a)return[];var t=oa(this.a);return t=Je(t.variants).map(function(t){return t.audio}).filter(Rt),Ho(t)},Oo.prototype.getAudioLanguagesAndRoles=Oo.prototype.od,Oo.prototype.yd=function(){return this.a?Ho(oa(this.a).textStreams):[]},Oo.prototype.getTextLanguagesAndRoles=Oo.prototype.yd,Oo.prototype.nd=function(){return this.a?Je(oa(this.a).variants).map(function(t){return t.language}).filter(Rt):[]},Oo.prototype.getAudioLanguages=Oo.prototype.nd,Oo.prototype.xd=function(){return this.a?oa(this.a).textStreams.map(function(t){return t.language}).filter(Rt):[]},Oo.prototype.getTextLanguages=Oo.prototype.xd,Oo.prototype.ye=function(t,e){if(this.a){var n=oa(this.a);this.L=t,this.Ga=e||"",es(this,n)}},Oo.prototype.selectAudioLanguage=Oo.prototype.ye,Oo.prototype.Ae=function(t,e){if(this.a){var n=oa(this.a);this.ga=t,this.Ua=e||"",es(this,n)}},Oo.prototype.selectTextLanguage=Oo.prototype.Ae,Oo.prototype.Mb=function(){return this.u?this.u.isTextVisible():this.pb},Oo.prototype.isTextTrackVisible=Oo.prototype.Mb,Oo.prototype.Fe=function(t){this.u&&this.u.setTextVisibility(t),this.pb=t,rs(this),!this.c.streaming.alwaysStreamText&&this.a&&(t?(t=oa(this.a),(t=en(t.textStreams,this.ga,this.Ua)[0])&&la(this.a,t)):fa(this.a))},Oo.prototype.setTextTrackVisibility=Oo.prototype.Fe,Oo.prototype.ud=function(){return this.b?new Date(1e3*this.b.presentationTimeline.f+1e3*this.f.currentTime):null},Oo.prototype.getPlayheadTimeAsDate=Oo.prototype.ud,Oo.prototype.wd=function(){return this.b?new Date(1e3*this.b.presentationTimeline.f):null},Oo.prototype.getPresentationStartTimeAsDate=Oo.prototype.wd,Oo.prototype.Gb=function(){return this.j?this.j.Gb():{total:[],audio:[],video:[],text:[]}},Oo.prototype.getBufferedInfo=Oo.prototype.Gb,Oo.prototype.getStats=function(){Qo(this),this.ib();var t=null,e=null,n=this.f;if(n=n&&n.getVideoPlaybackQuality?n.getVideoPlaybackQuality():{},this.g&&this.b){var i=sn(this.b,Jr(this.g)),r=this.b.periods[i];(i=this.I[i])&&(e=on(i.audio,i.video,r.variants),t=e.video||{})}return t||(t={}),e||(e={}),{width:t.width||0,height:t.height||0,streamBandwidth:e.bandwidth||0,decodedFrames:Number(n.totalVideoFrames),droppedFrames:Number(n.droppedVideoFrames),estimatedBandwidth:this.h?this.h.getBandwidthEstimate():NaN,loadLatency:this.l.loadLatency,playTime:this.l.playTime,bufferingTime:this.l.bufferingTime,switchHistory:ut(this.l.switchHistory),stateHistory:ut(this.l.stateHistory)}},Oo.prototype.getStats=Oo.prototype.getStats,Oo.prototype.addTextTrack=function(t,e,n,i,r,a){if(!this.a)return Promise.reject();var o=oa(this.a),s=this.b.periods.indexOf(o)+1,u=(s>=this.b.periods.length?this.b.presentationTimeline.T():this.b.periods[s].startTime)-o.startTime;if(1/0==u)return Promise.reject(new z(1,4,4033));var c={id:this.bd++,createSegmentIndex:Promise.resolve.bind(Promise),findSegmentPosition:function(){return 1},getSegmentReference:function(e){return 1!=e?null:new ti(1,0,u,function(){return[t]},0,null)},initSegmentReference:null,presentationTimeOffset:0,mimeType:i,codecs:r||"",kind:n,encrypted:!1,keyId:null,language:e,label:a||null,type:"text",primary:!1,trickModeVideo:null,containsEmsgBoxes:!1,roles:[],channelsCount:null};return this.lb.push(c.id),o.textStreams.push(c),la(this.a,c).then(function(){if(!this.wa){var t=this.b.periods.indexOf(o),i=ha(this.a,"text");return i&&(this.I[t].text=i.id),this.lb.splice(this.lb.indexOf(c.id),1),es(this,o),is(this),{id:c.id,active:!1,type:"text",bandwidth:0,language:e,label:a||null,kind:n,width:null,height:null}}}.bind(this))},Oo.prototype.addTextTrack=Oo.prototype.addTextTrack,Oo.prototype.cc=function(t,e){this.mb.width=t,this.mb.height=e},Oo.prototype.setMaxHardwareResolution=Oo.prototype.cc,Oo.prototype.ac=function(){if(this.a){var t=this.a;if(t.f)t=!1;else if(t.l)t=!1;else{for(var e in t.c){var n=t.c[e];n.Ya&&(n.Ya=!1,Oa(t,n,.1))}t=!0}}else t=!1;return t},Oo.prototype.retryStreaming=Oo.prototype.ac,Oo.prototype.rd=function(){return this.b},Oo.prototype.getManifest=Oo.prototype.rd,Uu=Oo.prototype,Uu.kd=function(t){var e=[1001,1002,1003];this.P()&&0<=e.indexOf(t.code)&&(t.severity=1,this.ac())},Uu.ec=function(t){t.forEach(Ke.bind(null,this.i,this.a?ua(this.a):null,this.a?ca(this.a):null));var e=ot(t,function(t){return t.variants.some($e)});if(0==e)throw new z(2,4,4032);if(e<t.length)throw new z(2,4,4011);t.forEach(function(t){if(Ve(t,this.c.restrictions,this.mb)&&this.a&&oa(this.a)==t&&is(this),!t.variants.some($e))throw new z(2,4,4012)}.bind(this))},Uu.tb=function(t){Ke(this.i,this.a?ua(this.a):null,this.a?ca(this.a):null,t);var e=t.variants,n=e.some($e);if(Ve(t,this.c.restrictions,this.mb)&&this.a&&oa(this.a)==t&&is(this),t=e.some($e),!n)throw new z(2,4,4011);if(!t)throw new z(2,4,4012);if(n=this.i?this.i.b:null)for(e=o(e),t=e.next();!t.done;t=e.next()){t=o(t.value.drmInfos);for(var i=t.next();!i.done;i=t.next())if(i=i.value,i.keySystem==n.keySystem){i=o(i.initData||[]);for(var r=i.next();!r.done;r=i.next())r=r.value,Jt(this.i,r.initDataType,r.initData)}}},Uu.Je=function(t,e){this.h&&this.h.segmentDownloaded(t,e)},Uu.Uc=function(t){if(Qo(this),this.ob=t,this.ib(),this.g){var e=this.g.a;t!=e.g&&(e.g=t,zr(e,e.f))}this.dispatchEvent(new At("buffering",{buffering:t}))},Uu.He=function(){is(this)},Uu.ib=function(){if(!this.wa){var t=this.ob?"buffering":this.f.ended?"ended":this.f.paused?"paused":"playing",e=Date.now()/1e3;if(this.l.stateHistory.length){var n=this.l.stateHistory[this.l.stateHistory.length-1];if(n.duration=e-n.timestamp,t==n.state)return}this.l.stateHistory.push({timestamp:e,state:t,duration:0})}},Uu.Ie=function(){if(this.A){var t=this.A;t.c.forEach(t.m.bind(t,!0))}this.a&&va(this.a)},Uu.Hd=function(t){this.xa=!0,this.h.disable();var e={audio:!1,text:!1},n=Qe(t.variants,this.L,this.Ga,this.Y,e),i=en(t.textStreams,this.ga,this.Ua,e);if(n=ts(this,n),i=i[0]||null,this.S){t:{for(var r=this.b,a=0;a<r.periods.length;++a)for(var o=r.periods[a],s=0;s<o.variants.length;++s)if(o.variants[s]==this.S){r=a;break t}r=-1}this.b.periods[r]==t&&(n=this.S),this.S=null}return this.G&&(this.b.periods[un(this.b,this.G)]==t&&(i=this.G),this.G=null),n&&qo(this,n,!0),i&&(Go(this,i,!0),!sa(this.a)&&n&&n.audio&&e.text&&i.language!=n.audio.language&&(this.u.setTextVisibility(!0),rs(this))),this.c.streaming.alwaysStreamText||this.Mb()?{variant:n,text:i}:{variant:n,text:null}},Uu.fd=function(){this.xa=!1,this.c.abr.enabled&&this.h.enable(),this.S&&(pa(this.a,this.S,this.kc),this.S=null),this.G&&(ma(this.a,this.G,!0),this.G=null)},Uu.Od=function(){this.m&&this.m.update&&this.m.update()},Uu.Yd=function(){this.g&&this.g.ab()},Uu.Ke=function(t,e){qo(this,t,!0),this.a&&(pa(this.a,t,e||!1),ns(this))},Uu.Ta=function(t){if(!this.wa){var e=new At("error",{detail:t});this.dispatchEvent(e),e.defaultPrevented&&(t.handled=!0)}},Uu.ae=function(t){this.A?this.A.o(t):this.nb.push(t)},Uu.gb=function(t){this.dispatchEvent(t)},Uu.be=function(){if(this.f.error){var t=this.f.error.code;if(1!=t){var e=this.f.error.msExtendedCode;e&&(0>e&&(e+=Math.pow(2,32)),e=e.toString(16)),this.Ta(new z(2,3,3016,t,e,this.f.error.message))}}},Uu.Md=function(t){var e=["output-restricted","internal-error"],n=oa(this.a),i=!1,r=Object.keys(t),a=1==r.length&&"00"==r[0];r.length&&n.variants.forEach(function(n){var r=[];n.audio&&r.push(n.audio),n.video&&r.push(n.video),r.forEach(function(r){var o=n.allowedByKeySystem;r.keyId&&(r=t[a?"00":r.keyId],n.allowedByKeySystem=!!r&&0>e.indexOf(r)),o!=n.allowedByKeySystem&&(i=!0)})}),(r=an(ua(this.a),ca(this.a),n.variants))&&!r.allowedByKeySystem&&es(this,n),i&&(is(this),n=Qe(n.variants,this.L,this.Ga,this.Y),this.h.setVariants(n))},Uu.Jd=function(t,e){this.m&&this.m.onExpirationUpdated&&this.m.onExpirationUpdated(t,e),this.dispatchEvent(new At("expirationupdated"))},I("shaka.offline.Storage",hs),hs.support=ls,hs.prototype.destroy=function(){return this.a=this.b=null,Promise.resolve()},hs.prototype.destroy=hs.prototype.destroy,hs.prototype.configure=function(t){st(this.b,t,ys(this),{},"")},hs.prototype.configure=hs.prototype.configure,hs.prototype.store=function(t,e,n){var i=this;return c(function r(){var a,o,s,u,h,l;return A(r,function(r){switch(r.w){case 1:return _s(),i.g?r.return(Promise.reject(new z(2,9,9006))):(i.g=!0,a=e||{},o=null,s=function(t){o=o||t},d(r,ms(i,t,s,n),2));case 2:if(u=r.K,!(h=!u.manifest.presentationTimeline.P()&&!u.manifest.presentationTimeline.Aa()))throw new z(2,9,9005,t);if(As(i),o)throw o;return l=new Qa,r.return(ct([l,u.Eb],function(){return c(function e(){var n,r,s,c,h,f,v;return A(e,function(e){switch(e.w){case 1:return m(e),d(e,l.init(),4);case 4:return As(i),gs(i,u.Eb,u.manifest.periods),d(e,Za(l),5);case 5:return n=e.K,As(i),p(e,6),d(e,fs(i,n.N,u.Eb,u.manifest,t,a||{}),8);case 8:return r=e.K,As(i),d(e,n.N.addManifests([r]),9);case 9:return s=e.K,As(i),c=new Eo("manifest",n.path.fa,n.path.N,s[0]),e.return(os(c,r));case 6:return h=y(e),f=i.f,v=function(){},d(e,n.N.removeSegments(f,v),10);case 10:throw o||h;case 2:g(e),i.g=!1,i.c=null,i.f=[],b(e,0)}})})}))}})})},hs.prototype.store=hs.prototype.store,hs.prototype.remove=function(t){var e=this;_s();var n=So(t);if(null==n||"manifest"!=n.a)return Promise.reject(new z(2,9,9004,t));var i=new Qa;return ct([i],function(){return c(function t(){var r,a,o;return A(t,function(t){switch(t.w){case 1:return d(t,i.init(),2);case 2:return d(t,eo(i,n.fa(),n.N()),3);case 3:return r=t.K,d(t,r.getManifests([n.key()]),4);case 4:return a=t.K,o=a[0],d(t,Promise.all([ds(e,n,o),ps(e,r,n,o)]),0)}})})})},hs.prototype.remove=hs.prototype.remove,hs.prototype.list=function(){function t(t,n){return c(function i(){var r;return A(i,function(i){switch(i.w){case 1:return d(i,n.getAllManifests(),2);case 2:r=i.K,$u.forEach(r,function(n,i){var r=os(new Eo("manifest",t.fa,t.N,n),i);e.push(r)}),i.w=0}})})}_s();var e=[],n=new Qa;return ct([n],function(){return c(function e(){var i;return A(e,function(e){switch(e.w){case 1:return d(e,n.init(),2);case 2:return i=Promise.resolve(),to(n,function(e,n){i=i.then(function(){return t(e,n)})}),d(e,i,0)}})})}).then(function(){return e})},hs.prototype.list=hs.prototype.list,hs.deleteAll=function(){return c(function t(){var e;return A(t,function(t){switch(t.w){case 1:return e=new Qa,m(t),d(t,no(e),2);case 2:return g(t),d(t,e.destroy(),5);case 5:b(t,0)}})})},Xc.offline=ls,I("shaka.polyfill.installAll",function(){for(var t=0;t<Yc.length;++t)Yc[t].dd()});var Yc=[];I("shaka.polyfill.register",Ns),Ns(function(){if(t.Document){var e=Element.prototype;e.requestFullscreen=e.requestFullscreen||e.mozRequestFullScreen||e.msRequestFullscreen||e.webkitRequestFullscreen,e=Document.prototype,e.exitFullscreen=e.exitFullscreen||e.mozCancelFullScreen||e.msExitFullscreen||e.webkitExitFullscreen,"fullscreenElement"in document||(Object.defineProperty(document,"fullscreenElement",{get:function(){return document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement}}),Object.defineProperty(document,"fullscreenEnabled",{get:function(){return document.mozFullScreenEnabled||document.msFullscreenEnabled||document.webkitFullscreenEnabled}})),document.addEventListener("webkitfullscreenchange",Ds),document.addEventListener("webkitfullscreenerror",Ds),document.addEventListener("mozfullscreenchange",Ds),document.addEventListener("mozfullscreenerror",Ds),document.addEventListener("MSFullscreenChange",Ds),document.addEventListener("MSFullscreenError",Ds)}}),Ns(function(){var e=navigator.userAgent;e&&0<=e.indexOf("CrKey")&&delete t.indexedDB});var zc;Ns(function(){0>navigator.userAgent.indexOf("Trident/")||HTMLInputElement.prototype.addEventListener==Cs||(zc=HTMLInputElement.prototype.addEventListener,HTMLInputElement.prototype.addEventListener=Cs)}),Ns(function(){}),Ns(function(){if(t.MediaSource)if(t.cast&&cast.__platform__&&cast.__platform__.canDisplayType)Fs();else if(navigator.vendor&&0<=navigator.vendor.indexOf("Apple")){var e=navigator.appVersion;Bs(),0<=e.indexOf("Version/8")?t.MediaSource=null:0<=e.indexOf("Version/9")?Ms():0<=e.indexOf("Version/10")?(Ms(),Os()):0<=e.indexOf("Version/11")&&(Ms(),Ls())}}),Vs.prototype.c=function(t){if(!(1<t.version)){var e=Gt(t.reader.Da(16)),n=[];if(0<t.version)for(var i=t.reader.B(),r=0;r<i;++r){var a=Gt(t.reader.Da(16));n.push(a)}i=t.reader.B(),t.reader.F(i),this.b.push.apply(this.b,n),this.f.push(e),this.a.push({start:t.start,end:t.start+t.size-1})}},Hs.prototype.createMediaKeys=function(){var t=new Gs(this.keySystem);return Promise.resolve(t)},Hs.prototype.getConfiguration=function(){return this.a},Gs.prototype.createSession=function(t){var e=t||"temporary";if("temporary"!=e)throw new TypeError("Session type "+t+" is unsupported on this platform.");return new Ys(this.a,e)},Gs.prototype.setServerCertificate=function(){return Promise.resolve(!1)},x(Ys,gn),Uu=Ys.prototype,Uu.generateRequest=function(t,e){this.a=new q;try{this.c=this.g.createSession("video/mp4",new Uint8Array(e),null),Tt(this.f,this.c,"mskeymessage",this.Sd.bind(this)),Tt(this.f,this.c,"mskeyadded",this.Qd.bind(this)),Tt(this.f,this.c,"mskeyerror",this.Rd.bind(this)),$s(this,"status-pending")}catch(t){this.a.reject(t)}return this.a},Uu.load=function(){return Promise.reject(Error("MediaKeySession.load not yet supported"))},Uu.update=function(t){this.b=new q;try{this.c.update(new Uint8Array(t))}catch(t){this.b.reject(t)}return this.b},Uu.close=function(){try{this.c.close(),this.closed.resolve(),St(this.f)}catch(t){this.closed.reject(t)}return this.closed},Uu.remove=function(){return Promise.reject(Error("MediaKeySession.remove is only applicable for persistent licenses, which are not supported on this platform"))},Uu.Sd=function(t){this.a&&(this.a.resolve(),this.a=null),this.dispatchEvent(new At("message",{messageType:void 0==this.keyStatuses.a?"licenserequest":"licenserenewal",message:t.message.buffer}))},Uu.Qd=function(){this.a?($s(this,"usable"),this.a.resolve(),this.a=null):this.b&&($s(this,"usable"),this.b.resolve(),this.b=null)},Uu.Rd=function(){var t=Error("EME PatchedMediaKeysMs key error");if(t.errorCode=this.c.error,null!=this.a)this.a.reject(t),this.a=null;else if(null!=this.b)this.b.reject(t),this.b=null;else switch(this.c.error.code){case MSMediaKeyError.MS_MEDIA_KEYERR_OUTPUT:case MSMediaKeyError.MS_MEDIA_KEYERR_HARDWARECHANGE:$s(this,"output-not-allowed");break;default:$s(this,"internal-error")}};var Wc;Uu=Js.prototype,Uu.forEach=function(t){this.a&&t(this.a,Wc)},Uu.get=function(t){if(this.has(t))return this.a},Uu.has=function(t){var e=Wc;return!(!this.a||!Xt(new Uint8Array(t),new Uint8Array(e)))},Uu.entries=function(){},Uu.keys=function(){},Uu.values=function(){},Ns(function(){!t.HTMLVideoElement||!t.MSMediaKeys||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration||(Wc=new Uint8Array([0]).buffer,delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=qs,t.MediaKeys=Gs,t.MediaKeySystemAccess=Hs,navigator.requestMediaKeySystemAccess=Ks)}),tu.prototype.createSession=function(){},tu.prototype.setServerCertificate=function(){},eu.prototype.getConfiguration=function(){},eu.prototype.createMediaKeys=function(){},Ns(function(){!t.HTMLVideoElement||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration||(navigator.requestMediaKeySystemAccess=Qs,delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=Zs,t.MediaKeys=tu,t.MediaKeySystemAccess=eu)},-10);var $c="";au.prototype.createMediaKeys=function(){var t=new ou(this.a);return Promise.resolve(t)},au.prototype.getConfiguration=function(){return this.b},Uu=ou.prototype,Uu.createSession=function(t){var e=t||"temporary";if("temporary"!=e&&"persistent-license"!=e)throw new TypeError("Session type "+t+" is unsupported on this platform.");return t=this.b||document.createElement("video"),t.src||(t.src="about:blank"),e=new cu(t,this.g,e),this.c.push(e),e},Uu.setServerCertificate=function(){return Promise.resolve(!1)},Uu.fe=function(t){var e=document.createEvent("CustomEvent");e.initCustomEvent("encrypted",!1,!1,null),e.initDataType="webm",e.initData=t.initData,this.b.dispatchEvent(e)},Uu.ee=function(t){var e=uu(this,t.sessionId);e&&(t=new At("message",{messageType:void 0==e.keyStatuses.a?"licenserequest":"licenserenewal",message:t.message}),e.b&&(e.b.resolve(),e.b=null),e.dispatchEvent(t))},Uu.ce=function(t){(t=uu(this,t.sessionId))&&(lu(t,"usable"),t.a&&t.a.resolve(),t.a=null)},Uu.de=function(t){var e=uu(this,t.sessionId);if(e){var n=Error("EME v0.1b key error");n.errorCode=t.errorCode,n.errorCode.systemCode=t.systemCode,!t.sessionId&&e.b?(n.method="generateRequest",45==t.systemCode&&(n.message="Unsupported session type."),e.b.reject(n),e.b=null):t.sessionId&&e.a?(n.method="update",e.a.reject(n),e.a=null):(n=t.systemCode,t.errorCode.code==MediaKeyError.MEDIA_KEYERR_OUTPUT?lu(e,"output-restricted"):1==n?lu(e,"expired"):lu(e,"internal-error"))}},x(cu,gn),Uu=cu.prototype,Uu.fc=function(t,e){if(this.a)this.a.then(this.fc.bind(this,t,e)).catch(this.fc.bind(this,t,e));else{if(this.a=t,"webkit-org.w3.clearkey"==this.c){var n=Mt(e),i=JSON.parse(n);"oct"!=i.keys[0].kty&&(this.a.reject(Error("Response is not a valid JSON Web Key Set.")),this.a=null),n=Ht(i.keys[0].k),i=Ht(i.keys[0].kid)}else n=new Uint8Array(e),i=null;var r=nu("addKey");try{this.f[r](this.c,n,i,this.sessionId)}catch(t){this.a.reject(t),this.a=null}}},Uu.generateRequest=function(t,e){return hu(this,e,null)},Uu.load=function(t){return"persistent-license"==this.g?hu(this,null,t):Promise.reject(Error("Not a persistent session."))},Uu.update=function(t){var e=new q;return this.fc(e,t),e},Uu.close=function(){if("persistent-license"!=this.g){if(!this.sessionId)return this.closed.reject(Error("The session is not callable.")),this.closed;var t=nu("cancelKeyRequest");try{this.f[t](this.c,this.sessionId)}catch(t){}}return this.closed.resolve(),this.closed},Uu.remove=function(){return"persistent-license"!=this.g?Promise.reject(Error("Not a persistent session.")):this.close()};var Jc;Uu=fu.prototype,Uu.forEach=function(t){this.a&&t(this.a,Jc)},Uu.get=function(t){if(this.has(t))return this.a},Uu.has=function(t){var e=Jc;return!(!this.a||!Xt(new Uint8Array(t),new Uint8Array(e)))},Uu.entries=function(){},Uu.keys=function(){},Uu.values=function(){},Ns(function(){if(!(!t.HTMLVideoElement||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration)){if(HTMLMediaElement.prototype.webkitGenerateKeyRequest)$c="webkit";else if(!HTMLMediaElement.prototype.generateKeyRequest)return;Jc=new Uint8Array([0]).buffer,navigator.requestMediaKeySystemAccess=iu,delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=ru,t.MediaKeys=ou,t.MediaKeySystemAccess=au}}),Ns(function(){if(t.HTMLMediaElement){var e=HTMLMediaElement.prototype.play;HTMLMediaElement.prototype.play=function(){var t=e.apply(this,arguments);return t&&t.catch(function(){}),t}}}),Ns(function(){if(t.HTMLVideoElement){var e=HTMLVideoElement.prototype;!e.getVideoPlaybackQuality&&"webkitDroppedFrameCount"in e&&(e.getVideoPlaybackQuality=du)}}),Ns(function(){if(!t.VTTCue&&t.TextTrackCue){var e=TextTrackCue.length;if(3==e)t.VTTCue=pu;else if(6==e)t.VTTCue=mu;else{try{var n=!!pu(1,2,"")}catch(t){n=!1}n&&(t.VTTCue=pu)}}}),vu.prototype.parseInit=function(){},vu.prototype.parseMedia=function(t,e){var n=Mt(t),i=[],r=new DOMParser,a=null;try{a=r.parseFromString(n,"text/xml")}catch(t){throw new z(2,2,2005)}if(a){if(!(r=a.getElementsByTagName("tt")[0]))throw new z(2,2,2005);a=Dn(r,"http://www.w3.org/ns/ttml#parameter","frameRate");var o=Dn(r,"http://www.w3.org/ns/ttml#parameter","subFrameRate"),s=Dn(r,"http://www.w3.org/ns/ttml#parameter","frameRateMultiplier"),u=Dn(r,"http://www.w3.org/ns/ttml#parameter","tickRate");if("default"!=(n=r.getAttribute("xml:space")||"default")&&"preserve"!=n)throw new z(2,2,2005);n="default"==n,a=new xu(a,o,s,u),o=yu(r.getElementsByTagName("styling")[0]),s=yu(r.getElementsByTagName("layout")[0]),u=[];for(var c=0;c<s.length;c++){var h=s[c],l=o,f=new ge,d=h.getAttribute("xml:id");if(d){f.id=d;var p;(p=Su(h,l,"extent"))&&null!=(p=(d=Qc.exec(p))||th.exec(p))&&(f.width=Number(p[1]),f.height=Number(p[2]),f.widthUnits=d?dc:0,f.heightUnits=d?dc:0),(h=Su(h,l,"origin"))&&null!=(p=(d=Qc.exec(h))||th.exec(h))&&(f.viewportAnchorX=Number(p[1]),f.viewportAnchorY=Number(p[2]),f.viewportAnchorUnits=d?dc:0)}else f=null;f&&u.push(f)}for(r=yu(r.getElementsByTagName("body")[0]),c=0;c<r.length;c++)(f=bu(r[c],e.periodStart,a,o,s,u,n))&&i.push(f)}return i};var Qc=/^(\d{1,2}|100)% (\d{1,2}|100)%$/,Zc=/^(\d+px|\d+em)$/,th=/^(\d+)px (\d+)px$/,eh=/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/,nh=/^(?:(\d{2,}):)?(\d{2}):(\d{2})$/,ih=/^(?:(\d{2,}):)?(\d{2}):(\d{2}\.\d{2,})$/,rh=/^(\d*(?:\.\d*)?)f$/,ah=/^(\d*(?:\.\d*)?)t$/,oh=/^(?:(\d*(?:\.\d*)?)h)?(?:(\d*(?:\.\d*)?)m)?(?:(\d*(?:\.\d*)?)s)?(?:(\d*(?:\.\d*)?)ms)?$/,sh={left:"start",center:uc,right:"end",start:"start",end:"end"},uh={left:"line-left",center:"center",right:"line-right"};mc["application/ttml+xml"]=vu,Pu.prototype.parseInit=function(t){var e=!1;if((new ii).C("moov",ri).C("trak",ri).C("mdia",ri).C("minf",ri).C("stbl",ri).Z("stsd",ai).C("stpp",function(t){e=!0,t.parser.stop()}).parse(t),!e)throw new z(2,2,2007)},Pu.prototype.parseMedia=function(t,e){var n=!1,i=[];if((new ii).C("mdat",oi(function(t){n=!0,i=i.concat(this.a.parseMedia(t,e))}.bind(this))).parse(t),!n)throw new z(2,2,2007);return i},mc['application/mp4; codecs="stpp"']=Pu,mc['application/mp4; codecs="stpp.TTML.im1t"']=Pu,Ru.prototype.parseInit=function(){},Ru.prototype.parseMedia=function(t,e){var n=Mt(t);if(n=n.replace(/\r\n|\r(?=[^\n]|$)/gm,"\n"),n=n.split(/\n{2,}/m),!/^WEBVTT($|[ \t\n])/m.test(n[0]))throw new z(2,2,2e3);var i=e.segmentStart;if(null==i&&(i=0,0<=n[0].indexOf("X-TIMESTAMP-MAP"))){var r=n[0].match(/LOCAL:((?:(\d{1,}):)?(\d{2}):(\d{2})\.(\d{3}))/m),a=n[0].match(/MPEGTS:(\d+)/m);r&&a&&(i=Cu(new sr(r[1])),i=e.periodStart+(Number(a[1])/9e4-i))}a=[];var o=n[0].split("\n");for(r=1;r<o.length;r++)if(/^Region:/.test(o[r])){var s=new sr(o[r]),u=new ge;hr(s),ur(s);for(var c=hr(s);c;){var h=u,l=c;(c=/^id=(.*)$/.exec(l))?h.id=c[1]:(c=/^width=(\d{1,2}|100)%$/.exec(l))?h.width=Number(c[1]):(c=/^lines=(\d+)$/.exec(l))?(h.height=Number(c[1]),h.heightUnits=2):(c=/^regionanchor=(\d{1,2}|100)%,(\d{1,2}|100)%$/.exec(l))?(h.regionAnchorX=Number(c[1]),h.regionAnchorY=Number(c[2])):(c=/^viewportanchor=(\d{1,2}|100)%,(\d{1,2}|100)%$/.exec(l))?(h.viewportAnchorX=Number(c[1]),h.viewportAnchorY=Number(c[2])):/^scroll=up$/.exec(l)&&(h.scroll="up"),ur(s),c=hr(s)}a.push(u)}for(r=[],s=1;s<n.length;s++){if(o=n[s].split("\n"),c=o,l=i,o=a,1==c.length&&!c[0]||/^NOTE($|[ \t])/.test(c[0])||"STYLE"==c[0])o=null;else{u=null,0>c[0].indexOf("--\x3e")&&(u=c[0],c.splice(0,1)),h=new sr(c[0]);var f=Cu(h),d=cr(h,/[ \t]+--\x3e[ \t]+/g),p=Cu(h);if(null==f||null==d||null==p)throw new z(2,2,2001);for(c=new ye(f+l,p+l,c.slice(1).join("\n").trim()),ur(h),l=hr(h);l;)Nu(c,l,o),ur(h),l=hr(h);null!=u&&(c.id=u),o=c}o&&r.push(o)}return r},mc["text/vtt"]=Ru,mc['text/vtt; codecs="vtt"']=Ru,Mu.prototype.parseInit=function(t){var e=!1;if((new ii).C("moov",ri).C("trak",ri).C("mdia",ri).Z("mdhd",function(t){0==t.version?(t.reader.F(4),t.reader.F(4),this.a=t.reader.B(),t.reader.F(4)):(t.reader.F(8),t.reader.F(8),this.a=t.reader.B(),t.reader.F(8)),t.reader.F(4)}.bind(this)).C("minf",ri).C("stbl",ri).Z("stsd",ai).C("wvtt",function(){e=!0}).parse(t),!this.a)throw new z(2,2,2008);if(!e)throw new z(2,2,2008)},Mu.prototype.parseMedia=function(t,e){var n=this;if(!this.a)throw new z(2,2,2008);var i,r=0,a=[],o=[],s=!1,u=!1,c=!1,h=null;if((new ii).C("moof",ri).C("traf",ri).Z("tfdt",function(t){s=!0,r=0==t.version?t.reader.B():t.reader.Ra()}).Z("tfhd",function(t){var e=t.flags;t=t.reader,t.F(4),1&e&&t.F(8),2&e&&t.F(4),h=8&e?t.B():null}).Z("trun",function(t){u=!0;var e=t.version,n=t.flags;t=t.reader;var i=t.B();1&n&&t.F(4),4&n&&t.F(4);for(var r=[],o=0;o<i;o++){var s={duration:null,sampleSize:null,gc:null};256&n&&(s.duration=t.B()),512&n&&(s.sampleSize=t.B()),1024&n&&t.F(4),2048&n&&(s.gc=0==e?t.B():t.Lc()),r.push(s)}a=r}).C("mdat",oi(function(t){c=!0,i=t})).parse(t),!c&&!s&&!u)throw new z(2,2,2008);var l=r,f=new DataView(i.buffer,i.byteOffset,i.byteLength),d=new ei(f,0);return a.forEach(function(t){var i=t.duration||h,a=t.gc?r+t.gc:l;l=a+(i||0);var s=0;do{var u=d.B();s+=u;var c=d.B(),f=null;"vttc"==ui(c)?8<u&&(f=d.Da(u-8)):d.F(u-8),i&&f&&o.push(Lu(f,e.periodStart+a/n.a,e.periodStart+l/n.a))}while(t.sampleSize&&s<t.sampleSize)}),o.filter(Pt)},mc['application/mp4; codecs="wvtt"']=Mu}).call(i,n,n);for(var r in i.shaka)e[r]=i.shaka[r]}()}).call(e,n(3))},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n}])});
//# sourceMappingURL=dash-shaka-playback.min.js.map \ No newline at end of file
diff --git a/assets/css/_feedback.less b/assets/css/_feedback.less
index 6d9056a..a7e8fd1 100644
--- a/assets/css/_feedback.less
+++ b/assets/css/_feedback.less
@@ -12,6 +12,10 @@ body.feedback {
}
body.feedback-read {
+ h1 {
+ display: inline-block;
+ }
+
td {
white-space: nowrap;
&.issuetext {
diff --git a/assets/css/_overview.less b/assets/css/_overview.less
index 91b29f1..778457d 100644
--- a/assets/css/_overview.less
+++ b/assets/css/_overview.less
@@ -1,4 +1,18 @@
body.overview {
+ .panel-title {
+ .roomtitle.short {
+ display: none;
+ }
+ @media (max-width: @screen-xs-max) {
+ .roomtitle.regular {
+ display: none;
+ }
+ .roomtitle.short {
+ display: inline;
+ }
+ }
+ }
+
.panel-body {
min-height: 10px;
}
diff --git a/assets/css/_room.less b/assets/css/_room.less
index cfffbd8..3202a87 100644
--- a/assets/css/_room.less
+++ b/assets/css/_room.less
@@ -7,10 +7,6 @@ body.room {
}
}
- .player-wrap.tab-content {
- padding: 40px 0;
- }
-
.video.hd .player-wrap.tab-content {
padding: 0;
}
diff --git a/assets/css/_schedule.less b/assets/css/_schedule.less
index 7031e59..67f723d 100644
--- a/assets/css/_schedule.less
+++ b/assets/css/_schedule.less
@@ -104,9 +104,16 @@ body .schedule {
text-shadow: 0 0 3px @schedule-daychange;
}
- &.pause {
- background-color: @schedule-pause-bg;
+ &.pause, &.optout {
color: @schedule-pause;
+ background-color: @schedule-pause-bg;
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-size: 100px;
+
+ /* and now for small screens: */
+ @media (max-width: @screen-xs-max) {
+ background-size: 72px;
+ }
}
}
diff --git a/assets/css/_structure.less b/assets/css/_structure.less
index 45a4ffe..eea4409 100644
--- a/assets/css/_structure.less
+++ b/assets/css/_structure.less
@@ -28,7 +28,7 @@
@schedule-gap-bg: fade(white, 30%);
@schedule-pause: white;
-@schedule-pause-bg: lighten(black, 85%);
+@schedule-pause-bg: #ededed;
// website configuration styles
@@ -54,7 +54,7 @@ nav {
background-size: 27px 27px;
}
}
-
+
.button-wrapper > .btn {
width: 40px;
}
diff --git a/configs/conferences/1npa/config.php b/configs/conferences/1npa/config.php
new file mode 100644
index 0000000..211b520
--- /dev/null
+++ b/configs/conferences/1npa/config.php
@@ -0,0 +1,210 @@
+<?php
+
+$CONFIG['CONFERENCE'] = array(
+ /**
+ * Der Startzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns davor, wird die Closed-Seite
+ * mit einem Text der Art "hat noch nicht angefangen" angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. (Siehe aber ENDS_AT
+ * und CLOSED weiter unten)
+ */
+ 'STARTS_AT' => strtotime("2018-12-06 18:55"),
+
+ /**
+ * Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie-
+ * Gut-Nach-Hause-Seite sowie einem Ausblick auf die kommenden Events angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten)
+ */
+ 'ENDS_AT' => strtotime("2018-12-06 21:00"),
+
+ /**
+ * Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before'
+ * simuliert, dass die Konferenz noch nicht begonnen hat. Der Wert 'after' simuliert, dass die Konferenz
+ * bereits beendet ist. 'running' simuliert eine laufende Konferenz.
+ *
+ * Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent
+ * zu 'running'.
+ */
+ //'CLOSED' => 'running',
+
+ /**
+ * Titel der Konferenz (kann Leer- und Sonderzeichen enthalten)
+ * Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als
+ * Anzeigetext benutzt
+ */
+ 'TITLE' => 'Netzpolitische Adventsfeier #1',
+
+ /**
+ * Veranstalter
+ * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'AUTHOR' => 'netzpolitik.org',
+
+ /**
+ * Beschreibungstext
+ * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+// 'DESCRIPTION' => '<img src="./configs/conferences/jh-nord-2017/Icon_JH-Nord-2017.svg" class="iconjh">',
+
+ /**
+ * Schlüsselwortliste, Kommasepariert
+ * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'KEYWORDS' => 'netzpolitik, IoT, Datenschutz, Regulierung, Netzneutralität, Blockchain, Privatsphäre, Bildung, Journalismus',
+
+ /**
+ * HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags)
+ * Sollte üblicherweise nur Inline-Elemente enthalten
+ * Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet
+ */
+ 'FOOTER_HTML' => '
+ by <a href="https://netzpolitk.org/">netzpolitik.org</a> &amp;
+ <a href="https://c3voc.de">C3VOC</a>
+ ',
+
+ /**
+ * HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header)
+ * wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Blaues
+ * Wischiwaschi auf http://media.ccc.de/)
+ *
+ * Dieser HTML-Block wird üblicherweise in der main.less speziell für die
+ * Konferenz umgestaltet.
+ *
+ * Wird diese Zeile auskommentiert, wird kein Banner ausgegeben.
+ */
+ //'BANNER_HTML' => '<img src="../configs/conferences/jh-nord-2017/Banner_JH-Nord-2017.svg" class="jhnord">',
+
+ /**
+ * Link zu den Recordings
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELEASES' => 'https://media.ccc.de/c/14np',
+
+ /**
+ * Link zu einer (externen) ReLive-Übersichts-Seite
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELIVE' => 'http://vod.c3voc.de/',
+
+ /**
+ * Alternativ kann ein ReLive-Json konfiguriert werden, um die interne
+ * ReLive-Ansicht zu aktivieren.
+ *
+ * Wird beides aktiviert, hat der externe Link Vorrang!
+ * Wird beides auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELIVE_JSON' => 'http://live.ber.c3voc.de/relive/14np/index.json',
+
+ /**
+ * APCU-Cache-Zeit in Sekunden
+ * Wird diese Zeile auskommentiert, werden die apc_*-Methoden nicht verwendet und
+ * das Relive-Json bei jedem Request von der Quelle geladen und geparst
+ */
+ //'RELIVE_JSON_CACHE' => 30*60,
+);
+
+/**
+ * Konfiguration der Stream-Übersicht auf der Startseite
+ */
+$CONFIG['OVERVIEW'] = array(
+ /**
+ * Abschnitte aud der Startseite und darunter aufgeführte Räume
+ * Es können beliebig neue Gruppen und Räume hinzugefügt werden
+ *
+ * Die Räume müssen in $CONFIG['ROOMS'] konfiguriert werden,
+ * sonst werden sie nicht angezeigt.
+ */
+ 'GROUPS' => array(
+ 'Lecture Rooms' => array(
+ 'NPOffice'
+ ),
+ ),
+);
+
+
+
+/**
+ * Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets oä.)
+ */
+$CONFIG['ROOMS'] = array(
+ /**
+ * Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs,
+ * in $CONFIG['OVERVIEW'] oder im Feedback verwendet wird.
+ */
+ 'NPOffice' => array(
+ 'DISPLAY' => 'Netzpolitik Büro',
+ 'STREAM' => 'q2',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => false,
+ 'STEREO' => false,
+
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'SLIDES' => false,
+ 'DASH' => true,
+
+ 'AUDIO' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => false,
+ 'SCHEDULE_NAME' => 'Netzpolitk Büro',
+
+ 'FEEDBACK' => false,
+ 'SUBTITLES' => false,
+
+ 'EMBED' => true,
+ 'IRC' => false,
+ )
+);
+
+/**
+ * Globaler Schalter für die Embedding-Funktionalitäten
+ *
+ * Wird diese Zeile auskommentiert oder auf False gesetzt, werden alle
+ * Embedding-Funktionen deaktiviert.
+ */
+$CONFIG['EMBED'] = true;
+
+/**
+ * Konfigurationen zum Konferenz-Fahrplan
+ * Wird dieser Block auskommentiert, werden alle Fahrplan-Bezogenen Features deaktiviert
+ */
+$CONFIG['SCHEDULE'] = array(
+ /**
+ * URL zum Fahrplan-XML
+ *
+ * Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht
+ * aufhören zu funktionieren. Wenn die Quelle unverlässlich ist ;) sollte ein
+ * externer HTTP-Cache vorgeschaltet werden.
+ */
+ 'URL' => 'https://www.thorti.de/media/np14/np14.xml',
+
+ /**
+ * Nur die angegebenen Räume aus dem Fahrplan beachten
+ *
+ * Wird diese Zeile auskommentiert, werden alle Räume angezeigt
+
+ */
+# 'ROOMFILTER' => array('HS 1', 'HS 3', 'HS 4', 'HS 5', 'HS 6', 'HS 7', 'HS 8', 'C116 (OSGeo)'),
+
+ /**
+ * Skalierung der Programm-Vorschau in Sekunden pro Pixel
+ */
+ 'SCALE' => 7,
+
+ /**
+ * Simuliere das Verhalten als wäre die Konferenz bereits heute
+ *
+ * Diese folgende Beispiel-Zeile Simuliert, dass das
+ * Konferenz-Datum 2014-12-29 auf den heutigen Tag 2015-02-24 verschoben ist.
+ */
+ //'SIMULATE_OFFSET' => strtotime(/* Conference-Date */ '2017-05-21') - strtotime(/* Today */ '2017-05-19'),
+ 'SIMULATE_OFFSET' => 0,
+);
+
+
+return $CONFIG;
diff --git a/configs/conferences/34c3/main.less b/configs/conferences/34c3/main.less
index 13634aa..d67c5dd 100644
--- a/configs/conferences/34c3/main.less
+++ b/configs/conferences/34c3/main.less
@@ -146,7 +146,7 @@ h1, h2, body.overview .room a.title, body.overview .panel-primary a, .navbar-bra
padding-left: 16px;
border-bottom: 1px solid @darker-grey;
-
+
font-size: 15px;
}
}
@@ -309,12 +309,12 @@ nav .button-wrapper > .btn {
height: 60px;
margin-top: 15px;
margin-bottom: -1px;
-
+
background-color: transparent;
border: none;
border-bottom: 1px solid transparent;
border-radius: 0;
-
+
&:hover {
border-bottom: 1px solid @tuwatred;
}
diff --git a/configs/conferences/35c3/assets/35C3_Logo-mit-Verlauf.svg b/configs/conferences/35c3/assets/35C3_Logo-mit-Verlauf.svg
new file mode 100644
index 0000000..d4cf3f7
--- /dev/null
+++ b/configs/conferences/35c3/assets/35C3_Logo-mit-Verlauf.svg
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 398.98 325.61" style="enable-background:new 0 0 398.98 325.61;" xml:space="preserve">
+<style type="text/css">
+ .st0{clip-path:url(#SVGID_2_);fill:url(#SVGID_3_);}
+</style>
+<g id="Back">
+ <rect width="398.98" height="325.61"/>
+</g>
+<g id="Logo">
+ <g>
+ <defs>
+ <rect id="SVGID_1_" x="28.53" y="12.85" width="342.97" height="278.87"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" style="overflow:visible;"/>
+ </clipPath>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="28.526" y1="152.2847" x2="371.5005" y2="152.2847">
+ <stop offset="0" style="stop-color:#0085B1"/>
+ <stop offset="1" style="stop-color:#00A356"/>
+ </linearGradient>
+ <path class="st0" d="M359.76,280.69c0,0.64-0.35,1.12-1.06,1.44s-1.89,0.34-3.53,0.48c-3.84,0.33-11.62-0.49-13.66-0.76v9.03
+ c2.59,0.55,10.64,0.83,13.56,0.83c3.53,0,6.53-0.53,8.99-1.59c2.47-1.06,4.33-2.5,5.57-4.3c1.24-1.8,1.86-3.82,1.86-6.04
+ c0-2.56-0.68-4.59-2.04-6.07c-1.36-1.48-2.97-2.55-4.81-3.21c-1.85-0.66-4.12-1.24-6.8-1.75c-2.08-0.4-3.58-0.78-4.49-1.14
+ c-0.91-0.35-1.36-0.89-1.36-1.59c0-1.48,1.53-2.22,4.59-2.22c3.09,0,7.98-0.16,13.57,0.66v-9.04c0,0-11.05-0.73-13.47-0.73
+ c-3.53,0-6.52,0.52-8.99,1.57c-2.47,1.04-4.33,2.48-5.57,4.3c-1.24,1.82-1.86,3.84-1.86,6.07c0,2.56,0.67,4.59,2.02,6.09
+ c1.34,1.5,2.92,2.58,4.73,3.24c1.81,0.66,4.08,1.27,6.8,1.85c2.12,0.44,3.64,0.85,4.56,1.21
+ C359.3,279.39,359.76,279.95,359.76,280.69 M331.28,255.5h-28.67v35.41h29.32v-9.01H314.3v-4.65h14.91v-8.6H314.3v-4.15h16.98
+ V255.5z M281.34,244.08c0-2.36,1.91-4.27,4.27-4.27c2.35,0,4.27,1.91,4.27,4.27c0,2.35-1.91,4.26-4.27,4.26
+ C283.25,248.34,281.34,246.43,281.34,244.08 M284.57,250.22v5.28h-4.72v35.41h11.89V255.5h-5.11v-5.28
+ c2.96-0.5,5.21-3.05,5.21-6.14c0-3.45-2.8-6.24-6.24-6.24c-3.45,0-6.25,2.79-6.25,6.24C279.36,247.17,281.62,249.72,284.57,250.22
+ M253.42,264.7c1.61,0,2.82,0.36,3.63,1.09c0.8,0.72,1.21,1.74,1.21,3.06c0,1.32-0.4,2.34-1.21,3.07
+ c-0.81,0.73-2.02,1.09-3.63,1.09h-4.33v-8.3H253.42z M254.18,255.5H237.2v35.41h11.89V282h3.22l6,8.91H271l-7.41-10.93
+ c2.15-1.11,3.8-2.61,4.94-4.5c1.14-1.89,1.71-4.09,1.71-6.63c0-2.69-0.66-5.05-1.97-7.08c-1.31-2.02-3.17-3.57-5.59-4.65
+ C260.27,256.04,257.43,255.5,254.18,255.5 M201.64,273.21c0-1.79,0.35-3.35,1.06-4.68c0.71-1.33,1.66-2.36,2.85-3.08
+ c1.19-0.73,2.53-1.09,4-1.09c1.48,0,2.81,0.36,4,1.09c1.19,0.72,2.14,1.75,2.85,3.08c0.71,1.33,1.06,2.89,1.06,4.68
+ s-0.35,3.35-1.06,4.68c-0.71,1.33-1.66,2.36-2.85,3.08c-1.19,0.73-2.53,1.09-4,1.09c-1.48,0-2.81-0.36-4-1.09
+ c-1.19-0.72-2.14-1.75-2.85-3.08C201.99,276.55,201.64,274.99,201.64,273.21 M192.22,263.67c-1.71,2.82-2.57,5.99-2.57,9.54
+ c0,3.54,0.86,6.72,2.57,9.54c1.71,2.81,4.08,5.01,7.11,6.6c3.02,1.58,6.43,2.38,10.23,2.38c3.79,0,7.2-0.79,10.23-2.38
+ c3.03-1.59,5.39-3.79,7.11-6.6c1.71-2.82,2.57-5.99,2.57-9.54c0-3.54-0.86-6.72-2.57-9.54c-1.71-2.81-4.08-5.02-7.11-6.6
+ c-3.02-1.59-6.43-2.38-10.23-2.38c-3.79,0-7.2,0.79-10.23,2.38C196.3,258.65,193.93,260.86,192.22,263.67 M129.22,255.5h-28.67
+ v35.41h29.33v-9.01h-17.63v-7.57h6.72c0.45,1.88,2.06,3.31,4.07,3.31c2.02,0,3.63-1.43,4.07-3.31h12.47v16.58h10.83v-15.58
+ l7.66,12.39h5.24l7.66-12.95l0.1,16.14h10.83l-0.1-35.41h-9.78l-11.19,18.86l-11.49-18.86h-9.78v16.76h-12.5
+ c-0.5-1.8-2.08-3.15-4.04-3.15c-1.96,0-3.54,1.35-4.04,3.15h-6.75v-7.76h16.98V255.5z M47.37,260.06v25.36H37.19
+ c-0.47-1.84-2.07-3.23-4.06-3.23c-2.35,0-4.27,1.91-4.27,4.27s1.91,4.26,4.27,4.26c1.99,0,3.59-1.39,4.06-3.24h10.18v3.42H58.2
+ v-15.58l7.66,12.39h5.24l7.66-12.95l0.1,16.14h10.83l-0.1-35.41h-9.78l-11.19,18.86L57.14,255.5h-9.78v2.5H37.21
+ c-0.44-1.88-2.05-3.31-4.07-3.31c-2.35,0-4.27,1.91-4.27,4.26s1.91,4.27,4.27,4.27c1.96,0,3.54-1.36,4.04-3.16H47.37z M49.6,43.81
+ c0,1.31-0.4,2.33-1.21,3.05c-0.8,0.73-2.02,1.08-3.63,1.08h-4.34v-8.27h4.34c1.61,0,2.82,0.36,3.63,1.08
+ C49.2,41.48,49.6,42.49,49.6,43.81 M62.36,65.79L54.95,54.9c2.15-1.11,3.8-2.6,4.94-4.49c1.14-1.88,1.71-4.08,1.71-6.6
+ c0-2.69-0.66-5.04-1.97-7.06c-1.31-2.02-3.18-3.56-5.6-4.64c-2.42-1.07-5.26-1.61-8.52-1.61H28.53v35.29h11.9v-8.87h3.23l6,8.87
+ H62.36z M66.09,65.79h29.34v-8.97H77.79v-4.64h14.93V43.6H77.79v-4.13h16.99V30.5H66.09V65.79z M111.92,39.47h16.79V30.5h-28.69
+ v35.29h11.9V48.98h6.36c0.44,1.88,2.06,3.31,4.07,3.31c2.36,0,4.27-1.91,4.27-4.27c0-2.35-1.91-4.26-4.27-4.26
+ c-1.96,0-3.54,1.35-4.04,3.16h-6.39V39.47z M153.57,43.81c0,1.31-0.4,2.33-1.21,3.05c-0.81,0.73-2.02,1.08-3.63,1.08h-4.34v-8.27
+ h4.34c1.61,0,2.82,0.36,3.63,1.08C153.17,41.48,153.57,42.49,153.57,43.81 M166.32,65.79l-7.41-10.89c2.15-1.11,3.8-2.6,4.94-4.49
+ c1.14-1.88,1.71-4.08,1.71-6.6c0-2.69-0.65-5.04-1.96-7.06c-1.31-2.02-3.18-3.56-5.6-4.64c-2.42-1.07-5.26-1.61-8.52-1.61h-16.99
+ v35.29h11.9v-8.87h3.23l6,8.87H166.32z M170.05,65.79h29.35v-8.97h-17.65v-4.64h14.92V43.6h-14.92v-4.13h16.99V30.5h-28.69V65.79z
+ M214.07,40.98c0-1.48,1.53-2.22,4.59-2.22c3.09,0,7.99-0.16,13.58,0.66v-9.01c0,0-11.06-0.73-13.48-0.73
+ c-3.53,0-6.53,0.52-9,1.56c-2.47,1.05-4.33,2.47-5.57,4.29c-1.24,1.81-1.87,3.83-1.87,6.05c0,2.55,0.67,4.58,2.02,6.08
+ c1.35,1.49,2.93,2.57,4.74,3.22c1.81,0.66,4.08,1.27,6.81,1.85c2.12,0.44,3.64,0.83,4.56,1.21c0.92,0.37,1.39,0.93,1.39,1.66
+ c0,0.64-0.35,1.12-1.06,1.44c-0.71,0.32-1.89,0.34-3.53,0.48c-3.84,0.33-11.62-0.48-13.67-0.76v9c2.59,0.55,10.65,0.83,13.57,0.83
+ c3.53,0,6.53-0.52,9-1.59c2.47-1.06,4.33-2.49,5.57-4.28c1.24-1.8,1.87-3.81,1.87-6.02c0-2.55-0.68-4.57-2.04-6.05
+ c-1.36-1.48-2.97-2.55-4.82-3.2c-1.85-0.66-4.12-1.24-6.81-1.74c-2.08-0.4-3.58-0.78-4.49-1.14
+ C214.53,42.22,214.07,41.69,214.07,40.98 M260.01,65.79h11.9V30.5h-11.9V43h-10.99V30.5h-11.9v35.29h11.9V52.78h10.99V65.79z
+ M287.82,19.1c0,2.35-1.91,4.26-4.27,4.26c-2.36,0-4.27-1.91-4.27-4.26s1.91-4.27,4.27-4.27
+ C285.91,14.83,287.82,16.74,287.82,19.1 M289.8,19.1c0-3.45-2.8-6.25-6.24-6.25c-3.45,0-6.25,2.8-6.25,6.25
+ c0,3.1,2.26,5.64,5.21,6.14v5.26h-4.87v35.29h11.9V30.5h-4.96v-5.26C287.54,24.74,289.8,22.19,289.8,19.1 M320.31,65.79h9.78V30.5
+ h-11.6v16.03L305.08,30.5h-9.78v35.29h11.6V49.76L320.31,65.79z M362.26,65.44c2.76-0.77,5.18-1.88,7.26-3.33V47.18h-10.34v8.93
+ c-1.38,0.57-2.82,0.86-4.34,0.86c-2.55,0-4.6-0.8-6.13-2.42c-1.53-1.61-2.29-3.75-2.29-6.4c0-2.72,0.77-4.87,2.32-6.46
+ c1.55-1.58,3.63-2.37,6.25-2.37c3.06,0,14.49,0.16,14.49,0.16v-9.01c0,0-6.42-1.3-15.09-0.78c-3.83,0.23-7.27,0.78-10.31,2.34
+ c-3.04,1.56-5.41,3.75-7.11,6.56c-1.7,2.81-2.55,5.99-2.55,9.56c0,3.56,0.85,6.75,2.55,9.55c1.7,2.81,4.04,5,7.03,6.56
+ c2.99,1.57,6.37,2.34,10.14,2.34C356.79,66.59,359.5,66.21,362.26,65.44 M231.94,206.18h-60.89v-31.13h23.24
+ c0.51,2.93,3.05,5.17,6.14,5.17c3.45,0,6.24-2.8,6.24-6.24c0-1.04-0.27-1.99-0.72-2.85l25.99-17.73V206.18z M200.42,169.7
+ c2.35,0,4.27,1.91,4.27,4.27c0,2.35-1.91,4.26-4.27,4.26c-2.36,0-4.27-1.91-4.27-4.26C196.15,171.61,198.06,169.7,200.42,169.7
+ M231.94,150.89l-27.22,18.56c-1.12-1.07-2.63-1.74-4.3-1.74c-3.11,0-5.67,2.29-6.15,5.26h-23.23c0,0,0.03-10.6,0.03-12.4
+ c0-5.49-4.46-9.95-9.95-9.95s-9.95,4.46-9.95,9.95c0,0.11-0.04,4.01-0.04,5.4h-30.88c0.86,2.36,1.51,4.91,1.91,7.71
+ c0.45,3.09,0.75,6.84,0.94,11.13h28.03v15.63c0,2.06,0.01,5.72,0.01,5.72h-29.38c-0.49-2.96-3.04-5.22-6.14-5.22
+ c-3.1,0-5.65,2.26-6.14,5.22H85.2c-0.01-0.02,0-15.35,0-15.35c0-15.53-3.71-20.85-13.72-23c-1.71-0.37-5.39-0.34-5.39-0.34v-15.83
+ h42.07c3.95,2.32,6.98,5.06,9.07,8.22c0.11,0.16,0.16,0.38,0.27,0.54v-19.29c-2.33,3.69-5.15,6.53-9.43,8.46H66.09v-15.09
+ c6.56,0,10.91-1.47,14.19-4.4c3.28-2.92,4.96-7.6,4.93-14.02c-0.01-1.42-0.03-1.47-0.03-1.47h24.18c0.5,2.95,3.05,5.2,6.14,5.2
+ c3.09,0,5.64-2.25,6.14-5.2h29.49v13.89c1.85-2.43,4.35-4.42,7.5-6c3.14-1.57,6.71-2.35,10.71-2.35c10.53,0,18.73,2.59,24.7,7.66
+ v-5.95c0-2.52,0.1-4.91,0.24-7.25h37.66V150.89z M119.77,113.56c0,2.35-1.91,4.27-4.27,4.27c-2.35,0-4.27-1.91-4.27-4.27
+ c0-2.35,1.91-4.26,4.27-4.26C117.87,109.29,119.77,111.2,119.77,113.56 M111.34,207.2c0-2.35,1.91-4.27,4.27-4.27
+ c2.36,0,4.27,1.91,4.27,4.27c0,2.35-1.91,4.26-4.27,4.26C113.26,211.47,111.34,209.56,111.34,207.2 M366.53,161.59
+ c2.09,3.17,3.44,7.04,4.33,11.37v-41.04c-0.63,3.07-1.43,5.88-2.51,8.25c-2.23,4.89-5.85,8.52-10.87,10.88h-42.33V136.2
+ c6.57,0,11.15-1.46,14.44-4.39c3.28-2.92,4.47-7.67,4.47-14.09v-7.73c0-5.28-4.23-9.56-9.45-9.56c-5.22,0-9.45,4.28-9.45,9.56
+ c0,1.09,0.05,7.11-0.07,8.22v5.57h-29.39v17.78h-36.62v-27.2c0-1.24-0.06-4.61-0.06-5.38c0-4.72-3.82-8.54-8.54-8.54
+ c-4.72,0-8.54,3.83-8.54,8.54c0,0.74,0.07,3.01,0.05,3.56h-37.58c0.28-3.51,0.71-6.84,1.3-9.96h-44.57v9.96h-29.49
+ c-0.49-2.96-3.04-5.23-6.14-5.23c-3.1,0-5.65,2.27-6.14,5.23H85.2v-2.55c0-5.28-4.28-9.56-9.55-9.56s-9.55,4.28-9.55,9.56
+ c0,1.01,0.06,12.08,0.06,12.08H28.87v60.18h37.23v27.34c0,5.28,4.28,9.56,9.55,9.56s9.55-4.28,9.55-9.56v-1.35h24.27
+ c0.5,2.95,3.05,5.21,6.14,5.21c3.1,0,5.64-2.26,6.14-5.21h29.39v0.94c0,5.5,4.46,9.96,9.96,9.96c5.5,0,9.97-4.46,9.97-9.96
+ c0-0.3-0.06-0.58-0.09-0.87c0-0.02,0.01-0.04,0.01-0.07h60.94c0,0.02,0,1.67,0,2.37c0,4.72,3.82,8.54,8.54,8.54
+ c4.72,0,8.54-3.82,8.54-8.54c0-0.41,0.06-3.17,0.06-4.37v-33.2h36.62v10.92h29.46v19.28v6.35c0,5.28,4.23,9.56,9.45,9.56
+ c5.22,0,9.45-4.28,9.45-9.56c0-0.69,0.03-8.15,0.03-12.35v-4.49c0-15.85-4.12-21.24-11.36-23.15c-2.26-0.6-7.58-0.41-7.58-0.41
+ v-16.08h42.32C361.62,155.48,364.37,158.31,366.53,161.59"/>
+ </g>
+</g>
+</svg>
diff --git a/configs/conferences/35c3/assets/Makefile b/configs/conferences/35c3/assets/Makefile
new file mode 100644
index 0000000..51392b6
--- /dev/null
+++ b/configs/conferences/35c3/assets/Makefile
@@ -0,0 +1,10 @@
+SVGFILES := $(wildcard *.svg)
+MINSVGS := $(SVGFILES:%.svg=min/%.svg)
+
+all: $(MINSVGS)
+
+min/%.svg : %.svg
+ svgo -i $*.svg -o min/$*.svg
+
+clean:
+ rm -f $(MINSVGS)
diff --git a/configs/conferences/35c3/assets/bg-capacitor.png b/configs/conferences/35c3/assets/bg-capacitor.png
new file mode 100644
index 0000000..a8fcf49
--- /dev/null
+++ b/configs/conferences/35c3/assets/bg-capacitor.png
Binary files differ
diff --git a/configs/conferences/35c3/assets/bg-resistor.gif b/configs/conferences/35c3/assets/bg-resistor.gif
new file mode 100644
index 0000000..8cd4f1d
--- /dev/null
+++ b/configs/conferences/35c3/assets/bg-resistor.gif
Binary files differ
diff --git a/configs/conferences/35c3/assets/bg-resistor.png b/configs/conferences/35c3/assets/bg-resistor.png
new file mode 100644
index 0000000..13f7fcc
--- /dev/null
+++ b/configs/conferences/35c3/assets/bg-resistor.png
Binary files differ
diff --git a/configs/conferences/35c3/assets/logo-inline.svg b/configs/conferences/35c3/assets/logo-inline.svg
new file mode 100644
index 0000000..2538a77
--- /dev/null
+++ b/configs/conferences/35c3/assets/logo-inline.svg
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ x="0px"
+ y="0px"
+ viewBox="0 0 1929.2102 118.74205"
+ xml:space="preserve"
+ id="svg23"
+ sodipodi:docname="experiment2.svg"
+ inkscape:version="0.92.3 (2405546, 2018-03-11)"
+ width="1929.2102"
+ height="118.74203"><metadata
+ id="metadata29"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs27"><linearGradient
+ y2="152.2847"
+ x2="371.50049"
+ y1="152.2847"
+ x1="28.525999"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10046"><stop
+ id="stop10042"
+ style="stop-color:#0084b0;stop-opacity:1"
+ offset="0" /><stop
+ id="stop10044"
+ style="stop-color:#00A356"
+ offset="1" /></linearGradient><linearGradient
+ id="linearGradient9221"
+ osb:paint="solid"><stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop9219" /></linearGradient><linearGradient
+ y2="152.2847"
+ x2="371.50049"
+ y1="152.2847"
+ x1="28.525999"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9201">
+ <stop
+ id="stop9197"
+ style="stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9199"
+ style="stop-color:#00A356"
+ offset="1" />
+ </linearGradient><linearGradient
+ y2="152.2847"
+ x2="371.50049"
+ y1="152.2847"
+ x1="28.525999"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1512"
+ osb:paint="gradient">
+ <stop
+ id="stop1508"
+ style="stop-color:#0085B1"
+ offset="0" />
+ <stop
+ id="stop1510"
+ style="stop-color:#00A356"
+ offset="1" />
+ </linearGradient><linearGradient
+ inkscape:collect="always"
+ xlink:href="#SVGID_3_"
+ id="linearGradient98-3"
+ gradientUnits="userSpaceOnUse"
+ x1="28.525999"
+ y1="152.2847"
+ x2="371.50049"
+ y2="152.2847" /><linearGradient
+ id="linearGradient540"
+ gradientUnits="userSpaceOnUse"
+ x1="28.525999"
+ y1="152.2847"
+ x2="371.50049"
+ y2="152.2847"><stop
+ offset="0"
+ style="stop-color:#0085B1"
+ id="stop13-6" /><stop
+ offset="1"
+ style="stop-color:#00A356"
+ id="stop15-7" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9201"
+ id="linearGradient9205"
+ gradientUnits="userSpaceOnUse"
+ x1="28.525999"
+ y1="152.2847"
+ x2="371.50049"
+ y2="152.2847" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient540"
+ id="linearGradient10036"
+ x1="19.734751"
+ y1="232.21991"
+ x2="1948.9449"
+ y2="232.21991"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient540"
+ id="linearGradient10038"
+ gradientUnits="userSpaceOnUse"
+ x1="-148.04817"
+ y1="40.281536"
+ x2="717.88202"
+ y2="42.181896" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10046"
+ id="linearGradient10040"
+ gradientUnits="userSpaceOnUse"
+ x1="-499.05148"
+ y1="283.11746"
+ x2="366.43353"
+ y2="276.13263" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient540"
+ id="linearGradient10056"
+ gradientUnits="userSpaceOnUse"
+ x1="19.734751"
+ y1="232.21991"
+ x2="1948.9449"
+ y2="232.21991" /></defs><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2556"
+ inkscape:window-height="1384"
+ id="namedview25"
+ showgrid="false"
+ inkscape:zoom="0.71472677"
+ inkscape:cx="1007.9215"
+ inkscape:cy="135.04424"
+ inkscape:window-x="0"
+ inkscape:window-y="26"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="layer1"
+ inkscape:pagecheckerboard="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" /><style
+ type="text/css"
+ id="style2">
+ .st0{clip-path:url(#SVGID_2_);fill:url(#SVGID_3_);}
+</style><g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="all"
+ transform="translate(-19.73475,-172.85991)"><g
+ id="g645"
+ style="fill:url(#linearGradient10036);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ inkscape:label="inline"><path
+ transform="matrix(2.2034148,0,0,2.2034148,1130.3984,-351.20025)"
+ inkscape:label="memories"
+ sodipodi:nodetypes="cscccscssscccssccscsscscccccccccccccccccssscccccccccssccccssscccccccccccccssccccscscssscsccccsccsscsccsccccccccccscccccccccccccccccscccccccccssscccccccccccccccccssscc"
+ class="st0"
+ d="m 359.76,280.69 c 0,0.64 -0.35,1.12 -1.06,1.44 -0.71,0.32 -1.89,0.34 -3.53,0.48 -3.84,0.33 -11.62,-0.49 -13.66,-0.76 v 9.03 c 2.59,0.55 10.64,0.83 13.56,0.83 3.53,0 6.53,-0.53 8.99,-1.59 2.47,-1.06 4.33,-2.5 5.57,-4.3 1.24,-1.8 1.86,-3.82 1.86,-6.04 0,-2.56 -0.68,-4.59 -2.04,-6.07 -1.36,-1.48 -2.97,-2.55 -4.81,-3.21 -1.85,-0.66 -4.12,-1.24 -6.8,-1.75 -2.08,-0.4 -3.58,-0.78 -4.49,-1.14 -0.91,-0.35 -1.36,-0.89 -1.36,-1.59 0,-1.48 1.53,-2.22 4.59,-2.22 3.09,0 7.98,-0.16 13.57,0.66 v -9.04 c 0,0 -11.05,-0.73 -13.47,-0.73 -3.53,0 -6.52,0.52 -8.99,1.57 -2.47,1.04 -4.33,2.48 -5.57,4.3 -1.24,1.82 -1.86,3.84 -1.86,6.07 0,2.56 0.67,4.59 2.02,6.09 1.34,1.5 2.92,2.58 4.73,3.24 1.81,0.66 4.08,1.27 6.8,1.85 2.12,0.44 3.64,0.85 4.56,1.21 0.93,0.37 1.39,0.93 1.39,1.67 M 331.28,255.5 h -28.67 v 35.41 h 29.32 V 281.9 H 314.3 v -4.65 h 14.91 v -8.6 H 314.3 v -4.15 h 16.98 z m -49.94,-11.42 c 0,-2.36 1.91,-4.27 4.27,-4.27 2.35,0 4.27,1.91 4.27,4.27 0,2.35 -1.91,4.26 -4.27,4.26 -2.36,0 -4.27,-1.91 -4.27,-4.26 m 3.23,6.14 v 5.28 h -4.72 v 35.41 h 11.89 V 255.5 h -5.11 v -5.28 c 2.96,-0.5 5.21,-3.05 5.21,-6.14 0,-3.45 -2.8,-6.24 -6.24,-6.24 -3.45,0 -6.25,2.79 -6.25,6.24 0.01,3.09 2.27,5.64 5.22,6.14 m -31.15,14.48 c 1.61,0 2.82,0.36 3.63,1.09 0.8,0.72 1.21,1.74 1.21,3.06 0,1.32 -0.4,2.34 -1.21,3.07 -0.81,0.73 -2.02,1.09 -3.63,1.09 h -4.33 v -8.3 h 4.33 z m 0.76,-9.2 H 237.2 v 35.41 h 11.89 V 282 h 3.22 l 6,8.91 H 271 l -7.41,-10.93 c 2.15,-1.11 3.8,-2.61 4.94,-4.5 1.14,-1.89 1.71,-4.09 1.71,-6.63 0,-2.69 -0.66,-5.05 -1.97,-7.08 -1.31,-2.02 -3.17,-3.57 -5.59,-4.65 -2.41,-1.08 -5.25,-1.62 -8.5,-1.62 m -52.54,17.71 c 0,-1.79 0.35,-3.35 1.06,-4.68 0.71,-1.33 1.66,-2.36 2.85,-3.08 1.19,-0.73 2.53,-1.09 4,-1.09 1.48,0 2.81,0.36 4,1.09 1.19,0.72 2.14,1.75 2.85,3.08 0.71,1.33 1.06,2.89 1.06,4.68 0,1.79 -0.35,3.35 -1.06,4.68 -0.71,1.33 -1.66,2.36 -2.85,3.08 -1.19,0.73 -2.53,1.09 -4,1.09 -1.48,0 -2.81,-0.36 -4,-1.09 -1.19,-0.72 -2.14,-1.75 -2.85,-3.08 -0.71,-1.34 -1.06,-2.9 -1.06,-4.68 m -9.42,-9.54 c -1.71,2.82 -2.57,5.99 -2.57,9.54 0,3.54 0.86,6.72 2.57,9.54 1.71,2.81 4.08,5.01 7.11,6.6 3.02,1.58 6.43,2.38 10.23,2.38 3.79,0 7.2,-0.79 10.23,-2.38 3.03,-1.59 5.39,-3.79 7.11,-6.6 1.71,-2.82 2.57,-5.99 2.57,-9.54 0,-3.54 -0.86,-6.72 -2.57,-9.54 -1.71,-2.81 -4.08,-5.02 -7.11,-6.6 -3.02,-1.59 -6.43,-2.38 -10.23,-2.38 -3.79,0 -7.2,0.79 -10.23,2.38 -3.03,1.58 -5.4,3.79 -7.11,6.6 m -63,-8.17 h -28.67 v 35.41 h 29.33 v -9.01 h -17.63 v -7.57 h 6.72 c 0.45,1.88 2.06,3.31 4.07,3.31 2.02,0 3.63,-1.43 4.07,-3.31 h 12.47 v 16.58 h 10.83 v -15.58 l 7.66,12.39 h 5.24 l 7.66,-12.95 0.1,16.14 h 10.83 l -0.1,-35.41 h -9.78 l -11.19,18.86 -11.49,-18.86 h -9.78 v 16.76 h -12.5 c -0.5,-1.8 -2.08,-3.15 -4.04,-3.15 -1.96,0 -3.54,1.35 -4.04,3.15 h -6.75 v -7.76 h 16.98 v -9 z m -81.85,4.56 v 25.36 H 37.19 c -0.47,-1.84 -2.07,-3.23 -4.06,-3.23 -2.35,0 -4.27,1.91 -4.27,4.27 0,2.36 1.91,4.26 4.27,4.26 1.99,0 3.59,-1.39 4.06,-3.24 h 10.18 v 3.42 H 58.2 v -15.58 l 7.66,12.39 h 5.24 l 7.66,-12.95 0.1,16.14 h 10.83 l -0.1,-35.41 H 79.81 L 68.62,274.35 57.14,255.5 H 47.36 V 258 H 37.21 c -0.44,-1.88 -2.05,-3.31 -4.07,-3.31 -2.35,0 -4.27,1.91 -4.27,4.26 0,2.35 1.91,4.27 4.27,4.27 1.96,0 3.54,-1.36 4.04,-3.16 z"
+ clip-path="url(#SVGID_2_)"
+ id="path32-2"
+ inkscape:connector-curvature="0"
+ style="display:inline;fill:url(#linearGradient10040);fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
+ transform="matrix(2.2087451,0,0,2.2087442,338.19375,144.47755)"
+ inkscape:label="refreshing"
+ sodipodi:nodetypes="ccsccscccccsscsccccccccccccccccccccccccccccssscccccsccscccccsscscccccccccccccccccccccsccsccsccccsscccsccssccccccccccccccccccsssccsscccccccccccccccccccccccccscscscccssscccc"
+ style="display:inline;fill:url(#linearGradient10038);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ inkscape:connector-curvature="0"
+ id="path18-9"
+ clip-path="url(#SVGID_2_)"
+ d="m 49.6,43.81 c 0,1.31 -0.4,2.33 -1.21,3.05 -0.8,0.73 -2.02,1.08 -3.63,1.08 h -4.34 v -8.27 h 4.34 c 1.61,0 2.82,0.36 3.63,1.08 0.81,0.73 1.21,1.74 1.21,3.06 M 62.36,65.79 54.95,54.9 c 2.15,-1.11 3.8,-2.6 4.94,-4.49 1.14,-1.88 1.71,-4.08 1.71,-6.6 0,-2.69 -0.66,-5.04 -1.97,-7.06 -1.31,-2.02 -3.18,-3.56 -5.6,-4.64 C 51.61,31.04 48.77,30.5 45.51,30.5 H 28.53 v 35.29 h 11.9 v -8.87 h 3.23 l 6,8.87 z m 3.73,0 H 95.43 V 56.82 H 77.79 V 52.18 H 92.72 V 43.6 H 77.79 V 39.47 H 94.78 V 30.5 H 66.09 Z m 45.83,-26.32 h 16.79 V 30.5 h -28.69 v 35.29 h 11.9 V 48.98 h 6.36 c 0.44,1.88 2.06,3.31 4.07,3.31 2.36,0 4.27,-1.91 4.27,-4.27 0,-2.35 -1.91,-4.26 -4.27,-4.26 -1.96,0 -3.54,1.35 -4.04,3.16 h -6.39 z m 41.65,4.34 c 0,1.31 -0.4,2.33 -1.21,3.05 -0.81,0.73 -2.02,1.08 -3.63,1.08 h -4.34 v -8.27 h 4.34 c 1.61,0 2.82,0.36 3.63,1.08 0.81,0.73 1.21,1.74 1.21,3.06 m 12.75,21.98 -7.41,-10.89 c 2.15,-1.11 3.8,-2.6 4.94,-4.49 1.14,-1.88 1.71,-4.08 1.71,-6.6 0,-2.69 -0.65,-5.04 -1.96,-7.06 -1.31,-2.02 -3.18,-3.56 -5.6,-4.64 -2.42,-1.07 -5.26,-1.61 -8.52,-1.61 h -16.99 v 35.29 h 11.9 v -8.87 h 3.23 l 6,8.87 z m 3.73,0 h 29.35 v -8.97 h -17.65 v -4.64 h 14.92 V 43.6 h -14.92 v -4.13 h 16.99 V 30.5 h -28.69 z m 44.02,-24.81 c 0,-1.48 1.53,-2.22 4.59,-2.22 3.09,0 7.99,-0.16 13.58,0.66 v -9.01 c 0,0 -11.06,-0.73 -13.48,-0.73 -3.53,0 -6.53,0.52 -9,1.56 -2.47,1.05 -4.33,2.47 -5.57,4.29 -1.24,1.81 -1.87,3.83 -1.87,6.05 0,2.55 0.67,4.58 2.02,6.08 1.35,1.49 2.93,2.57 4.74,3.22 1.81,0.66 4.08,1.27 6.81,1.85 2.12,0.44 3.64,0.83 4.56,1.21 0.92,0.37 1.39,0.93 1.39,1.66 0,0.64 -0.35,1.12 -1.06,1.44 -0.71,0.32 -1.89,0.34 -3.53,0.48 -3.84,0.33 -11.62,-0.48 -13.67,-0.76 v 9 c 2.59,0.55 10.65,0.83 13.57,0.83 3.53,0 6.53,-0.52 9,-1.59 2.47,-1.06 4.33,-2.49 5.57,-4.28 1.24,-1.8 1.87,-3.81 1.87,-6.02 0,-2.55 -0.68,-4.57 -2.04,-6.05 -1.36,-1.48 -2.97,-2.55 -4.82,-3.2 -1.85,-0.66 -4.12,-1.24 -6.81,-1.74 -2.08,-0.4 -3.58,-0.78 -4.49,-1.14 -0.9,-0.35 -1.36,-0.88 -1.36,-1.59 m 45.94,24.81 h 11.9 V 30.5 h -11.9 V 43 H 249.02 V 30.5 h -11.9 v 35.29 h 11.9 V 52.78 h 10.99 z M 287.82,19.1 c 0,2.35 -1.91,4.26 -4.27,4.26 -2.36,0 -4.27,-1.91 -4.27,-4.26 0,-2.35 1.91,-4.27 4.27,-4.27 2.36,0 4.27,1.91 4.27,4.27 m 1.98,0 c 0,-3.45 -2.8,-6.25 -6.24,-6.25 -3.45,0 -6.25,2.8 -6.25,6.25 0,3.1 2.26,5.64 5.21,6.14 v 5.26 h -4.87 v 35.29 h 11.9 V 30.5 h -4.96 v -5.26 c 2.95,-0.5 5.21,-3.05 5.21,-6.14 m 30.51,46.69 h 9.78 V 30.5 h -11.6 V 46.53 L 305.08,30.5 h -9.78 v 35.29 h 11.6 V 49.76 Z m 41.95,-0.35 c 2.76,-0.77 5.18,-1.88 7.26,-3.33 V 47.18 h -10.34 v 8.93 c -1.38,0.57 -2.82,0.86 -4.34,0.86 -2.55,0 -4.6,-0.8 -6.13,-2.42 -1.53,-1.61 -2.29,-3.75 -2.29,-6.4 0,-2.72 0.77,-4.87 2.32,-6.46 1.55,-1.58 3.63,-2.37 6.25,-2.37 3.06,0 14.49,0.16 14.49,0.16 v -9.01 c 0,0 -6.42,-1.3 -15.09,-0.78 -3.83,0.23 -7.27,0.78 -10.31,2.34 -3.04,1.56 -5.41,3.75 -7.11,6.56 -1.7,2.81 -2.55,5.99 -2.55,9.56 0,3.56 0.85,6.75 2.55,9.55 1.7,2.81 4.04,5 7.03,6.56 2.99,1.57 6.37,2.34 10.14,2.34 2.65,-0.01 5.36,-0.39 8.12,-1.16"
+ class="st0" /><path
+ transform="translate(-9.13525,72.429912)"
+ sodipodi:nodetypes="ccccssccccssscccsccssscccccsccscccccccccccccccccsccccscsccccsscccssccccccccccsssscccccssssccccccsccsssccccsssccsccssscccsssscccccsssssccccc"
+ inkscape:label="35c3"
+ class="st0"
+ d="m 231.94,206.18 h -60.89 v -31.13 h 23.24 c 0.51,2.93 3.05,5.17 6.14,5.17 3.45,0 6.24,-2.8 6.24,-6.24 0,-1.04 -0.27,-1.99 -0.72,-2.85 L 231.94,153.4 Z M 200.42,169.7 c 2.35,0 4.27,1.91 4.27,4.27 0,2.35 -1.91,4.26 -4.27,4.26 -2.36,0 -4.27,-1.91 -4.27,-4.26 0,-2.36 1.91,-4.27 4.27,-4.27 m 31.52,-18.81 -27.22,18.56 c -1.12,-1.07 -2.63,-1.74 -4.3,-1.74 -3.11,0 -5.67,2.29 -6.15,5.26 h -23.23 c 0,0 0.03,-10.6 0.03,-12.4 0,-5.49 -4.46,-9.95 -9.95,-9.95 -5.49,0 -9.95,4.46 -9.95,9.95 0,0.11 -0.04,4.01 -0.04,5.4 h -30.88 c 0.86,2.36 1.51,4.91 1.91,7.71 0.45,3.09 0.75,6.84 0.94,11.13 h 28.03 v 15.63 c 0,2.06 0.01,5.72 0.01,5.72 h -29.38 c -0.49,-2.96 -3.04,-5.22 -6.14,-5.22 -3.1,0 -5.65,2.26 -6.14,5.22 H 85.2 c -0.01,-0.02 0,-15.35 0,-15.35 0,-15.53 -3.71,-20.85 -13.72,-23 -1.71,-0.37 -5.39,-0.34 -5.39,-0.34 v -15.83 h 42.07 c 3.95,2.32 6.98,5.06 9.07,8.22 0.11,0.16 0.16,0.38 0.27,0.54 v -19.29 c -2.33,3.69 -5.15,6.53 -9.43,8.46 H 66.09 v -15.09 c 6.56,0 10.91,-1.47 14.19,-4.4 3.28,-2.92 4.96,-7.6 4.93,-14.02 -0.01,-1.42 -0.03,-1.47 -0.03,-1.47 h 24.18 c 0.5,2.95 3.05,5.2 6.14,5.2 3.09,0 5.64,-2.25 6.14,-5.2 h 29.49 v 13.89 c 1.85,-2.43 4.35,-4.42 7.5,-6 3.14,-1.57 6.71,-2.35 10.71,-2.35 10.53,0 18.73,2.59 24.7,7.66 v -5.95 c 0,-2.52 0.1,-4.91 0.24,-7.25 h 37.66 z M 119.77,113.56 c 0,2.35 -1.91,4.27 -4.27,4.27 -2.35,0 -4.27,-1.91 -4.27,-4.27 0,-2.35 1.91,-4.26 4.27,-4.26 2.37,-0.01 4.27,1.9 4.27,4.26 m -8.43,93.64 c 0,-2.35 1.91,-4.27 4.27,-4.27 2.36,0 4.27,1.91 4.27,4.27 0,2.35 -1.91,4.26 -4.27,4.26 -2.35,0.01 -4.27,-1.9 -4.27,-4.26 m 255.19,-45.61 c 2.09,3.17 3.44,7.04 4.33,11.37 v -41.04 c -0.63,3.07 -1.43,5.88 -2.51,8.25 -2.23,4.89 -5.85,8.52 -10.87,10.88 H 315.15 V 136.2 c 6.57,0 11.15,-1.46 14.44,-4.39 3.28,-2.92 4.47,-7.67 4.47,-14.09 v -7.73 c 0,-5.28 -4.23,-9.56 -9.45,-9.56 -5.22,0 -9.45,4.28 -9.45,9.56 0,1.09 0.05,7.11 -0.07,8.22 v 5.57 H 285.7 v 17.78 h -36.62 v -27.2 c 0,-1.24 -0.06,-4.61 -0.06,-5.38 0,-4.72 -3.82,-8.54 -8.54,-8.54 -4.72,0 -8.54,3.83 -8.54,8.54 0,0.74 0.07,3.01 0.05,3.56 h -37.58 c 0.28,-3.51 0.71,-6.84 1.3,-9.96 h -44.57 v 9.96 h -29.49 c -0.49,-2.96 -3.04,-5.23 -6.14,-5.23 -3.1,0 -5.65,2.27 -6.14,5.23 H 85.2 v -2.55 c 0,-5.28 -4.28,-9.56 -9.55,-9.56 -5.27,0 -9.55,4.28 -9.55,9.56 0,1.01 0.06,12.08 0.06,12.08 H 28.87 v 60.18 H 66.1 v 27.34 c 0,5.28 4.28,9.56 9.55,9.56 5.27,0 9.55,-4.28 9.55,-9.56 v -1.35 h 24.27 c 0.5,2.95 3.05,5.21 6.14,5.21 3.1,0 5.64,-2.26 6.14,-5.21 h 29.39 v 0.94 c 0,5.5 4.46,9.96 9.96,9.96 5.5,0 9.97,-4.46 9.97,-9.96 0,-0.3 -0.06,-0.58 -0.09,-0.87 0,-0.02 0.01,-0.04 0.01,-0.07 h 60.94 v 2.37 c 0,4.72 3.82,8.54 8.54,8.54 4.72,0 8.54,-3.82 8.54,-8.54 0,-0.41 0.06,-3.17 0.06,-4.37 v -33.2 h 36.62 v 10.92 h 29.46 v 19.28 6.35 c 0,5.28 4.23,9.56 9.45,9.56 5.22,0 9.45,-4.28 9.45,-9.56 0,-0.69 0.03,-8.15 0.03,-12.35 v -4.49 c 0,-15.85 -4.12,-21.24 -11.36,-23.15 -2.26,-0.6 -7.58,-0.41 -7.58,-0.41 v -16.08 h 42.32 c 4.16,2.37 6.91,5.2 9.07,8.48"
+ clip-path="url(#SVGID_2_)"
+ id="path45-1"
+ inkscape:connector-curvature="0"
+ style="display:inline;fill:url(#linearGradient10056);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ mask="none" /></g></g></svg> \ No newline at end of file
diff --git a/configs/conferences/35c3/assets/logo.svg b/configs/conferences/35c3/assets/logo.svg
new file mode 100644
index 0000000..c48952d
--- /dev/null
+++ b/configs/conferences/35c3/assets/logo.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 398.98 180.69" style="enable-background:new 0 0 398.98 180.69;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:url(#SVGID_1_);}
+</style>
+<g id="Back">
+ <rect width="398.98" height="180.69"/>
+</g>
+<g id="Logo">
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="28.8678" y1="91.8235" x2="370.8653" y2="91.8235">
+ <stop offset="0" style="stop-color:#0085B1"/>
+ <stop offset="1" style="stop-color:#00A356"/>
+ </linearGradient>
+ <path class="st0" d="M231.94,138.21h-60.89v-31.13h23.24c0.51,2.93,3.05,5.17,6.14,5.17c3.45,0,6.24-2.8,6.24-6.24
+ c0-1.04-0.27-1.99-0.72-2.85l25.99-17.73V138.21z M200.42,101.73c2.35,0,4.27,1.91,4.27,4.27c0,2.35-1.91,4.26-4.27,4.26
+ c-2.36,0-4.27-1.91-4.27-4.26C196.15,103.64,198.06,101.73,200.42,101.73 M231.94,82.93l-27.22,18.56
+ c-1.12-1.07-2.63-1.74-4.3-1.74c-3.11,0-5.67,2.29-6.15,5.26h-23.23c0,0,0.03-10.6,0.03-12.4c0-5.49-4.46-9.95-9.95-9.95
+ c-5.5,0-9.95,4.46-9.95,9.95c0,0.11-0.04,4.01-0.04,5.4h-30.88c0.86,2.36,1.51,4.91,1.91,7.71c0.45,3.09,0.75,6.84,0.94,11.13
+ h28.03v15.63c0,2.06,0.01,5.72,0.01,5.72h-29.38c-0.49-2.96-3.04-5.22-6.14-5.22c-3.1,0-5.65,2.26-6.14,5.22H85.2
+ c-0.01-0.02,0-15.35,0-15.35c0-15.53-3.71-20.85-13.72-23c-1.71-0.37-5.39-0.34-5.39-0.34V83.68h42.07
+ c3.95,2.32,6.98,5.06,9.07,8.22c0.11,0.16,0.16,0.38,0.27,0.54V73.16c-2.33,3.69-5.15,6.53-9.43,8.46H66.09V66.53
+ c6.56,0,10.91-1.47,14.19-4.4c3.28-2.92,4.96-7.6,4.93-14.02c-0.01-1.42-0.03-1.47-0.03-1.47h24.18c0.5,2.95,3.05,5.2,6.14,5.2
+ c3.09,0,5.64-2.25,6.14-5.2h29.49v13.89c1.85-2.43,4.35-4.42,7.5-6c3.14-1.57,6.71-2.35,10.71-2.35c10.53,0,18.73,2.59,24.7,7.66
+ v-5.95c0-2.52,0.1-4.91,0.24-7.25h37.66V82.93z M119.77,45.59c0,2.35-1.91,4.27-4.27,4.27c-2.35,0-4.27-1.91-4.27-4.27
+ c0-2.35,1.91-4.26,4.27-4.26C117.87,41.33,119.77,43.23,119.77,45.59 M111.34,139.23c0-2.35,1.91-4.27,4.27-4.27
+ c2.36,0,4.27,1.91,4.27,4.27c0,2.35-1.91,4.26-4.27,4.26C113.26,143.5,111.34,141.59,111.34,139.23 M366.53,93.62
+ c2.09,3.17,3.44,7.04,4.33,11.37V63.95c-0.63,3.07-1.43,5.88-2.51,8.25c-2.23,4.89-5.85,8.52-10.87,10.88h-42.33V68.23
+ c6.57,0,11.15-1.46,14.44-4.39c3.28-2.92,4.47-7.67,4.47-14.09v-7.73c0-5.28-4.23-9.56-9.45-9.56c-5.22,0-9.45,4.28-9.45,9.56
+ c0,1.09,0.05,7.11-0.07,8.22v5.57h-29.39v17.78h-36.62v-27.2c0-1.24-0.06-4.61-0.06-5.38c0-4.72-3.82-8.54-8.54-8.54
+ c-4.72,0-8.54,3.83-8.54,8.54c0,0.74,0.07,3.01,0.05,3.56h-37.58c0.28-3.51,0.71-6.84,1.3-9.96h-44.57v9.96h-29.49
+ c-0.49-2.96-3.04-5.23-6.14-5.23c-3.1,0-5.65,2.27-6.14,5.23H85.2v-2.55c0-5.28-4.28-9.56-9.55-9.56c-5.28,0-9.55,4.28-9.55,9.56
+ c0,1.01,0.06,12.08,0.06,12.08H28.87v60.18h37.23v27.34c0,5.28,4.28,9.56,9.55,9.56c5.28,0,9.55-4.28,9.55-9.56v-1.35h24.27
+ c0.5,2.95,3.05,5.21,6.14,5.21c3.1,0,5.64-2.26,6.14-5.21h29.39v0.94c0,5.5,4.46,9.96,9.96,9.96c5.5,0,9.97-4.46,9.97-9.96
+ c0-0.3-0.06-0.58-0.09-0.87c0-0.02,0.01-0.04,0.01-0.07h60.94c0,0.02,0,1.67,0,2.37c0,4.72,3.82,8.54,8.54,8.54
+ c4.72,0,8.54-3.82,8.54-8.54c0-0.41,0.06-3.17,0.06-4.37v-33.2h36.62v10.92h29.46v19.28v6.35c0,5.28,4.23,9.56,9.45,9.56
+ c5.22,0,9.45-4.28,9.45-9.56c0-0.69,0.03-8.15,0.03-12.35v-4.49c0-15.85-4.12-21.24-11.36-23.15c-2.26-0.6-7.58-0.41-7.58-0.41
+ V85.14h42.32C361.62,87.51,364.37,90.34,366.53,93.62"/>
+ </g>
+</g>
+</svg>
diff --git a/configs/conferences/35c3/assets/min/35C3_Logo-mit-Verlauf.svg b/configs/conferences/35c3/assets/min/35C3_Logo-mit-Verlauf.svg
new file mode 100644
index 0000000..5bbeac0
--- /dev/null
+++ b/configs/conferences/35c3/assets/min/35C3_Logo-mit-Verlauf.svg
@@ -0,0 +1 @@
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 398.98 325.61"><path d="M0 0h398.98v325.61H0z"/><defs><path id="a" d="M28.53 12.85H371.5v278.87H28.53z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="28.526" y1="152.285" x2="371.5" y2="152.285"><stop offset="0" stop-color="#0085b1"/><stop offset="1" stop-color="#00a356"/></linearGradient><path d="M359.76 280.69c0 .64-.35 1.12-1.06 1.44s-1.89.34-3.53.48c-3.84.33-11.62-.49-13.66-.76v9.03c2.59.55 10.64.83 13.56.83 3.53 0 6.53-.53 8.99-1.59 2.47-1.06 4.33-2.5 5.57-4.3 1.24-1.8 1.86-3.82 1.86-6.04 0-2.56-.68-4.59-2.04-6.07a11.93 11.93 0 0 0-4.81-3.21c-1.85-.66-4.12-1.24-6.8-1.75-2.08-.4-3.58-.78-4.49-1.14-.91-.35-1.36-.89-1.36-1.59 0-1.48 1.53-2.22 4.59-2.22 3.09 0 7.98-.16 13.57.66v-9.04s-11.05-.73-13.47-.73c-3.53 0-6.52.52-8.99 1.57-2.47 1.04-4.33 2.48-5.57 4.3-1.24 1.82-1.86 3.84-1.86 6.07 0 2.56.67 4.59 2.02 6.09 1.34 1.5 2.92 2.58 4.73 3.24 1.81.66 4.08 1.27 6.8 1.85 2.12.44 3.64.85 4.56 1.21.93.37 1.39.93 1.39 1.67m-28.48-25.19h-28.67v35.41h29.32v-9.01H314.3v-4.65h14.91v-8.6H314.3v-4.15h16.98v-9zm-49.94-11.42c0-2.36 1.91-4.27 4.27-4.27 2.35 0 4.27 1.91 4.27 4.27 0 2.35-1.91 4.26-4.27 4.26-2.36 0-4.27-1.91-4.27-4.26m3.23 6.14v5.28h-4.72v35.41h11.89V255.5h-5.11v-5.28c2.96-.5 5.21-3.05 5.21-6.14 0-3.45-2.8-6.24-6.24-6.24-3.45 0-6.25 2.79-6.25 6.24.01 3.09 2.27 5.64 5.22 6.14m-31.15 14.48c1.61 0 2.82.36 3.63 1.09.8.72 1.21 1.74 1.21 3.06s-.4 2.34-1.21 3.07c-.81.73-2.02 1.09-3.63 1.09h-4.33v-8.3h4.33zm.76-9.2H237.2v35.41h11.89V282h3.22l6 8.91H271l-7.41-10.93c2.15-1.11 3.8-2.61 4.94-4.5 1.14-1.89 1.71-4.09 1.71-6.63 0-2.69-.66-5.05-1.97-7.08-1.31-2.02-3.17-3.57-5.59-4.65-2.41-1.08-5.25-1.62-8.5-1.62m-52.54 17.71c0-1.79.35-3.35 1.06-4.68.71-1.33 1.66-2.36 2.85-3.08 1.19-.73 2.53-1.09 4-1.09 1.48 0 2.81.36 4 1.09 1.19.72 2.14 1.75 2.85 3.08s1.06 2.89 1.06 4.68-.35 3.35-1.06 4.68c-.71 1.33-1.66 2.36-2.85 3.08-1.19.73-2.53 1.09-4 1.09-1.48 0-2.81-.36-4-1.09-1.19-.72-2.14-1.75-2.85-3.08-.71-1.34-1.06-2.9-1.06-4.68m-9.42-9.54c-1.71 2.82-2.57 5.99-2.57 9.54 0 3.54.86 6.72 2.57 9.54 1.71 2.81 4.08 5.01 7.11 6.6 3.02 1.58 6.43 2.38 10.23 2.38 3.79 0 7.2-.79 10.23-2.38 3.03-1.59 5.39-3.79 7.11-6.6 1.71-2.82 2.57-5.99 2.57-9.54 0-3.54-.86-6.72-2.57-9.54-1.71-2.81-4.08-5.02-7.11-6.6-3.02-1.59-6.43-2.38-10.23-2.38-3.79 0-7.2.79-10.23 2.38-3.03 1.58-5.4 3.79-7.11 6.6m-63-8.17h-28.67v35.41h29.33v-9.01h-17.63v-7.57h6.72c.45 1.88 2.06 3.31 4.07 3.31 2.02 0 3.63-1.43 4.07-3.31h12.47v16.58h10.83v-15.58l7.66 12.39h5.24l7.66-12.95.1 16.14h10.83l-.1-35.41h-9.78l-11.19 18.86-11.49-18.86h-9.78v16.76h-12.5c-.5-1.8-2.08-3.15-4.04-3.15s-3.54 1.35-4.04 3.15h-6.75v-7.76h16.98v-9zm-81.85 4.56v25.36H37.19c-.47-1.84-2.07-3.23-4.06-3.23-2.35 0-4.27 1.91-4.27 4.27s1.91 4.26 4.27 4.26c1.99 0 3.59-1.39 4.06-3.24h10.18v3.42H58.2v-15.58l7.66 12.39h5.24l7.66-12.95.1 16.14h10.83l-.1-35.41h-9.78l-11.19 18.86-11.48-18.85h-9.78v2.5H37.21c-.44-1.88-2.05-3.31-4.07-3.31-2.35 0-4.27 1.91-4.27 4.26s1.91 4.27 4.27 4.27c1.96 0 3.54-1.36 4.04-3.16h10.19zM49.6 43.81c0 1.31-.4 2.33-1.21 3.05-.8.73-2.02 1.08-3.63 1.08h-4.34v-8.27h4.34c1.61 0 2.82.36 3.63 1.08.81.73 1.21 1.74 1.21 3.06m12.76 21.98L54.95 54.9c2.15-1.11 3.8-2.6 4.94-4.49 1.14-1.88 1.71-4.08 1.71-6.6 0-2.69-.66-5.04-1.97-7.06-1.31-2.02-3.18-3.56-5.6-4.64-2.42-1.07-5.26-1.61-8.52-1.61H28.53v35.29h11.9v-8.87h3.23l6 8.87h12.7zm3.73 0h29.34v-8.97H77.79v-4.64h14.93V43.6H77.79v-4.13h16.99V30.5H66.09v35.29zm45.83-26.32h16.79V30.5h-28.69v35.29h11.9V48.98h6.36c.44 1.88 2.06 3.31 4.07 3.31a4.266 4.266 0 0 0 0-8.53c-1.96 0-3.54 1.35-4.04 3.16h-6.39v-7.45zm41.65 4.34c0 1.31-.4 2.33-1.21 3.05-.81.73-2.02 1.08-3.63 1.08h-4.34v-8.27h4.34c1.61 0 2.82.36 3.63 1.08.81.73 1.21 1.74 1.21 3.06m12.75 21.98l-7.41-10.89c2.15-1.11 3.8-2.6 4.94-4.49 1.14-1.88 1.71-4.08 1.71-6.6 0-2.69-.65-5.04-1.96-7.06-1.31-2.02-3.18-3.56-5.6-4.64-2.42-1.07-5.26-1.61-8.52-1.61h-16.99v35.29h11.9v-8.87h3.23l6 8.87h12.7zm3.73 0h29.35v-8.97h-17.65v-4.64h14.92V43.6h-14.92v-4.13h16.99V30.5h-28.69v35.29zm44.02-24.81c0-1.48 1.53-2.22 4.59-2.22 3.09 0 7.99-.16 13.58.66v-9.01s-11.06-.73-13.48-.73c-3.53 0-6.53.52-9 1.56-2.47 1.05-4.33 2.47-5.57 4.29a10.481 10.481 0 0 0-1.87 6.05c0 2.55.67 4.58 2.02 6.08 1.35 1.49 2.93 2.57 4.74 3.22 1.81.66 4.08 1.27 6.81 1.85 2.12.44 3.64.83 4.56 1.21.92.37 1.39.93 1.39 1.66 0 .64-.35 1.12-1.06 1.44-.71.32-1.89.34-3.53.48-3.84.33-11.62-.48-13.67-.76v9c2.59.55 10.65.83 13.57.83 3.53 0 6.53-.52 9-1.59 2.47-1.06 4.33-2.49 5.57-4.28 1.24-1.8 1.87-3.81 1.87-6.02 0-2.55-.68-4.57-2.04-6.05-1.36-1.48-2.97-2.55-4.82-3.2-1.85-.66-4.12-1.24-6.81-1.74-2.08-.4-3.58-.78-4.49-1.14-.9-.35-1.36-.88-1.36-1.59m45.94 24.81h11.9V30.5h-11.9V43h-10.99V30.5h-11.9v35.29h11.9V52.78h10.99v13.01zm27.81-46.69c0 2.35-1.91 4.26-4.27 4.26-2.36 0-4.27-1.91-4.27-4.26s1.91-4.27 4.27-4.27c2.36 0 4.27 1.91 4.27 4.27m1.98 0c0-3.45-2.8-6.25-6.24-6.25-3.45 0-6.25 2.8-6.25 6.25 0 3.1 2.26 5.64 5.21 6.14v5.26h-4.87v35.29h11.9V30.5h-4.96v-5.26c2.95-.5 5.21-3.05 5.21-6.14m30.51 46.69h9.78V30.5h-11.6v16.03L305.08 30.5h-9.78v35.29h11.6V49.76l13.41 16.03zm41.95-.35c2.76-.77 5.18-1.88 7.26-3.33V47.18h-10.34v8.93c-1.38.57-2.82.86-4.34.86-2.55 0-4.6-.8-6.13-2.42-1.53-1.61-2.29-3.75-2.29-6.4 0-2.72.77-4.87 2.32-6.46 1.55-1.58 3.63-2.37 6.25-2.37 3.06 0 14.49.16 14.49.16v-9.01s-6.42-1.3-15.09-.78c-3.83.23-7.27.78-10.31 2.34-3.04 1.56-5.41 3.75-7.11 6.56-1.7 2.81-2.55 5.99-2.55 9.56 0 3.56.85 6.75 2.55 9.55 1.7 2.81 4.04 5 7.03 6.56 2.99 1.57 6.37 2.34 10.14 2.34 2.65-.01 5.36-.39 8.12-1.16M231.94 206.18h-60.89v-31.13h23.24c.51 2.93 3.05 5.17 6.14 5.17 3.45 0 6.24-2.8 6.24-6.24 0-1.04-.27-1.99-.72-2.85l25.99-17.73v52.78zm-31.52-36.48c2.35 0 4.27 1.91 4.27 4.27 0 2.35-1.91 4.26-4.27 4.26a4.266 4.266 0 1 1 0-8.53m31.52-18.81l-27.22 18.56a6.21 6.21 0 0 0-4.3-1.74c-3.11 0-5.67 2.29-6.15 5.26h-23.23s.03-10.6.03-12.4c0-5.49-4.46-9.95-9.95-9.95s-9.95 4.46-9.95 9.95c0 .11-.04 4.01-.04 5.4h-30.88c.86 2.36 1.51 4.91 1.91 7.71.45 3.09.75 6.84.94 11.13h28.03v15.63c0 2.06.01 5.72.01 5.72h-29.38c-.49-2.96-3.04-5.22-6.14-5.22-3.1 0-5.65 2.26-6.14 5.22H85.2c-.01-.02 0-15.35 0-15.35 0-15.53-3.71-20.85-13.72-23-1.71-.37-5.39-.34-5.39-.34v-15.83h42.07c3.95 2.32 6.98 5.06 9.07 8.22.11.16.16.38.27.54v-19.29c-2.33 3.69-5.15 6.53-9.43 8.46H66.09v-15.09c6.56 0 10.91-1.47 14.19-4.4 3.28-2.92 4.96-7.6 4.93-14.02-.01-1.42-.03-1.47-.03-1.47h24.18c.5 2.95 3.05 5.2 6.14 5.2s5.64-2.25 6.14-5.2h29.49v13.89c1.85-2.43 4.35-4.42 7.5-6 3.14-1.57 6.71-2.35 10.71-2.35 10.53 0 18.73 2.59 24.7 7.66v-5.95c0-2.52.1-4.91.24-7.25h37.66v36.3zm-112.17-37.33c0 2.35-1.91 4.27-4.27 4.27-2.35 0-4.27-1.91-4.27-4.27 0-2.35 1.91-4.26 4.27-4.26 2.37-.01 4.27 1.9 4.27 4.26m-8.43 93.64c0-2.35 1.91-4.27 4.27-4.27a4.266 4.266 0 0 1 0 8.53 4.26 4.26 0 0 1-4.27-4.26m255.19-45.61c2.09 3.17 3.44 7.04 4.33 11.37v-41.04c-.63 3.07-1.43 5.88-2.51 8.25-2.23 4.89-5.85 8.52-10.87 10.88h-42.33V136.2c6.57 0 11.15-1.46 14.44-4.39 3.28-2.92 4.47-7.67 4.47-14.09v-7.73c0-5.28-4.23-9.56-9.45-9.56-5.22 0-9.45 4.28-9.45 9.56 0 1.09.05 7.11-.07 8.22v5.57H285.7v17.78h-36.62v-27.2c0-1.24-.06-4.61-.06-5.38 0-4.72-3.82-8.54-8.54-8.54-4.72 0-8.54 3.83-8.54 8.54 0 .74.07 3.01.05 3.56h-37.58c.28-3.51.71-6.84 1.3-9.96h-44.57v9.96h-29.49c-.49-2.96-3.04-5.23-6.14-5.23-3.1 0-5.65 2.27-6.14 5.23H85.2v-2.55c0-5.28-4.28-9.56-9.55-9.56s-9.55 4.28-9.55 9.56c0 1.01.06 12.08.06 12.08H28.87v60.18H66.1v27.34c0 5.28 4.28 9.56 9.55 9.56s9.55-4.28 9.55-9.56v-1.35h24.27c.5 2.95 3.05 5.21 6.14 5.21 3.1 0 5.64-2.26 6.14-5.21h29.39v.94c0 5.5 4.46 9.96 9.96 9.96 5.5 0 9.97-4.46 9.97-9.96 0-.3-.06-.58-.09-.87 0-.02.01-.04.01-.07h60.94v2.37c0 4.72 3.82 8.54 8.54 8.54 4.72 0 8.54-3.82 8.54-8.54 0-.41.06-3.17.06-4.37v-33.2h36.62v10.92h29.46V209.59c0 5.28 4.23 9.56 9.45 9.56 5.22 0 9.45-4.28 9.45-9.56 0-.69.03-8.15.03-12.35v-4.49c0-15.85-4.12-21.24-11.36-23.15-2.26-.6-7.58-.41-7.58-.41v-16.08h42.32c4.16 2.37 6.91 5.2 9.07 8.48" clip-path="url(#b)" fill="url(#c)"/></svg> \ No newline at end of file
diff --git a/configs/conferences/35c3/assets/min/logo.svg b/configs/conferences/35c3/assets/min/logo.svg
new file mode 100644
index 0000000..85d9293
--- /dev/null
+++ b/configs/conferences/35c3/assets/min/logo.svg
@@ -0,0 +1 @@
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 398.98 180.69"><path d="M0 0h398.98v180.69H0z"/><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="28.868" y1="91.823" x2="370.865" y2="91.823"><stop offset="0" stop-color="#0085b1"/><stop offset="1" stop-color="#00a356"/></linearGradient><path d="M231.94 138.21h-60.89v-31.13h23.24c.51 2.93 3.05 5.17 6.14 5.17 3.45 0 6.24-2.8 6.24-6.24 0-1.04-.27-1.99-.72-2.85l25.99-17.73v52.78zm-31.52-36.48c2.35 0 4.27 1.91 4.27 4.27 0 2.35-1.91 4.26-4.27 4.26a4.266 4.266 0 1 1 0-8.53m31.52-18.8l-27.22 18.56a6.21 6.21 0 0 0-4.3-1.74c-3.11 0-5.67 2.29-6.15 5.26h-23.23s.03-10.6.03-12.4c0-5.49-4.46-9.95-9.95-9.95-5.5 0-9.95 4.46-9.95 9.95 0 .11-.04 4.01-.04 5.4h-30.88c.86 2.36 1.51 4.91 1.91 7.71.45 3.09.75 6.84.94 11.13h28.03v15.63c0 2.06.01 5.72.01 5.72h-29.38c-.49-2.96-3.04-5.22-6.14-5.22-3.1 0-5.65 2.26-6.14 5.22H85.2c-.01-.02 0-15.35 0-15.35 0-15.53-3.71-20.85-13.72-23-1.71-.37-5.39-.34-5.39-.34V83.68h42.07c3.95 2.32 6.98 5.06 9.07 8.22.11.16.16.38.27.54V73.16c-2.33 3.69-5.15 6.53-9.43 8.46H66.09V66.53c6.56 0 10.91-1.47 14.19-4.4 3.28-2.92 4.96-7.6 4.93-14.02-.01-1.42-.03-1.47-.03-1.47h24.18c.5 2.95 3.05 5.2 6.14 5.2s5.64-2.25 6.14-5.2h29.49v13.89c1.85-2.43 4.35-4.42 7.5-6 3.14-1.57 6.71-2.35 10.71-2.35 10.53 0 18.73 2.59 24.7 7.66v-5.95c0-2.52.1-4.91.24-7.25h37.66v36.29zM119.77 45.59c0 2.35-1.91 4.27-4.27 4.27-2.35 0-4.27-1.91-4.27-4.27 0-2.35 1.91-4.26 4.27-4.26 2.37 0 4.27 1.9 4.27 4.26m-8.43 93.64c0-2.35 1.91-4.27 4.27-4.27a4.266 4.266 0 0 1 0 8.53 4.26 4.26 0 0 1-4.27-4.26m255.19-45.61c2.09 3.17 3.44 7.04 4.33 11.37V63.95c-.63 3.07-1.43 5.88-2.51 8.25-2.23 4.89-5.85 8.52-10.87 10.88h-42.33V68.23c6.57 0 11.15-1.46 14.44-4.39 3.28-2.92 4.47-7.67 4.47-14.09v-7.73c0-5.28-4.23-9.56-9.45-9.56-5.22 0-9.45 4.28-9.45 9.56 0 1.09.05 7.11-.07 8.22v5.57H285.7v17.78h-36.62v-27.2c0-1.24-.06-4.61-.06-5.38 0-4.72-3.82-8.54-8.54-8.54-4.72 0-8.54 3.83-8.54 8.54 0 .74.07 3.01.05 3.56h-37.58c.28-3.51.71-6.84 1.3-9.96h-44.57v9.96h-29.49c-.49-2.96-3.04-5.23-6.14-5.23-3.1 0-5.65 2.27-6.14 5.23H85.2v-2.55c0-5.28-4.28-9.56-9.55-9.56-5.28 0-9.55 4.28-9.55 9.56 0 1.01.06 12.08.06 12.08H28.87v60.18H66.1v27.34c0 5.28 4.28 9.56 9.55 9.56 5.28 0 9.55-4.28 9.55-9.56v-1.35h24.27c.5 2.95 3.05 5.21 6.14 5.21 3.1 0 5.64-2.26 6.14-5.21h29.39v.94c0 5.5 4.46 9.96 9.96 9.96 5.5 0 9.97-4.46 9.97-9.96 0-.3-.06-.58-.09-.87 0-.02.01-.04.01-.07h60.94v2.37c0 4.72 3.82 8.54 8.54 8.54 4.72 0 8.54-3.82 8.54-8.54 0-.41.06-3.17.06-4.37v-33.2h36.62v10.92h29.46V141.62c0 5.28 4.23 9.56 9.45 9.56 5.22 0 9.45-4.28 9.45-9.56 0-.69.03-8.15.03-12.35v-4.49c0-15.85-4.12-21.24-11.36-23.15-2.26-.6-7.58-.41-7.58-.41V85.14h42.32c4.16 2.37 6.91 5.2 9.07 8.48" fill="url(#a)"/></svg> \ No newline at end of file
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Black.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-Black.eot
new file mode 100644
index 0000000..3a5362d
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Black.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Black.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-Black.woff
new file mode 100644
index 0000000..5c60ad0
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Black.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Black.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-Black.woff2
new file mode 100644
index 0000000..3ac8d46
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Black.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.eot
new file mode 100644
index 0000000..4b92a25
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.woff
new file mode 100644
index 0000000..0caeeb5
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.woff2
new file mode 100644
index 0000000..1e5d135
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-BlackItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Bold.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-Bold.eot
new file mode 100644
index 0000000..5ab4fd5
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Bold.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Bold.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-Bold.woff
new file mode 100644
index 0000000..aad827f
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Bold.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Bold.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-Bold.woff2
new file mode 100644
index 0000000..ad25d26
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Bold.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.eot
new file mode 100644
index 0000000..5eeff1e
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.woff
new file mode 100644
index 0000000..875f5b5
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.woff2
new file mode 100644
index 0000000..f9a3d40
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-BoldItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.eot
new file mode 100644
index 0000000..203ed8e
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.woff
new file mode 100644
index 0000000..08c7e2e
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.woff2
new file mode 100644
index 0000000..e961597
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBold.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.eot
new file mode 100644
index 0000000..329171b
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.woff
new file mode 100644
index 0000000..935251b
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.woff2
new file mode 100644
index 0000000..97b0e28
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraBoldItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.eot
new file mode 100644
index 0000000..1a9012b
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.woff
new file mode 100644
index 0000000..a9a848e
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.woff2
new file mode 100644
index 0000000..5fee343
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLight.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.eot
new file mode 100644
index 0000000..0c5369b
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.woff
new file mode 100644
index 0000000..112038e
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.woff2
new file mode 100644
index 0000000..959479b
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ExtraLightItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Italic.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-Italic.eot
new file mode 100644
index 0000000..867a104
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Italic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Italic.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-Italic.woff
new file mode 100644
index 0000000..1c15293
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Italic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Italic.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-Italic.woff2
new file mode 100644
index 0000000..8ccfb98
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Italic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Light.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-Light.eot
new file mode 100644
index 0000000..62d678e
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Light.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Light.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-Light.woff
new file mode 100644
index 0000000..7aa52b2
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Light.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Light.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-Light.woff2
new file mode 100644
index 0000000..0b253c4
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Light.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.eot
new file mode 100644
index 0000000..9e70f97
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.woff
new file mode 100644
index 0000000..ef12fe2
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.woff2
new file mode 100644
index 0000000..c4cc5a3
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-LightItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Medium.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-Medium.eot
new file mode 100644
index 0000000..abb0a84
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Medium.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Medium.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-Medium.woff
new file mode 100644
index 0000000..2778c8b
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Medium.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Medium.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-Medium.woff2
new file mode 100644
index 0000000..80d6f58
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Medium.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.eot
new file mode 100644
index 0000000..d7986e9
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.woff
new file mode 100644
index 0000000..7a2329f
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.woff2
new file mode 100644
index 0000000..a7f9cfd
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-MediumItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Regular.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-Regular.eot
new file mode 100644
index 0000000..d030e7f
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Regular.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Regular.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-Regular.woff
new file mode 100644
index 0000000..ebb48a9
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Regular.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Regular.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-Regular.woff2
new file mode 100644
index 0000000..3261a6a
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Regular.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.eot
new file mode 100644
index 0000000..92bdd9b
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.woff
new file mode 100644
index 0000000..32904f5
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.woff2
new file mode 100644
index 0000000..0c9bc28
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBold.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.eot
new file mode 100644
index 0000000..9caec26
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.woff
new file mode 100644
index 0000000..d990b52
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.woff2
new file mode 100644
index 0000000..4d597b3
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-SemiBoldItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Thin.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-Thin.eot
new file mode 100644
index 0000000..125b165
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Thin.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Thin.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-Thin.woff
new file mode 100644
index 0000000..43cffac
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Thin.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-Thin.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-Thin.woff2
new file mode 100644
index 0000000..ef8d0d5
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-Thin.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.eot b/configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.eot
new file mode 100644
index 0000000..a53bd66
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.woff b/configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.woff
new file mode 100644
index 0000000..dd4a314
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.woff2 b/configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.woff2
new file mode 100644
index 0000000..e5e9367
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat-ThinItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/Montserrat.css b/configs/conferences/35c3/assets/montserrat/Montserrat.css
new file mode 100755
index 0000000..a52ef06
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/Montserrat.css
@@ -0,0 +1,399 @@
+/** =================== MONTSERRAT =================== **/
+
+/** Montserrat Thin **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 100;
+ font-style: normal;
+ src: url("Montserrat-Thin.eot");
+ src: url("Montserrat-Thin.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-Thin.woff2") format("woff2"),
+ url("Montserrat-Thin.woff") format("woff");
+}
+
+/** Montserrat Thin-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 100;
+ font-style: italic;
+ src: url("Montserrat-ThinItalic.eot");
+ src: url("Montserrat-ThinItalic.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-ThinItalic.woff2") format("woff2"),
+ url("Montserrat-ThinItalic.woff") format("woff");
+}
+
+/** Montserrat ExtraLight **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 200;
+ font-style: normal;
+ src: url("Montserrat-ExtraLight.eot");
+ src: url("Montserrat-ExtraLight.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-ExtraLight.woff2") format("woff2"),
+ url("Montserrat-ExtraLight.woff") format("woff");
+}
+
+/** Montserrat ExtraLight-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 200;
+ font-style: italic;
+ src: url("Montserrat-ExtraLightItalic.eot");
+ src: url("Montserrat-ExtraLightItalic.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-ExtraLightItalic.woff2") format("woff2"),
+ url("Montserrat-ExtraLightItalic.woff") format("woff");
+}
+
+/** Montserrat Light **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 300;
+ font-style: normal;
+ src: url("Montserrat-Light.eot");
+ src: url("Montserrat-Light.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-Light.woff2") format("woff2"),
+ url("Montserrat-Light.woff") format("woff");
+}
+
+/** Montserrat Light-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 300;
+ font-style: italic;
+ src: url("Montserrat-LightItalic.eot");
+ src: url("Montserrat-LightItalic.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-LightItalic.woff2") format("woff2"),
+ url("Montserrat-LightItalic.woff") format("woff");
+}
+
+/** Montserrat Regular **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 400;
+ font-style: normal;
+ src: url("Montserrat-Regular.eot");
+ src: url("Montserrat-Regular.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-Regular.woff2") format("woff2"),
+ url("Montserrat-Regular.woff") format("woff");
+}
+
+/** Montserrat Regular-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 400;
+ font-style: italic;
+ src: url("Montserrat-Italic.eot");
+ src: url("Montserrat-Italic.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-Italic.woff2") format("woff2"),
+ url("Montserrat-Italic.woff") format("woff");
+}
+
+/** Montserrat Medium **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 500;
+ font-style: normal;
+ src: url("Montserrat-Medium.eot");
+ src: url("Montserrat-Medium.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-Medium.woff2") format("woff2"),
+ url("Montserrat-Medium.woff") format("woff");
+}
+
+/** Montserrat Medium-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 500;
+ font-style: italic;
+ src: url("Montserrat-MediumItalic.eot");
+ src: url("Montserrat-MediumItalic.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-MediumItalic.woff2") format("woff2"),
+ url("Montserrat-MediumItalic.woff") format("woff");
+}
+
+/** Montserrat SemiBold **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 600;
+ font-style: normal;
+ src: url("Montserrat-SemiBold.eot");
+ src: url("Montserrat-SemiBold.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-SemiBold.woff2") format("woff2"),
+ url("Montserrat-SemiBold.woff") format("woff");
+}
+
+/** Montserrat SemiBold-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 600;
+ font-style: italic;
+ src: url("Montserrat-SemiBoldItalic.eot");
+ src: url("Montserrat-SemiBoldItalic.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-SemiBoldItalic.woff2") format("woff2"),
+ url("Montserrat-SemiBoldItalic.woff") format("woff");
+}
+
+/** Montserrat Bold **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 700;
+ font-style: normal;
+ src: url("Montserrat-Bold.eot");
+ src: url("Montserrat-Bold.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-Bold.woff2") format("woff2"),
+ url("Montserrat-Bold.woff") format("woff");
+}
+
+/** Montserrat Bold-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 700;
+ font-style: italic;
+ src: url("Montserrat-BoldItalic.eot");
+ src: url("Montserrat-BoldItalic.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-BoldItalic.woff2") format("woff2"),
+ url("Montserrat-BoldItalic.woff") format("woff");
+}
+
+/** Montserrat ExtraBold **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 800;
+ font-style: normal;
+ src: url("Montserrat-ExtraBold.eot");
+ src: url("Montserrat-ExtraBold.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-ExtraBold.woff2") format("woff2"),
+ url("Montserrat-ExtraBold.woff") format("woff");
+}
+
+/** Montserrat ExtraBold-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 800;
+ font-style: italic;
+ src: url("Montserrat-ExtraBoldItalic.eot");
+ src: url("Montserrat-ExtraBoldItalic.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-ExtraBoldItalic.woff2") format("woff2"),
+ url("Montserrat-ExtraBoldItalic.woff") format("woff");
+}
+
+/** Montserrat Black **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 900;
+ font-style: normal;
+ src: url("Montserrat-Black.eot");
+ src: url("Montserrat-Black.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-Black.woff2") format("woff2"),
+ url("Montserrat-Black.woff") format("woff");
+}
+
+/** Montserrat Black-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 900;
+ font-style: italic;
+ src: url("Montserrat-BlackItalic.eot");
+ src: url("Montserrat-BlackItalic.eot?#iefix") format('embedded-opentype'),
+ url("Montserrat-BlackItalic.woff2") format("woff2"),
+ url("Montserrat-BlackItalic.woff") format("woff");
+}
+
+/** =================== MONTSERRAT ALTERNATES =================== **/
+
+/** Montserrat Alternates Thin **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 100;
+ font-style: normal;
+ src: url("MontserratAlternates-Thin.eot");
+ src: url("MontserratAlternates-Thin.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-Thin.woff2") format("woff2"),
+ url("MontserratAlternates-Thin.woff") format("woff");
+}
+
+/** Montserrat Alternates Thin-Italic **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 100;
+ font-style: italic;
+ src: url("MontserratAlternates-ThinItalic.eot");
+ src: url("MontserratAlternates-ThinItalic.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-ThinItalic.woff2") format("woff2"),
+ url("MontserratAlternates-ThinItalic.woff") format("woff");
+}
+
+/** Montserrat Alternates ExtraLight **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 200;
+ font-style: normal;
+ src: url("MontserratAlternates-ExtraLight.eot");
+ src: url("MontserratAlternates-ExtraLight.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-ExtraLight.woff2") format("woff2"),
+ url("MontserratAlternates-ExtraLight.woff") format("woff");
+}
+
+/** Montserrat Alternates ExtraLight-Italic **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 200;
+ font-style: italic;
+ src: url("MontserratAlternates-ExtraLightItalic.eot");
+ src: url("MontserratAlternates-ExtraLightItalic.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-ExtraLightItalic.woff2") format("woff2"),
+ url("MontserratAlternates-ExtraLightItalic.woff") format("woff");
+}
+
+/** Montserrat Alternates Light **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 300;
+ font-style: normal;
+ src: url("MontserratAlternates-Light.eot");
+ src: url("MontserratAlternates-Light.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-Light.woff2") format("woff2"),
+ url("MontserratAlternates-Light.woff") format("woff");
+}
+
+/** Montserrat Alternates Light-Italic **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 300;
+ font-style: italic;
+ src: url("MontserratAlternates-LightItalic.eot");
+ src: url("MontserratAlternates-LightItalic.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-LightItalic.woff2") format("woff2"),
+ url("MontserratAlternates-LightItalic.woff") format("woff");
+}
+
+/** Montserrat Alternates Regular **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 400;
+ font-style: normal;
+ src: url("MontserratAlternates-Regular.eot");
+ src: url("MontserratAlternates-Regular.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-Regular.woff2") format("woff2"),
+ url("MontserratAlternates-Regular.woff") format("woff");
+}
+
+/** Montserrat Alternates Regular-Italic **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 400;
+ font-style: italic;
+ src: url("MontserratAlternates-Italic.eot");
+ src: url("MontserratAlternates-Italic.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-Italic.woff2") format("woff2"),
+ url("MontserratAlternates-Italic.woff") format("woff");
+}
+
+/** Montserrat Alternates Medium **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 500;
+ font-style: normal;
+ src: url("MontserratAlternates-Medium.eot");
+ src: url("MontserratAlternates-Medium.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-Medium.woff2") format("woff2"),
+ url("MontserratAlternates-Medium.woff") format("woff");
+}
+
+/** Montserrat Alternates Medium-Italic **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 500;
+ font-style: italic;
+ src: url("MontserratAlternates-MediumItalic.eot");
+ src: url("MontserratAlternates-MediumItalic.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-MediumItalic.woff2") format("woff2"),
+ url("MontserratAlternates-MediumItalic.woff") format("woff");
+}
+
+/** Montserrat Alternates SemiBold **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 600;
+ font-style: normal;
+ src: url("MontserratAlternates-SemiBold.eot");
+ src: url("MontserratAlternates-SemiBold.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-SemiBold.woff2") format("woff2"),
+ url("MontserratAlternates-SemiBold.woff") format("woff");
+}
+
+/** Montserrat Alternates SemiBold-Italic **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 600;
+ font-style: italic;
+ src: url("MontserratAlternates-SemiBoldItalic.eot");
+ src: url("MontserratAlternates-SemiBoldItalic.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-SemiBoldItalic.woff2") format("woff2"),
+ url("MontserratAlternates-SemiBoldItalic.woff") format("woff");
+}
+
+/** Montserrat Alternates Bold **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 700;
+ font-style: normal;
+ src: url("MontserratAlternates-Bold.eot");
+ src: url("MontserratAlternates-Bold.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-Bold.woff2") format("woff2"),
+ url("MontserratAlternates-Bold.woff") format("woff");
+}
+
+/** Montserrat Alternates Bold-Italic **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 700;
+ font-style: italic;
+ src: url("MontserratAlternates-BoldItalic.eot");
+ src: url("MontserratAlternates-BoldItalic.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-BoldItalic.woff2") format("woff2"),
+ url("MontserratAlternates-BoldItalic.woff") format("woff");
+}
+
+/** Montserrat Alternates ExtraBold **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 800;
+ font-style: normal;
+ src: url("MontserratAlternates-ExtraBold.eot");
+ src: url("MontserratAlternates-ExtraBold.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-ExtraBold.woff2") format("woff2"),
+ url("MontserratAlternates-ExtraBold.woff") format("woff");
+}
+
+/** Montserrat Alternates ExtraBold-Italic **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 800;
+ font-style: italic;
+ src: url("MontserratAlternates-ExtraBoldItalic.eot");
+ src: url("MontserratAlternates-ExtraBoldItalic.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-ExtraBoldItalic.woff2") format("woff2"),
+ url("MontserratAlternates-ExtraBoldItalic.woff") format("woff");
+}
+
+/** Montserrat Alternates Black **/
+@font-face {
+ font-family: "Montserrat Alternates";
+ font-weight: 900;
+ font-style: normal;
+ src: url("MontserratAlternates-Black.eot");
+ src: url("MontserratAlternates-Black.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-Black.woff2") format("woff2"),
+ url("MontserratAlternates-Black.woff") format("woff");
+}
+
+/** Montserrat Alternates Black-Italic **/
+@font-face {
+ font-family: "Montserrat";
+ font-weight: 900;
+ font-style: italic;
+ src: url("MontserratAlternates-BlackItalic.eot");
+ src: url("MontserratAlternates-BlackItalic.eot?#iefix") format('embedded-opentype'),
+ url("MontserratAlternates-BlackItalic.woff2") format("woff2"),
+ url("MontserratAlternates-BlackItalic.woff") format("woff");
+} \ No newline at end of file
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.eot
new file mode 100644
index 0000000..fc23ac4
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.woff
new file mode 100644
index 0000000..11a3ce6
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.woff2
new file mode 100644
index 0000000..235a3c8
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Black.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.eot
new file mode 100644
index 0000000..a965308
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.woff
new file mode 100644
index 0000000..a2ddfd3
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.woff2
new file mode 100644
index 0000000..a8004a1
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BlackItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.eot
new file mode 100644
index 0000000..f17c416
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.woff
new file mode 100644
index 0000000..9fc7e5e
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.woff2
new file mode 100644
index 0000000..22ff691
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Bold.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.eot
new file mode 100644
index 0000000..90cf559
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.woff
new file mode 100644
index 0000000..e1483bd
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.woff2
new file mode 100644
index 0000000..bed052a
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-BoldItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.eot
new file mode 100644
index 0000000..3b1d443
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.woff
new file mode 100644
index 0000000..f6a794d
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.woff2
new file mode 100644
index 0000000..e2cd944
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBold.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.eot
new file mode 100644
index 0000000..9af7c24
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.woff
new file mode 100644
index 0000000..1403e27
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.woff2
new file mode 100644
index 0000000..979839f
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraBoldItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.eot
new file mode 100644
index 0000000..345c60d
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.woff
new file mode 100644
index 0000000..6c47d58
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.woff2
new file mode 100644
index 0000000..9fe8bb2
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLight.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.eot
new file mode 100644
index 0000000..29b4c1f
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.woff
new file mode 100644
index 0000000..622cc9a
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.woff2
new file mode 100644
index 0000000..2632c08
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ExtraLightItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.eot
new file mode 100644
index 0000000..6e8c22e
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.woff
new file mode 100644
index 0000000..65094d4
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.woff2
new file mode 100644
index 0000000..40944d4
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Italic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.eot
new file mode 100644
index 0000000..e999003
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.woff
new file mode 100644
index 0000000..4a9a0d4
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.woff2
new file mode 100644
index 0000000..c7ef715
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Light.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.eot
new file mode 100644
index 0000000..fd1b318
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.woff
new file mode 100644
index 0000000..22f432f
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.woff2
new file mode 100644
index 0000000..9f3b5d0
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-LightItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.eot
new file mode 100644
index 0000000..4dd10f2
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.woff
new file mode 100644
index 0000000..92bd129
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.woff2
new file mode 100644
index 0000000..f8f0530
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Medium.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.eot
new file mode 100644
index 0000000..9f33af7
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.woff
new file mode 100644
index 0000000..aefdeee
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.woff2
new file mode 100644
index 0000000..9775f42
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-MediumItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.eot
new file mode 100644
index 0000000..ad10b6b
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.woff
new file mode 100644
index 0000000..3aaf1f7
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.woff2
new file mode 100644
index 0000000..f7d23ca
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Regular.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.eot
new file mode 100644
index 0000000..13a121d
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.woff
new file mode 100644
index 0000000..35ba984
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.woff2
new file mode 100644
index 0000000..80bf4c2
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBold.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.eot
new file mode 100644
index 0000000..799cae5
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.woff
new file mode 100644
index 0000000..39283e1
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.woff2
new file mode 100644
index 0000000..0bb26ae
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-SemiBoldItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.eot
new file mode 100644
index 0000000..d49ba52
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.woff
new file mode 100644
index 0000000..9f031c2
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.woff2
new file mode 100644
index 0000000..23a80f9
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-Thin.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.eot b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.eot
new file mode 100644
index 0000000..2fcd16d
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.eot
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.woff b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.woff
new file mode 100644
index 0000000..c601966
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.woff
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.woff2 b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.woff2
new file mode 100644
index 0000000..d98a952
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/MontserratAlternates-ThinItalic.woff2
Binary files differ
diff --git a/configs/conferences/35c3/assets/montserrat/README.MD b/configs/conferences/35c3/assets/montserrat/README.MD
new file mode 100644
index 0000000..811ad40
--- /dev/null
+++ b/configs/conferences/35c3/assets/montserrat/README.MD
@@ -0,0 +1,35 @@
+# The Montserrat Font Project
+To use this font as a webfont, ```Montserrat.css``` is included.
+
+## How to use
+### 1. @import
+You can import the file into your stylesheet as follows:
+```css
+@import url("static/fonts/Montserrat/fonts/webfonts/Montserrat.css");
+```
+
+**NOTE:** The directory where the stylesheet is placed.
+
+Then we can use it to style elements:
+```css
+body {
+ font-family: 'Montserrat', sans-serif;
+ font-weight: 400;
+}
+```
+
+### 2. \<link>ing a stylesheet
+Similarly, you could link to the same asset as you would any other CSS filter, in the \<head> of the HTML document rather than in the CSS:
+```html
+<link rel="stylesheet" type="text/css" href="static/fonts/Montserrat/fonts/webfonts/Montserrat.css">
+```
+
+**NOTE:** The directory where the stylesheet is placed.
+
+Then we can use it to style elements:
+```css
+body {
+ font-family: 'Montserrat', sans-serif;
+ font-weight: 400;
+}
+``` \ No newline at end of file
diff --git a/configs/conferences/35c3/config.php b/configs/conferences/35c3/config.php
new file mode 100644
index 0000000..e9e16cf
--- /dev/null
+++ b/configs/conferences/35c3/config.php
@@ -0,0 +1,802 @@
+<?php
+
+$CONFIG['CONFERENCE'] = array(
+ /**
+ * Der Startzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns davor, wird die Closed-Seite
+ * mit einem Text der Art "hat noch nicht angefangen" angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. (Siehe aber ENDS_AT
+ * und CLOSED weiter unten)
+ */
+ 'STARTS_AT' => strtotime("2018-12-27 06:00"),
+
+ /**
+ * Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie-
+ * Gut-Nach-Hause-Seite sowie einem Ausblick auf die kommenden Events angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten)
+ */
+ 'ENDS_AT' => strtotime("2018-12-30 20:00"),
+
+ /**
+ * Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before'
+ * simuliert, dass die Konferenz noch nicht begonnen hat. Der Wert 'after' simuliert, dass die Konferenz
+ * bereits beendet ist. 'running' simuliert eine laufende Konferenz.
+ *
+ * Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent
+ * zu 'running'.
+ */
+ // 'CLOSED' => false,
+
+ /**
+ * Mit diesem Schalter kann die Veranstaltung von der Startseite und der API
+ * versteckt werden, ist aber dennoch über ihre URL verfügbar.
+ *
+ * Dies ist z.B. nützlich um eine kleinere Streamingseite für Übersetzer
+ * bereit zu stellen. Werte: true|false Default: false
+ */
+ 'UNLISTED' => false,
+
+ /**
+ * Titel der Konferenz (kann Leer- und Sonderzeichen enthalten)
+ * Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als
+ * Anzeigetext benutzt
+ */
+ 'TITLE' => '35C3',
+
+ /**
+ * Veranstalter
+ * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'AUTHOR' => 'CCC',
+
+ /**
+ * Beschreibungstext
+ * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'DESCRIPTION' => 'Live streaming from the 35th Chaos Communication Congress',
+
+ /**
+ * Schlüsselwortliste, Kommasepariert
+ * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'KEYWORDS' => '35C3, Hacking, Chaos Computer Club, Video, Music, Podcast, Media, Streaming, Hacker, Leipzig, Refreshing Memories',
+
+ /**
+ * HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags)
+ * Sollte üblicherweise nur Inline-Elemente enthalten
+ * Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet
+ */
+ 'FOOTER_HTML' => '
+ by <a href="https://ccc.de">Chaos Computer Club e.V</a>,
+ <a href="https://www.isystems.at/">iSystems</a>,
+ <a href="https://fem.tu-ilmenau.de/">FeM</a>,
+ <a href="https://www.ags.tu-bs.de/">ags</a> &
+ <a href="https://c3voc.de">C3VOC</a>
+ ',
+
+ /**
+ * HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header)
+ * wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Blaues
+ * Wischiwaschi auf http://media.ccc.de/)
+ *
+ * Dieser HTML-Block wird üblicherweise in der main.less speziell für die
+ * Konferenz umgestaltet.
+ *
+ * Wird diese Zeile auskommentiert, wird kein Banner ausgegeben.
+ */
+ 'BANNER_HTML' => '
+ <h1>35C3 REFRESHING MEMORIES</h1>
+ <img class="block" src="configs/conferences/35c3/assets/min/35C3_Logo-mit-Verlauf.svg" alt="35C3 refreshing memories logo block"/>
+ <img class="inline" src="configs/conferences/35c3/assets/logo-inline.svg" alt="35C3 refreshing memories logo inline"/>
+ ',
+
+ /**
+ * Link zu den Recordings
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ 'RELEASES' => 'https://media.ccc.de/c/35c3',
+
+ /**
+ * Um die interne ReLive-Ansicht zu aktivieren, kann hier ein ReLive-JSON
+ * konfiguriert werden. Üblicherweise wird diese Datei über das Script
+ * configs/download.sh heruntergeladen, welches von einem Cronjob
+ * regelmäßig getriggert wird.
+ *
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ 'RELIVE_JSON' => 'https://cdn.c3voc.de/relive/35c3/index.json',
+);
+
+/**
+ * Konfiguration der Stream-Übersicht auf der Startseite
+ */
+$CONFIG['OVERVIEW'] = array(
+ /**
+ * Abschnitte aud der Startseite und darunter aufgeführte Räume
+ * Es können beliebig neue Gruppen und Räume hinzugefügt werden
+ *
+ * Die Räume müssen in $CONFIG['ROOMS'] konfiguriert werden,
+ * sonst werden sie nicht angezeigt.
+ */
+ 'GROUPS' => array(
+ 'Live' => array(
+ 'halla',
+ 'hallb',
+ 'hallc',
+ 'halld',
+ 'halle',
+ ),
+ 'Assemblies Live' => array(
+ 'chaoswest',
+ 'wikipakawg',
+ 'oio'
+ ),
+ ),
+);
+
+
+
+/**
+ * Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets oä.)
+ */
+$CONFIG['ROOMS'] = array(
+ /**
+ * Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs,
+ * in $CONFIG['OVERVIEW'] oder im Feedback verwendet wird.
+ *
+ * Der Raum-Slug darf ausschliesslich aus "unkritischen" Zeichen
+ * ([a-zA-Z0-9_\-]) bestehen und insbesondere keine Leerzeichen
+ * enthalten.
+ */
+ 'halla' => array(
+ /**
+ * Angezeige-Name
+ */
+ 'DISPLAY' => 'Adams',
+
+ /**
+ * Anzeigename abgekürzt - wird im Schedule angezeigt.
+ * Auf dem Overview im Mobile view.
+ *
+ * DISPLAY_SHORT' => 'Shorter',
+ */
+
+ 'WIDE' => true,
+
+ /**
+ * ID des Video/Audio-Streams. Die Stream-ID ist davon abhängig, welches
+ * Event-Case in welchem Raum aufgebaut wird und wird üblicherweise von
+ * s1 bis s5 durchnummeriert.
+ */
+ 'STREAM' => 's1',
+
+ /**
+ * Stream-Vorschaubildchen auf der Übersichtsseite anzeigen
+ * Damit das funktioniert muss der entsprechende runit-Task auf dem
+ * CDN-Quell-Host (live.ber) laufen.
+ */
+ 'PREVIEW' => true,
+
+ /**
+ * Übersetzungstonspur aktivieren
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist werden nur
+ * die native-Streams verwendet, andernfalls wird native und translated
+ * angeboten und auch für beide Tonspuren eine Player-Seite angezeigt.
+ *
+ * Betrifft video sd / hd, slides, audio
+ *
+ * Ein Label für die Übersetzung oder mehrere Übersetzungsspuren können
+ * wie folgt konfiguriert werden:
+ *
+ * 'TRANSLATION' => [
+ * ['endpoint' => 'translated', 'label' => 'Translated1'],
+ * ['endpoint' => 'translated-2', 'label' => 'Translated2']
+ * ],
+ *
+ * Ein einfaches true entspricht dabei folgendem:
+ *
+ * 'TRANSLATION' => [
+ * ['endpoint' => 'translated', 'label' => 'Translated']
+ * ],
+ *
+ * Sollte die Sprache während der Veranstaltung Konstant sein, kann ein
+ * Label auch spezifisch konfiguriert werden z.B. 'label' => 'English'.
+ */
+ 'TRANSLATION' => [
+ ['endpoint' => 'translated', 'label' => 'Translated1'],
+ ['endpoint' => 'translated-2', 'label' => 'Translated2']
+ ],
+
+ /**
+ * stereo-Tonspur statt native-Tonspur benutzen
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist werden
+ * die "native"-Mono-Streams verwendet, andernfalls wird statt "native"
+ * der Streamname "stereo" eingesetzt. Im normalen Konferenz-Setup
+ * müssen dann beide Kanäle der Kamera mit einem Signal bespielt werden.
+ */
+ 'STEREO' => false,
+
+ /**
+ * SD-Video-Stream (1024×576) verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein SD-Video
+ * angeboten. Wird auch HD_VIDEO auf false gesetzt oder auskommentiert ist, wird
+ * für diesen Raum überhaupt kein Video angeboten.
+ *
+ * In diesem Fall wird, sofern jeweils aktiviert, Slides, Audio und zuletzt Musik
+ * als Default-Stream angenommen.
+ */
+ 'SD_VIDEO' => true,
+
+ /**
+ * HD-Video-Stream (1920×1080) verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein HD-Video
+ * angeboten. Wird auch SD_VIDEO auf false gesetzt oder auskommentiert ist, wird
+ * für diesen Raum überhaupt kein Video angeboten.
+ *
+ * In diesem Fall wird, sofern jeweils aktiviert, Slides, Audio und zuletzt Musik
+ * als Default-Stream angenommen.
+ */
+ 'HD_VIDEO' => true,
+ 'DASH' => true,
+
+ /**
+ * Slide-Only-Stream (1024×576) verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Slide-Only-
+ * Stream angeboten. Für diesen Raum wird dann keim Slides-Tab angeboten.
+ *
+ * In diesem Fall wird, sofern jeweils aktiviert, Audio und zuletzt Musik als
+ * Default-Stream angenommen.
+ */
+ 'SLIDES' => true,
+
+ /**
+ * Audio-Only-Stream verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Audio-Only-
+ * Stream angeboten. Für diesen Raum wird dann keim Audio-Tab angeboten.
+ *
+ * In diesem Fall wird, sofern aktiviert, Musik als Default-Stream angenommen.
+ */
+ 'AUDIO' => true,
+
+ /**
+ * Musik-Stream verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Musik-Stream
+ * angeboten. Für diesen Raum wird dann keim Musik-Tab angeboten.
+ *
+ * Ist kein einziger Stream angebote, wird statt der Stream-Seite ein 404-Fehler
+ * angezeigt.
+ */
+ 'MUSIC' => false,
+
+ /**
+ * Fahrplan-Ansicht auf der Raum-Seite aktivieren (boolean)
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird der Raum nicht im Fahrplan gesucht und auch auf der Startseite
+ * findet keine Darstellung statt.
+ *
+ * Ebenso können alle Fahrplan-Funktionialitäten durch auskommentieren
+ * des globalen $CONFIG['SCHEDULE']-Blocks deaktiviert werden
+ */
+ 'SCHEDULE' => true,
+
+ /**
+ * Name des Raums im Fahrplan
+ * Wenn diese Zeile auskommentiert ist wird der Raum-Display-Name verwendet
+ */
+ 'SCHEDULE_NAME' => 'Adams',
+
+ /**
+ * Feedback anzeigen (boolean)
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * taucht der Raum auch im globalen Feedback-Formular nicht auf.
+ *
+ * Ebenso können alle Feedback-Funktionialitäten durch auskommentieren
+ * des globalen $CONFIG['FEEDBACK']-Blocks deaktiviert werden
+ */
+ 'FEEDBACK' => true,
+
+ /**
+ * Subtitles-Player aktivieren (boolean)
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird der Subtitles-Button und die damit verbundenen Funktionen deaktiviert.
+ *
+ * Ebenso können alle Subtitles-Funktionialitäten durch auskommentieren
+ * des globalen $CONFIG['SUBTITLES']-Blocks deaktiviert werden
+ */
+ 'SUBTITLES' => false,
+
+ /**
+ * ID des Raumes im L2S2-System (int)
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * für diesen Raum das Subtitles-System deaktiviert.
+ */
+ 'SUBTITLES_ROOM_ID' => 1,
+
+ /**
+ * Embed-Form aktivieren (boolean)
+ *
+ * Ist dieses Feld auf true gesetzt, wird ein Embed-Tab unter dem Video
+ * angezeigt. Darüber kann der Player als iframe eingebunden werden.
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird kein Embed-Tab angeboten und die URL zum Einbetten existiert nicht.
+ *
+ * Ebenso können alle Embedding-Funktionialitäten durch auskommentieren
+ * des globalen $CONFIG['EMBED']-Blocks deaktiviert werden
+ */
+ 'EMBED' => true,
+
+ /**
+ * IRC-Link aktivieren (boolean)
+ *
+ * Solange Twitter oder IRC aktiviert ist, wird ein "Chat"-Tab mit den
+ * jeweiligen Links angezeigt.
+ *
+ * Ist dieses Feld auf true gesetzt, wird ein irc://-Link angezeigt.
+ * WebIrc wird nach dem Congress nicht mehr unterstützt ;)
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird kein IRC-Link angezeigt
+ *
+ * Ebenso können alle IRC-Links durch auskommentieren
+ * des globalen $CONFIG['IRC']-Blocks deaktiviert werden
+ */
+ 'IRC' => true,
+
+ /**
+ * Mit dem Angaben in diesem Block können die Vorgaben aus dem
+ * globalen $CONFIG['IRC'] Block überschrieben werden.
+ *
+ * Der globale $CONFIG['IRC']-Block muss trotzdem existieren,
+ * da sonst überhaupt kein IRC-Link erzeugt wird. (ggf. einfach `= true` setzen)
+ */
+ 'IRC_CONFIG' => array(
+ 'DISPLAY' => '#35C3-hall-a @ hackint',
+ 'URL' => 'ircs://irc.hackint.org:6697/35C3-hall-a',
+ ),
+
+ /**
+ * Twitter-Link aktivieren (boolean)
+ *
+ * Ist dieses Feld auf true gesetzt, wird ein Link zu Twitter angezeigt.
+ *
+ * Solange Twitter oder IRC aktiviert ist, wird ein "Chat"-Tab mit den
+ * jeweiligen Links angezeigt.
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird kein Twitter-Link angezeigt
+ *
+ * Ebenso können alle Twitter-Links durch auskommentieren
+ * des globalen $CONFIG['TWITTER']-Blocks deaktiviert werden
+ **/
+ 'TWITTER' => true,
+
+ /**
+ * Mit dem Angaben in diesem Block können die Vorgaben aus dem
+ * globalen $CONFIG['TWITTER'] Block überschrieben werden.
+ *
+ * Der globale $CONFIG['TWITTER']-Block muss trotzdem existieren,
+ * da sonst überhaupt kein IRC-Link erzeugt wird. (ggf. einfach `= true` setzen)
+ */
+ 'TWITTER_CONFIG' => array(
+ 'DISPLAY' => '#hallA @ twitter',
+ 'TEXT' => '#35C3 #hallA',
+ ),
+ ),
+
+ 'hallb' => array(
+ 'DISPLAY' => 'Borg',
+ 'STREAM' => 's2',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => [
+ ['endpoint' => 'translated', 'label' => 'Translated1'],
+ ['endpoint' => 'translated-2', 'label' => 'Translated2']
+ ],
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'DASH' => true,
+ 'AUDIO' => true,
+ 'SLIDES' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'Borg',
+ 'FEEDBACK' => true,
+ 'SUBTITLES' => false,
+ 'SUBTITLES_ROOM_ID' => 2,
+ 'EMBED' => true,
+ 'IRC' => true,
+ 'IRC_CONFIG' => array(
+ 'DISPLAY' => '#35C3-hall-b @ hackint',
+ 'URL' => 'ircs://irc.hackint.org:6697/35C3-hall-b',
+ ),
+ 'TWITTER' => true,
+ 'TWITTER_CONFIG' => array(
+ 'DISPLAY' => '#hallB @ twitter',
+ 'TEXT' => '#35C3 #hallB',
+ ),
+ ),
+
+ 'hallc' => array(
+ 'DISPLAY' => 'Clarke',
+ # Joan Clarke
+ 'STREAM' => 's3',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => [
+ ['endpoint' => 'translated', 'label' => 'Translated1'],
+ ['endpoint' => 'translated-2', 'label' => 'Translated2']
+ ],
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'DASH' => true,
+ 'AUDIO' => true,
+ 'SLIDES' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'Clarke',
+ 'FEEDBACK' => true,
+ 'SUBTITLES' => false,
+ 'SUBTITLES_ROOM_ID' => 2,
+ 'EMBED' => true,
+ 'IRC' => true,
+ 'IRC_CONFIG' => array(
+ 'DISPLAY' => '#35C3-hall-c @ hackint',
+ 'URL' => 'ircs://irc.hackint.org:6697/35C3-hall-c',
+ ),
+ 'TWITTER' => true,
+ 'TWITTER_CONFIG' => array(
+ 'DISPLAY' => '#hallC @ twitter',
+ 'TEXT' => '#35C3 #hallC',
+ ),
+ ),
+
+ 'halld' => array(
+ 'DISPLAY' => 'Dijkstra',
+ 'STREAM' => 's4',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => [
+ ['endpoint' => 'translated', 'label' => 'Translated'],
+ ['endpoint' => 'translated-2', 'label' => 'Translated2']
+ ],
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'DASH' => true,
+ 'AUDIO' => true,
+ 'SLIDES' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'Dijkstra',
+ 'FEEDBACK' => true,
+ 'SUBTITLES' => false,
+ 'SUBTITLES_ROOM_ID' => 2,
+ 'EMBED' => true,
+ 'IRC' => true,
+ 'IRC_CONFIG' => array(
+ 'DISPLAY' => '#35C3-hall-d @ hackint',
+ 'URL' => 'ircs://irc.hackint.org:6697/35C3-hall-d',
+ ),
+ 'TWITTER' => true,
+ 'TWITTER_CONFIG' => array(
+ 'DISPLAY' => '#hallD @ twitter',
+ 'TEXT' => '#35C3 #hallD',
+ ),
+ ),
+
+ 'halle' => array(
+ 'DISPLAY' => 'Eliza',
+# 'WIDE' => true,
+ 'STREAM' => 's5',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => [
+ ['endpoint' => 'translated', 'label' => 'Translated'],
+ ['endpoint' => 'translated-2', 'label' => 'Translated2']
+ ],
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'DASH' => true,
+ 'AUDIO' => true,
+ 'SLIDES' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'Eliza',
+ 'FEEDBACK' => true,
+ 'SUBTITLES' => false,
+ 'SUBTITLES_ROOM_ID' => 2,
+ 'EMBED' => true,
+ 'IRC' => true,
+ 'IRC_CONFIG' => array(
+ 'DISPLAY' => '#35C3-hall-e @ hackint',
+ 'URL' => 'ircs://irc.hackint.org:6697/35C3-hall-e',
+ ),
+ 'TWITTER' => true,
+ 'TWITTER_CONFIG' => array(
+ 'DISPLAY' => '#hallE @ twitter',
+ 'TEXT' => '#35C3 #hallE',
+ ),
+ ),
+
+ 'chaoswest' => array(
+ 'DISPLAY' => 'Chaos West Bühne',
+ 'DISPLAY_SHORT' => 'Chaos West',
+ 'STREAM' => 's150',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => [
+ ],
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'DASH' => true,
+ 'AUDIO' => true,
+ 'SLIDES' => false,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'Chaos West Bühne',
+ 'FEEDBACK' => true,
+ 'SUBTITLES' => false,
+ 'SUBTITLES_ROOM_ID' => 2,
+ 'EMBED' => true,
+ 'IRC' => false,
+ 'TWITTER' => true,
+ 'TWITTER_CONFIG' => array(
+ 'DISPLAY' => '@ChaosWildWest @ twitter',
+ 'TEXT' => '@ChaosWildWest',
+ ),
+ 'IRC' => true,
+ 'IRC_CONFIG' => array(
+ 'DISPLAY' => '#chaoswest-stage @ hackint',
+ 'URL' => 'ircs://irc.hackint.org:6697/chaoswest-stage',
+ ),
+ ),
+
+ 'wikipakawg' => array(
+ 'DISPLAY' => 'WikiPakaWG Esszimmer',
+ 'DISPLAY_SHORT' => 'WikiPakaWG',
+ 'STREAM' => 's151',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => [
+ ],
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'DASH' => true,
+ 'AUDIO' => true,
+ 'SLIDES' => false,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'WikiPakaWG Esszimmer',
+ 'FEEDBACK' => true,
+ 'SUBTITLES' => false,
+ 'SUBTITLES_ROOM_ID' => 2,
+ 'EMBED' => true,
+ 'IRC' => false,
+ 'TWITTER' => true,
+ 'TWITTER_CONFIG' => array(
+ 'DISPLAY' => '#wikipakaWG @ twitter',
+ 'TEXT' => '#wikipakaWG',
+ ),
+ ),
+
+ 'oio' => array(
+ 'DISPLAY' => 'Open Infrastructure Orbit Vortrags-Arena',
+ 'DISPLAY_SHORT' => 'OIO',
+ 'STREAM' => 'soio',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => [
+ ],
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'DASH' => true,
+ 'AUDIO' => true,
+ 'SLIDES' => false,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'OIO Vortrags-Arena',
+ 'FEEDBACK' => true,
+ 'SUBTITLES' => false,
+ 'SUBTITLES_ROOM_ID' => 2,
+ 'EMBED' => true,
+ 'IRC' => false,
+ 'TWITTER' => true,
+ 'TWITTER_CONFIG' => array(
+ 'DISPLAY' => 'freifunk @ twitter',
+ 'TEXT' => '@freifunk',
+ ),
+ ),
+);
+
+/**
+ * Konfigurationen zum Konferenz-Fahrplan
+ * Wird dieser Block auskommentiert, werden alle Fahrplan-Bezogenen Features deaktiviert
+ */
+$CONFIG['SCHEDULE'] = array(
+ /**
+ * URL zum Fahrplan-XML
+ *
+ * Diese URL muss immer verfügbar sein, sonst könnte die Programm-Ansicht
+ * aufhören zu funktionieren. Üblicherweise wird diese daher Datei über
+ * das Script configs/download.sh heruntergeladen, welches von einem
+ * Cronjob regelmäßig getriggert wird.
+ */
+ #'URL' => 'https://fahrplan.events.ccc.de/congress/2018/Fahrplan/schedule.xml',
+ #'URL' => 'https://events.ccc.de/congress/2018/Fahrplan/schedule.xml',
+ 'URL' => 'http://data.c3voc.de/35C3/everything.schedule.xml',
+
+ /**
+ * Nur die angegebenen Räume aus dem Fahrplan beachten
+ *
+ * Wird diese Zeile auskommentiert, werden alle Räume angezeigt
+ */
+ 'ROOMFILTER' => array('Adams', 'Borg', 'Clarke', 'Dijkstra', 'Eliza',
+ 'WikiPakaWG Esszimmer', 'Chaos West Bühne', 'OIO Vortrags-Arena'),
+
+ /**
+ * Skalierung der Programm-Vorschau in Sekunden pro Pixel
+ */
+ 'SCALE' => 7,
+
+ /**
+ * Simuliere das Verhalten als wäre die Konferenz bereits heute
+ *
+ * Diese folgende Beispiel-Zeile Simuliert, dass das
+ * Konferenz-Datum 2016-12-29 auf den heutigen Tag 2016-02-24 verschoben ist.
+ */
+ //'SIMULATE_OFFSET' => strtotime(/* Conference-Date */ '2016-12-27') - strtotime(/* Today */ date('Y-m-d')),
+ //'SIMULATE_OFFSET' => 0,
+);
+
+
+
+/**
+ * Konfiguration des Feedback-Formulars
+ *
+ * Wird dieser Block auskommentiert, wird das gesamte Feedback-System deaktiviert
+ */
+$CONFIG['FEEDBACK'] = array(
+ /**
+ * DSN zum abspeichern der eingegebenen Daten
+ * die Datenbank muss eine Tabelle enthaltem, die dem in `lib/schema.sql` angegebenen
+ * Schema entspricht.
+ *
+ * Achtung vor Dateirechten: Bei SQLite reicht es nicht, wenn wer Webseiten-Benutzer
+ * die .sqlite3-Datei schreiben darf, er muss auch im übergeordneten Order neue
+ * (Lock-)Dateien anlegen dürfen
+ */
+ 'DSN' => 'sqlite:/opt/streaming-feedback/feedback.sqlite3',
+
+ /**
+ * Login-Daten für die /feedback/read/-Seite, auf der eingegangenes
+ * Feedback gelesen werden kann.
+ *
+ * Durch auskommentieren der beiden Optionen wird diese Seite komplett deaktiviert,
+ * es kann dann nur noch durch manuelle Inspektion der .sqlite3-Datei auf das Feedback
+ * zugegriffen werden.
+ */
+ 'USERNAME' => 'katze',
+ 'PASSWORD' => trim(@file_get_contents('/opt/streaming-feedback/feedback-password')),
+);
+
+/**
+ * Globaler Schalter für die Embedding-Funktionalitäten
+ *
+ * Wird diese Zeile auskommentiert oder auf False gesetzt, werden alle
+ * Embedding-Funktionen deaktiviert.
+ */
+$CONFIG['EMBED'] = true;
+
+/**
+ * Konfiguration des L2S2-Systems
+ * https://github.com/c3subtitles/L2S2
+ *
+ * Wird dieser Block auskommentiert, wird das gesamte Subtitle-System deaktiviert
+ */
+
+// $CONFIG['SUBTITLES'] = array(
+// /**
+// * URL des L2S2 Primus-Servers
+// */
+// 'PRIMUS_URL' => 'https://live.c3subtitles.de/',
+//
+// /**
+// * URL des L2S2 Frontend-Servers
+// */
+// 'FRONTEND_URL' => 'https://live.c3subtitles.de/',
+// );
+
+/**
+ * Globale Konfiguration der IRC-Links.
+ *
+ * Wird dieser Block auskommentiert, werden keine IRC-Links mehr erzeugt. Sollen die
+ * IRC-Links für jeden Raum einzeln konfiguriert werden, muss dieser Block trotzdem
+ * existieren sein. ggf. einfach auf true setzen:
+ *
+ * $CONFIG['IRC'] = true
+ */
+$CONFIG['IRC'] = array(
+ /**
+ * Anzeigetext für die IRC-Links.
+ *
+ * %s wird durch den Raum-Slug ersetzt.
+ * Ist eine weitere Anpassung erfoderlich, kann ein IRC_CONFIG-Block in der
+ * Raum-Konfiguration zum Überschreiben dieser Angaben verwendet werden.
+ */
+ 'DISPLAY' => '#35C3-%s @ hackint',
+
+ /**
+ * URL für die IRC-Links.
+ * Hierbei kann sowohl ein irc://-Link als auch ein Link zu einem
+ * WebIrc-Provider wie z.B. 'https://kiwiirc.com/client/irc.hackint.eu/#33C3-%s'
+ * verwendet werden.
+ *
+ * %s wird durch den urlencodeten Raum-Slug ersetzt.
+ * Eine Anpassung kann ebenfalls in der Raum-Konfiguration vorgenommen werden.
+ */
+ 'URL' => 'ircs://irc.hackint.org:6697/35C3-%s',
+);
+
+/**
+ * Globale Konfiguration der Twitter-Links.
+ *
+ * Wird dieser Block auskommentiert, werden keine Twitter-Links mehr erzeugt. Sollen die
+ * Twitter-Links für jeden Raum einzeln konfiguriert werden, muss dieser Block trotzdem
+ * existieren sein. ggf. einfach auf true setzen:
+ *
+ * $CONFIG['TWITTER'] = true
+ */
+$CONFIG['TWITTER'] = array(
+ /**
+ * Anzeigetext für die Twitter-Links.
+ *
+ * %s wird durch den Raum-Slug ersetzt.
+ * Ist eine weitere Anpassung erfoderlich, kann ein TWITTER_CONFIG-Block in der
+ * Raum-Konfiguration zum Überschreiben dieser Angaben verwendet werden.
+ */
+ 'DISPLAY' => '#%s @ twitter',
+
+ /**
+ * Vorgabe-Tweet-Text für die Twitter-Links.
+ *
+ * %s wird durch den Raum-Slug ersetzt.
+ * Eine Anpassung kann ebenfalls in der Raum-Konfiguration vorgenommen werden.
+ */
+ 'TEXT' => '#35C3 #%s',
+);
+
+/**
+ * Liste zusätzlich herunterzuladender Dateien
+ *
+ * Dict mit dem Dateinamen im Key und einer URL im Value. Die Dateien werden
+ * unter dem angegebenen Dateinamen in diesem Konfigurationsordner abgelegt.
+ */
+$CONFIG['EXTRA_FILES'] = array(
+ 'schedule.xml' => 'https://fahrplan.events.ccc.de/congress/2018/Fahrplan/schedule.xml',
+ 'schedule.json' => 'https://fahrplan.events.ccc.de/congress/2018/Fahrplan/schedule.json',
+ 'schedule.ics' => 'https://fahrplan.events.ccc.de/congress/2018/Fahrplan/schedule.ics',
+ 'schedule.xcal' => 'https://fahrplan.events.ccc.de/congress/2018/Fahrplan/schedule.xcal',
+
+ 'everything.schedule.xml' => 'http://data.c3voc.de/35C3/everything.schedule.xml',
+ 'everything.schedule.json' => 'http://data.c3voc.de/35C3/everything.schedule.json',
+
+ 'workshops.schedule.xml' => 'http://data.c3voc.de/35C3/workshops.schedule.xml',
+ 'workshops.schedule.json' => 'http://data.c3voc.de/35C3/workshops.schedule.json',
+);
+
+return $CONFIG;
diff --git a/configs/conferences/35c3/main.less b/configs/conferences/35c3/main.less
new file mode 100644
index 0000000..8bbbd6c
--- /dev/null
+++ b/configs/conferences/35c3/main.less
@@ -0,0 +1,448 @@
+@import "../../../assets/css/_structure.less";
+
+/*
+ * color
+ */
+@color-blue: rgb(0, 132, 176); // fresh
+@color-green: rgb(0, 163, 86); // hope
+@color-grey: rgb(77, 77, 76); // reboot
+
+@color-grey-darkest: darken(@color-grey, 20%);
+@color-grey-darker: darken(@color-grey, 10%);
+@color-grey-lighter: lighten(@color-grey, 20%);
+@color-grey-lightest: lighten(@color-grey, 40%); // highlight
+@color-grey-readable: lighten(@color-grey, 50%);
+@color-grey-readable-focused: lighten(@color-grey, 75%);
+
+// often configured values (and their defaults):
+@brand-primary: @color-blue;
+@text-color: @color-grey-readable;
+
+@link-color: @color-blue;
+@link-hover-color: @color-green;
+
+@color-nav-icons: mix(@color-green, @color-blue, 75%);
+
+/*
+ * navbar
+ *
+ * reminder, do not mess so much with the navbar because boostrap nav
+ * is hard and will kick your butt on mobile
+ */
+@navbar-height: 70px;
+@navbar-default-bg: black;
+@navbar-default-border: black;
+
+@navbar-default-link-color: white;
+@navbar-default-link-hover-color: @link-hover-color;
+
+/*
+ * buttons
+ */
+@btn-font-weight: 600;
+a.btn, input.btn, .btn-primary {
+ text-transform: uppercase;
+ color: black;
+}
+a.btn:hover, input.btn:hover {
+ color: @color-grey-readable-focused;
+}
+
+@btn-default-color: @color-grey;
+@btn-default-bg: @color-blue;
+@btn-default-border: @color-grey-darker;
+
+@btn-primary-color: @color-grey;
+@btn-primary-bg: @color-green;
+@btn-primary-border: @color-grey-darker;
+
+/*
+ * font
+ */
+@import url("/configs/conferences/35c3/assets/montserrat/Montserrat.css");
+
+.font-headline {
+ color: @color-grey;
+ font-family: 'Montserrat', sans-serif;
+ font-weight: 900; /* black*/
+ text-transform: uppercase;
+}
+
+.font-sub-line {
+ color: @color-grey;
+ font-family: 'Montserrat', sans-serif;
+ font-weight: 400; /* black*/
+ text-transform: uppercase;
+}
+
+.font-running-text {
+ color: @color-grey-readable;
+ font-family: 'Montserrat', sans-serif;
+ font-weight: 400; /* black*/
+}
+
+
+/*
+ * Border specials
+ */
+.border-resistor-2px-bottom-right {
+ border-image:
+ url("/configs/conferences/35c3/assets/bg-resistor.gif") /* source */
+ 200 200 e('/') /* slice */
+ 200px 200px e('/') /* width */
+ 1rem round space; /* repeat */
+}
+
+/*
+ * style
+ */
+
+body {
+ background-color: black;
+ padding: @navbar-height 0;
+
+ .font-running-text();
+ font-size: 13pt;
+
+ @media (max-width: 498px) { /* when the navbar breaks */
+ padding: 165px 0;
+ }
+}
+
+nav.navbar {
+ .navbar-brand {
+ font-size: 16pt;
+ letter-spacing: 0.2px;
+ color: white;
+ }
+
+ .navbar-right {
+ text-align: right;
+
+ .btn-ssl, a.feedback, a.releases, a.about {
+ color: @color-nav-icons;
+ background-color: transparent;
+ border-color: @color-nav-icons;
+
+ &:hover {
+ color: black;
+ background-color: @color-nav-icons;
+ border-color: @color-nav-icons;
+ }
+ }
+
+ .btn-ssl.btn-warning {
+ color: grey;
+ background: transparent;
+ border-color: grey;
+ }
+ }
+
+ &:after {
+ display: block;
+ height: 2px;
+ padding-bottom: 2px;
+ background-image: linear-gradient(@color-blue 10%, @color-green 90%);
+ }
+}
+
+h1,
+h2,
+h3,
+body.overview .room a.title,
+body.overview .panel-primary a,
+.navbar-brand,
+.panel-heading,
+.panel-default > .panel-heading,
+.nav.nav-tabs {
+ .font-headline()
+}
+
+h4 {
+ .font-sub-line()
+}
+
+.banner {
+ h1 {
+ display: none;
+ }
+
+ img {
+ display: none;
+ }
+
+ @media (min-width: 1730px) {
+ img.block {
+ width: 15%;
+ margin: 20px;
+ position: fixed;
+ display: block;
+ }
+
+ &:after {
+ content: '';
+ display: block;
+ height: 30px;
+ }
+ }
+
+ @media (max-width: 1729px) {
+ img.inline {
+ display: inline-block;
+ width: 55%;
+ padding: 30px 0 15px 0;
+ }
+
+ text-align: center;
+ }
+
+ @media (max-width:@screen-sm-max) {
+ img.inline {
+ width: 75%;
+ }
+ }
+
+ @media (max-width:@screen-xs-max) {
+ img.inline {
+ width: 90%;
+ }
+ }
+}
+
+.well {
+ h1, h2, h3, h4 {
+ color: @color-grey-lighter;
+ }
+
+ background-color: @color-grey-darker;
+}
+
+/*
+ * Panel gradient configuration
+ *
+ */
+.panel {
+ border: none;
+ background-color: black;
+ background-image: linear-gradient(120deg, @color-blue, @color-green);
+ padding: 2px;
+
+ .panel-heading {
+ border: none;
+ background-color: black;
+ // to test gradient use:
+ //background-color: transparent;
+ }
+
+ .panel-body {
+ background-color: black;
+ // test gradient:
+ //background-color: transparent;
+ }
+}
+
+/* let the gratient go over two panels horizontally, child 1 and 2, 3 and 4, and so on */
+/* attention, clearfix for WIDE rooms/panels are a child too */
+.room-group .room:nth-child(1) .panel {
+ background-image: linear-gradient(80deg, @color-blue, @color-green 200%);
+}
+
+.room-group .room:nth-child(2) .panel {
+ background-image: linear-gradient(80deg, @color-blue -60%, @color-green);
+}
+
+.room-group .room:nth-child(3) .panel {
+ background-image: linear-gradient(80deg, @color-blue, @color-green 200%);
+}
+
+.room-group .room:nth-child(4) .panel {
+ background-image: linear-gradient(80deg, @color-blue -60%, @color-green);
+}
+
+.room-group .room:nth-child(5) .panel {
+ background-image: linear-gradient(80deg, @color-blue, @color-green 200%);
+}
+
+.room-group .room:nth-child(6) .panel {
+ background-image: linear-gradient(80deg, @color-blue -60%, @color-green);
+}
+
+.room-group .room:nth-child(7) .panel {
+ background-image: linear-gradient(80deg, @color-blue, @color-green 200%);
+}
+
+.room-group .room:nth-child(8) .panel {
+ background-image: linear-gradient(80deg, @color-blue -60%, @color-green);
+}
+
+div.row.recordings div:nth-child(2) .panel {
+ background-image: linear-gradient(80deg, @color-blue, @color-green 200%);
+}
+
+/* gradient for wide panels is "normal" */
+.room-group .room.wide .panel {
+ background-image: linear-gradient(80deg, @color-blue, @color-green);
+}
+
+
+/*
+ * NO RELIVE THEN:
+ *div.row.recordings div:nth-child(2) .panel {
+ * background-image: linear-gradient(80deg, @color-blue, @color-green);
+ *}
+ */
+
+div.row.recordings div:nth-child(3) .panel {
+ background-image: linear-gradient(80deg, @color-blue -60%, @color-green);
+}
+
+/*
+ * main page
+ */
+
+.overview {
+ a {
+ color: @color-grey-readable;
+ }
+
+ .room {
+ .panel-body {
+ min-height: 190px;
+ }
+
+ &:hover {
+ .panel-title {
+ color: @color-grey-readable-focused;
+ }
+
+ .panel-body {
+ .program-schedule .current-talk {
+ &, span.t {
+ color: @color-grey-readable-focused;
+ }
+ }
+ .program-schedule .next-talk {
+ &, span.t {
+ color: @color-grey-darker;
+ }
+ }
+ }
+ }
+ }
+
+ .room:not(.has-preview) {
+ .panel-body {
+ .program-schedule {
+ span.t {
+ // make text in non-preview panels fullwidth or otherwise
+ // they stick together like rice
+ display: block;
+ }
+ }
+ }
+ }
+
+ .recordings {
+ h2 {
+ span {
+ display: none;
+ }
+
+ &:after {
+ content: 'Recorded memories';
+ }
+ }
+
+ .panel {
+ &:hover {
+ .panel-body a {
+ color: @color-grey-lightest;
+ }
+ }
+ }
+ }
+}
+
+nav {
+ .nav-tabs {
+ border: none;
+ background-color: black;
+ background-image: linear-gradient(120deg, @color-blue, @color-green);
+ padding: 2px;
+
+ & > {
+ background-color: black;
+ }
+
+ a {
+ color: @color-grey;
+ }
+ }
+}
+
+body .schedule {
+ .block {
+ &.pause, &.optout {
+ background-color: @color-grey-lightest;
+ background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+
+ h3 {
+ color: @color-grey-lighter;
+ }
+ }
+
+ h3 {
+ font-size: 16px;
+ color: @color-grey-lightest;
+ }
+
+ h4 {
+ .font-sub-line();
+ color: @color-blue;
+ font-weight: 500;
+ }
+
+ h5 {
+ color: @color-grey-lighter;
+ }
+ }
+
+ .room.highlight .block {
+ h3 {
+ color: @color-grey-darker;
+ }
+
+ h5 {
+ color: @color-grey;
+ }
+ }
+
+ .now span {
+ right: -33px;
+ top: -2px;
+ font-weight: bold;
+ }
+}
+
+.feedback-form, .embed-form {
+ label {
+ .font-sub-line();
+ font-size: 16px;
+ color: @color-grey-readable;
+ }
+}
+
+footer {
+ color: darken(@color-green, 5%);
+}
+
+body.feedback-read {
+ .table-striped > tbody > tr:nth-of-type(2n+1) {
+ background-color: #202020;
+ }
+
+ .table-hover > tbody > tr:hover {
+ background-color: #303030;
+ }
+}
+
diff --git a/configs/conferences/35c3/streams.preview.v2.json b/configs/conferences/35c3/streams.preview.v2.json
new file mode 100644
index 0000000..ce1074e
--- /dev/null
+++ b/configs/conferences/35c3/streams.preview.v2.json
@@ -0,0 +1,1480 @@
+ [
+ {
+ "conference": "35C3",
+ "slug": "35c3",
+ "author": "CCC",
+ "description": "Live streaming from the 35th Chaos Communication Congress",
+ "keywords": "35C3, Hacking, Chaos Computer Club, Video, Music, Podcast, Media, Streaming, Hacker, Leipzig, Refreshing Memories",
+ "schedule": "https://fahrplan.events.ccc.de/congress/2018/Fahrplan/schedule.xml",
+ "startsAt": "2018-12-27T05:00:00+0000",
+ "endsAt": "2018-12-30T19:00:00+0000",
+ "isCurrentlyStreaming": false,
+ "groups": [
+ {
+ "group": "Live",
+ "rooms": [
+ {
+ "slug": "halla",
+ "schedulename": "Adams",
+ "thumb": "http://localhost:8000/streams/thumbs/s1.png",
+ "link": "http://localhost:8000/streams/35c3/halla",
+ "display": "Adams",
+ "stream": "s1",
+ "talks": {
+ "current": null,
+ "next": {
+ "title": "Opening Ceremony",
+ "speaker": "rufus, rixx",
+ "fstart": "2018-12-27T11:00:00+01:00",
+ "fend": "2018-12-27T11:30:00+01:00",
+ "start": 1545904800,
+ "end": 1545906600,
+ "duration": 1800,
+ "room_known": true
+ }
+ },
+ "streams": [
+ {
+ "slug": "dash-native",
+ "display": "Adams Adaptive",
+ "type": "dash",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "dash": {
+ "display": "DASH, baby",
+ "tech": "Adaptive multi-format-multi-bitrate-Stream to rule the World!!1elf",
+ "url": "http://cdn.c3voc.de/dash/s1/manifest.mpd"
+ }
+ }
+ },
+ {
+ "slug": "audio-native",
+ "display": "Adams Audio",
+ "type": "audio",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s1_native.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s1_native.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated",
+ "display": "Adams Audio (Translated1)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated-2",
+ "display": "Adams Audio (Translated2)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated-2.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated-2.opus"
+ }
+ }
+ },
+ {
+ "slug": "hd-native",
+ "display": "Adams FullHD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s1_native_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s1_native_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated",
+ "display": "Adams FullHD Video (Translated1)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s1_translated_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated-2",
+ "display": "Adams FullHD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated-2_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s1_translated-2_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-native",
+ "display": "Adams SD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s1_native_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s1_native_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated",
+ "display": "Adams SD Video (Translated1)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s1_translated_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated-2",
+ "display": "Adams SD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated-2_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s1_translated-2_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-native",
+ "display": "Adams Slides",
+ "type": "slides",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s1_native_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s1_native_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated",
+ "display": "Adams Slides (Translated1)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s1_translated_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated-2",
+ "display": "Adams Slides (Translated2)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s1_translated-2_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s1_translated-2_slides.m3u8"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "slug": "hallb",
+ "schedulename": "Borg",
+ "thumb": "http://localhost:8000/streams/thumbs/s2.png",
+ "link": "http://localhost:8000/streams/35c3/hallb",
+ "display": "Borg",
+ "stream": "s2",
+ "talks": {
+ "current": null,
+ "next": {
+ "title": "The Rocky Road to TLS 1.3 and better Internet Encryption",
+ "speaker": "hanno",
+ "fstart": "2018-12-27T11:30:00+01:00",
+ "fend": "2018-12-27T12:30:00+01:00",
+ "start": 1545906600,
+ "end": 1545910200,
+ "duration": 3600,
+ "room_known": true
+ }
+ },
+ "streams": [
+ {
+ "slug": "dash-native",
+ "display": "Borg Adaptive",
+ "type": "dash",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "dash": {
+ "display": "DASH, baby",
+ "tech": "Adaptive multi-format-multi-bitrate-Stream to rule the World!!1elf",
+ "url": "http://cdn.c3voc.de/dash/s2/manifest.mpd"
+ }
+ }
+ },
+ {
+ "slug": "audio-native",
+ "display": "Borg Audio",
+ "type": "audio",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s2_native.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s2_native.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated",
+ "display": "Borg Audio (Translated1)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated-2",
+ "display": "Borg Audio (Translated2)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated-2.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated-2.opus"
+ }
+ }
+ },
+ {
+ "slug": "hd-native",
+ "display": "Borg FullHD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s2_native_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s2_native_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated",
+ "display": "Borg FullHD Video (Translated1)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s2_translated_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated-2",
+ "display": "Borg FullHD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated-2_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s2_translated-2_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-native",
+ "display": "Borg SD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s2_native_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s2_native_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated",
+ "display": "Borg SD Video (Translated1)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s2_translated_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated-2",
+ "display": "Borg SD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated-2_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s2_translated-2_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-native",
+ "display": "Borg Slides",
+ "type": "slides",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s2_native_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s2_native_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated",
+ "display": "Borg Slides (Translated1)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s2_translated_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated-2",
+ "display": "Borg Slides (Translated2)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s2_translated-2_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s2_translated-2_slides.m3u8"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "slug": "hallc",
+ "schedulename": "Clarke",
+ "thumb": "http://localhost:8000/streams/thumbs/s3.png",
+ "link": "http://localhost:8000/streams/35c3/hallc",
+ "display": "Clarke",
+ "stream": "s3",
+ "talks": {
+ "current": null,
+ "next": {
+ "title": "Locked up science",
+ "speaker": "Claudia Frick - @FuzzyLeapfrog",
+ "fstart": "2018-12-27T11:30:00+01:00",
+ "fend": "2018-12-27T12:10:00+01:00",
+ "start": 1545906600,
+ "end": 1545909000,
+ "duration": 2400,
+ "room_known": true
+ }
+ },
+ "streams": [
+ {
+ "slug": "dash-native",
+ "display": "Clarke Adaptive",
+ "type": "dash",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "dash": {
+ "display": "DASH, baby",
+ "tech": "Adaptive multi-format-multi-bitrate-Stream to rule the World!!1elf",
+ "url": "http://cdn.c3voc.de/dash/s3/manifest.mpd"
+ }
+ }
+ },
+ {
+ "slug": "audio-native",
+ "display": "Clarke Audio",
+ "type": "audio",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_native.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_native.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated",
+ "display": "Clarke Audio (Translated1)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated-2",
+ "display": "Clarke Audio (Translated2)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2.opus"
+ }
+ }
+ },
+ {
+ "slug": "hd-native",
+ "display": "Clarke FullHD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_native_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_native_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated",
+ "display": "Clarke FullHD Video (Translated1)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated-2",
+ "display": "Clarke FullHD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated-2_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-native",
+ "display": "Clarke SD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_native_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_native_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated",
+ "display": "Clarke SD Video (Translated1)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated-2",
+ "display": "Clarke SD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated-2_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-native",
+ "display": "Clarke Slides",
+ "type": "slides",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_native_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_native_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated",
+ "display": "Clarke Slides (Translated1)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated-2",
+ "display": "Clarke Slides (Translated2)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated-2_slides.m3u8"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "slug": "halld",
+ "schedulename": "Dijkstra",
+ "thumb": "http://localhost:8000/streams/thumbs/s3.png",
+ "link": "http://localhost:8000/streams/35c3/halld",
+ "display": "Dijkstra",
+ "stream": "s3",
+ "talks": {
+ "current": null,
+ "next": {
+ "title": "Artistic PCB Design and Fabrication",
+ "speaker": "hammes hacks",
+ "fstart": "2018-12-27T11:30:00+01:00",
+ "fend": "2018-12-27T12:10:00+01:00",
+ "start": 1545906600,
+ "end": 1545909000,
+ "duration": 2400,
+ "room_known": true
+ }
+ },
+ "streams": [
+ {
+ "slug": "dash-native",
+ "display": "Dijkstra Adaptive",
+ "type": "dash",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "dash": {
+ "display": "DASH, baby",
+ "tech": "Adaptive multi-format-multi-bitrate-Stream to rule the World!!1elf",
+ "url": "http://cdn.c3voc.de/dash/s3/manifest.mpd"
+ }
+ }
+ },
+ {
+ "slug": "audio-native",
+ "display": "Dijkstra Audio",
+ "type": "audio",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_native.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_native.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated",
+ "display": "Dijkstra Audio (Translated)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated-2",
+ "display": "Dijkstra Audio (Translated2)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2.opus"
+ }
+ }
+ },
+ {
+ "slug": "hd-native",
+ "display": "Dijkstra FullHD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_native_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_native_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated",
+ "display": "Dijkstra FullHD Video (Translated)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated-2",
+ "display": "Dijkstra FullHD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated-2_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-native",
+ "display": "Dijkstra SD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_native_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_native_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated",
+ "display": "Dijkstra SD Video (Translated)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated-2",
+ "display": "Dijkstra SD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated-2_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-native",
+ "display": "Dijkstra Slides",
+ "type": "slides",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_native_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_native_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated",
+ "display": "Dijkstra Slides (Translated)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated-2",
+ "display": "Dijkstra Slides (Translated2)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s3_translated-2_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s3_translated-2_slides.m3u8"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "slug": "halle",
+ "schedulename": "Eliza",
+ "thumb": "http://localhost:8000/streams/thumbs/s4.png",
+ "link": "http://localhost:8000/streams/35c3/halle",
+ "display": "Eliza",
+ "stream": "s4",
+ "talks": {
+ "current": null,
+ "next": {
+ "title": "Going Deep Underground to Watch the Stars",
+ "speaker": "Jost Migenda",
+ "fstart": "2018-12-27T11:30:00+01:00",
+ "fend": "2018-12-27T12:30:00+01:00",
+ "start": 1545906600,
+ "end": 1545910200,
+ "duration": 3600,
+ "room_known": true
+ }
+ },
+ "streams": [
+ {
+ "slug": "dash-native",
+ "display": "Eliza Adaptive",
+ "type": "dash",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "dash": {
+ "display": "DASH, baby",
+ "tech": "Adaptive multi-format-multi-bitrate-Stream to rule the World!!1elf",
+ "url": "http://cdn.c3voc.de/dash/s4/manifest.mpd"
+ }
+ }
+ },
+ {
+ "slug": "audio-native",
+ "display": "Eliza Audio",
+ "type": "audio",
+ "isTranslated": false,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s4_native.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s4_native.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated",
+ "display": "Eliza Audio (Translated)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated.opus"
+ }
+ }
+ },
+ {
+ "slug": "audio-translated-2",
+ "display": "Eliza Audio (Translated2)",
+ "type": "audio",
+ "isTranslated": true,
+ "videoSize": null,
+ "urls": {
+ "mp3": {
+ "display": "MP3",
+ "tech": "MP3-Audio, 96 kBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated-2.mp3"
+ },
+ "opus": {
+ "display": "Opus",
+ "tech": "Opus-Audio, 64 kBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated-2.opus"
+ }
+ }
+ },
+ {
+ "slug": "hd-native",
+ "display": "Eliza FullHD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s4_native_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s4_native_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated",
+ "display": "Eliza FullHD Video (Translated)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s4_translated_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "hd-translated-2",
+ "display": "Eliza FullHD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1920,
+ 1080
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1920x1080, VP8+Vorbis in WebM, 3.5 MBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated-2_hd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s",
+ "url": "http://cdn.c3voc.de/hls/s4_translated-2_hd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-native",
+ "display": "Eliza SD Video",
+ "type": "video",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s4_native_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s4_native_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated",
+ "display": "Eliza SD Video (Translated)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s4_translated_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "sd-translated-2",
+ "display": "Eliza SD Video (Translated2)",
+ "type": "video",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 1 MBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated-2_sd.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s4_translated-2_sd.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-native",
+ "display": "Eliza Slides",
+ "type": "slides",
+ "isTranslated": false,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s4_native_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s4_native_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated",
+ "display": "Eliza Slides (Translated)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s4_translated_slides.m3u8"
+ }
+ }
+ },
+ {
+ "slug": "slides-translated-2",
+ "display": "Eliza Slides (Translated2)",
+ "type": "slides",
+ "isTranslated": true,
+ "videoSize": [
+ 1024,
+ 576
+ ],
+ "urls": {
+ "webm": {
+ "display": "WebM",
+ "tech": "1024x576, VP8+Vorbis in WebM, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/s4_translated-2_slides.webm"
+ },
+ "hls": {
+ "display": "HLS",
+ "tech": "1024x576, h264+AAC im MPEG-TS-Container via HTTP, 400 kBit/s",
+ "url": "http://cdn.c3voc.de/hls/s4_translated-2_slides.m3u8"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/configs/conferences/bub2018/config.php b/configs/conferences/bub2018/config.php
new file mode 100755
index 0000000..6f8307d
--- /dev/null
+++ b/configs/conferences/bub2018/config.php
@@ -0,0 +1,304 @@
+<?php
+
+$CONFIG['CONFERENCE'] = array(
+ /**
+ * Der Startzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns davor, wird die Closed-Seite
+ * mit einem Text der Art "hat noch nicht angefangen" angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. (Siehe aber ENDS_AT
+ * und CLOSED weiter unten)
+ */
+ 'STARTS_AT' => strtotime("2018-11-17 10:00"),
+
+ /**
+ * Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie-
+ * Gut-Nach-Hause-Seite sowie einem Ausblick auf die kommenden Events angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten)
+ */
+ 'ENDS_AT' => strtotime("2018-11-18 18:00"),
+
+ /**
+ * Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before'
+ * simuliert, dass die Konferenz noch nicht begonnen hat. Der Wert 'after' simuliert, dass die Konferenz
+ * bereits beendet ist. 'running' simuliert eine laufende Konferenz.
+ *
+ * Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent
+ * zu 'running'.
+ */
+// 'CLOSED' => 'running',
+
+ /**
+ * Titel der Konferenz (kann Leer- und Sonderzeichen enthalten)
+ * Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als
+ * Anzeigetext benutzt
+ */
+ 'TITLE' => 'Bits & Bäume',
+
+ /**
+ * Veranstalter
+ * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'AUTHOR' => 'Bits & Bäume',
+
+ /**
+ * Beschreibungstext
+ * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'DESCRIPTION' => 'Die Konferenz für Digitalisierung und Nachhaltigkeit 17. bis 18. November 2018 in Berlin (Technische Universität)',
+
+ /**
+ * Schlüsselwortliste, Kommasepariert
+ * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'KEYWORDS' => 'Bits und Bäume, FIfF, CCC, Nachhaltigkeit, Digitalisierung',
+
+ /**
+ * HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags)
+ * Sollte üblicherweise nur Inline-Elemente enthalten
+ * Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet
+ */
+ 'FOOTER_HTML' => '
+ by <a href="https://bits-und-baeume.org">Bits & Bäume</a>
+ ',
+
+ /**
+ * HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header)
+ * wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Blaues
+ * Wischiwaschi auf http://media.ccc.de/)
+ *
+ * Dieser HTML-Block wird üblicherweise in der main.less speziell für die
+ * Konferenz umgestaltet.
+ *
+ * Wird diese Zeile auskommentiert, wird kein Banner ausgegeben.
+ */
+ /** 'BANNER_HTML' => '<img src="../configs/conferences/fiffkon16/logo.png" class="FIfFKon">', **/
+
+ /**
+ * Link zu den Recordings
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ 'RELEASES' => 'https://media.ccc.de/c/bub2018',
+
+ /**
+ * Link zu einer (externen) ReLive-Übersichts-Seite
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELIVE' => 'http://vod.c3voc.de/',
+
+ /**
+ * Alternativ kann ein ReLive-Json konfiguriert werden, um die interne
+ * ReLive-Ansicht zu aktivieren.
+ *
+ * Wird beides aktiviert, hat der externe Link Vorrang!
+ * Wird beides auskommentiert, wird der Link nicht angezeigt
+ */
+ 'RELIVE_JSON' => 'http://live.ber.c3voc.de/relive/bub2018/index.json'
+ /**
+ * APCU-Cache-Zeit in Sekunden
+ * Wird diese Zeile auskommentiert, werden die apc_*-Methoden nicht verwendet und
+ * das Relive-Json bei jedem Request von der Quelle geladen und geparst
+ */
+ //'RELIVE_JSON_CACHE' => 30*60,
+);
+
+/**
+ * Konfiguration der Stream-Übersicht auf der Startseite
+ */
+$CONFIG['OVERVIEW'] = array(
+ /**
+ * Abschnitte aud der Startseite und darunter aufgeführte Räume
+ * Es können beliebig neue Gruppen und Räume hinzugefügt werden
+ *
+ * Die Räume müssen in $CONFIG['ROOMS'] konfiguriert werden,
+ * sonst werden sie nicht angezeigt.
+ */
+ 'GROUPS' => array(
+ 'Lecture Rooms' => array(
+ 'ADA',
+ 'BASH',
+ 'DELPHI',
+ 'CLOJURE',
+ 'EMACS'
+ ),
+ ),
+);
+
+
+
+/**
+ * Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets oä.)
+ */
+$CONFIG['ROOMS'] = array(
+ /**
+ * Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs,
+ * in $CONFIG['OVERVIEW'] oder im Feedback verwendet wird.
+ */
+ 'ADA' => array(
+ 'DISPLAY' => 'ADA',
+ 'STREAM' => 's1',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => true,
+ 'STEREO' => false,
+
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'SLIDES' => false,
+ 'DASH' => true,
+
+ 'AUDIO' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'ADA',
+
+ 'FEEDBACK' => false,
+ 'SUBTITLES' => false,
+
+ 'EMBED' => true,
+ 'IRC' => false,
+ ),
+ 'BASH' => array(
+ 'DISPLAY' => 'BASH',
+ 'STREAM' => 's2',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => false,
+ 'STEREO' => false,
+
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'SLIDES' => false,
+ 'DASH' => true,
+
+ 'AUDIO' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'BASH',
+
+ 'FEEDBACK' => false,
+ 'SUBTITLES' => false,
+
+ 'EMBED' => true,
+ 'IRC' => false,
+ ),
+ 'CLOJURE' => array(
+ 'DISPLAY' => 'CLOJURE',
+ 'STREAM' => 's3',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => false,
+ 'STEREO' => false,
+
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'SLIDES' => false,
+ 'DASH' => true,
+
+ 'AUDIO' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'CLOJURE',
+
+ 'FEEDBACK' => false,
+ 'SUBTITLES' => false,
+
+ 'EMBED' => true,
+ 'IRC' => false,
+ ),
+ 'DELPHI' => array(
+ 'DISPLAY' => 'DELPHI',
+ 'STREAM' => 's4',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => false,
+ 'STEREO' => false,
+
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'SLIDES' => false,
+ 'DASH' => true,
+
+ 'AUDIO' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'DELPHI',
+
+ 'FEEDBACK' => false,
+ 'SUBTITLES' => false,
+
+ 'EMBED' => true,
+ 'IRC' => false,
+ ),
+ 'EMACS' => array(
+ 'DISPLAY' => 'EMACS',
+ 'STREAM' => 's5',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => false,
+ 'STEREO' => false,
+
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'SLIDES' => false,
+ 'DASH' => true,
+
+ 'AUDIO' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'EMACS',
+
+ 'FEEDBACK' => false,
+ 'SUBTITLES' => false,
+ )
+);
+
+/**
+ * Globaler Schalter für die Embedding-Funktionalitäten
+ *
+ * Wird diese Zeile auskommentiert oder auf False gesetzt, werden alle
+ * Embedding-Funktionen deaktiviert.
+ */
+$CONFIG['EMBED'] = true;
+
+/**
+ * Konfigurationen zum Konferenz-Fahrplan
+ * Wird dieser Block auskommentiert, werden alle Fahrplan-Bezogenen Features deaktiviert
+ */
+$CONFIG['SCHEDULE'] = array(
+ /**
+ * URL zum Fahrplan-XML
+ *
+ * Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht
+ * aufhören zu funktionieren. Wenn die Quelle unverlässlich ist ;) sollte ein
+ * externer HTTP-Cache vorgeschaltet werden.
+ */
+ 'URL' => 'https://fahrplan.bits-und-baeume.org/schedule.xml',
+
+ /**
+ * Nur die angegebenen Räume aus dem Fahrplan beachten
+ *
+ * Wird diese Zeile auskommentiert, werden alle Räume angezeigt
+ */
+ 'ROOMFILTER' => array('ADA', 'BASH', 'CLOJURE', 'DELPHI', 'EMACS'),
+
+ /**
+ * Skalierung der Programm-Vorschau in Sekunden pro Pixel
+ */
+ 'SCALE' => 7,
+
+ /**
+ * Simuliere das Verhalten als wäre die Konferenz bereits heute
+ *
+ * Diese folgende Beispiel-Zeile Simuliert, dass das
+ * Konferenz-Datum 2014-12-29 auf den heutigen Tag 2015-02-24 verschoben ist.
+ */
+ //'SIMULATE_OFFSET' => strtotime(/* Conference-Date */ '2016-05-21') - strtotime(/* Today */ '2016-05-19'),
+ 'SIMULATE_OFFSET' => 0,
+);
+
+
+return $CONFIG;
diff --git a/configs/conferences/bub2018/logo.png b/configs/conferences/bub2018/logo.png
new file mode 100644
index 0000000..e7b83e5
--- /dev/null
+++ b/configs/conferences/bub2018/logo.png
Binary files differ
diff --git a/configs/conferences/datengarten/config.php b/configs/conferences/datengarten/config.php
index 309e5ad..7f561d1 100644
--- a/configs/conferences/datengarten/config.php
+++ b/configs/conferences/datengarten/config.php
@@ -107,7 +107,7 @@ $CONFIG['CONFERENCE'] = array(
* Link zu den Recordings
* Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
*/
- 'RELEASES' => 'https://media.ccc.de/browse/events/datengarten/index.html',
+ 'RELEASES' => 'https://media.ccc.de/c/datengarten',
/**
* Um die interne ReLive-Ansicht zu aktivieren, kann hier ein ReLive-JSON
@@ -454,7 +454,7 @@ $CONFIG['IRC'] = array(
* Ist eine weitere Anpassung erfoderlich, kann ein IRC_CONFIG-Block in der
* Raum-Konfiguration zum Überschreiben dieser Angaben verwendet werden.
*/
- 'DISPLAY' => '#ccc @ ircnet',
+ 'DISPLAY' => '#cccb @ hackint',
/**
* URL für die IRC-Links.
@@ -465,7 +465,7 @@ $CONFIG['IRC'] = array(
* %s wird durch den urlencodeten Raum-Slug ersetzt.
* Eine Anpassung kann ebenfalls in der Raum-Konfiguration vorgenommen werden.
*/
- 'URL' => 'irc://irc.de.ircnet.net/ccc',
+ 'URL' => 'irc://irc.hackint.org/cccb',
);
/**
diff --git a/configs/conferences/denog10/config.php b/configs/conferences/denog10/config.php
new file mode 100644
index 0000000..424433c
--- /dev/null
+++ b/configs/conferences/denog10/config.php
@@ -0,0 +1,208 @@
+<?php
+
+$CONFIG['CONFERENCE'] = array(
+ /**
+ * Der Startzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns davor, wird die Closed-Seite
+ * mit einem Text der Art "hat noch nicht angefangen" angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. (Siehe aber ENDS_AT
+ * und CLOSED weiter unten)
+ */
+ 'STARTS_AT' => strtotime("2018-11-21 12:45"),
+
+ /**
+ * Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie-
+ * Gut-Nach-Hause-Seite sowie einem Ausblick auf die kommenden Events angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten)
+ */
+ 'ENDS_AT' => strtotime("2018-11-22 13:30"),
+
+ /**
+ * Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before'
+ * simuliert, dass die Konferenz noch nicht begonnen hat. Der Wert 'after' simuliert, dass die Konferenz
+ * bereits beendet ist. 'running' simuliert eine laufende Konferenz.
+ *
+ * Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent
+ * zu 'running'.
+ */
+// 'CLOSED' => 'running',
+
+ /**
+ * Titel der Konferenz (kann Leer- und Sonderzeichen enthalten)
+ * Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als
+ * Anzeigetext benutzt
+ */
+ 'TITLE' => 'DENOG 10',
+
+ /**
+ * Veranstalter
+ * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'AUTHOR' => 'DENOG',
+
+ /**
+ * Beschreibungstext
+ * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'DESCRIPTION' => 'DENOG ist eine Community für Menschen, die am Internet in Deutschland forschen, es betreiben und weiter entwickeln. Im Rahmen dieses technischen Forums treffen sich Menschen, die mit, für oder am Internet arbeiten und netzwerkspezifische Themen mit gleichgesinnten diskutieren, um sie dadurch einfacher lösen zu können.',
+
+ /**
+ * Schlüsselwortliste, Kommasepariert
+ * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'KEYWORDS' => 'Networks, Internet, DENOG',
+
+ /**
+ * HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags)
+ * Sollte üblicherweise nur Inline-Elemente enthalten
+ * Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet
+ */
+ 'FOOTER_HTML' => '
+ by <a href="https://www.denog.de">DENOG e.V</a>
+ ',
+
+ /**
+ * HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header)
+ * wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Blaues
+ * Wischiwaschi auf http://media.ccc.de/)
+ *
+ * Dieser HTML-Block wird üblicherweise in der main.less speziell für die
+ * Konferenz umgestaltet.
+ *
+ * Wird diese Zeile auskommentiert, wird kein Banner ausgegeben.
+ */
+ /** 'BANNER_HTML' => '<img src="../configs/conferences/fiffkon16/logo.png" class="FIfFKon">', **/
+ 'BANNER_HTML' => '<div class="outer-div"><div class="denog10"></div></div>',
+
+ /**
+ * Link zu den Recordings
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ 'RELEASES' => 'https://media.ccc.de/c/denog10',
+
+ /**
+ * Link zu einer (externen) ReLive-Übersichts-Seite
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELIVE' => 'http://vod.c3voc.de/',
+
+ /**
+ * Alternativ kann ein ReLive-Json konfiguriert werden, um die interne
+ * ReLive-Ansicht zu aktivieren.
+ *
+ * Wird beides aktiviert, hat der externe Link Vorrang!
+ * Wird beides auskommentiert, wird der Link nicht angezeigt
+ */
+ 'RELIVE_JSON' => 'http://live.ber.c3voc.de/relive/denog10/index.json'
+ /**
+ * APCU-Cache-Zeit in Sekunden
+ * Wird diese Zeile auskommentiert, werden die apc_*-Methoden nicht verwendet und
+ * das Relive-Json bei jedem Request von der Quelle geladen und geparst
+ */
+ //'RELIVE_JSON_CACHE' => 30*60,
+);
+
+/**
+ * Konfiguration der Stream-Übersicht auf der Startseite
+ */
+$CONFIG['OVERVIEW'] = array(
+ /**
+ * Abschnitte aud der Startseite und darunter aufgeführte Räume
+ * Es können beliebig neue Gruppen und Räume hinzugefügt werden
+ *
+ * Die Räume müssen in $CONFIG['ROOMS'] konfiguriert werden,
+ * sonst werden sie nicht angezeigt.
+ */
+ 'GROUPS' => array(
+ 'Lecture Rooms' => array(
+ 'Ferrum'
+ ),
+ ),
+);
+
+
+
+/**
+ * Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets oä.)
+ */
+$CONFIG['ROOMS'] = array(
+ /**
+ * Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs,
+ * in $CONFIG['OVERVIEW'] oder im Feedback verwendet wird.
+ */
+ 'Ferrum' => array(
+ 'DISPLAY' => 'Ferrum',
+ 'STREAM' => 's1',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => false,
+ 'STEREO' => false,
+
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'SLIDES' => false,
+ 'DASH' => true,
+
+ 'AUDIO' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => true,
+ 'SCHEDULE_NAME' => 'Ferrum',
+
+ 'FEEDBACK' => false,
+ 'SUBTITLES' => false,
+
+ 'EMBED' => true,
+ 'IRC' => false,
+ )
+);
+
+/**
+ * Globaler Schalter für die Embedding-Funktionalitäten
+ *
+ * Wird diese Zeile auskommentiert oder auf False gesetzt, werden alle
+ * Embedding-Funktionen deaktiviert.
+ */
+$CONFIG['EMBED'] = true;
+
+/**
+ * Konfigurationen zum Konferenz-Fahrplan
+ * Wird dieser Block auskommentiert, werden alle Fahrplan-Bezogenen Features deaktiviert
+ */
+$CONFIG['SCHEDULE'] = array(
+ /**
+ * URL zum Fahrplan-XML
+ *
+ * Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht
+ * aufhören zu funktionieren. Wenn die Quelle unverlässlich ist ;) sollte ein
+ * externer HTTP-Cache vorgeschaltet werden.
+ */
+ 'URL' => 'https://cfp.denog.de/denog10/schedule/export?exporter=core-frab-xml',
+
+ /**
+ * Nur die angegebenen Räume aus dem Fahrplan beachten
+ *
+ * Wird diese Zeile auskommentiert, werden alle Räume angezeigt
+ */
+ 'ROOMFILTER' => array('Ferrum'),
+
+ /**
+ * Skalierung der Programm-Vorschau in Sekunden pro Pixel
+ */
+ 'SCALE' => 7,
+
+ /**
+ * Simuliere das Verhalten als wäre die Konferenz bereits heute
+ *
+ * Diese folgende Beispiel-Zeile Simuliert, dass das
+ * Konferenz-Datum 2014-12-29 auf den heutigen Tag 2015-02-24 verschoben ist.
+ */
+ //'SIMULATE_OFFSET' => strtotime(/* Conference-Date */ '2016-05-21') - strtotime(/* Today */ '2016-05-19'),
+ 'SIMULATE_OFFSET' => 0,
+);
+
+
+return $CONFIG;
diff --git a/configs/conferences/denog10/denog-logo-konferenz-10_v001_yellow_white.png b/configs/conferences/denog10/denog-logo-konferenz-10_v001_yellow_white.png
new file mode 100644
index 0000000..e57775b
--- /dev/null
+++ b/configs/conferences/denog10/denog-logo-konferenz-10_v001_yellow_white.png
Binary files differ
diff --git a/configs/conferences/denog10/main.less b/configs/conferences/denog10/main.less
new file mode 100644
index 0000000..b8101ad
--- /dev/null
+++ b/configs/conferences/denog10/main.less
@@ -0,0 +1,53 @@
+@import "../../../assets/css/_structure.less";
+
+@gelb: #f9cd00;
+@grey-lighter: #333333;
+@grey-darker: #2a2a2a;
+@grey-light: #c1c1c1;
+@dark: #292a2d;
+
+@brand-primary: @gelb;
+@well-bg: @grey-lighter;
+@navbar-default-bg: @grey-lighter;
+@btn-default-bg: @grey-light;
+@panel-default-heading-bg: @grey-darker;
+@panel-default-text: @gelb;
+@panel-bg: @grey-lighter;
+
+body {
+ background-color: @dark;
+ color: @grey-light;
+}
+
+.overview .panel-title {
+ font-weight: bold;
+}
+
+nav .navbar-brand .icon {
+ background-image: url(denog-logo-konferenz-10_v001_yellow_white.png);
+ background-size: contain;
+}
+
+.outer-div {
+ position: absolute;
+ bottom: 30px;
+ width: 100%;
+}
+
+.denog10 {
+ background-image: url(denog-logo-konferenz-10_v001_yellow_white.png);
+ background-repeat: no-repeat;
+ background-size: 500px 354px;
+
+ margin: 0 auto;
+
+ width: 500px;
+ height: 354px;
+
+ opacity: 1;
+ z-index: -100;
+
+ @media (max-width: @screen-sm-min) {
+ display: none;
+ }
+}
diff --git a/configs/conferences/doh18/config.php b/configs/conferences/doh18/config.php
new file mode 100755
index 0000000..f4c9521
--- /dev/null
+++ b/configs/conferences/doh18/config.php
@@ -0,0 +1,207 @@
+<?php
+
+$CONFIG['CONFERENCE'] = array(
+ /**
+ * Der Startzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns davor, wird die Closed-Seite
+ * mit einem Text der Art "hat noch nicht angefangen" angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. (Siehe aber ENDS_AT
+ * und CLOSED weiter unten)
+ */
+ 'STARTS_AT' => strtotime("2018-11-11 17:30"),
+
+ /**
+ * Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie-
+ * Gut-Nach-Hause-Seite sowie einem Ausblick auf die kommenden Events angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten)
+ */
+ 'ENDS_AT' => strtotime("2018-11-13 23:59"),
+
+ /**
+ * Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before'
+ * simuliert, dass die Konferenz noch nicht begonnen hat. Der Wert 'after' simuliert, dass die Konferenz
+ * bereits beendet ist. 'running' simuliert eine laufende Konferenz.
+ *
+ * Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent
+ * zu 'running'.
+ */
+// 'CLOSED' => 'running',
+
+ /**
+ * Titel der Konferenz (kann Leer- und Sonderzeichen enthalten)
+ * Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als
+ * Anzeigetext benutzt
+ */
+ 'TITLE' => 'Deutschland ohne Herbst',
+
+ /**
+ * Veranstalter
+ * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'AUTHOR' => 'NIE Kollektiv - EISENWAREN INTL.',
+
+ /**
+ * Beschreibungstext
+ * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'DESCRIPTION' => 'DEUTSCHLAND OHNE HERBST ist eine Reaktion auf das einzuholende Versäumnis, Widerstand zu leisten. In einem Keller in Neukölln produziert, wird das Stück live in die Stadt übertragen.',
+
+ /**
+ * Schlüsselwortliste, Kommasepariert
+ * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'KEYWORDS' => 'NIE',
+
+ /**
+ * HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags)
+ * Sollte üblicherweise nur Inline-Elemente enthalten
+ * Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet
+ */
+ 'FOOTER_HTML' => '
+ by <a href="http://nie.zone//">nie.zone</a>
+ ',
+
+ /**
+ * HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header)
+ * wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Blaues
+ * Wischiwaschi auf http://media.ccc.de/)
+ *
+ * Dieser HTML-Block wird üblicherweise in der main.less speziell für die
+ * Konferenz umgestaltet.
+ *
+ * Wird diese Zeile auskommentiert, wird kein Banner ausgegeben.
+ */
+ /** 'BANNER_HTML' => '<img src="../configs/conferences/fiffkon16/logo.png" class="FIfFKon">', **/
+
+ /**
+ * Link zu den Recordings
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELEASES' => 'https://media.ccc.de/c/fiffkon18',
+
+ /**
+ * Link zu einer (externen) ReLive-Übersichts-Seite
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELIVE' => 'http://vod.c3voc.de/',
+
+ /**
+ * Alternativ kann ein ReLive-Json konfiguriert werden, um die interne
+ * ReLive-Ansicht zu aktivieren.
+ *
+ * Wird beides aktiviert, hat der externe Link Vorrang!
+ * Wird beides auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELIVE_JSON' => 'http://live.ber.c3voc.de/relive/fiffkon18/index.json'
+ /**
+ * APCU-Cache-Zeit in Sekunden
+ * Wird diese Zeile auskommentiert, werden die apc_*-Methoden nicht verwendet und
+ * das Relive-Json bei jedem Request von der Quelle geladen und geparst
+ */
+ //'RELIVE_JSON_CACHE' => 30*60,
+);
+
+/**
+ * Konfiguration der Stream-Übersicht auf der Startseite
+ */
+$CONFIG['OVERVIEW'] = array(
+ /**
+ * Abschnitte aud der Startseite und darunter aufgeführte Räume
+ * Es können beliebig neue Gruppen und Räume hinzugefügt werden
+ *
+ * Die Räume müssen in $CONFIG['ROOMS'] konfiguriert werden,
+ * sonst werden sie nicht angezeigt.
+ */
+ 'GROUPS' => array(
+ 'Lecture Rooms' => array(
+ 'Keller'
+ ),
+ ),
+);
+
+
+
+/**
+ * Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets oä.)
+ */
+$CONFIG['ROOMS'] = array(
+ /**
+ * Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs,
+ * in $CONFIG['OVERVIEW'] oder im Feedback verwendet wird.
+ */
+ 'Keller' => array(
+ 'DISPLAY' => 'Keller',
+ 'STREAM' => 's1',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => false,
+ 'STEREO' => false,
+
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'SLIDES' => false,
+ 'DASH' => true,
+
+ 'AUDIO' => true,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => false,
+ 'SCHEDULE_NAME' => 'MA 001',
+
+ 'FEEDBACK' => false,
+ 'SUBTITLES' => false,
+
+ 'EMBED' => true,
+ 'IRC' => false,
+ )
+);
+
+/**
+ * Globaler Schalter für die Embedding-Funktionalitäten
+ *
+ * Wird diese Zeile auskommentiert oder auf False gesetzt, werden alle
+ * Embedding-Funktionen deaktiviert.
+ */
+$CONFIG['EMBED'] = true;
+
+/**
+ * Konfigurationen zum Konferenz-Fahrplan
+ * Wird dieser Block auskommentiert, werden alle Fahrplan-Bezogenen Features deaktiviert
+ */
+$CONFIG['SCHEDULE'] = array(
+ /**
+ * URL zum Fahrplan-XML
+ *
+ * Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht
+ * aufhören zu funktionieren. Wenn die Quelle unverlässlich ist ;) sollte ein
+ * externer HTTP-Cache vorgeschaltet werden.
+ */
+ 'URL' => 'https://2018.fiffkon.de/schedule.xml',
+
+ /**
+ * Nur die angegebenen Räume aus dem Fahrplan beachten
+ *
+ * Wird diese Zeile auskommentiert, werden alle Räume angezeigt
+ */
+ 'ROOMFILTER' => array('HE 101', 'MA 001'),
+
+ /**
+ * Skalierung der Programm-Vorschau in Sekunden pro Pixel
+ */
+ 'SCALE' => 7,
+
+ /**
+ * Simuliere das Verhalten als wäre die Konferenz bereits heute
+ *
+ * Diese folgende Beispiel-Zeile Simuliert, dass das
+ * Konferenz-Datum 2014-12-29 auf den heutigen Tag 2015-02-24 verschoben ist.
+ */
+ //'SIMULATE_OFFSET' => strtotime(/* Conference-Date */ '2016-05-21') - strtotime(/* Today */ '2016-05-19'),
+ 'SIMULATE_OFFSET' => 0,
+);
+
+
+return $CONFIG;
diff --git a/configs/conferences/doh18/download.sh b/configs/conferences/doh18/download.sh
new file mode 100755
index 0000000..9f7f6d3
--- /dev/null
+++ b/configs/conferences/doh18/download.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# fahrplan
+wget --no-check-certificate -q "http://data.testi.ber.c3voc.de/schedule/fiffkon16/schedule-Hoersaal.xml" -O /tmp/fiffkon16-schedule.xml && mv /tmp/fiffkon-schedule.xml schedule.xml
+
+# relive
+wget -q "http://live.dus.c3voc.de/relive/fiffkon/index.json" -O /tmp/vod.json && mv /tmp/vod.json vod.json
+rm -f /tmp/vod.json
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-Black.otf b/configs/conferences/doh18/fonts/SourceSansPro-Black.otf
new file mode 100644
index 0000000..0c25f3d
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-Black.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-BlackIt.otf b/configs/conferences/doh18/fonts/SourceSansPro-BlackIt.otf
new file mode 100644
index 0000000..da3504c
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-BlackIt.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-Bold.otf b/configs/conferences/doh18/fonts/SourceSansPro-Bold.otf
new file mode 100644
index 0000000..98dbee7
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-Bold.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-BoldIt.otf b/configs/conferences/doh18/fonts/SourceSansPro-BoldIt.otf
new file mode 100644
index 0000000..6600c86
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-BoldIt.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-ExtraLight.otf b/configs/conferences/doh18/fonts/SourceSansPro-ExtraLight.otf
new file mode 100644
index 0000000..f885ce7
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-ExtraLight.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-ExtraLightIt.otf b/configs/conferences/doh18/fonts/SourceSansPro-ExtraLightIt.otf
new file mode 100644
index 0000000..f932024
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-ExtraLightIt.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-It.otf b/configs/conferences/doh18/fonts/SourceSansPro-It.otf
new file mode 100644
index 0000000..2d627d9
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-It.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-Light.otf b/configs/conferences/doh18/fonts/SourceSansPro-Light.otf
new file mode 100644
index 0000000..159979f
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-Light.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-LightIt.otf b/configs/conferences/doh18/fonts/SourceSansPro-LightIt.otf
new file mode 100644
index 0000000..e3d49b5
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-LightIt.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-Regular.otf b/configs/conferences/doh18/fonts/SourceSansPro-Regular.otf
new file mode 100644
index 0000000..bdcfb27
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-Regular.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-Semibold.otf b/configs/conferences/doh18/fonts/SourceSansPro-Semibold.otf
new file mode 100644
index 0000000..fffdbaf
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-Semibold.otf
Binary files differ
diff --git a/configs/conferences/doh18/fonts/SourceSansPro-SemiboldIt.otf b/configs/conferences/doh18/fonts/SourceSansPro-SemiboldIt.otf
new file mode 100644
index 0000000..e90515b
--- /dev/null
+++ b/configs/conferences/doh18/fonts/SourceSansPro-SemiboldIt.otf
Binary files differ
diff --git a/configs/conferences/doh18/logo.png b/configs/conferences/doh18/logo.png
new file mode 100644
index 0000000..e417b4f
--- /dev/null
+++ b/configs/conferences/doh18/logo.png
Binary files differ
diff --git a/configs/conferences/jh-ulm/config.php b/configs/conferences/jh-ulm/config.php
index df37dc3..eae1027 100644
--- a/configs/conferences/jh-ulm/config.php
+++ b/configs/conferences/jh-ulm/config.php
@@ -8,7 +8,7 @@ $CONFIG['CONFERENCE'] = array(
* Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. (Siehe aber ENDS_AT
* und CLOSED weiter unten)
*/
- //'STARTS_AT' => strtotime("2017-09-31 13:00"),
+ 'STARTS_AT' => strtotime("2018-11-24 03:00"),
/**
* Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie-
@@ -16,7 +16,7 @@ $CONFIG['CONFERENCE'] = array(
*
* Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten)
*/
- 'ENDS_AT' => strtotime("2017-09-31 15:00"),
+ 'ENDS_AT' => strtotime("2018-11-25 15:00"),
/**
* Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before'
@@ -33,14 +33,14 @@ $CONFIG['CONFERENCE'] = array(
* Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als
* Anzeigetext benutzt
*/
- 'TITLE' => 'Jugend hackt Ulm 2017',
+ 'TITLE' => 'Jugend hackt Ulm 2018',
/**
* Veranstalter
* Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
* <meta>-Tag generiert.
*/
- 'AUTHOR' => 'Jugend hackt 2017',
+ 'AUTHOR' => 'Jugend hackt 2018',
/**
* Beschreibungstext
@@ -62,7 +62,7 @@ $CONFIG['CONFERENCE'] = array(
* Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet
*/
'FOOTER_HTML' => '
- by <a href="http://jugendhackt.de/">Jugend hackt 2017</a> &amp;
+ by <a href="http://jugendhackt.de/">Jugend hackt 2018</a> &amp;
<a href="https://c3voc.de">C3VOC</a>
',
@@ -82,7 +82,7 @@ $CONFIG['CONFERENCE'] = array(
* Link zu den Recordings
* Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
*/
- 'RELEASES' => 'https://media.ccc.de/b/events/jugendhackt/2017',
+ 'RELEASES' => 'https://media.ccc.de/b/events/jugendhackt/2018',
/**
* Link zu einer (externen) ReLive-Übersichts-Seite
@@ -97,7 +97,7 @@ $CONFIG['CONFERENCE'] = array(
* Wird beides aktiviert, hat der externe Link Vorrang!
* Wird beides auskommentiert, wird der Link nicht angezeigt
*/
- 'RELIVE_JSON' => 'configs/conferences/jh-ulm-2017/vod.json',
+ 'RELIVE_JSON' => 'http://live.ber.c3voc.de/relive/jh/index.json',
/**
* APCU-Cache-Zeit in Sekunden
@@ -120,7 +120,7 @@ $CONFIG['OVERVIEW'] = array(
*/
'GROUPS' => array(
'Lecture Rooms' => array(
- 'HdG',
+ 'Salon',
),
),
);
@@ -135,18 +135,18 @@ $CONFIG['ROOMS'] = array(
* Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs,
* in $CONFIG['OVERVIEW'] oder im Feedback verwendet wird.
*/
- 'HdG' => array(
+ 'Salon' => array(
/**
* Angezeige-Name
*/
- 'DISPLAY' => 'Haus der Gewerkschaften',
+ 'DISPLAY' => 'Salon',
/**
* ID des Video/Audio-Streams. Die Stream-ID ist davon abhängig, welches
* Event-Case in welchem Raum aufgebaut wird und wird üblicherweise von
* s1 bis s5 durchnummeriert.
*/
- 'STREAM' => 's7',
+ 'STREAM' => 's80',
/**
* Stream-Vorschaubildchen auf der Übersichtsseite anzeigen
@@ -198,6 +198,8 @@ $CONFIG['ROOMS'] = array(
*/
'HD_VIDEO' => true,
+ 'DASH' => true,
+
/**
* Slide-Only-Stream (1024×576) verfügbar
*
@@ -246,7 +248,7 @@ $CONFIG['ROOMS'] = array(
* Name des Raums im Fahrplan
* Wenn diese Zeile auskommentiert ist wird der Raum-Slug verwendet
*/
- 'SCHEDULE_NAME' => 'HdG',
+ 'SCHEDULE_NAME' => 'Salon',
/**
* Feedback anzeigen (boolean)
@@ -363,14 +365,14 @@ $CONFIG['SCHEDULE'] = array(
* aufhören zu funktionieren. Wenn die Quelle unverlässlich ist ;) sollte ein
* externer HTTP-Cache vorgeschaltet werden.
*/
- 'URL' => 'configs/conferences/jh-ulm-2017/schedule.xml',
+ 'URL' => 'https://jh.kohl.okfn.de/schedule-jh-recording.xml',
/**
* Nur die angegebenen Räume aus dem Fahrplan beachten
*
* Wird diese Zeile auskommentiert, werden alle Räume angezeigt
*/
- 'ROOMFILTER' => array('HdG'),
+ 'ROOMFILTER' => array('Salon'),
/**
* Skalierung der Programm-Vorschau in Sekunden pro Pixel
diff --git a/configs/conferences/jh-ulm/download.sh b/configs/conferences/jh-ulm/download.sh
index 9ef9956..49cfbcd 100755
--- a/configs/conferences/jh-ulm/download.sh
+++ b/configs/conferences/jh-ulm/download.sh
@@ -1,8 +1,9 @@
#!/bin/sh
# fahrplan
-wget --no-check-certificate -q "http://data.c3voc.de/jh17/schedule-jh17-ulm.xml" -O /tmp/jh17-ulm-schedule.xml && mv /tmp/jh17-ulm-schedule.xml schedule.xml
+wget --no-check-certificate -q "https://jh.kohl.okfn.de/schedule-jh.xml" -O /tmp/jh18-ulm-schedule.xml && mv /tmp/jh18-ulm-schedule.xml schedule.xml
# relive
-wget -q "http://live.dus.c3voc.de/relive/jh-ulm-2017/index.json" -O /tmp/vod.json && mv /tmp/vod.json vod.json
+wget -q "//live.ber.c3voc.de/relive/jh/index.json" -O /tmp/vod.json && mv /tmp/vod.json vod.json
rm -f /tmp/vod.json
+rm -f /tmp/jh18-ulm-schedule.xml
diff --git a/configs/conferences/rustfest2018/config.php b/configs/conferences/rustfest2018/config.php
index c83f6c6..9faeda1 100644
--- a/configs/conferences/rustfest2018/config.php
+++ b/configs/conferences/rustfest2018/config.php
@@ -146,7 +146,7 @@ $CONFIG['ROOMS'] = array(
* Event-Case in welchem Raum aufgebaut wird und wird üblicherweise von
* s1 bis s5 durchnummeriert.
*/
- 'STREAM' => 's3',
+ 'STREAM' => 's2',
/**
* Stream-Vorschaubildchen auf der Übersichtsseite anzeigen
diff --git a/configs/conferences/rustfestrome2018/SourceCodePro-Light.eot b/configs/conferences/rustfestrome2018/SourceCodePro-Light.eot
new file mode 100644
index 0000000..d9b4eb9
--- /dev/null
+++ b/configs/conferences/rustfestrome2018/SourceCodePro-Light.eot
Binary files differ
diff --git a/configs/conferences/rustfestrome2018/SourceCodePro-Light.otf.woff b/configs/conferences/rustfestrome2018/SourceCodePro-Light.otf.woff
new file mode 100644
index 0000000..c62373f
--- /dev/null
+++ b/configs/conferences/rustfestrome2018/SourceCodePro-Light.otf.woff
Binary files differ
diff --git a/configs/conferences/rustfestrome2018/SourceCodePro-Light.otf.woff2 b/configs/conferences/rustfestrome2018/SourceCodePro-Light.otf.woff2
new file mode 100644
index 0000000..121eb53
--- /dev/null
+++ b/configs/conferences/rustfestrome2018/SourceCodePro-Light.otf.woff2
Binary files differ
diff --git a/configs/conferences/rustfestrome2018/SourceCodePro-Light.ttf b/configs/conferences/rustfestrome2018/SourceCodePro-Light.ttf
new file mode 100644
index 0000000..f08bf6c
--- /dev/null
+++ b/configs/conferences/rustfestrome2018/SourceCodePro-Light.ttf
Binary files differ
diff --git a/configs/conferences/rustfestrome2018/SourceSansPro-Light.svg b/configs/conferences/rustfestrome2018/SourceSansPro-Light.svg
new file mode 100644
index 0000000..9f7850b
--- /dev/null
+++ b/configs/conferences/rustfestrome2018/SourceSansPro-Light.svg
@@ -0,0 +1,1117 @@
+<font horiz-adv-x="1000">
+<!-- Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="SourceSansPro-Light" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="632" d="M94,0l444,0l0,660l-444,0 z M139,84l0,516l147,-260 z M346,340l145,260l0,-516 z M158,39l95,164l61,105l4,0l59,-105l93,-164 z M314,372l-54,92l-87,155l284,0l-86,-155l-53,-92z"/>
+<glyph unicode=" " horiz-adv-x="199"/>
+<glyph unicode="A" horiz-adv-x="526" d="M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="B" horiz-adv-x="578" d="M97,0l191,0C437,0 533,65 533,192C533,283 473,337 376,351l0,4C453,375 493,430 493,499C493,609 408,659 275,659l-178,0 z M143,369l0,252l119,0C383,621 447,585 447,500C447,413 392,369 257,369 z M143,38l0,294l133,0C411,332 488,286 488,192C488,86 407,38 276,38z"/>
+<glyph unicode="C" horiz-adv-x="564" d="M55,331C55,121 168,-12 331,-12C416,-12 476,24 527,82l-28,29C451,57 401,30 333,30C191,30 103,148 103,331C103,514 192,629 337,629C397,629 445,602 480,562l28,30C473,633 413,671 337,671C169,671 55,540 55,331z"/>
+<glyph unicode="D" horiz-adv-x="604" d="M97,0l154,0C453,0 549,132 549,332C549,531 453,659 250,659l-153,0 z M143,39l0,581l102,0C424,620 501,503 501,332C501,160 424,39 245,39z"/>
+<glyph unicode="E" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0z"/>
+<glyph unicode="F" horiz-adv-x="477" d="M97,0l46,0l0,317l265,0l0,40l-265,0l0,262l313,0l0,40l-359,0z"/>
+<glyph unicode="G" horiz-adv-x="605" d="M55,331C55,121 168,-12 337,-12C424,-12 492,19 533,63l0,261l-202,0l0,-39l158,0l0,-205C457,48 401,30 341,30C191,30 103,148 103,331C103,514 196,629 347,629C419,629 465,599 499,562l27,30C491,629 435,671 347,671C172,671 55,540 55,331z"/>
+<glyph unicode="H" horiz-adv-x="639" d="M97,0l46,0l0,330l353,0l0,-330l46,0l0,659l-46,0l0,-289l-353,0l0,289l-46,0z"/>
+<glyph unicode="I" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0z"/>
+<glyph unicode="J" horiz-adv-x="462" d="M41,85C74,23 130,-12 203,-12C323,-12 367,73 367,179l0,480l-46,0l0,-475C321,77 283,30 203,30C148,30 108,52 76,108z"/>
+<glyph unicode="K" horiz-adv-x="558" d="M97,0l46,0l0,227l134,153l218,-380l53,0l-239,415l210,244l-55,0l-319,-366l-2,0l0,366l-46,0z"/>
+<glyph unicode="L" horiz-adv-x="467" d="M97,0l350,0l0,40l-304,0l0,619l-46,0z"/>
+<glyph unicode="M" horiz-adv-x="706" d="M97,0l43,0l0,433C140,487 137,556 134,611l4,0l52,-145l142,-394l41,0l141,394l52,145l4,0C567,556 564,487 564,433l0,-433l45,0l0,659l-65,0l-138,-387l-50,-146l-4,0l-52,146l-138,387l-65,0z"/>
+<glyph unicode="N" horiz-adv-x="636" d="M97,0l44,0l0,409C141,473 137,533 135,596l4,0l74,-131l278,-465l48,0l0,659l-44,0l0,-404C495,191 499,127 501,63l-4,0l-74,131l-278,465l-48,0z"/>
+<glyph unicode="O" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30z"/>
+<glyph unicode="P" horiz-adv-x="559" d="M97,0l46,0l0,283l134,0C424,283 512,346 512,475C512,611 424,659 277,659l-180,0 z M143,322l0,298l123,0C400,620 465,586 465,475C465,367 400,322 266,322z"/>
+<glyph unicode="Q" horiz-adv-x="652" d="M103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,148 460,27 326,27C192,27 103,148 103,332 z M590,-104C573,-109 553,-113 523,-113C441,-113 381,-77 351,-11C497,3 598,134 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,135 156,3 300,-11C333,-94 408,-155 519,-155C552,-155 583,-149 600,-144z"/>
+<glyph unicode="R" horiz-adv-x="560" d="M143,341l0,279l131,0C390,620 455,584 455,485C455,388 390,341 274,341 z M515,0l-182,306C437,319 502,380 502,485C502,611 417,659 286,659l-189,0l0,-659l46,0l0,303l140,0l179,-303z"/>
+<glyph unicode="S" horiz-adv-x="521" d="M46,87C98,29 173,-12 269,-12C397,-12 480,64 480,165C480,266 415,307 341,340l-100,44C193,406 127,435 127,511C127,583 186,629 273,629C339,629 391,602 430,561l26,31C416,635 352,671 273,671C163,671 81,604 81,509C81,411 157,370 215,345l100,-45C380,271 433,244 433,162C433,84 370,30 269,30C193,30 124,65 76,119z"/>
+<glyph unicode="T" horiz-adv-x="524" d="M239,0l46,0l0,619l210,0l0,40l-466,0l0,-40l210,0z"/>
+<glyph unicode="U" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0z"/>
+<glyph unicode="V" horiz-adv-x="491" d="M222,0l49,0l216,659l-47,0l-122,-385C293,194 276,133 249,53l-4,0C218,133 200,194 175,274l-122,385l-49,0z"/>
+<glyph unicode="W" horiz-adv-x="770" d="M178,0l50,0l118,452C358,504 372,549 383,601l4,0C398,549 410,504 422,452l120,-452l51,0l147,659l-45,0l-83,-388C597,199 584,128 569,56l-4,0C547,128 530,199 512,271l-103,388l-47,0l-103,-388C241,199 224,127 208,56l-4,0C189,127 174,199 159,271l-83,388l-48,0z"/>
+<glyph unicode="X" horiz-adv-x="482" d="M17,0l47,0l115,202C197,235 214,267 235,307l4,0C263,267 282,235 300,202l115,-202l50,0l-198,339l184,320l-47,0l-108,-194C278,435 266,411 247,375l-4,0C221,411 207,435 189,465l-108,194l-50,0l184,-318z"/>
+<glyph unicode="Y" horiz-adv-x="447" d="M200,0l46,0l0,267l198,392l-47,0l-100,-206C276,405 251,359 226,311l-4,0C196,359 175,405 152,453l-100,206l-49,0l197,-392z"/>
+<glyph unicode="Z" horiz-adv-x="538" d="M50,0l440,0l0,40l-383,0l380,592l0,27l-404,0l0,-40l346,0l-379,-592z"/>
+<glyph unicode="a" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122z"/>
+<glyph unicode="b" horiz-adv-x="544" d="M92,0l37,0l5,45l2,0C181,10 234,-12 280,-12C393,-12 492,84 492,247C492,396 428,492 300,492C241,492 183,458 134,417l2,94l0,208l-44,0 z M136,89l0,285C193,425 245,453 293,453C403,453 445,365 445,247C445,117 375,27 278,27C241,27 189,44 136,89z"/>
+<glyph unicode="c" horiz-adv-x="449" d="M52,239C52,80 146,-12 270,-12C331,-12 382,15 423,52l-23,30C367,52 323,27 272,27C167,27 98,113 98,239C98,366 174,453 272,453C319,453 355,431 386,402l26,31C380,463 337,492 271,492C154,492 52,400 52,239z"/>
+<glyph unicode="d" horiz-adv-x="544" d="M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,719l-44,0l0,-198l2,-88C362,470 323,492 265,492C151,492 52,394 52,239 z M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239z"/>
+<glyph unicode="e" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268z"/>
+<glyph unicode="f" horiz-adv-x="263" d="M288,715C266,725 240,731 218,731C142,731 99,682 99,587l0,-107l-66,-4l0,-34l66,0l0,-442l44,0l0,442l111,0l0,38l-111,0l0,104C143,653 167,693 218,693C236,693 256,689 276,679z"/>
+<glyph unicode="g" horiz-adv-x="487" d="M94,-94C94,-60 113,-23 157,7C182,1 207,-1 217,-1l103,0C392,-1 431,-21 431,-74C431,-134 362,-195 254,-195C152,-195 94,-154 94,-94 z M52,-98C52,-179 128,-231 249,-231C387,-231 476,-152 476,-69C476,7 426,41 318,41l-103,0C143,41 123,69 123,104C123,136 141,156 162,173C184,160 215,153 242,153C336,153 409,224 409,322C409,373 387,416 356,443l112,0l0,37l-163,0C290,486 268,492 242,492C148,492 73,422 73,323C73,265 103,217 133,191l0,-4C112,172 81,142 81,99C81,62 99,36 123,22l0,-4C79,-14 52,-56 52,-98 z M242,188C175,188 117,242 117,323C117,405 174,456 242,456C310,456 366,404 366,323C366,242 308,188 242,188z"/>
+<glyph unicode="h" horiz-adv-x="528" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 136,405l0,106l0,208l-44,0z"/>
+<glyph unicode="i" horiz-adv-x="229" d="M115,596C137,596 155,612 155,635C155,660 137,675 115,675C93,675 75,660 75,635C75,612 93,596 115,596 z M92,0l44,0l0,480l-44,0z"/>
+<glyph unicode="j" horiz-adv-x="229" d="M92,-86C92,-147 82,-191 28,-191C9,-191 -10,-185 -22,-181l-11,-36C-18,-223 6,-229 29,-229C103,-229 137,-183 137,-89l0,569l-45,0 z M115,596C137,596 156,612 156,635C156,660 137,675 115,675C94,675 75,660 75,635C75,612 94,596 115,596z"/>
+<glyph unicode="k" horiz-adv-x="464" d="M92,0l44,0l0,131l108,126l159,-257l49,0l-182,290l156,190l-51,0l-237,-291l-2,0l0,530l-44,0z"/>
+<glyph unicode="l" horiz-adv-x="237" d="M92,64C92,12 112,-12 151,-12C165,-12 174,-10 183,-7l-8,36C165,27 161,27 157,27C145,27 136,37 136,58l0,661l-44,0z"/>
+<glyph unicode="m" horiz-adv-x="812" d="M92,0l44,0l0,362C189,422 237,452 280,452C354,452 388,404 388,302l0,-302l44,0l0,362C485,422 531,452 576,452C649,452 683,404 683,302l0,-302l45,0l0,308C728,432 680,492 584,492C529,492 476,454 421,394C404,453 365,492 288,492C235,492 180,455 137,406l-3,0l-4,74l-38,0z"/>
+<glyph unicode="n" horiz-adv-x="532" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 137,406l-3,0l-4,74l-38,0z"/>
+<glyph unicode="o" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239z"/>
+<glyph unicode="p" horiz-adv-x="544" d="M136,47C186,10 235,-12 280,-12C393,-12 492,84 492,247C492,396 428,492 300,492C241,492 184,457 137,420l-3,0l-4,60l-38,0l0,-697l44,0l0,175 z M136,89l0,285C194,425 245,453 293,453C403,453 445,365 445,247C445,117 375,27 278,27C241,27 191,44 136,89z"/>
+<glyph unicode="q" horiz-adv-x="537" d="M52,239C52,77 130,-12 251,-12C314,-12 367,22 410,61l-2,-93l0,-185l44,0l0,697l-37,0l-5,-44l-2,0C363,471 323,492 265,492C151,492 52,394 52,239 z M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239z"/>
+<glyph unicode="r" horiz-adv-x="317" d="M92,0l44,0l0,327C173,417 224,450 267,450C286,450 295,448 311,442l10,40C305,490 291,492 273,492C216,492 169,450 137,391l-3,0l-4,89l-38,0z"/>
+<glyph unicode="s" horiz-adv-x="405" d="M32,54C75,18 137,-12 208,-12C312,-12 370,51 370,123C370,217 288,242 213,270C156,291 100,312 100,367C100,411 134,454 208,454C257,454 291,435 323,411l24,31C312,471 261,492 210,492C110,492 55,434 55,364C55,282 135,253 208,227C263,207 325,181 325,121C325,70 286,26 211,26C142,26 99,53 58,87z"/>
+<glyph unicode="t" horiz-adv-x="312" d="M103,133C103,47 130,-12 223,-12C243,-12 273,-4 301,6l-12,36C272,34 247,27 229,27C163,27 148,68 148,129l0,313l139,0l0,38l-139,0l0,139l-38,0l-6,-139l-76,-4l0,-34l75,0z"/>
+<glyph unicode="u" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0z"/>
+<glyph unicode="v" horiz-adv-x="434" d="M192,0l52,0l178,480l-45,0l-108,-301C253,133 236,85 220,41l-4,0C201,85 183,133 168,179l-108,301l-48,0z"/>
+<glyph unicode="w" horiz-adv-x="685" d="M166,0l53,0l83,296C317,342 329,388 340,435l4,0C358,388 367,344 381,298l84,-298l58,0l138,480l-45,0l-85,-311C520,125 508,84 497,41l-4,0C481,84 469,125 457,169l-87,311l-53,0l-87,-311C218,125 206,84 195,41l-4,0C181,84 170,125 158,169l-86,311l-48,0z"/>
+<glyph unicode="x" horiz-adv-x="407" d="M14,0l47,0l82,131C162,161 179,191 198,219l4,0C222,191 241,161 259,131l85,-131l49,0l-163,247l149,233l-46,0l-75,-122C241,332 226,305 209,279l-4,0C187,305 170,332 154,358l-78,122l-49,0l150,-229z"/>
+<glyph unicode="y" horiz-adv-x="436" d="M34,-170l-10,-39C37,-215 55,-219 73,-219C159,-219 207,-140 234,-60l190,540l-45,0l-103,-302C263,138 247,86 232,44l-4,0C210,86 191,138 176,178l-116,302l-48,0l197,-489l-13,-42C172,-124 132,-178 73,-178C59,-178 44,-174 34,-170z"/>
+<glyph unicode="z" horiz-adv-x="404" d="M27,0l351,0l0,39l-293,0l283,418l0,23l-310,0l0,-38l253,0l-284,-418z"/>
+<glyph unicode="&#xC0;" horiz-adv-x="526" d="M300,709l-92,106l-58,0l109,-106 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#xC1;" horiz-adv-x="526" d="M376,815l-58,0l-92,-106l40,0 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#xC2;" horiz-adv-x="526" d="M261,781l4,0l75,-72l40,0l-96,106l-42,0l-96,-106l40,0 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#xC3;" horiz-adv-x="526" d="M364,808C360,774 344,752 322,752C282,752 256,808 204,808C159,808 136,761 133,716l29,0C166,750 182,773 203,773C244,773 269,716 321,716C366,716 389,764 392,808 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#xC4;" horiz-adv-x="526" d="M342,725C362,725 378,739 378,761C378,784 362,798 342,798C321,798 305,784 305,761C305,739 321,725 342,725 z M184,725C205,725 221,739 221,761C221,784 205,798 184,798C163,798 147,784 147,761C147,739 163,725 184,725 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x100;" horiz-adv-x="526" d="M377,770l-228,0l0,-36l228,0 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x102;" horiz-adv-x="526" d="M345,815C339,780 314,743 263,743C211,743 186,780 180,815l-32,0C154,769 187,711 263,711C338,711 372,769 378,815 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#xC5;" horiz-adv-x="526" d="M263,838C290,838 313,817 313,782C313,745 290,726 263,726C234,726 210,745 210,782C210,817 234,838 263,838 z M263,700C308,700 345,732 345,782C345,831 308,864 263,864C216,864 181,831 181,782C181,732 216,700 263,700 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1CD;" horiz-adv-x="526" d="M284,709l96,106l-40,0l-75,-72l-4,0l-75,72l-40,0l96,-106 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EA0;" horiz-adv-x="526" d="M263,-114C241,-114 225,-130 225,-153C225,-178 241,-194 263,-194C284,-194 301,-178 301,-153C301,-130 284,-114 263,-114 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M518,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0l77,-226z"/>
+<glyph unicode="&#x1EA2;" horiz-adv-x="526" d="M239,702C287,715 333,737 333,789C333,839 279,861 213,863l-4,-32C263,829 294,814 294,783C294,755 267,740 231,729 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EA4;" horiz-adv-x="526" d="M460,876l-47,0l-71,-106l33,0 z M261,775l4,0l69,-66l39,0l-90,100l-40,0l-91,-100l39,0 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EA6;" horiz-adv-x="526" d="M415,770l-72,106l-47,0l86,-106 z M261,775l4,0l69,-66l39,0l-90,100l-40,0l-91,-100l39,0 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EA8;" horiz-adv-x="526" d="M365,757C402,766 444,785 444,831C444,878 397,896 338,899l-5,-31C381,866 406,856 406,826C406,803 383,791 355,784 z M261,775l4,0l69,-66l39,0l-90,100l-40,0l-91,-100l39,0 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EAA;" horiz-adv-x="526" d="M356,924C351,894 336,875 314,875C279,875 260,924 212,924C165,924 144,881 141,843l29,0C174,873 190,892 211,892C246,892 266,843 314,843C360,843 382,886 385,924 z M243,809l-91,-100l39,0l70,66l4,0l69,-66l39,0l-90,100 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EAC;" horiz-adv-x="526" d="M261,781l4,0l75,-72l40,0l-96,106l-42,0l-96,-106l40,0 z M263,-114C241,-114 225,-130 225,-153C225,-178 241,-194 263,-194C284,-194 301,-178 301,-153C301,-130 284,-114 263,-114 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M518,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0l77,-226z"/>
+<glyph unicode="&#x1EAE;" horiz-adv-x="526" d="M356,896l-49,0l-79,-97l33,0 z M345,811C337,776 314,742 263,742C212,742 189,776 181,811l-31,0C156,766 191,711 263,711C335,711 370,766 376,811 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EB0;" horiz-adv-x="526" d="M298,799l-80,97l-48,0l94,-97 z M345,811C337,776 314,742 263,742C212,742 189,776 181,811l-31,0C156,766 191,711 263,711C335,711 370,766 376,811 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EB2;" horiz-adv-x="526" d="M246,797C283,807 325,825 325,871C325,919 278,937 219,939l-5,-30C262,906 287,896 287,866C287,843 264,832 236,824 z M345,811C337,776 314,742 263,742C212,742 189,776 181,811l-31,0C156,766 191,711 263,711C335,711 370,766 376,811 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EB4;" horiz-adv-x="526" d="M356,924C351,894 336,875 314,875C279,875 260,924 212,924C165,924 144,881 141,843l29,0C174,873 190,892 211,892C246,892 266,843 314,843C360,843 382,886 385,924 z M150,811C156,766 191,711 263,711C335,711 370,766 376,811l-31,0C337,776 314,742 263,742C212,742 189,776 181,811 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M470,0l48,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0z"/>
+<glyph unicode="&#x1EB6;" horiz-adv-x="526" d="M345,815C339,780 314,743 263,743C211,743 186,780 180,815l-32,0C154,769 187,711 263,711C338,711 372,769 378,815 z M263,-114C241,-114 225,-130 225,-153C225,-178 241,-194 263,-194C284,-194 301,-178 301,-153C301,-130 284,-114 263,-114 z M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M518,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0l77,-226z"/>
+<glyph unicode="&#x104;" horiz-adv-x="526" d="M146,265l42,123C215,466 238,535 261,616l4,0C288,535 311,466 338,388l42,-123 z M538,-154C525,-164 512,-168 495,-168C469,-168 444,-151 444,-116C444,-75 477,-27 518,0l-232,659l-46,0l-232,-659l46,0l78,226l261,0l77,-226l6,0C441,-25 405,-73 405,-123C405,-178 443,-205 489,-205C511,-205 539,-194 554,-181z"/>
+<glyph unicode="&#xC6;" horiz-adv-x="809" d="M210,255l73,133C325,467 366,545 407,619l4,0l0,-364 z M457,40l0,290l245,0l0,40l-245,0l0,249l295,0l0,40l-366,0l-365,-659l49,0l119,217l222,0l0,-217l351,0l0,40z"/>
+<glyph unicode="&#xC7;" horiz-adv-x="564" d="M499,111C451,57 401,30 333,30C191,30 103,148 103,331C103,514 192,629 337,629C397,629 445,602 480,562l28,30C473,633 413,671 337,671C169,671 55,540 55,331C55,124 165,-8 324,-12l-33,-62C330,-84 358,-97 358,-127C358,-155 320,-170 265,-178l7,-30C336,-200 397,-175 397,-123C397,-83 370,-65 337,-54l22,43C430,-3 482,31 527,82z"/>
+<glyph unicode="&#x106;" horiz-adv-x="564" d="M55,331C55,121 168,-12 331,-12C416,-12 476,24 527,82l-28,29C451,57 401,30 333,30C191,30 103,148 103,331C103,514 192,629 337,629C397,629 445,602 480,562l28,30C473,633 413,671 337,671C169,671 55,540 55,331 z M436,815l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#x108;" horiz-adv-x="564" d="M55,331C55,121 168,-12 331,-12C416,-12 476,24 527,82l-28,29C451,57 401,30 333,30C191,30 103,148 103,331C103,514 192,629 337,629C397,629 445,602 480,562l28,30C473,633 413,671 337,671C169,671 55,540 55,331 z M246,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x10C;" horiz-adv-x="564" d="M55,331C55,121 168,-12 331,-12C416,-12 476,24 527,82l-28,29C451,57 401,30 333,30C191,30 103,148 103,331C103,514 192,629 337,629C397,629 445,602 480,562l28,30C473,633 413,671 337,671C169,671 55,540 55,331 z M400,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x10A;" horiz-adv-x="564" d="M55,331C55,121 168,-12 331,-12C416,-12 476,24 527,82l-28,29C451,57 401,30 333,30C191,30 103,148 103,331C103,514 192,629 337,629C397,629 445,602 480,562l28,30C473,633 413,671 337,671C169,671 55,540 55,331 z M323,721C345,721 363,737 363,762C363,785 345,801 323,801C301,801 283,785 283,762C283,737 301,721 323,721z"/>
+<glyph unicode="&#x10E;" horiz-adv-x="604" d="M97,0l154,0C453,0 549,132 549,332C549,531 453,659 250,659l-153,0 z M143,39l0,581l102,0C424,620 501,503 501,332C501,160 424,39 245,39 z M379,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x1E0C;" horiz-adv-x="604" d="M97,0l154,0C453,0 549,132 549,332C549,531 453,659 250,659l-153,0 z M143,39l0,581l102,0C424,620 501,503 501,332C501,160 424,39 245,39 z M300,-194C321,-194 338,-178 338,-153C338,-130 321,-114 300,-114C278,-114 262,-130 262,-153C262,-178 278,-194 300,-194z"/>
+<glyph unicode="&#x1E0E;" horiz-adv-x="604" d="M97,0l154,0C453,0 549,132 549,332C549,531 453,659 250,659l-153,0 z M143,39l0,581l102,0C424,620 501,503 501,332C501,160 424,39 245,39 z M413,-124l-228,0l0,-36l228,0z"/>
+<glyph unicode="&#x110;" horiz-adv-x="625" d="M164,39l0,293l163,0l0,33l-163,0l0,255l102,0C444,620 522,503 522,332C522,160 444,39 266,39 z M118,659l0,-294l-81,-2l0,-31l81,0l0,-332l153,0C474,0 570,132 570,332C570,531 474,659 270,659z"/>
+<glyph unicode="&#xC8;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M278,709l41,0l-92,106l-58,0z"/>
+<glyph unicode="&#xC9;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M395,815l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#xCA;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M205,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x11A;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M359,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xCB;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M203,725C224,725 240,739 240,761C240,784 224,798 203,798C182,798 166,784 166,761C166,739 182,725 203,725 z M361,725C382,725 397,739 397,761C397,784 382,798 361,798C340,798 324,784 324,761C324,739 340,725 361,725z"/>
+<glyph unicode="&#x112;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M168,734l228,0l0,36l-228,0z"/>
+<glyph unicode="&#x114;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M282,711C358,711 391,769 397,815l-33,0C358,780 333,743 282,743C230,743 206,780 200,815l-33,0C173,769 206,711 282,711z"/>
+<glyph unicode="&#x116;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M282,721C304,721 322,737 322,762C322,785 304,801 282,801C260,801 242,785 242,762C242,737 260,721 282,721z"/>
+<glyph unicode="&#x1EB8;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M297,-194C318,-194 335,-178 335,-153C335,-130 318,-114 297,-114C275,-114 259,-130 259,-153C259,-178 275,-194 297,-194z"/>
+<glyph unicode="&#x1EBA;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M258,702C306,715 353,737 353,789C353,839 298,861 232,863l-4,-32C282,829 313,814 313,783C313,755 286,740 250,729z"/>
+<glyph unicode="&#x1EBC;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M341,716C386,716 409,764 412,808l-29,0C379,774 363,752 342,752C301,752 276,808 223,808C178,808 155,761 152,716l29,0C185,750 201,773 222,773C263,773 288,716 341,716z"/>
+<glyph unicode="&#x1EBE;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M361,770l33,0l85,106l-47,0 z M171,709l39,0l70,66l4,0l69,-66l40,0l-91,100l-40,0z"/>
+<glyph unicode="&#x1EC0;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M362,876l-47,0l86,-106l33,0 z M171,709l39,0l70,66l4,0l69,-66l40,0l-91,100l-40,0z"/>
+<glyph unicode="&#x1EC2;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M384,757C422,766 463,785 463,831C463,878 416,896 357,899l-5,-31C400,866 425,856 425,826C425,803 402,791 374,784 z M171,709l39,0l70,66l4,0l69,-66l40,0l-91,100l-40,0z"/>
+<glyph unicode="&#x1EC4;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M171,709l39,0l70,66l4,0l69,-66l40,0l-91,100l-40,0 z M189,843C193,873 209,892 230,892C265,892 285,843 333,843C379,843 401,886 404,924l-29,0C370,894 355,875 333,875C298,875 279,924 231,924C184,924 163,881 160,843z"/>
+<glyph unicode="&#x1EC6;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M205,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106 z M297,-194C318,-194 335,-178 335,-153C335,-130 318,-114 297,-114C275,-114 259,-130 259,-153C259,-178 275,-194 297,-194z"/>
+<glyph unicode="&#x118;" horiz-adv-x="515" d="M97,0l307,0C365,-25 331,-71 331,-123C331,-178 369,-205 415,-205C437,-205 465,-194 481,-181l-17,27C451,-164 439,-168 421,-168C396,-168 371,-151 371,-116C371,-58 420,-9 465,0l3,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0z"/>
+<glyph unicode="&#x11C;" horiz-adv-x="605" d="M55,331C55,121 168,-12 337,-12C424,-12 492,19 533,63l0,261l-202,0l0,-39l158,0l0,-205C457,48 401,30 341,30C191,30 103,148 103,331C103,514 196,629 347,629C419,629 465,599 499,562l27,30C491,629 435,671 347,671C172,671 55,540 55,331 z M269,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x11E;" horiz-adv-x="605" d="M55,331C55,121 168,-12 337,-12C424,-12 492,19 533,63l0,261l-202,0l0,-39l158,0l0,-205C457,48 401,30 341,30C191,30 103,148 103,331C103,514 196,629 347,629C419,629 465,599 499,562l27,30C491,629 435,671 347,671C172,671 55,540 55,331 z M346,711C422,711 455,769 461,815l-33,0C422,780 398,743 346,743C294,743 270,780 264,815l-33,0C237,769 270,711 346,711z"/>
+<glyph unicode="&#x120;" horiz-adv-x="605" d="M55,331C55,121 168,-12 337,-12C424,-12 492,19 533,63l0,261l-202,0l0,-39l158,0l0,-205C457,48 401,30 341,30C191,30 103,148 103,331C103,514 196,629 347,629C419,629 465,599 499,562l27,30C491,629 435,671 347,671C172,671 55,540 55,331 z M346,721C368,721 386,737 386,762C386,785 368,801 346,801C324,801 306,785 306,762C306,737 324,721 346,721z"/>
+<glyph unicode="&#x122;" horiz-adv-x="605" d="M55,331C55,121 168,-12 337,-12C424,-12 492,19 533,63l0,261l-202,0l0,-39l158,0l0,-205C457,48 401,30 341,30C191,30 103,148 103,331C103,514 196,629 347,629C419,629 465,599 499,562l27,30C491,629 435,671 347,671C172,671 55,540 55,331 z M315,-51l-13,-29C331,-86 359,-98 359,-129C359,-156 321,-171 266,-179l7,-30C337,-201 398,-176 398,-124C398,-83 370,-62 315,-51z"/>
+<glyph unicode="&#x1E6;" horiz-adv-x="605" d="M55,331C55,121 168,-12 337,-12C424,-12 492,19 533,63l0,261l-202,0l0,-39l158,0l0,-205C457,48 401,30 341,30C191,30 103,148 103,331C103,514 196,629 347,629C419,629 465,599 499,562l27,30C491,629 435,671 347,671C172,671 55,540 55,331 z M423,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x1E20;" horiz-adv-x="605" d="M55,331C55,121 168,-12 337,-12C424,-12 492,19 533,63l0,261l-202,0l0,-39l158,0l0,-205C457,48 401,30 341,30C191,30 103,148 103,331C103,514 196,629 347,629C419,629 465,599 499,562l27,30C491,629 435,671 347,671C172,671 55,540 55,331 z M232,734l228,0l0,36l-228,0z"/>
+<glyph unicode="&#xE000;" horiz-adv-x="605" d="M55,331C55,121 168,-12 337,-12C424,-12 492,19 533,63l0,261l-202,0l0,-39l158,0l0,-205C457,48 401,30 341,30C191,30 103,148 103,331C103,514 196,629 347,629C419,629 465,599 499,562l27,30C491,629 435,671 347,671C172,671 55,540 55,331 z M405,716C450,716 473,764 476,808l-29,0C443,774 427,752 406,752C365,752 340,808 287,808C242,808 219,761 216,716l29,0C249,750 265,773 286,773C327,773 352,716 405,716z"/>
+<glyph unicode="&#x124;" horiz-adv-x="639" d="M97,0l46,0l0,330l353,0l0,-330l46,0l0,659l-46,0l0,-289l-353,0l0,289l-46,0 z M242,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x1E24;" horiz-adv-x="639" d="M97,0l46,0l0,330l353,0l0,-330l46,0l0,659l-46,0l0,-289l-353,0l0,289l-46,0 z M319,-194C341,-194 357,-178 357,-153C357,-130 341,-114 319,-114C298,-114 281,-130 281,-153C281,-178 298,-194 319,-194z"/>
+<glyph unicode="&#x1E2A;" horiz-adv-x="639" d="M97,0l46,0l0,330l353,0l0,-330l46,0l0,659l-46,0l0,-289l-353,0l0,289l-46,0 z M319,-203C401,-203 433,-135 438,-84l-33,0C399,-127 373,-170 319,-170C266,-170 239,-127 233,-84l-33,0C206,-135 238,-203 319,-203z"/>
+<glyph unicode="&#x126;" horiz-adv-x="672" d="M516,370l-353,0l0,125l353,0 z M635,528l-73,0l0,131l-46,0l0,-131l-353,0l0,131l-46,0l0,-131l-81,-4l0,-29l81,0l0,-495l46,0l0,330l353,0l0,-330l46,0l0,495l73,0z"/>
+<glyph unicode="&#xCC;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M117,709l40,0l-92,106l-58,0z"/>
+<glyph unicode="&#xCD;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M233,815l-58,0l-92,-106l41,0z"/>
+<glyph unicode="&#xCE;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M43,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x128;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M179,716C224,716 247,764 250,808l-29,0C217,774 201,752 180,752C139,752 114,808 62,808C17,808 -6,761 -9,716l28,0C23,750 39,773 61,773C101,773 127,716 179,716z"/>
+<glyph unicode="&#xCF;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M41,725C62,725 78,739 78,761C78,784 62,798 41,798C21,798 5,784 5,761C5,739 21,725 41,725 z M199,725C220,725 236,739 236,761C236,784 220,798 199,798C178,798 162,784 162,761C162,739 178,725 199,725z"/>
+<glyph unicode="&#x12A;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M6,734l228,0l0,36l-228,0z"/>
+<glyph unicode="&#x130;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M120,721C142,721 160,737 160,762C160,785 142,801 120,801C98,801 80,785 80,762C80,737 98,721 120,721z"/>
+<glyph unicode="&#x1CF;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M197,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x1EC8;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M97,702C144,715 191,737 191,789C191,839 136,861 70,863l-4,-32C121,829 152,814 152,783C152,755 125,740 88,729z"/>
+<glyph unicode="&#x1ECA;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M121,-194C143,-194 159,-178 159,-153C159,-130 143,-114 121,-114C100,-114 83,-130 83,-153C83,-178 100,-194 121,-194z"/>
+<glyph unicode="&#x12E;" horiz-adv-x="240" d="M97,0l9,0C72,-34 44,-69 44,-123C44,-178 82,-205 128,-205C150,-205 178,-194 193,-181l-16,27C164,-164 151,-168 134,-168C109,-168 83,-151 83,-116C83,-72 109,-38 143,0l0,659l-46,0z"/>
+<glyph unicode="&#x134;" horiz-adv-x="462" d="M41,85C74,23 130,-12 203,-12C323,-12 367,73 367,179l0,480l-46,0l0,-475C321,77 283,30 203,30C148,30 108,52 76,108 z M264,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x136;" horiz-adv-x="558" d="M97,0l46,0l0,227l134,153l218,-380l53,0l-239,415l210,244l-55,0l-319,-366l-2,0l0,366l-46,0 z M297,-51l-12,-29C313,-86 341,-98 341,-129C341,-156 303,-171 248,-179l7,-30C319,-201 380,-176 380,-124C380,-83 352,-62 297,-51z"/>
+<glyph unicode="&#x139;" horiz-adv-x="467" d="M97,0l350,0l0,40l-304,0l0,619l-46,0 z M235,815l-57,0l-93,-106l41,0z"/>
+<glyph unicode="&#x13D;" horiz-adv-x="467" d="M97,0l350,0l0,40l-304,0l0,619l-46,0 z M349,517l8,156l1,50l-38,0l2,-206z"/>
+<glyph unicode="&#x13B;" horiz-adv-x="467" d="M97,0l350,0l0,40l-304,0l0,619l-46,0 z M261,-51l-12,-29C277,-86 305,-98 305,-129C305,-156 267,-171 212,-179l7,-30C283,-201 344,-176 344,-124C344,-83 316,-62 261,-51z"/>
+<glyph unicode="&#x13F;" horiz-adv-x="467" d="M97,0l350,0l0,40l-304,0l0,619l-46,0 z M315,323C315,295 335,278 357,278C379,278 400,295 400,323C400,352 379,369 357,369C335,369 315,352 315,323z"/>
+<glyph unicode="&#x1E36;" horiz-adv-x="467" d="M97,0l350,0l0,40l-304,0l0,619l-46,0 z M287,-194C308,-194 325,-178 325,-153C325,-130 308,-114 287,-114C265,-114 248,-130 248,-153C248,-178 265,-194 287,-194z"/>
+<glyph unicode="&#x1E38;" horiz-adv-x="467" d="M97,0l350,0l0,40l-304,0l0,619l-46,0 z M9,734l227,0l0,36l-227,0 z M287,-194C308,-194 325,-178 325,-153C325,-130 308,-114 287,-114C265,-114 248,-130 248,-153C248,-178 265,-194 287,-194z"/>
+<glyph unicode="&#x1E3A;" horiz-adv-x="467" d="M97,0l350,0l0,40l-304,0l0,619l-46,0 z M400,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#x141;" horiz-adv-x="468" d="M148,40l0,239l193,100l0,40l-193,-100l0,340l-46,0l0,-361l-88,-48l0,-40l88,47l0,-257l349,0l0,40z"/>
+<glyph unicode="&#x1E42;" horiz-adv-x="706" d="M97,0l43,0l0,433C140,487 137,556 134,611l4,0l52,-145l142,-394l41,0l141,394l52,145l4,0C567,556 564,487 564,433l0,-433l45,0l0,659l-65,0l-138,-387l-50,-146l-4,0l-52,146l-138,387l-65,0 z M354,-194C376,-194 392,-178 392,-153C392,-130 376,-114 354,-114C332,-114 316,-130 316,-153C316,-178 332,-194 354,-194z"/>
+<glyph unicode="&#x143;" horiz-adv-x="636" d="M97,0l44,0l0,409C141,473 137,533 135,596l4,0l74,-131l278,-465l48,0l0,659l-44,0l0,-404C495,191 499,127 501,63l-4,0l-74,131l-278,465l-48,0 z M435,815l-57,0l-93,-106l41,0z"/>
+<glyph unicode="&#x147;" horiz-adv-x="636" d="M97,0l44,0l0,409C141,473 137,533 135,596l4,0l74,-131l278,-465l48,0l0,659l-44,0l0,-404C495,191 499,127 501,63l-4,0l-74,131l-278,465l-48,0 z M399,815l-74,-72l-4,0l-75,72l-41,0l96,-106l43,0l96,106z"/>
+<glyph unicode="&#xD1;" horiz-adv-x="636" d="M97,0l44,0l0,409C141,473 137,533 135,596l4,0l74,-131l278,-465l48,0l0,659l-44,0l0,-404C495,191 499,127 501,63l-4,0l-74,131l-278,465l-48,0 z M381,716C426,716 449,764 452,808l-28,0C419,774 404,752 382,752C342,752 316,808 264,808C219,808 196,761 193,716l28,0C226,750 242,773 263,773C304,773 329,716 381,716z"/>
+<glyph unicode="&#x145;" horiz-adv-x="636" d="M97,0l44,0l0,409C141,473 137,533 135,596l4,0l74,-131l278,-465l48,0l0,659l-44,0l0,-404C495,191 499,127 501,63l-4,0l-74,131l-278,465l-48,0 z M293,-51l-12,-29C309,-86 337,-98 337,-129C337,-156 299,-171 244,-179l7,-30C315,-201 376,-176 376,-124C376,-83 348,-62 293,-51z"/>
+<glyph unicode="&#x1E44;" horiz-adv-x="636" d="M97,0l44,0l0,409C141,473 137,533 135,596l4,0l74,-131l278,-465l48,0l0,659l-44,0l0,-404C495,191 499,127 501,63l-4,0l-74,131l-278,465l-48,0 z M323,721C344,721 363,737 363,762C363,785 344,801 323,801C301,801 282,785 282,762C282,737 301,721 323,721z"/>
+<glyph unicode="&#x1E46;" horiz-adv-x="636" d="M97,0l44,0l0,409C141,473 137,533 135,596l4,0l74,-131l278,-465l48,0l0,659l-44,0l0,-404C495,191 499,127 501,63l-4,0l-74,131l-278,465l-48,0 z M319,-194C340,-194 357,-178 357,-153C357,-130 340,-114 319,-114C297,-114 280,-130 280,-153C280,-178 297,-194 319,-194z"/>
+<glyph unicode="&#x1E48;" horiz-adv-x="636" d="M97,0l44,0l0,409C141,473 137,533 135,596l4,0l74,-131l278,-465l48,0l0,659l-44,0l0,-404C495,191 499,127 501,63l-4,0l-74,131l-278,465l-48,0 z M432,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#xD2;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M323,709l40,0l-92,106l-58,0z"/>
+<glyph unicode="&#xD3;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M439,815l-58,0l-92,-106l41,0z"/>
+<glyph unicode="&#xD4;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M249,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xD5;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M385,716C430,716 453,764 456,808l-29,0C423,774 407,752 386,752C345,752 320,808 268,808C223,808 200,761 197,716l28,0C229,750 245,773 267,773C307,773 333,716 385,716z"/>
+<glyph unicode="&#xD6;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M247,725C268,725 284,739 284,761C284,784 268,798 247,798C227,798 211,784 211,761C211,739 227,725 247,725 z M405,725C426,725 442,739 442,761C442,784 426,798 405,798C384,798 368,784 368,761C368,739 384,725 405,725z"/>
+<glyph unicode="&#x14C;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M212,734l228,0l0,36l-228,0z"/>
+<glyph unicode="&#x150;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M271,709l79,106l-49,0l-67,-106 z M379,709l36,0l80,106l-49,0z"/>
+<glyph unicode="&#x1D1;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M403,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x1ECC;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M326,-194C348,-194 364,-178 364,-153C364,-130 348,-114 326,-114C305,-114 288,-130 288,-153C288,-178 305,-194 326,-194z"/>
+<glyph unicode="&#x1ECE;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M303,702C350,715 397,737 397,789C397,839 342,861 276,863l-4,-32C327,829 358,814 358,783C358,755 331,740 294,729z"/>
+<glyph unicode="&#x1ED0;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M405,770l33,0l86,106l-47,0 z M216,709l39,0l69,66l4,0l70,-66l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#x1ED2;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M407,876l-48,0l86,-106l33,0 z M216,709l39,0l69,66l4,0l70,-66l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#x1ED4;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M428,757C466,766 507,785 507,831C507,878 461,896 402,899l-6,-31C445,866 469,856 469,826C469,803 447,791 418,784 z M216,709l39,0l69,66l4,0l70,-66l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#x1ED6;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M216,709l39,0l69,66l4,0l70,-66l39,0l-91,100l-40,0 z M233,843C238,873 253,892 275,892C310,892 329,843 377,843C424,843 445,886 448,924l-29,0C415,894 399,875 378,875C343,875 323,924 275,924C229,924 207,881 204,843z"/>
+<glyph unicode="&#x1ED8;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M249,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106 z M326,-194C348,-194 364,-178 364,-153C364,-130 348,-114 326,-114C305,-114 288,-130 288,-153C288,-178 305,-194 326,-194z"/>
+<glyph unicode="&#xD8;" horiz-adv-x="652" d="M501,535C534,484 553,415 553,332C553,149 464,30 330,30C268,30 215,56 177,101 z M155,132C124,183 107,251 107,332C107,514 196,629 330,629C390,629 440,606 478,565 z M595,660l-29,22l-61,-81C459,646 399,671 330,671C171,671 58,540 58,332C58,234 83,152 126,93l-70,-94l28,-22l65,87C196,15 258,-12 330,-12C488,-12 601,123 601,332C601,432 575,515 530,573z"/>
+<glyph unicode="&#x152;" horiz-adv-x="833" d="M55,332C55,132 160,0 367,0l419,0l0,40l-305,0l0,290l245,0l0,40l-245,0l0,249l295,0l0,40l-408,0C160,659 55,531 55,332 z M103,332C103,504 188,620 372,620l63,0l0,-581l-63,0C188,39 103,160 103,332z"/>
+<glyph unicode="&#x1A0;" horiz-adv-x="652" d="M330,30C196,30 107,149 107,332C107,514 196,629 330,629C464,629 553,514 553,332C553,149 464,30 330,30 z M535,747C544,733 549,721 549,708C549,670 519,648 454,639C418,660 376,671 330,671C171,671 58,540 58,332C58,123 171,-12 330,-12C488,-12 601,123 601,332C601,458 559,557 491,614C552,628 589,658 589,711C589,731 582,748 570,766z"/>
+<glyph unicode="&#x1EDA;" horiz-adv-x="652" d="M439,815l-58,0l-92,-106l41,0 z M330,30C196,30 107,149 107,332C107,514 196,629 330,629C464,629 553,514 553,332C553,149 464,30 330,30 z M535,747C544,733 549,721 549,708C549,670 519,648 454,639C418,660 376,671 330,671C171,671 58,540 58,332C58,123 171,-12 330,-12C488,-12 601,123 601,332C601,458 559,557 491,614C552,628 589,658 589,711C589,731 582,748 570,766z"/>
+<glyph unicode="&#x1EDC;" horiz-adv-x="652" d="M363,709l-92,106l-58,0l110,-106 z M330,30C196,30 107,149 107,332C107,514 196,629 330,629C464,629 553,514 553,332C553,149 464,30 330,30 z M535,747C544,733 549,721 549,708C549,670 519,648 454,639C418,660 376,671 330,671C171,671 58,540 58,332C58,123 171,-12 330,-12C488,-12 601,123 601,332C601,458 559,557 491,614C552,628 589,658 589,711C589,731 582,748 570,766z"/>
+<glyph unicode="&#x1EDE;" horiz-adv-x="652" d="M303,702C350,715 397,737 397,789C397,839 342,861 276,863l-4,-32C327,829 358,814 358,783C358,755 331,740 294,729 z M330,30C196,30 107,149 107,332C107,514 196,629 330,629C464,629 553,514 553,332C553,149 464,30 330,30 z M535,747C544,733 549,721 549,708C549,670 519,648 454,639C418,660 376,671 330,671C171,671 58,540 58,332C58,123 171,-12 330,-12C488,-12 601,123 601,332C601,458 559,557 491,614C552,628 589,658 589,711C589,731 582,748 570,766z"/>
+<glyph unicode="&#x1EE0;" horiz-adv-x="652" d="M427,808C423,774 407,752 386,752C345,752 320,808 268,808C223,808 200,761 197,716l28,0C229,750 245,773 267,773C307,773 333,716 385,716C430,716 453,764 456,808 z M330,30C196,30 107,149 107,332C107,514 196,629 330,629C464,629 553,514 553,332C553,149 464,30 330,30 z M535,747C544,733 549,721 549,708C549,670 519,648 454,639C418,660 376,671 330,671C171,671 58,540 58,332C58,123 171,-12 330,-12C488,-12 601,123 601,332C601,458 559,557 491,614C552,628 589,658 589,711C589,731 582,748 570,766z"/>
+<glyph unicode="&#x1EE2;" horiz-adv-x="652" d="M326,-114C305,-114 288,-130 288,-153C288,-178 305,-194 326,-194C348,-194 364,-178 364,-153C364,-130 348,-114 326,-114 z M330,30C196,30 107,149 107,332C107,514 196,629 330,629C464,629 553,514 553,332C553,149 464,30 330,30 z M535,747C544,733 549,721 549,708C549,670 519,648 454,639C418,660 376,671 330,671C171,671 58,540 58,332C58,123 171,-12 330,-12C488,-12 601,123 601,332C601,458 559,557 491,614C552,628 589,658 589,711C589,731 582,748 570,766z"/>
+<glyph unicode="&#x1EA;" horiz-adv-x="652" d="M273,-123C273,-178 311,-205 357,-205C379,-205 407,-194 423,-181l-17,27C393,-164 381,-168 363,-168C338,-168 313,-151 313,-116C313,-80 338,-33 395,-8C527,52 598,156 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,125 162,-12 334,-12C295,-43 273,-83 273,-123 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30z"/>
+<glyph unicode="&#x154;" horiz-adv-x="560" d="M397,815l-57,0l-93,-106l41,0 z M143,341l0,279l131,0C390,620 455,584 455,485C455,388 390,341 274,341 z M515,0l-182,306C437,319 502,380 502,485C502,611 417,659 286,659l-189,0l0,-659l46,0l0,303l140,0l179,-303z"/>
+<glyph unicode="&#x158;" horiz-adv-x="560" d="M306,709l96,106l-40,0l-75,-72l-4,0l-75,72l-41,0l96,-106 z M143,341l0,279l131,0C390,620 455,584 455,485C455,388 390,341 274,341 z M515,0l-182,306C437,319 502,380 502,485C502,611 417,659 286,659l-189,0l0,-659l46,0l0,303l140,0l179,-303z"/>
+<glyph unicode="&#x156;" horiz-adv-x="560" d="M261,-80C290,-86 317,-98 317,-129C317,-156 280,-171 225,-179l7,-30C296,-201 357,-176 357,-124C357,-83 328,-62 274,-51 z M143,341l0,279l131,0C390,620 455,584 455,485C455,388 390,341 274,341 z M333,306C437,319 502,380 502,485C502,611 417,659 286,659l-189,0l0,-659l46,0l0,303l140,0l179,-303l53,0z"/>
+<glyph unicode="&#x1E5A;" horiz-adv-x="560" d="M299,-114C277,-114 261,-130 261,-153C261,-178 277,-194 299,-194C321,-194 337,-178 337,-153C337,-130 321,-114 299,-114 z M143,341l0,279l131,0C390,620 455,584 455,485C455,388 390,341 274,341 z M333,306C437,319 502,380 502,485C502,611 417,659 286,659l-189,0l0,-659l46,0l0,303l140,0l179,-303l53,0z"/>
+<glyph unicode="&#x1E5C;" horiz-adv-x="560" d="M398,770l-227,0l0,-36l227,0 z M299,-114C277,-114 261,-130 261,-153C261,-178 277,-194 299,-194C321,-194 337,-178 337,-153C337,-130 321,-114 299,-114 z M143,341l0,279l131,0C390,620 455,584 455,485C455,388 390,341 274,341 z M333,306C437,319 502,380 502,485C502,611 417,659 286,659l-189,0l0,-659l46,0l0,303l140,0l179,-303l53,0z"/>
+<glyph unicode="&#x1E5E;" horiz-adv-x="560" d="M184,-160l228,0l0,36l-228,0 z M143,341l0,279l131,0C390,620 455,584 455,485C455,388 390,341 274,341 z M333,306C437,319 502,380 502,485C502,611 417,659 286,659l-189,0l0,-659l46,0l0,303l140,0l179,-303l53,0z"/>
+<glyph unicode="&#x15A;" horiz-adv-x="521" d="M46,87C98,29 173,-12 269,-12C397,-12 480,64 480,165C480,266 415,307 341,340l-100,44C193,406 127,435 127,511C127,583 186,629 273,629C339,629 391,602 430,561l26,31C416,635 352,671 273,671C163,671 81,604 81,509C81,411 157,370 215,345l100,-45C380,271 433,244 433,162C433,84 370,30 269,30C193,30 124,65 76,119 z M385,815l-58,0l-93,-106l41,0z"/>
+<glyph unicode="&#x15C;" horiz-adv-x="521" d="M46,87C98,29 173,-12 269,-12C397,-12 480,64 480,165C480,266 415,307 341,340l-100,44C193,406 127,435 127,511C127,583 186,629 273,629C339,629 391,602 430,561l26,31C416,635 352,671 273,671C163,671 81,604 81,509C81,411 157,370 215,345l100,-45C380,271 433,244 433,162C433,84 370,30 269,30C193,30 124,65 76,119 z M195,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x160;" horiz-adv-x="521" d="M46,87C98,29 173,-12 269,-12C397,-12 480,64 480,165C480,266 415,307 341,340l-100,44C193,406 127,435 127,511C127,583 186,629 273,629C339,629 391,602 430,561l26,31C416,635 352,671 273,671C163,671 81,604 81,509C81,411 157,370 215,345l100,-45C380,271 433,244 433,162C433,84 370,30 269,30C193,30 124,65 76,119 z M349,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x15E;" horiz-adv-x="521" d="M241,384C193,406 127,435 127,511C127,583 186,629 273,629C339,629 391,602 430,561l26,31C416,635 352,671 273,671C163,671 81,604 81,509C81,411 157,370 215,345l100,-45C380,271 433,244 433,162C433,84 370,30 269,30C193,30 124,65 76,119l-30,-32C95,32 165,-7 253,-12l-33,-62C259,-84 287,-97 287,-127C287,-155 249,-170 194,-178l7,-30C265,-200 326,-175 326,-123C326,-83 299,-65 267,-54l21,43C405,-4 480,69 480,165C480,266 415,307 341,340z"/>
+<glyph unicode="&#x218;" horiz-adv-x="521" d="M46,87C98,29 173,-12 269,-12C397,-12 480,64 480,165C480,266 415,307 341,340l-100,44C193,406 127,435 127,511C127,583 186,629 273,629C339,629 391,602 430,561l26,31C416,635 352,671 273,671C163,671 81,604 81,509C81,411 157,370 215,345l100,-45C380,271 433,244 433,162C433,84 370,30 269,30C193,30 124,65 76,119 z M243,-51l-12,-29C259,-86 287,-98 287,-129C287,-156 249,-171 194,-179l7,-30C265,-201 326,-176 326,-124C326,-83 298,-62 243,-51z"/>
+<glyph unicode="&#x1E60;" horiz-adv-x="521" d="M46,87C98,29 173,-12 269,-12C397,-12 480,64 480,165C480,266 415,307 341,340l-100,44C193,406 127,435 127,511C127,583 186,629 273,629C339,629 391,602 430,561l26,31C416,635 352,671 273,671C163,671 81,604 81,509C81,411 157,370 215,345l100,-45C380,271 433,244 433,162C433,84 370,30 269,30C193,30 124,65 76,119 z M272,721C294,721 312,737 312,762C312,785 294,801 272,801C250,801 231,785 231,762C231,737 250,721 272,721z"/>
+<glyph unicode="&#x1E62;" horiz-adv-x="521" d="M46,87C98,29 173,-12 269,-12C397,-12 480,64 480,165C480,266 415,307 341,340l-100,44C193,406 127,435 127,511C127,583 186,629 273,629C339,629 391,602 430,561l26,31C416,635 352,671 273,671C163,671 81,604 81,509C81,411 157,370 215,345l100,-45C380,271 433,244 433,162C433,84 370,30 269,30C193,30 124,65 76,119 z M269,-194C290,-194 307,-178 307,-153C307,-130 290,-114 269,-114C247,-114 230,-130 230,-153C230,-178 247,-194 269,-194z"/>
+<glyph unicode="&#x1E9E;" horiz-adv-x="644" d="M98,0l46,0l0,409C144,562 219,630 337,630C412,630 460,588 485,535l-154,-170l3,-35C513,302 551,241 551,166C551,87 502,29 416,29C356,29 311,51 270,99l-31,-32C282,17 346,-12 416,-12C522,-12 599,65 599,167C599,260 545,337 382,363l156,170C499,616 439,671 339,671C196,671 98,583 98,422z"/>
+<glyph unicode="&#x164;" horiz-adv-x="524" d="M239,0l46,0l0,619l210,0l0,40l-466,0l0,-40l210,0 z M338,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x162;" horiz-adv-x="524" d="M285,0l0,619l210,0l0,40l-466,0l0,-40l210,0l0,-619l7,0l-39,-74C246,-84 274,-97 274,-127C274,-155 236,-170 181,-178l7,-30C252,-200 313,-175 313,-123C313,-83 286,-65 253,-54l28,54z"/>
+<glyph unicode="&#x21A;" horiz-adv-x="524" d="M239,0l46,0l0,619l210,0l0,40l-466,0l0,-40l210,0 z M238,-51l-13,-29C254,-86 282,-98 282,-129C282,-156 244,-171 189,-179l7,-30C260,-201 321,-176 321,-124C321,-83 293,-62 238,-51z"/>
+<glyph unicode="&#x1E6C;" horiz-adv-x="524" d="M239,0l46,0l0,619l210,0l0,40l-466,0l0,-40l210,0 z M263,-194C285,-194 301,-178 301,-153C301,-130 285,-114 263,-114C241,-114 225,-130 225,-153C225,-178 241,-194 263,-194z"/>
+<glyph unicode="&#x1E6E;" horiz-adv-x="524" d="M239,0l46,0l0,619l210,0l0,40l-466,0l0,-40l210,0 z M377,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#xD9;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M314,709l40,0l-92,106l-58,0z"/>
+<glyph unicode="&#xDA;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M430,815l-58,0l-92,-106l41,0z"/>
+<glyph unicode="&#xDB;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M240,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x168;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M376,716C421,716 444,764 447,808l-29,0C414,774 398,752 377,752C336,752 311,808 259,808C214,808 190,761 187,716l29,0C220,750 236,773 258,773C298,773 324,716 376,716z"/>
+<glyph unicode="&#xDC;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M238,725C259,725 275,739 275,761C275,784 259,798 238,798C217,798 202,784 202,761C202,739 217,725 238,725 z M396,725C417,725 433,739 433,761C433,784 417,798 396,798C375,798 359,784 359,761C359,739 375,725 396,725z"/>
+<glyph unicode="&#x16A;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M203,734l228,0l0,36l-228,0z"/>
+<glyph unicode="&#x16C;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M317,711C393,711 426,769 432,815l-33,0C393,780 369,743 317,743C266,743 241,780 235,815l-33,0C208,769 242,711 317,711z"/>
+<glyph unicode="&#x16E;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M317,700C362,700 399,732 399,782C399,831 362,864 317,864C270,864 235,831 235,782C235,732 270,700 317,700 z M317,726C288,726 265,745 265,782C265,817 288,838 317,838C344,838 368,817 368,782C368,745 344,726 317,726z"/>
+<glyph unicode="&#x170;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M262,709l79,106l-49,0l-67,-106 z M370,709l36,0l80,106l-49,0z"/>
+<glyph unicode="&#x1D3;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M394,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x1D5;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M203,854l228,0l0,33l-228,0 z M238,725C259,725 274,738 274,760C274,782 259,796 238,796C218,796 203,782 203,760C203,738 218,725 238,725 z M396,725C416,725 432,738 432,760C432,782 416,796 396,796C376,796 360,782 360,760C360,738 376,725 396,725z"/>
+<glyph unicode="&#x1D7;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M280,829l39,0l109,106l-54,0 z M238,725C259,725 274,738 274,760C274,782 259,796 238,796C218,796 203,782 203,760C203,738 218,725 238,725 z M396,725C416,725 432,738 432,760C432,782 416,796 396,796C376,796 360,782 360,760C360,738 376,725 396,725z"/>
+<glyph unicode="&#x1D9;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M238,725C259,725 274,738 274,760C274,782 259,796 238,796C218,796 203,782 203,760C203,738 218,725 238,725 z M396,725C416,725 432,738 432,760C432,782 416,796 396,796C376,796 360,782 360,760C360,738 376,725 396,725 z M394,935l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x1DB;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M260,935l-54,0l109,-106l39,0 z M396,725C416,725 432,738 432,760C432,782 416,796 396,796C376,796 360,782 360,760C360,738 376,725 396,725 z M238,725C259,725 274,738 274,760C274,782 259,796 238,796C218,796 203,782 203,760C203,738 218,725 238,725z"/>
+<glyph unicode="&#x1EE4;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M317,-194C339,-194 355,-178 355,-153C355,-130 339,-114 317,-114C295,-114 279,-130 279,-153C279,-178 295,-194 317,-194z"/>
+<glyph unicode="&#x1EE6;" horiz-adv-x="634" d="M95,253C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0 z M294,702C341,715 388,737 388,789C388,839 333,861 267,863l-4,-32C318,829 348,814 348,783C348,755 321,740 285,729z"/>
+<glyph unicode="&#x172;" horiz-adv-x="634" d="M95,253C95,52 196,-12 325,-12C295,-42 261,-71 261,-123C261,-178 299,-205 346,-205C367,-205 396,-194 411,-181l-16,27C381,-164 369,-168 352,-168C326,-168 301,-151 301,-116C301,-81 332,-35 385,-8C466,32 539,81 539,253l0,406l-43,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0z"/>
+<glyph unicode="&#x1AF;" horiz-adv-x="645" d="M586,767C596,753 600,741 600,728C600,687 570,666 506,659l-10,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0l0,-406C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,380C592,645 640,669 640,731C640,751 633,768 621,786z"/>
+<glyph unicode="&#x1EE8;" horiz-adv-x="645" d="M429,815l-58,0l-92,-106l41,0 z M586,767C596,753 600,741 600,728C600,687 570,666 506,659l-10,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0l0,-406C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,380C592,645 640,669 640,731C640,751 633,768 621,786z"/>
+<glyph unicode="&#x1EEA;" horiz-adv-x="645" d="M353,709l-92,106l-58,0l110,-106 z M586,767C596,753 600,741 600,728C600,687 570,666 506,659l-10,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0l0,-406C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,380C592,645 640,669 640,731C640,751 633,768 621,786z"/>
+<glyph unicode="&#x1EEC;" horiz-adv-x="645" d="M293,702C340,715 387,737 387,789C387,839 332,861 266,863l-4,-32C317,829 348,814 348,783C348,755 321,740 284,729 z M586,767C596,753 600,741 600,728C600,687 570,666 506,659l-10,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0l0,-406C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,380C592,645 640,669 640,731C640,751 633,768 621,786z"/>
+<glyph unicode="&#x1EEE;" horiz-adv-x="645" d="M417,808C413,774 397,752 376,752C335,752 310,808 258,808C213,808 190,761 187,716l28,0C219,750 235,773 257,773C297,773 323,716 375,716C420,716 443,764 446,808 z M586,767C596,753 600,741 600,728C600,687 570,666 506,659l-10,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0l0,-406C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,380C592,645 640,669 640,731C640,751 633,768 621,786z"/>
+<glyph unicode="&#x1EF0;" horiz-adv-x="645" d="M316,-114C295,-114 278,-130 278,-153C278,-178 295,-194 316,-194C338,-194 354,-178 354,-153C354,-130 338,-114 316,-114 z M586,767C596,753 600,741 600,728C600,687 570,666 506,659l-10,0l0,-401C496,83 411,30 316,30C223,30 141,83 141,258l0,401l-46,0l0,-406C95,47 203,-12 316,-12C430,-12 539,47 539,253l0,380C592,645 640,669 640,731C640,751 633,768 621,786z"/>
+<glyph unicode="&#x1E80;" horiz-adv-x="770" d="M178,0l50,0l118,452C358,504 372,549 383,601l4,0C398,549 410,504 422,452l120,-452l51,0l147,659l-45,0l-83,-388C597,199 584,128 569,56l-4,0C547,128 530,199 512,271l-103,388l-47,0l-103,-388C241,199 224,127 208,56l-4,0C189,127 174,199 159,271l-83,388l-48,0 z M382,709l40,0l-92,106l-58,0z"/>
+<glyph unicode="&#x1E82;" horiz-adv-x="770" d="M178,0l50,0l118,452C358,504 372,549 383,601l4,0C398,549 410,504 422,452l120,-452l51,0l147,659l-45,0l-83,-388C597,199 584,128 569,56l-4,0C547,128 530,199 512,271l-103,388l-47,0l-103,-388C241,199 224,127 208,56l-4,0C189,127 174,199 159,271l-83,388l-48,0 z M498,815l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#x174;" horiz-adv-x="770" d="M178,0l50,0l118,452C358,504 372,549 383,601l4,0C398,549 410,504 422,452l120,-452l51,0l147,659l-45,0l-83,-388C597,199 584,128 569,56l-4,0C547,128 530,199 512,271l-103,388l-47,0l-103,-388C241,199 224,127 208,56l-4,0C189,127 174,199 159,271l-83,388l-48,0 z M308,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x1E84;" horiz-adv-x="770" d="M178,0l50,0l118,452C358,504 372,549 383,601l4,0C398,549 410,504 422,452l120,-452l51,0l147,659l-45,0l-83,-388C597,199 584,128 569,56l-4,0C547,128 530,199 512,271l-103,388l-47,0l-103,-388C241,199 224,127 208,56l-4,0C189,127 174,199 159,271l-83,388l-48,0 z M306,725C327,725 343,739 343,761C343,784 327,798 306,798C285,798 270,784 270,761C270,739 285,725 306,725 z M464,725C485,725 500,739 500,761C500,784 485,798 464,798C443,798 427,784 427,761C427,739 443,725 464,725z"/>
+<glyph unicode="&#x1EF2;" horiz-adv-x="447" d="M200,0l46,0l0,267l198,392l-47,0l-100,-206C276,405 251,359 226,311l-4,0C196,359 175,405 152,453l-100,206l-49,0l197,-392 z M220,709l41,0l-93,106l-57,0z"/>
+<glyph unicode="&#xDD;" horiz-adv-x="447" d="M200,0l46,0l0,267l198,392l-47,0l-100,-206C276,405 251,359 226,311l-4,0C196,359 175,405 152,453l-100,206l-49,0l197,-392 z M336,815l-57,0l-93,-106l41,0z"/>
+<glyph unicode="&#x176;" horiz-adv-x="447" d="M200,0l46,0l0,267l198,392l-47,0l-100,-206C276,405 251,359 226,311l-4,0C196,359 175,405 152,453l-100,206l-49,0l197,-392 z M146,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x178;" horiz-adv-x="447" d="M200,0l46,0l0,267l198,392l-47,0l-100,-206C276,405 251,359 226,311l-4,0C196,359 175,405 152,453l-100,206l-49,0l197,-392 z M145,725C165,725 181,739 181,761C181,784 165,798 145,798C124,798 108,784 108,761C108,739 124,725 145,725 z M302,725C323,725 339,739 339,761C339,784 323,798 302,798C281,798 266,784 266,761C266,739 281,725 302,725z"/>
+<glyph unicode="&#x1E8E;" horiz-adv-x="447" d="M200,0l46,0l0,267l198,392l-47,0l-100,-206C276,405 251,359 226,311l-4,0C196,359 175,405 152,453l-100,206l-49,0l197,-392 z M223,721C245,721 264,737 264,762C264,785 245,801 223,801C202,801 183,785 183,762C183,737 202,721 223,721z"/>
+<glyph unicode="&#x1EF4;" horiz-adv-x="447" d="M200,0l46,0l0,267l198,392l-47,0l-100,-206C276,405 251,359 226,311l-4,0C196,359 175,405 152,453l-100,206l-49,0l197,-392 z M225,-194C247,-194 263,-178 263,-153C263,-130 247,-114 225,-114C204,-114 187,-130 187,-153C187,-178 204,-194 225,-194z"/>
+<glyph unicode="&#x1EF6;" horiz-adv-x="447" d="M200,0l46,0l0,267l198,392l-47,0l-100,-206C276,405 251,359 226,311l-4,0C196,359 175,405 152,453l-100,206l-49,0l197,-392 z M200,702C248,715 294,737 294,789C294,839 239,861 173,863l-3,-32C224,829 255,814 255,783C255,755 228,740 191,729z"/>
+<glyph unicode="&#x1EF8;" horiz-adv-x="447" d="M200,0l46,0l0,267l198,392l-47,0l-100,-206C276,405 251,359 226,311l-4,0C196,359 175,405 152,453l-100,206l-49,0l197,-392 z M282,716C327,716 350,764 353,808l-28,0C320,774 304,752 283,752C242,752 217,808 165,808C120,808 97,761 94,716l28,0C127,750 142,773 164,773C204,773 230,716 282,716z"/>
+<glyph unicode="&#x179;" horiz-adv-x="538" d="M50,0l440,0l0,40l-383,0l380,592l0,27l-404,0l0,-40l346,0l-379,-592 z M392,815l-57,0l-93,-106l41,0z"/>
+<glyph unicode="&#x17D;" horiz-adv-x="538" d="M50,0l440,0l0,40l-383,0l380,592l0,27l-404,0l0,-40l346,0l-379,-592 z M356,815l-74,-72l-4,0l-75,72l-41,0l96,-106l43,0l96,106z"/>
+<glyph unicode="&#x17B;" horiz-adv-x="538" d="M50,0l440,0l0,40l-383,0l380,592l0,27l-404,0l0,-40l346,0l-379,-592 z M280,721C301,721 320,737 320,762C320,785 301,801 280,801C258,801 239,785 239,762C239,737 258,721 280,721z"/>
+<glyph unicode="&#x1E92;" horiz-adv-x="538" d="M50,0l440,0l0,40l-383,0l380,592l0,27l-404,0l0,-40l346,0l-379,-592 z M281,-194C303,-194 319,-178 319,-153C319,-130 303,-114 281,-114C259,-114 243,-130 243,-153C243,-178 259,-194 281,-194z"/>
+<glyph unicode="&#xD0;" horiz-adv-x="625" d="M164,39l0,293l163,0l0,33l-163,0l0,255l102,0C444,620 522,503 522,332C522,160 444,39 266,39 z M118,659l0,-294l-81,-2l0,-31l81,0l0,-332l153,0C474,0 570,132 570,332C570,531 474,659 270,659z"/>
+<glyph unicode="&#xDE;" horiz-adv-x="563" d="M97,0l46,0l0,166l134,0C424,166 512,229 512,358C512,493 424,542 277,542l-134,0l0,117l-46,0 z M143,205l0,298l123,0C400,503 465,468 465,358C465,250 400,205 266,205z"/>
+<glyph unicode="&#x18F;" horiz-adv-x="648" d="M546,299C536,135 449,27 322,27C201,27 117,134 109,299 z M156,565C197,605 259,632 326,632C465,632 545,517 547,337l-484,0C63,333 62,329 62,326C62,130 163,-12 322,-12C482,-12 593,123 593,331C593,540 493,671 326,671C244,671 175,639 132,596z"/>
+<glyph unicode="&#xE0;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M280,572l38,0l-91,136l-53,0z"/>
+<glyph unicode="&#xE1;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M351,708l-53,0l-91,-136l38,0z"/>
+<glyph unicode="&#xE2;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M149,572l37,0l75,99l4,0l74,-99l37,0l-94,136l-39,0z"/>
+<glyph unicode="&#xE3;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M139,581l30,0C173,616 185,636 207,636C243,636 269,581 318,581C365,581 383,628 386,670l-30,0C352,636 340,615 319,615C284,615 256,670 208,670C160,670 142,624 139,581z"/>
+<glyph unicode="&#xE4;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M184,598C205,598 220,614 220,635C220,655 205,671 184,671C163,671 147,655 147,635C147,614 163,598 184,598 z M341,598C362,598 378,614 378,635C378,655 362,671 341,671C321,671 305,655 305,635C305,614 321,598 341,598z"/>
+<glyph unicode="&#x101;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M149,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x103;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M263,576C344,576 376,644 381,695l-33,0C343,652 316,608 263,608C209,608 182,652 177,695l-33,0C149,644 181,576 263,576z"/>
+<glyph unicode="&#xE5;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M263,539C309,539 345,574 345,625C345,677 309,712 263,712C216,712 180,677 180,625C180,574 216,539 263,539 z M263,565C233,565 210,589 210,625C210,662 233,686 263,686C292,686 315,662 315,625C315,589 292,565 263,565z"/>
+<glyph unicode="&#x1CE;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M243,572l39,0l94,136l-37,0l-74,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#x1EA1;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M246,-194C268,-194 284,-178 284,-153C284,-130 268,-114 246,-114C225,-114 208,-130 208,-153C208,-178 225,-194 246,-194z"/>
+<glyph unicode="&#x1EA3;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M239,551C287,564 333,585 333,637C333,688 279,709 213,712l-4,-32C263,678 294,662 294,632C294,603 267,588 231,577z"/>
+<glyph unicode="&#x1EA5;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M159,572l36,0l66,78l4,0l65,-78l36,0l-84,114l-39,0 z M341,637l32,0l91,111l-47,0z"/>
+<glyph unicode="&#x1EA7;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M159,572l36,0l66,78l4,0l65,-78l36,0l-84,114l-39,0 z M358,748l-46,0l90,-111l33,0z"/>
+<glyph unicode="&#x1EA9;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M159,572l36,0l66,78l4,0l65,-78l36,0l-84,114l-39,0 z M365,628C403,640 445,658 445,704C445,752 398,772 339,774l-4,-29C384,743 407,729 407,699C407,676 386,663 357,653z"/>
+<glyph unicode="&#x1EAB;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M151,570l37,0l73,69l4,0l72,-69l37,0l-91,100l-41,0 z M170,706C174,736 190,751 211,751C246,751 265,706 313,706C360,706 381,745 384,783l-29,0C351,753 335,738 314,738C279,738 261,783 212,783C165,783 144,744 141,706z"/>
+<glyph unicode="&#x1EAD;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M149,572l37,0l75,99l4,0l74,-99l37,0l-94,136l-39,0 z M246,-194C268,-194 284,-178 284,-153C284,-130 268,-114 246,-114C225,-114 208,-130 208,-153C208,-178 225,-194 246,-194z"/>
+<glyph unicode="&#x1EAF;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M231,667l33,0l87,110l-47,0 z M263,576C344,576 376,644 381,695l-30,0C345,651 317,607 263,607C208,607 181,651 175,695l-31,0C149,644 181,576 263,576z"/>
+<glyph unicode="&#x1EB1;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M221,777l-47,0l87,-110l34,0 z M263,576C344,576 376,644 381,695l-30,0C345,651 317,607 263,607C208,607 181,651 175,695l-31,0C149,644 181,576 263,576z"/>
+<glyph unicode="&#x1EB3;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M263,576C344,576 376,644 381,695l-30,0C345,651 317,607 263,607C208,607 181,651 175,695l-31,0C149,644 181,576 263,576 z M241,675C278,687 320,705 320,752C320,799 273,819 214,821l-3,-29C259,790 282,777 282,746C282,723 261,710 233,701z"/>
+<glyph unicode="&#x1EB5;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M263,576C344,576 374,628 380,675l-32,0C342,640 315,607 263,607C210,607 183,640 177,675l-32,0C151,628 181,576 263,576 z M141,706l29,0C174,736 190,751 211,751C246,751 265,706 313,706C360,706 381,745 384,783l-29,0C351,753 335,738 314,738C279,738 261,783 212,783C165,783 144,744 141,706z"/>
+<glyph unicode="&#x1EB7;" horiz-adv-x="499" d="M65,120C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-62l37,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,120 z M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M263,576C344,576 376,644 381,695l-33,0C343,652 316,608 263,608C209,608 182,652 177,695l-33,0C149,644 181,576 263,576 z M246,-194C268,-194 284,-178 284,-153C284,-130 268,-114 246,-114C225,-114 208,-130 208,-153C208,-178 225,-194 246,-194z"/>
+<glyph unicode="&#x105;" horiz-adv-x="499" d="M111,122C111,198 178,244 375,267l0,-163C316,53 267,26 212,26C157,26 111,53 111,122 z M65,119C65,29 129,-12 205,-12C268,-12 326,23 375,62l2,0l5,-55C335,-22 295,-71 295,-122C295,-176 330,-203 376,-203C398,-203 426,-193 441,-180l-16,26C412,-164 400,-168 382,-168C357,-168 333,-151 333,-116C333,-73 369,-25 419,0l0,307C419,410 381,492 267,492C189,492 123,454 89,430l20,-33C141,421 197,453 262,453C356,453 377,374 375,301C162,277 65,226 65,119z"/>
+<glyph unicode="&#xE6;" horiz-adv-x="784" d="M111,122C111,198 182,244 369,267l1,-27C370,195 377,148 391,119C336,60 264,26 212,26C157,26 111,53 111,122 z M109,397C141,421 197,453 257,453C351,453 371,374 370,301C163,277 65,226 65,119C65,29 129,-12 205,-12C265,-12 344,26 407,87C442,37 493,-12 579,-12C649,-12 689,12 727,35l-19,35C672,44 635,27 583,27C486,27 412,113 412,234l332,0C746,246 746,258 746,270C746,411 680,492 568,492C497,492 436,445 401,372C385,445 339,492 261,492C189,492 123,454 89,430 z M412,268C422,378 488,454 567,454C653,454 705,391 705,268z"/>
+<glyph unicode="&#xE7;" horiz-adv-x="449" d="M285,-11C339,-7 385,18 423,52l-23,30C367,52 323,27 272,27C167,27 98,113 98,239C98,366 174,453 272,453C319,453 355,431 386,402l26,31C380,463 337,492 271,492C154,492 52,400 52,239C52,89 136,-2 250,-11l-33,-63C256,-84 284,-97 284,-127C284,-155 246,-170 191,-178l7,-30C262,-200 323,-175 323,-123C323,-83 296,-65 263,-54z"/>
+<glyph unicode="&#x107;" horiz-adv-x="449" d="M52,239C52,80 146,-12 270,-12C331,-12 382,15 423,52l-23,30C367,52 323,27 272,27C167,27 98,113 98,239C98,366 174,453 272,453C319,453 355,431 386,402l26,31C380,463 337,492 271,492C154,492 52,400 52,239 z M360,708l-52,0l-92,-136l38,0z"/>
+<glyph unicode="&#x109;" horiz-adv-x="449" d="M52,239C52,80 146,-12 270,-12C331,-12 382,15 423,52l-23,30C367,52 323,27 272,27C167,27 98,113 98,239C98,366 174,453 272,453C319,453 355,431 386,402l26,31C380,463 337,492 271,492C154,492 52,400 52,239 z M158,572l37,0l75,99l4,0l75,-99l36,0l-94,136l-39,0z"/>
+<glyph unicode="&#x10D;" horiz-adv-x="449" d="M52,239C52,80 146,-12 270,-12C331,-12 382,15 423,52l-23,30C367,52 323,27 272,27C167,27 98,113 98,239C98,366 174,453 272,453C319,453 355,431 386,402l26,31C380,463 337,492 271,492C154,492 52,400 52,239 z M252,572l39,0l94,136l-36,0l-75,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#x10B;" horiz-adv-x="449" d="M52,239C52,80 146,-12 270,-12C331,-12 382,15 423,52l-23,30C367,52 323,27 272,27C167,27 98,113 98,239C98,366 174,453 272,453C319,453 355,431 386,402l26,31C380,463 337,492 271,492C154,492 52,400 52,239 z M272,596C293,596 310,612 310,637C310,660 293,676 272,676C250,676 234,660 234,637C234,612 250,596 272,596z"/>
+<glyph unicode="&#x10F;" horiz-adv-x="549" d="M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,719l-44,0l0,-198l2,-88C362,470 323,492 265,492C151,492 52,394 52,239 z M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M544,548l8,156l0,50l-38,0l3,-206z"/>
+<glyph unicode="&#x1E0D;" horiz-adv-x="544" d="M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,719l-44,0l0,-198l2,-88C362,470 323,492 265,492C151,492 52,394 52,239 z M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M296,-194C318,-194 334,-178 334,-153C334,-130 318,-114 296,-114C275,-114 258,-130 258,-153C258,-178 275,-194 296,-194z"/>
+<glyph unicode="&#x1E0F;" horiz-adv-x="544" d="M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,719l-44,0l0,-198l2,-88C362,470 323,492 265,492C151,492 52,394 52,239 z M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M409,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#x111;" horiz-adv-x="544" d="M408,106C357,55 310,27 257,27C155,27 99,108 99,229C99,344 172,433 268,433C315,433 357,416 408,371 z M527,614l-75,0l0,105l-44,0l0,-105l-170,0l0,-33l170,0l0,-80l2,-88C362,450 323,472 265,472C151,472 52,378 52,229C52,73 130,-12 251,-12C315,-12 368,22 407,62l2,0l5,-62l38,0l0,581l75,4z"/>
+<glyph unicode="&#xE8;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M279,572l38,0l-92,136l-52,0z"/>
+<glyph unicode="&#xE9;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M350,708l-53,0l-91,-136l37,0z"/>
+<glyph unicode="&#xEA;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M148,572l36,0l75,99l4,0l75,-99l37,0l-94,136l-39,0z"/>
+<glyph unicode="&#x11B;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M242,572l39,0l94,136l-37,0l-75,-99l-4,0l-75,99l-36,0z"/>
+<glyph unicode="&#xEB;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M182,598C203,598 219,614 219,635C219,655 203,671 182,671C162,671 146,655 146,635C146,614 162,598 182,598 z M340,598C361,598 377,614 377,635C377,655 361,671 340,671C319,671 303,655 303,635C303,614 319,598 340,598z"/>
+<glyph unicode="&#x113;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M148,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x115;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M261,576C343,576 374,644 380,695l-33,0C341,652 315,608 261,608C208,608 181,652 175,695l-33,0C148,644 180,576 261,576z"/>
+<glyph unicode="&#x117;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M261,596C283,596 299,612 299,637C299,660 283,676 261,676C240,676 223,660 223,637C223,612 240,596 261,596z"/>
+<glyph unicode="&#x1EB9;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M259,-194C280,-194 297,-178 297,-153C297,-130 280,-114 259,-114C237,-114 220,-130 220,-153C220,-178 237,-194 259,-194z"/>
+<glyph unicode="&#x1EBB;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M238,551C285,564 332,585 332,637C332,688 277,709 211,712l-4,-32C262,678 293,662 293,632C293,603 266,588 229,577z"/>
+<glyph unicode="&#x1EBD;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M137,581l31,0C172,616 184,636 205,636C241,636 268,581 316,581C364,581 382,628 385,670l-30,0C350,636 339,615 317,615C283,615 255,670 206,670C158,670 140,624 137,581z"/>
+<glyph unicode="&#x1EBF;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M158,572l36,0l65,78l4,0l66,-78l35,0l-83,114l-39,0 z M339,637l33,0l91,111l-47,0z"/>
+<glyph unicode="&#x1EC1;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M158,572l36,0l65,78l4,0l66,-78l35,0l-83,114l-39,0 z M357,748l-47,0l91,-111l33,0z"/>
+<glyph unicode="&#x1EC3;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M158,572l36,0l65,78l4,0l66,-78l35,0l-83,114l-39,0 z M364,628C402,640 443,658 443,704C443,752 396,772 337,774l-3,-29C382,743 405,729 405,699C405,676 384,663 356,653z"/>
+<glyph unicode="&#x1EC5;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M150,570l36,0l73,69l4,0l73,-69l36,0l-90,100l-41,0 z M169,706C173,736 188,751 210,751C245,751 263,706 312,706C359,706 380,745 383,783l-29,0C350,753 334,738 313,738C278,738 259,783 211,783C164,783 143,744 140,706z"/>
+<glyph unicode="&#x1EC7;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M148,572l36,0l75,99l4,0l75,-99l37,0l-94,136l-39,0 z M258,-194C279,-194 296,-178 296,-153C296,-130 279,-114 258,-114C236,-114 220,-130 220,-153C220,-178 236,-194 258,-194z"/>
+<glyph unicode="&#x119;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C296,-12 316,-10 337,-3C309,-27 274,-72 274,-122C274,-176 309,-203 355,-203C376,-203 405,-193 420,-180l-16,26C391,-164 379,-168 361,-168C335,-168 312,-150 312,-116C312,-72 339,-28 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,256 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,384 180,454 262,454C349,454 403,391 403,268z"/>
+<glyph unicode="&#x11D;" horiz-adv-x="487" d="M94,-94C94,-60 113,-23 157,7C182,1 207,-1 217,-1l103,0C392,-1 431,-21 431,-74C431,-134 362,-195 254,-195C152,-195 94,-154 94,-94 z M52,-98C52,-179 128,-231 249,-231C387,-231 476,-152 476,-69C476,7 426,41 318,41l-103,0C143,41 123,69 123,104C123,136 141,156 162,173C184,160 215,153 242,153C336,153 409,224 409,322C409,373 387,416 356,443l112,0l0,37l-163,0C290,486 268,492 242,492C148,492 73,422 73,323C73,265 103,217 133,191l0,-4C112,172 81,142 81,99C81,62 99,36 123,22l0,-4C79,-14 52,-56 52,-98 z M242,188C175,188 117,242 117,323C117,405 174,456 242,456C310,456 366,404 366,323C366,242 308,188 242,188 z M119,572l37,0l75,99l4,0l75,-99l36,0l-94,136l-39,0z"/>
+<glyph unicode="&#x11F;" horiz-adv-x="487" d="M94,-94C94,-60 113,-23 157,7C182,1 207,-1 217,-1l103,0C392,-1 431,-21 431,-74C431,-134 362,-195 254,-195C152,-195 94,-154 94,-94 z M52,-98C52,-179 128,-231 249,-231C387,-231 476,-152 476,-69C476,7 426,41 318,41l-103,0C143,41 123,69 123,104C123,136 141,156 162,173C184,160 215,153 242,153C336,153 409,224 409,322C409,373 387,416 356,443l112,0l0,37l-163,0C290,486 268,492 242,492C148,492 73,422 73,323C73,265 103,217 133,191l0,-4C112,172 81,142 81,99C81,62 99,36 123,22l0,-4C79,-14 52,-56 52,-98 z M242,188C175,188 117,242 117,323C117,405 174,456 242,456C310,456 366,404 366,323C366,242 308,188 242,188 z M233,576C314,576 346,644 351,695l-32,0C313,652 286,608 233,608C179,608 152,652 147,695l-33,0C119,644 151,576 233,576z"/>
+<glyph unicode="&#x121;" horiz-adv-x="487" d="M94,-94C94,-60 113,-23 157,7C182,1 207,-1 217,-1l103,0C392,-1 431,-21 431,-74C431,-134 362,-195 254,-195C152,-195 94,-154 94,-94 z M52,-98C52,-179 128,-231 249,-231C387,-231 476,-152 476,-69C476,7 426,41 318,41l-103,0C143,41 123,69 123,104C123,136 141,156 162,173C184,160 215,153 242,153C336,153 409,224 409,322C409,373 387,416 356,443l112,0l0,37l-163,0C290,486 268,492 242,492C148,492 73,422 73,323C73,265 103,217 133,191l0,-4C112,172 81,142 81,99C81,62 99,36 123,22l0,-4C79,-14 52,-56 52,-98 z M242,188C175,188 117,242 117,323C117,405 174,456 242,456C310,456 366,404 366,323C366,242 308,188 242,188 z M233,596C254,596 271,612 271,637C271,660 254,676 233,676C211,676 195,660 195,637C195,612 211,596 233,596z"/>
+<glyph unicode="&#x123;" horiz-adv-x="487" d="M94,-94C94,-60 113,-23 157,7C182,1 207,-1 217,-1l103,0C392,-1 431,-21 431,-74C431,-134 362,-195 254,-195C152,-195 94,-154 94,-94 z M52,-98C52,-179 128,-231 249,-231C387,-231 476,-152 476,-69C476,7 426,41 318,41l-103,0C143,41 123,69 123,104C123,136 141,156 162,173C184,160 215,153 242,153C336,153 409,224 409,322C409,373 387,416 356,443l112,0l0,37l-163,0C290,486 268,492 242,492C148,492 73,422 73,323C73,265 103,217 133,191l0,-4C112,172 81,142 81,99C81,62 99,36 123,22l0,-4C79,-14 52,-56 52,-98 z M242,188C175,188 117,242 117,323C117,405 174,456 242,456C310,456 366,404 366,323C366,242 308,188 242,188 z M256,539l12,29C240,574 212,586 212,617C212,644 250,659 305,667l-7,30C234,689 173,664 173,612C173,571 201,550 256,539z"/>
+<glyph unicode="&#x1E7;" horiz-adv-x="487" d="M94,-94C94,-60 113,-23 157,7C182,1 207,-1 217,-1l103,0C392,-1 431,-21 431,-74C431,-134 362,-195 254,-195C152,-195 94,-154 94,-94 z M52,-98C52,-179 128,-231 249,-231C387,-231 476,-152 476,-69C476,7 426,41 318,41l-103,0C143,41 123,69 123,104C123,136 141,156 162,173C184,160 215,153 242,153C336,153 409,224 409,322C409,373 387,416 356,443l112,0l0,37l-163,0C290,486 268,492 242,492C148,492 73,422 73,323C73,265 103,217 133,191l0,-4C112,172 81,142 81,99C81,62 99,36 123,22l0,-4C79,-14 52,-56 52,-98 z M242,188C175,188 117,242 117,323C117,405 174,456 242,456C310,456 366,404 366,323C366,242 308,188 242,188 z M213,572l39,0l94,136l-36,0l-75,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#x1E21;" horiz-adv-x="487" d="M94,-94C94,-60 113,-23 157,7C182,1 207,-1 217,-1l103,0C392,-1 431,-21 431,-74C431,-134 362,-195 254,-195C152,-195 94,-154 94,-94 z M52,-98C52,-179 128,-231 249,-231C387,-231 476,-152 476,-69C476,7 426,41 318,41l-103,0C143,41 123,69 123,104C123,136 141,156 162,173C184,160 215,153 242,153C336,153 409,224 409,322C409,373 387,416 356,443l112,0l0,37l-163,0C290,486 268,492 242,492C148,492 73,422 73,323C73,265 103,217 133,191l0,-4C112,172 81,142 81,99C81,62 99,36 123,22l0,-4C79,-14 52,-56 52,-98 z M242,188C175,188 117,242 117,323C117,405 174,456 242,456C310,456 366,404 366,323C366,242 308,188 242,188 z M119,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#xE001;" horiz-adv-x="487" d="M94,-94C94,-60 113,-23 157,7C182,1 207,-1 217,-1l103,0C392,-1 431,-21 431,-74C431,-134 362,-195 254,-195C152,-195 94,-154 94,-94 z M52,-98C52,-179 128,-231 249,-231C387,-231 476,-152 476,-69C476,7 426,41 318,41l-103,0C143,41 123,69 123,104C123,136 141,156 162,173C184,160 215,153 242,153C336,153 409,224 409,322C409,373 387,416 356,443l112,0l0,37l-163,0C290,486 268,492 242,492C148,492 73,422 73,323C73,265 103,217 133,191l0,-4C112,172 81,142 81,99C81,62 99,36 123,22l0,-4C79,-14 52,-56 52,-98 z M242,188C175,188 117,242 117,323C117,405 174,456 242,456C310,456 366,404 366,323C366,242 308,188 242,188 z M109,581l30,0C143,616 155,636 177,636C213,636 239,581 288,581C335,581 353,628 356,670l-30,0C322,636 310,615 289,615C254,615 226,670 178,670C130,670 112,624 109,581z"/>
+<glyph unicode="&#x125;" horiz-adv-x="528" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 136,405l0,106l0,208l-44,0 z M39,748l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x1E25;" horiz-adv-x="528" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 136,405l0,106l0,208l-44,0 z M282,-194C303,-194 320,-178 320,-153C320,-130 303,-114 282,-114C260,-114 244,-130 244,-153C244,-178 260,-194 282,-194z"/>
+<glyph unicode="&#x1E2B;" horiz-adv-x="528" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 136,405l0,106l0,208l-44,0 z M281,-203C362,-203 394,-135 400,-84l-33,0C361,-127 334,-170 281,-170C227,-170 201,-127 195,-84l-33,0C167,-135 199,-203 281,-203z"/>
+<glyph unicode="&#x127;" horiz-adv-x="528" d="M136,491l0,90l190,0l0,33l-190,0l0,105l-44,0l0,-105l-77,-4l0,-29l77,0l0,-581l44,0l0,342C195,402 236,432 293,432C371,432 403,384 403,282l0,-282l44,0l0,288C447,412 401,472 302,472C236,472 186,435 136,385z"/>
+<glyph unicode="&#xEC;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0 z M132,572l38,0l-92,136l-52,0z"/>
+<glyph unicode="&#xED;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0 z M203,708l-53,0l-91,-136l37,0z"/>
+<glyph unicode="&#xEE;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0 z M1,572l36,0l75,99l4,0l75,-99l37,0l-94,136l-39,0z"/>
+<glyph unicode="&#x129;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0 z M-10,581l31,0C25,616 37,636 58,636C94,636 121,581 169,581C217,581 235,628 238,670l-30,0C204,636 192,615 170,615C136,615 108,670 59,670C12,670 -7,624 -10,581z"/>
+<glyph unicode="&#xEF;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0 z M36,598C56,598 72,614 72,635C72,655 56,671 36,671C15,671 -1,655 -1,635C-1,614 15,598 36,598 z M193,598C214,598 230,614 230,635C230,655 214,671 193,671C172,671 157,655 157,635C157,614 172,598 193,598z"/>
+<glyph unicode="&#x12B;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0 z M1,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x1D0;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0 z M95,572l39,0l94,136l-37,0l-75,-99l-4,0l-75,99l-36,0z"/>
+<glyph unicode="&#x1EC9;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0 z M91,551C139,564 185,585 185,637C185,688 130,709 64,712l-4,-32C115,678 146,662 146,632C146,603 119,588 82,577z"/>
+<glyph unicode="&#x1ECB;" horiz-adv-x="229" d="M115,596C137,596 155,612 155,635C155,660 137,675 115,675C93,675 75,660 75,635C75,612 93,596 115,596 z M92,0l44,0l0,480l-44,0 z M115,-194C137,-194 153,-178 153,-153C153,-130 137,-114 115,-114C94,-114 77,-130 77,-153C77,-178 94,-194 115,-194z"/>
+<glyph unicode="&#x12F;" horiz-adv-x="229" d="M92,0l7,0C70,-32 37,-71 37,-122C37,-176 72,-203 118,-203C139,-203 168,-193 183,-180l-16,26C153,-164 141,-168 124,-168C99,-168 75,-150 75,-116C75,-73 104,-34 136,0l0,480l-44,0 z M113,596C135,596 154,612 154,635C154,660 135,675 113,675C92,675 73,660 73,635C73,612 92,596 113,596z"/>
+<glyph unicode="&#xE002;" horiz-adv-x="229" d="M92,0l7,0C70,-32 37,-71 37,-122C37,-176 72,-203 118,-203C139,-203 168,-193 183,-180l-16,26C153,-164 141,-168 124,-168C99,-168 75,-150 75,-116C75,-73 104,-34 136,0l0,480l-44,0z"/>
+<glyph unicode="&#x131;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0z"/>
+<glyph unicode="&#x135;" horiz-adv-x="229" d="M92,-86C92,-147 82,-191 28,-191C9,-191 -10,-185 -22,-181l-11,-36C-18,-223 6,-229 29,-229C103,-229 137,-183 137,-89l0,569l-45,0 z M1,572l37,0l75,99l4,0l75,-99l36,0l-94,136l-39,0z"/>
+<glyph unicode="&#x137;" horiz-adv-x="464" d="M92,0l44,0l0,131l108,126l159,-257l49,0l-182,290l156,190l-51,0l-237,-291l-2,0l0,530l-44,0 z M232,-51l-12,-29C248,-86 276,-98 276,-129C276,-156 238,-171 183,-179l7,-30C254,-201 315,-176 315,-124C315,-83 287,-62 232,-51z"/>
+<glyph unicode="&#x138;" horiz-adv-x="464" d="M92,0l44,0l0,130l108,127l159,-257l49,0l-182,290l156,190l-51,0l-236,-291l-3,0l0,291l-44,0z"/>
+<glyph unicode="&#x13A;" horiz-adv-x="237" d="M92,64C92,12 112,-12 151,-12C165,-12 174,-10 183,-7l-8,36C165,27 161,27 157,27C145,27 136,37 136,58l0,661l-44,0 z M220,866l-58,0l-93,-106l41,0z"/>
+<glyph unicode="&#x13E;" horiz-adv-x="234" d="M92,64C92,12 112,-12 151,-12C165,-12 174,-10 183,-7l-8,36C165,27 161,27 157,27C145,27 136,37 136,58l0,661l-44,0 z M228,548l9,156l0,50l-38,0l2,-206z"/>
+<glyph unicode="&#x140;" horiz-adv-x="308" d="M92,64C92,12 112,-12 151,-12C165,-12 174,-10 183,-7l-8,36C165,27 161,27 157,27C145,27 136,37 136,58l0,661l-44,0 z M225,323C225,295 245,278 267,278C289,278 310,295 310,323C310,352 289,369 267,369C245,369 225,352 225,323z"/>
+<glyph unicode="&#x13C;" horiz-adv-x="237" d="M92,64C92,12 112,-12 151,-12C165,-12 174,-10 183,-7l-8,36C165,27 161,27 157,27C145,27 136,37 136,58l0,661l-44,0 z M133,-51l-12,-29C149,-86 177,-98 177,-129C177,-156 139,-171 84,-179l7,-30C155,-201 216,-176 216,-124C216,-83 188,-62 133,-51z"/>
+<glyph unicode="&#x1E37;" horiz-adv-x="237" d="M92,64C92,12 112,-12 151,-12C165,-12 174,-10 183,-7l-8,36C165,27 161,27 157,27C145,27 136,37 136,58l0,661l-44,0 z M158,-194C180,-194 196,-178 196,-153C196,-130 180,-114 158,-114C137,-114 120,-130 120,-153C120,-178 137,-194 158,-194z"/>
+<glyph unicode="&#x1E39;" horiz-adv-x="237" d="M92,64C92,12 112,-12 151,-12C165,-12 174,-10 183,-7l-8,36C165,27 161,27 157,27C145,27 136,37 136,58l0,661l-44,0 z M0,832l227,0l0,36l-227,0 z M158,-194C180,-194 196,-178 196,-153C196,-130 180,-114 158,-114C137,-114 120,-130 120,-153C120,-178 137,-194 158,-194z"/>
+<glyph unicode="&#x1E3B;" horiz-adv-x="237" d="M92,64C92,12 112,-12 151,-12C165,-12 174,-10 183,-7l-8,36C165,27 161,27 157,27C145,27 136,37 136,58l0,661l-44,0 z M272,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#x142;" horiz-adv-x="239" d="M211,437l0,43l-73,-48l0,287l-45,0l0,-313l-65,-43l0,-42l65,43l0,-300C93,12 113,-12 152,-12C167,-12 175,-10 184,-7l-8,36C167,27 163,27 158,27C146,27 138,37 138,58l0,331z"/>
+<glyph unicode="&#x1E43;" horiz-adv-x="812" d="M92,0l44,0l0,362C189,422 237,452 280,452C354,452 388,404 388,302l0,-302l44,0l0,362C485,422 531,452 576,452C649,452 683,404 683,302l0,-302l45,0l0,308C728,432 680,492 584,492C529,492 476,454 421,394C404,453 365,492 288,492C235,492 180,455 137,406l-3,0l-4,74l-38,0 z M419,-194C440,-194 457,-178 457,-153C457,-130 440,-114 419,-114C397,-114 381,-130 381,-153C381,-178 397,-194 419,-194z"/>
+<glyph unicode="&#x144;" horiz-adv-x="532" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 137,406l-3,0l-4,74l-38,0 z M371,708l-53,0l-91,-136l38,0z"/>
+<glyph unicode="&#x148;" horiz-adv-x="532" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 137,406l-3,0l-4,74l-38,0 z M263,572l39,0l94,136l-36,0l-75,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#xF1;" horiz-adv-x="532" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 137,406l-3,0l-4,74l-38,0 z M159,581l30,0C193,616 205,636 227,636C263,636 289,581 338,581C385,581 403,628 406,670l-30,0C372,636 360,615 339,615C304,615 276,670 228,670C180,670 162,624 159,581z"/>
+<glyph unicode="&#x146;" horiz-adv-x="532" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 137,406l-3,0l-4,74l-38,0 z M246,-51l-12,-29C262,-86 290,-98 290,-129C290,-156 253,-171 198,-179l6,-30C269,-201 330,-176 330,-124C330,-83 301,-62 246,-51z"/>
+<glyph unicode="&#x1E45;" horiz-adv-x="532" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 137,406l-3,0l-4,74l-38,0 z M283,596C304,596 321,612 321,637C321,660 304,676 283,676C261,676 244,660 244,637C244,612 261,596 283,596z"/>
+<glyph unicode="&#x1E47;" horiz-adv-x="532" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 137,406l-3,0l-4,74l-38,0 z M273,-194C294,-194 311,-178 311,-153C311,-130 294,-114 273,-114C251,-114 235,-130 235,-153C235,-178 251,-194 273,-194z"/>
+<glyph unicode="&#x1E49;" horiz-adv-x="532" d="M92,0l44,0l0,362C195,422 236,452 293,452C371,452 403,404 403,302l0,-302l44,0l0,308C447,432 401,492 302,492C236,492 186,455 137,406l-3,0l-4,74l-38,0 z M385,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#x149;" horiz-adv-x="729" d="M76,477C130,512 162,562 162,633C162,676 144,700 117,700C94,700 78,685 78,660C78,635 98,623 117,623C120,623 123,623 125,624C125,567 102,536 58,500 z M324,406l-5,74l-37,0l0,-480l44,0l0,362C384,422 426,452 483,452C560,452 592,404 592,302l0,-302l44,0l0,308C636,432 590,492 491,492C425,492 375,455 326,406z"/>
+<glyph unicode="&#xF2;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M285,572l38,0l-92,136l-52,0z"/>
+<glyph unicode="&#xF3;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M356,708l-53,0l-91,-136l37,0z"/>
+<glyph unicode="&#xF4;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M154,572l36,0l75,99l4,0l75,-99l37,0l-94,136l-39,0z"/>
+<glyph unicode="&#xF5;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M144,581l30,0C178,616 190,636 211,636C248,636 274,581 322,581C370,581 388,628 391,670l-30,0C357,636 345,615 323,615C289,615 261,670 212,670C165,670 147,624 144,581z"/>
+<glyph unicode="&#xF6;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M189,598C209,598 225,614 225,635C225,655 209,671 189,671C168,671 152,655 152,635C152,614 168,598 189,598 z M346,598C367,598 383,614 383,635C383,655 367,671 346,671C325,671 310,655 310,635C310,614 325,598 346,598z"/>
+<glyph unicode="&#x14D;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M154,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x151;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M185,570l34,0l84,138l-46,0 z M319,570l33,0l84,138l-46,0z"/>
+<glyph unicode="&#x1D2;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M248,572l39,0l94,136l-37,0l-75,-99l-4,0l-75,99l-36,0z"/>
+<glyph unicode="&#x1ECD;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M268,-194C290,-194 306,-178 306,-153C306,-130 290,-114 268,-114C247,-114 230,-130 230,-153C230,-178 247,-194 268,-194z"/>
+<glyph unicode="&#x1ECF;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M244,551C292,564 338,585 338,637C338,688 283,709 217,712l-3,-32C268,678 299,662 299,632C299,603 272,588 235,577z"/>
+<glyph unicode="&#x1ED1;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M164,572l36,0l65,78l4,0l66,-78l35,0l-83,114l-39,0 z M345,637l33,0l91,111l-47,0z"/>
+<glyph unicode="&#x1ED3;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M164,572l36,0l65,78l4,0l66,-78l35,0l-83,114l-39,0 z M363,748l-46,0l90,-111l33,0z"/>
+<glyph unicode="&#x1ED5;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M164,572l36,0l65,78l4,0l66,-78l35,0l-83,114l-39,0 z M370,628C408,640 449,658 449,704C449,752 403,772 344,774l-4,-29C389,743 411,729 411,699C411,676 391,663 362,653z"/>
+<glyph unicode="&#x1ED7;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M156,570l37,0l72,69l4,0l73,-69l36,0l-90,100l-41,0 z M175,706C179,736 195,751 216,751C251,751 269,706 318,706C365,706 386,745 389,783l-29,0C356,753 340,738 319,738C284,738 265,783 217,783C170,783 149,744 146,706z"/>
+<glyph unicode="&#x1ED9;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M154,572l36,0l75,99l4,0l75,-99l37,0l-94,136l-39,0 z M268,-194C290,-194 306,-178 306,-153C306,-130 290,-114 268,-114C247,-114 230,-130 230,-153C230,-178 247,-194 268,-194z"/>
+<glyph unicode="&#xF8;" horiz-adv-x="535" d="M402,376C425,340 438,293 438,238C438,112 364,26 267,26C223,26 183,44 153,76 z M133,103C110,139 97,186 97,240C97,366 170,454 267,454C312,454 352,436 382,403 z M489,480l-26,21l-54,-65C370,473 320,492 267,492C152,492 52,400 52,239C52,168 72,111 104,69l-58,-70l26,-21l54,66C165,7 214,-12 267,-12C383,-12 483,80 483,239C483,310 463,368 431,411z"/>
+<glyph unicode="&#x153;" horiz-adv-x="848" d="M98,239C98,366 169,453 263,453C359,453 428,366 428,239C428,113 359,27 263,27C169,27 98,113 98,239 z M52,239C52,80 151,-12 263,-12C347,-12 413,36 450,129C484,43 555,-12 639,-12C710,-12 753,12 791,35l-19,35C736,44 696,27 644,27C547,27 471,113 471,234l337,0C810,246 811,258 811,270C811,411 741,492 628,492C551,492 484,437 449,350C415,444 340,492 263,492C151,492 52,400 52,239 z M471,268C481,378 548,454 628,454C713,454 769,391 769,268z"/>
+<glyph unicode="&#x1A1;" horiz-adv-x="535" d="M267,27C170,27 98,113 98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27 z M431,578C441,565 446,552 446,539C446,501 416,478 359,471C331,485 300,492 267,492C152,492 52,400 52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,334 448,405 396,447C442,460 486,485 486,542C486,562 479,580 466,598z"/>
+<glyph unicode="&#x1EDB;" horiz-adv-x="535" d="M356,708l-53,0l-91,-136l37,0 z M267,27C170,27 98,113 98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27 z M431,578C441,565 446,552 446,539C446,501 416,478 359,471C331,485 300,492 267,492C152,492 52,400 52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,334 448,405 396,447C442,460 486,485 486,542C486,562 479,580 466,598z"/>
+<glyph unicode="&#x1EDD;" horiz-adv-x="535" d="M323,572l-92,136l-52,0l106,-136 z M267,27C170,27 98,113 98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27 z M431,578C441,565 446,552 446,539C446,501 416,478 359,471C331,485 300,492 267,492C152,492 52,400 52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,334 448,405 396,447C442,460 486,485 486,542C486,562 479,580 466,598z"/>
+<glyph unicode="&#x1EDF;" horiz-adv-x="535" d="M244,551C292,564 338,585 338,637C338,688 283,709 217,712l-3,-32C268,678 299,662 299,632C299,603 272,588 235,577 z M267,27C170,27 98,113 98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27 z M431,578C441,565 446,552 446,539C446,501 416,478 359,471C331,485 300,492 267,492C152,492 52,400 52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,334 448,405 396,447C442,460 486,485 486,542C486,562 479,580 466,598z"/>
+<glyph unicode="&#x1EE1;" horiz-adv-x="535" d="M361,670C357,636 345,615 323,615C289,615 261,670 212,670C165,670 147,624 144,581l30,0C178,616 190,636 211,636C248,636 274,581 322,581C370,581 388,628 391,670 z M267,27C170,27 98,113 98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27 z M431,578C441,565 446,552 446,539C446,501 416,478 359,471C331,485 300,492 267,492C152,492 52,400 52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,334 448,405 396,447C442,460 486,485 486,542C486,562 479,580 466,598z"/>
+<glyph unicode="&#x1EE3;" horiz-adv-x="535" d="M268,-114C247,-114 230,-130 230,-153C230,-178 247,-194 268,-194C290,-194 306,-178 306,-153C306,-130 290,-114 268,-114 z M267,27C170,27 98,113 98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27 z M431,578C441,565 446,552 446,539C446,501 416,478 359,471C331,485 300,492 267,492C152,492 52,400 52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,334 448,405 396,447C442,460 486,485 486,542C486,562 479,580 466,598z"/>
+<glyph unicode="&#x1EB;" horiz-adv-x="535" d="M213,-122C213,-176 249,-203 294,-203C316,-203 344,-193 359,-180l-16,26C330,-164 318,-168 300,-168C275,-168 251,-151 251,-116C251,-74 282,-27 326,-7C419,35 483,102 483,239C483,400 383,492 267,492C152,492 52,400 52,239C52,82 150,-10 269,-12C247,-30 213,-72 213,-122 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239z"/>
+<glyph unicode="&#x155;" horiz-adv-x="317" d="M92,0l44,0l0,327C173,417 224,450 267,450C286,450 295,448 311,442l10,40C305,490 291,492 273,492C216,492 169,450 137,391l-3,0l-4,89l-38,0 z M289,708l-53,0l-91,-136l37,0z"/>
+<glyph unicode="&#x157;" horiz-adv-x="317" d="M92,0l44,0l0,327C173,417 224,450 267,450C286,450 295,448 311,442l10,40C305,490 291,492 273,492C216,492 169,450 137,391l-3,0l-4,89l-38,0 z M86,-51l-12,-29C102,-86 130,-98 130,-129C130,-156 93,-171 38,-179l6,-30C108,-201 169,-176 169,-124C169,-83 141,-62 86,-51z"/>
+<glyph unicode="&#x159;" horiz-adv-x="317" d="M92,0l44,0l0,327C173,417 224,450 267,450C286,450 295,448 311,442l10,40C305,490 291,492 273,492C216,492 169,450 137,391l-3,0l-4,89l-38,0 z M181,572l39,0l94,136l-37,0l-75,-99l-4,0l-75,99l-36,0z"/>
+<glyph unicode="&#x1E5B;" horiz-adv-x="317" d="M92,0l44,0l0,327C173,417 224,450 267,450C286,450 295,448 311,442l10,40C305,490 291,492 273,492C216,492 169,450 137,391l-3,0l-4,89l-38,0 z M113,-194C134,-194 151,-178 151,-153C151,-130 134,-114 113,-114C91,-114 74,-130 74,-153C74,-178 91,-194 113,-194z"/>
+<glyph unicode="&#x1E5D;" horiz-adv-x="317" d="M92,0l44,0l0,327C173,417 224,450 267,450C286,450 295,448 311,442l10,40C305,490 291,492 273,492C216,492 169,450 137,391l-3,0l-4,89l-38,0 z M87,606l227,0l0,36l-227,0 z M113,-194C134,-194 151,-178 151,-153C151,-130 134,-114 113,-114C91,-114 74,-130 74,-153C74,-178 91,-194 113,-194z"/>
+<glyph unicode="&#x1E5F;" horiz-adv-x="317" d="M92,0l44,0l0,327C173,417 224,450 267,450C286,450 295,448 311,442l10,40C305,490 291,492 273,492C216,492 169,450 137,391l-3,0l-4,89l-38,0 z M225,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#x15B;" horiz-adv-x="405" d="M32,54C75,18 137,-12 208,-12C312,-12 370,51 370,123C370,217 288,242 213,270C156,291 100,312 100,367C100,411 134,454 208,454C257,454 291,435 323,411l24,31C312,471 261,492 210,492C110,492 55,434 55,364C55,282 135,253 208,227C263,207 325,181 325,121C325,70 286,26 211,26C142,26 99,53 58,87 z M299,708l-53,0l-91,-136l38,0z"/>
+<glyph unicode="&#x15D;" horiz-adv-x="405" d="M32,54C75,18 137,-12 208,-12C312,-12 370,51 370,123C370,217 288,242 213,270C156,291 100,312 100,367C100,411 134,454 208,454C257,454 291,435 323,411l24,31C312,471 261,492 210,492C110,492 55,434 55,364C55,282 135,253 208,227C263,207 325,181 325,121C325,70 286,26 211,26C142,26 99,53 58,87 z M97,572l37,0l75,99l4,0l75,-99l36,0l-94,136l-39,0z"/>
+<glyph unicode="&#x161;" horiz-adv-x="405" d="M32,54C75,18 137,-12 208,-12C312,-12 370,51 370,123C370,217 288,242 213,270C156,291 100,312 100,367C100,411 134,454 208,454C257,454 291,435 323,411l24,31C312,471 261,492 210,492C110,492 55,434 55,364C55,282 135,253 208,227C263,207 325,181 325,121C325,70 286,26 211,26C142,26 99,53 58,87 z M191,572l39,0l94,136l-36,0l-75,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#x15F;" horiz-adv-x="405" d="M347,442C312,471 261,492 210,492C110,492 55,434 55,364C55,282 135,253 208,227C263,207 325,181 325,121C325,70 286,26 211,26C142,26 99,53 58,87l-26,-33C73,20 132,-9 199,-12l-33,-62C205,-84 233,-97 233,-127C233,-155 195,-170 140,-178l7,-30C211,-200 272,-175 272,-123C272,-83 244,-65 212,-54l22,43C322,-1 370,57 370,123C370,217 288,242 213,270C156,291 100,312 100,367C100,411 134,454 208,454C257,454 291,435 323,411z"/>
+<glyph unicode="&#x219;" horiz-adv-x="405" d="M32,54C75,18 137,-12 208,-12C312,-12 370,51 370,123C370,217 288,242 213,270C156,291 100,312 100,367C100,411 134,454 208,454C257,454 291,435 323,411l24,31C312,471 261,492 210,492C110,492 55,434 55,364C55,282 135,253 208,227C263,207 325,181 325,121C325,70 286,26 211,26C142,26 99,53 58,87 z M192,-51l-13,-29C208,-86 236,-98 236,-129C236,-156 198,-171 143,-179l7,-30C214,-201 275,-176 275,-124C275,-83 247,-62 192,-51z"/>
+<glyph unicode="&#x1E61;" horiz-adv-x="405" d="M32,54C75,18 137,-12 208,-12C312,-12 370,51 370,123C370,217 288,242 213,270C156,291 100,312 100,367C100,411 134,454 208,454C257,454 291,435 323,411l24,31C312,471 261,492 210,492C110,492 55,434 55,364C55,282 135,253 208,227C263,207 325,181 325,121C325,70 286,26 211,26C142,26 99,53 58,87 z M211,596C232,596 249,612 249,637C249,660 232,676 211,676C189,676 172,660 172,637C172,612 189,596 211,596z"/>
+<glyph unicode="&#x1E63;" horiz-adv-x="405" d="M32,54C75,18 137,-12 208,-12C312,-12 370,51 370,123C370,217 288,242 213,270C156,291 100,312 100,367C100,411 134,454 208,454C257,454 291,435 323,411l24,31C312,471 261,492 210,492C110,492 55,434 55,364C55,282 135,253 208,227C263,207 325,181 325,121C325,70 286,26 211,26C142,26 99,53 58,87 z M218,-194C240,-194 256,-178 256,-153C256,-130 240,-114 218,-114C196,-114 180,-130 180,-153C180,-178 196,-194 218,-194z"/>
+<glyph unicode="&#xDF;" horiz-adv-x="542" d="M92,0l44,0l0,517C136,636 186,691 262,691C325,691 357,649 357,591C357,501 259,470 259,373C259,229 468,264 468,125C468,74 434,26 367,26C324,26 291,41 253,72l-22,-33C269,8 315,-12 367,-12C452,-12 513,48 513,127C513,295 303,262 303,377C303,457 402,492 402,595C402,670 350,729 263,729C159,729 92,655 92,532z"/>
+<glyph unicode="&#x165;" horiz-adv-x="312" d="M103,133C103,47 130,-12 223,-12C243,-12 273,-4 301,6l-12,36C272,34 247,27 229,27C163,27 148,68 148,129l0,313l139,0l0,38l-139,0l0,139l-38,0l-6,-139l-76,-4l0,-34l75,0 z M270,548l8,156l0,50l-37,0l2,-206z"/>
+<glyph unicode="&#x163;" horiz-adv-x="312" d="M222,-12C222,-12 223,-12 223,-12C243,-12 273,-4 301,6l-12,36C272,34 247,27 229,27C163,27 148,68 148,129l0,313l139,0l0,38l-139,0l0,139l-38,0l-6,-139l-76,-4l0,-34l75,0l0,-309C103,59 123,5 188,-9l-34,-65C193,-84 221,-97 221,-127C221,-155 183,-170 128,-178l7,-30C199,-200 260,-175 260,-123C260,-83 233,-65 200,-54z"/>
+<glyph unicode="&#x21B;" horiz-adv-x="312" d="M103,133C103,47 130,-12 223,-12C243,-12 273,-4 301,6l-12,36C272,34 247,27 229,27C163,27 148,68 148,129l0,313l139,0l0,38l-139,0l0,139l-38,0l-6,-139l-76,-4l0,-34l75,0 z M175,-51l-13,-29C191,-86 218,-98 218,-129C218,-156 181,-171 126,-179l7,-30C197,-201 258,-176 258,-124C258,-83 229,-62 175,-51z"/>
+<glyph unicode="&#x1E6D;" horiz-adv-x="312" d="M103,133C103,47 130,-12 223,-12C243,-12 273,-4 301,6l-12,36C272,34 247,27 229,27C163,27 148,68 148,129l0,313l139,0l0,38l-139,0l0,139l-38,0l-6,-139l-76,-4l0,-34l75,0 z M201,-194C222,-194 239,-178 239,-153C239,-130 222,-114 201,-114C179,-114 163,-130 163,-153C163,-178 179,-194 201,-194z"/>
+<glyph unicode="&#x1E6F;" horiz-adv-x="312" d="M103,133C103,47 130,-12 223,-12C243,-12 273,-4 301,6l-12,36C272,34 247,27 229,27C163,27 148,68 148,129l0,313l139,0l0,38l-139,0l0,139l-38,0l-6,-139l-76,-4l0,-34l75,0 z M313,-124l-228,0l0,-36l228,0z"/>
+<glyph unicode="&#x1E97;" horiz-adv-x="312" d="M103,133C103,47 130,-12 223,-12C243,-12 273,-4 301,6l-12,36C272,34 247,27 229,27C163,27 148,68 148,129l0,313l139,0l0,38l-139,0l0,139l-38,0l-6,-139l-76,-4l0,-34l75,0 z M51,731C72,731 88,747 88,768C88,788 72,804 51,804C30,804 15,788 15,768C15,747 30,731 51,731 z M209,731C230,731 246,747 246,768C246,788 230,804 209,804C188,804 172,788 172,768C172,747 188,731 209,731z"/>
+<glyph unicode="&#xF9;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M283,572l37,0l-91,136l-53,0z"/>
+<glyph unicode="&#xFA;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M353,708l-52,0l-92,-136l38,0z"/>
+<glyph unicode="&#xFB;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M151,572l37,0l75,99l4,0l75,-99l36,0l-94,136l-39,0z"/>
+<glyph unicode="&#x169;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M141,581l30,0C176,616 187,636 209,636C245,636 271,581 320,581C368,581 386,628 389,670l-31,0C354,636 342,615 321,615C287,615 258,670 210,670C162,670 144,624 141,581z"/>
+<glyph unicode="&#xFC;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M186,598C207,598 223,614 223,635C223,655 207,671 186,671C165,671 149,655 149,635C149,614 165,598 186,598 z M344,598C364,598 380,614 380,635C380,655 364,671 344,671C323,671 307,655 307,635C307,614 323,598 344,598z"/>
+<glyph unicode="&#x16B;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M147,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x16D;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M265,576C346,576 378,644 384,695l-33,0C345,652 318,608 265,608C211,608 185,652 179,695l-33,0C152,644 183,576 265,576z"/>
+<glyph unicode="&#x16F;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M265,539C312,539 347,574 347,625C347,677 312,712 265,712C218,712 183,677 183,625C183,574 218,539 265,539 z M265,565C236,565 212,589 212,625C212,662 236,686 265,686C294,686 317,662 317,625C317,589 294,565 265,565z"/>
+<glyph unicode="&#x171;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M183,570l34,0l83,138l-46,0 z M316,570l34,0l83,138l-45,0z"/>
+<glyph unicode="&#x1D4;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M245,572l39,0l94,136l-36,0l-75,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#x1D6;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M186,598C206,598 222,614 222,634C222,654 206,669 186,669C166,669 150,654 150,634C150,614 166,598 186,598 z M344,598C364,598 379,614 379,634C379,654 364,669 344,669C323,669 308,654 308,634C308,614 323,598 344,598 z M150,747l228,0l0,33l-228,0z"/>
+<glyph unicode="&#x1D8;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M221,710l36,0l97,98l-52,0 z M186,598C206,598 222,614 222,634C222,654 206,669 186,669C166,669 150,654 150,634C150,614 166,598 186,598 z M344,598C364,598 379,614 379,634C379,654 364,669 344,669C323,669 308,654 308,634C308,614 323,598 344,598z"/>
+<glyph unicode="&#x1DA;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M245,710l40,0l93,98l-39,0l-72,-67l-4,0l-73,67l-38,0 z M186,598C206,598 222,614 222,634C222,654 206,669 186,669C166,669 150,654 150,634C150,614 166,598 186,598 z M344,598C364,598 379,614 379,634C379,654 364,669 344,669C323,669 308,654 308,634C308,614 323,598 344,598z"/>
+<glyph unicode="&#x1DC;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M228,808l-52,0l96,-98l36,0 z M344,598C364,598 379,614 379,634C379,654 364,669 344,669C323,669 308,654 308,634C308,614 323,598 344,598 z M186,598C206,598 222,614 222,634C222,654 206,669 186,669C166,669 150,654 150,634C150,614 166,598 186,598z"/>
+<glyph unicode="&#x1EE5;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M283,-194C304,-194 321,-178 321,-153C321,-130 304,-114 283,-114C261,-114 245,-130 245,-153C245,-178 261,-194 283,-194z"/>
+<glyph unicode="&#x1EE7;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,480l-44,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0 z M241,551C289,564 335,585 335,637C335,688 281,709 215,712l-4,-32C265,678 296,662 296,632C296,603 269,588 233,577z"/>
+<glyph unicode="&#x173;" horiz-adv-x="529" d="M85,172C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-73C348,-31 313,-71 313,-122C313,-176 348,-203 394,-203C415,-203 444,-193 459,-180l-16,26C430,-164 417,-168 400,-168C375,-168 351,-150 351,-116C351,-73 382,-34 437,0l0,480l-44,0l0,-354C337,58 295,28 238,28C160,28 129,76 129,178l0,302l-44,0z"/>
+<glyph unicode="&#x1B0;" horiz-adv-x="529" d="M472,588C481,575 486,562 486,549C486,508 452,487 400,480l-7,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0l0,-308C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,457C477,468 526,492 526,552C526,572 519,590 507,608z"/>
+<glyph unicode="&#x1EE9;" horiz-adv-x="529" d="M349,708l-52,0l-92,-136l38,0 z M472,588C481,575 486,562 486,549C486,508 452,487 400,480l-7,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0l0,-308C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,457C477,468 526,492 526,552C526,572 519,590 507,608z"/>
+<glyph unicode="&#x1EEB;" horiz-adv-x="529" d="M316,572l-91,136l-53,0l107,-136 z M472,588C481,575 486,562 486,549C486,508 452,487 400,480l-7,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0l0,-308C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,457C477,468 526,492 526,552C526,572 519,590 507,608z"/>
+<glyph unicode="&#x1EED;" horiz-adv-x="529" d="M237,551C285,564 331,585 331,637C331,688 277,709 211,712l-4,-32C261,678 292,662 292,632C292,603 265,588 229,577 z M472,588C481,575 486,562 486,549C486,508 452,487 400,480l-7,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0l0,-308C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,457C477,468 526,492 526,552C526,572 519,590 507,608z"/>
+<glyph unicode="&#x1EEF;" horiz-adv-x="529" d="M354,670C350,636 338,615 317,615C283,615 254,670 206,670C158,670 140,624 137,581l30,0C172,616 183,636 205,636C241,636 267,581 316,581C364,581 382,628 385,670 z M472,588C481,575 486,562 486,549C486,508 452,487 400,480l-7,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0l0,-308C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,457C477,468 526,492 526,552C526,572 519,590 507,608z"/>
+<glyph unicode="&#x1EF1;" horiz-adv-x="529" d="M280,-114C258,-114 242,-130 242,-153C242,-178 258,-194 280,-194C301,-194 318,-178 318,-153C318,-130 301,-114 280,-114 z M472,588C481,575 486,562 486,549C486,508 452,487 400,480l-7,0l0,-354C337,58 295,28 238,28C161,28 129,76 129,178l0,302l-44,0l0,-308C85,48 131,-12 230,-12C296,-12 346,25 393,80l2,0l5,-80l37,0l0,457C477,468 526,492 526,552C526,572 519,590 507,608z"/>
+<glyph unicode="&#x1E81;" horiz-adv-x="685" d="M166,0l53,0l83,296C317,342 329,388 340,435l4,0C358,388 367,344 381,298l84,-298l58,0l138,480l-45,0l-85,-311C520,125 508,84 497,41l-4,0C481,84 469,125 457,169l-87,311l-53,0l-87,-311C218,125 206,84 195,41l-4,0C181,84 170,125 158,169l-86,311l-48,0 z M361,572l38,0l-92,136l-52,0z"/>
+<glyph unicode="&#x1E83;" horiz-adv-x="685" d="M166,0l53,0l83,296C317,342 329,388 340,435l4,0C358,388 367,344 381,298l84,-298l58,0l138,480l-45,0l-85,-311C520,125 508,84 497,41l-4,0C481,84 469,125 457,169l-87,311l-53,0l-87,-311C218,125 206,84 195,41l-4,0C181,84 170,125 158,169l-86,311l-48,0 z M432,708l-53,0l-91,-136l37,0z"/>
+<glyph unicode="&#x175;" horiz-adv-x="685" d="M166,0l53,0l83,296C317,342 329,388 340,435l4,0C358,388 367,344 381,298l84,-298l58,0l138,480l-45,0l-85,-311C520,125 508,84 497,41l-4,0C481,84 469,125 457,169l-87,311l-53,0l-87,-311C218,125 206,84 195,41l-4,0C181,84 170,125 158,169l-86,311l-48,0 z M230,572l36,0l75,99l4,0l75,-99l37,0l-94,136l-39,0z"/>
+<glyph unicode="&#x1E85;" horiz-adv-x="685" d="M166,0l53,0l83,296C317,342 329,388 340,435l4,0C358,388 367,344 381,298l84,-298l58,0l138,480l-45,0l-85,-311C520,125 508,84 497,41l-4,0C481,84 469,125 457,169l-87,311l-53,0l-87,-311C218,125 206,84 195,41l-4,0C181,84 170,125 158,169l-86,311l-48,0 z M265,598C285,598 301,614 301,635C301,655 285,671 265,671C244,671 228,655 228,635C228,614 244,598 265,598 z M422,598C443,598 459,614 459,635C459,655 443,671 422,671C401,671 386,655 386,635C386,614 401,598 422,598z"/>
+<glyph unicode="&#x1EF3;" horiz-adv-x="436" d="M34,-170l-10,-39C37,-215 55,-219 73,-219C159,-219 207,-140 234,-60l190,540l-45,0l-103,-302C263,138 247,86 232,44l-4,0C210,86 191,138 176,178l-116,302l-48,0l197,-489l-13,-42C172,-124 132,-178 73,-178C59,-178 44,-174 34,-170 z M247,572l38,0l-92,136l-52,0z"/>
+<glyph unicode="&#xFD;" horiz-adv-x="436" d="M34,-170l-10,-39C37,-215 55,-219 73,-219C159,-219 207,-140 234,-60l190,540l-45,0l-103,-302C263,138 247,86 232,44l-4,0C210,86 191,138 176,178l-116,302l-48,0l197,-489l-13,-42C172,-124 132,-178 73,-178C59,-178 44,-174 34,-170 z M318,708l-53,0l-91,-136l37,0z"/>
+<glyph unicode="&#x177;" horiz-adv-x="436" d="M34,-170l-10,-39C37,-215 55,-219 73,-219C159,-219 207,-140 234,-60l190,540l-45,0l-103,-302C263,138 247,86 232,44l-4,0C210,86 191,138 176,178l-116,302l-48,0l197,-489l-13,-42C172,-124 132,-178 73,-178C59,-178 44,-174 34,-170 z M116,572l36,0l75,99l4,0l75,-99l37,0l-94,136l-39,0z"/>
+<glyph unicode="&#xFF;" horiz-adv-x="436" d="M34,-170l-10,-39C37,-215 55,-219 73,-219C159,-219 207,-140 234,-60l190,540l-45,0l-103,-302C263,138 247,86 232,44l-4,0C210,86 191,138 176,178l-116,302l-48,0l197,-489l-13,-42C172,-124 132,-178 73,-178C59,-178 44,-174 34,-170 z M150,598C171,598 187,614 187,635C187,655 171,671 150,671C130,671 114,655 114,635C114,614 130,598 150,598 z M308,598C329,598 345,614 345,635C345,655 329,671 308,671C287,671 271,655 271,635C271,614 287,598 308,598z"/>
+<glyph unicode="&#x1E8F;" horiz-adv-x="436" d="M34,-170l-10,-39C37,-215 55,-219 73,-219C159,-219 207,-140 234,-60l190,540l-45,0l-103,-302C263,138 247,86 232,44l-4,0C210,86 191,138 176,178l-116,302l-48,0l197,-489l-13,-42C172,-124 132,-178 73,-178C59,-178 44,-174 34,-170 z M229,596C251,596 267,612 267,637C267,660 251,676 229,676C208,676 191,660 191,637C191,612 208,596 229,596z"/>
+<glyph unicode="&#x1EF5;" horiz-adv-x="436" d="M34,-170l-10,-39C37,-215 55,-219 73,-219C159,-219 207,-140 234,-60l190,540l-45,0l-103,-302C263,138 247,86 232,44l-4,0C210,86 191,138 176,178l-116,302l-48,0l197,-489l-13,-42C172,-124 132,-178 73,-178C59,-178 44,-174 34,-170 z M360,-193C382,-193 398,-177 398,-152C398,-129 382,-113 360,-113C338,-113 322,-129 322,-152C322,-177 338,-193 360,-193z"/>
+<glyph unicode="&#x1EF7;" horiz-adv-x="436" d="M34,-170l-10,-39C37,-215 55,-219 73,-219C159,-219 207,-140 234,-60l190,540l-45,0l-103,-302C263,138 247,86 232,44l-4,0C210,86 191,138 176,178l-116,302l-48,0l197,-489l-13,-42C172,-124 132,-178 73,-178C59,-178 44,-174 34,-170 z M206,551C253,564 300,585 300,637C300,688 245,709 179,712l-4,-32C230,678 261,662 261,632C261,603 234,588 197,577z"/>
+<glyph unicode="&#x1EF9;" horiz-adv-x="436" d="M34,-170l-10,-39C37,-215 55,-219 73,-219C159,-219 207,-140 234,-60l190,540l-45,0l-103,-302C263,138 247,86 232,44l-4,0C210,86 191,138 176,178l-116,302l-48,0l197,-489l-13,-42C172,-124 132,-178 73,-178C59,-178 44,-174 34,-170 z M105,581l31,0C140,616 152,636 173,636C209,636 236,581 284,581C332,581 350,628 353,670l-30,0C318,636 307,615 285,615C251,615 223,670 174,670C127,670 108,624 105,581z"/>
+<glyph unicode="&#x17A;" horiz-adv-x="404" d="M27,0l351,0l0,39l-293,0l283,418l0,23l-310,0l0,-38l253,0l-284,-418 z M307,708l-52,0l-92,-136l38,0z"/>
+<glyph unicode="&#x17E;" horiz-adv-x="404" d="M27,0l351,0l0,39l-293,0l283,418l0,23l-310,0l0,-38l253,0l-284,-418 z M199,572l39,0l94,136l-36,0l-75,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#x17C;" horiz-adv-x="404" d="M27,0l351,0l0,39l-293,0l283,418l0,23l-310,0l0,-38l253,0l-284,-418 z M219,596C240,596 257,612 257,637C257,660 240,676 219,676C197,676 181,660 181,637C181,612 197,596 219,596z"/>
+<glyph unicode="&#x1E93;" horiz-adv-x="404" d="M27,0l351,0l0,39l-293,0l283,418l0,23l-310,0l0,-38l253,0l-284,-418 z M218,-194C239,-194 256,-178 256,-153C256,-130 239,-114 218,-114C196,-114 180,-130 180,-153C180,-178 196,-194 218,-194z"/>
+<glyph unicode="&#xF0;" horiz-adv-x="535" d="M267,27C178,27 104,106 104,219C104,318 161,404 269,404C319,404 371,388 422,313C424,293 425,273 425,251C425,126 376,27 267,27 z M468,676l-15,27l-142,-74C269,667 222,698 173,724l-22,-30C195,669 237,642 274,610l-132,-68l15,-28l142,74C355,533 397,464 415,366C376,417 324,442 267,442C144,442 60,351 60,219C60,75 160,-12 267,-12C387,-12 470,92 470,252C470,415 414,526 335,607z"/>
+<glyph unicode="&#xFE;" horiz-adv-x="544" d="M136,-42l0,88C186,9 234,-12 280,-12C393,-12 492,84 492,247C492,396 428,492 299,492C240,492 184,458 136,421l0,91l0,207l-44,0l0,-936l44,0 z M136,89l0,285C194,425 245,453 293,453C403,453 445,365 445,247C445,117 375,27 278,27C241,27 191,44 136,89z"/>
+<glyph unicode="&#x237;" horiz-adv-x="229" d="M92,-86C92,-147 82,-191 28,-191C9,-191 -10,-185 -22,-181l-11,-36C-18,-223 6,-229 29,-229C103,-229 137,-183 137,-89l0,569l-45,0z"/>
+<glyph unicode="&#x251;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239z"/>
+<glyph unicode="&#x259;" horiz-adv-x="483" d="M38,219C38,69 119,-12 231,-12C346,-12 431,84 431,241C431,401 345,492 227,492C156,492 108,469 68,441l18,-33C125,435 167,454 222,454C325,454 384,369 386,255l-346,0C38,243 38,231 38,219 z M79,221l307,0C377,100 320,26 230,26C142,26 79,87 79,221z"/>
+<glyph unicode="&#x261;" horiz-adv-x="545" d="M110,-142l-20,-35C137,-209 194,-229 258,-229C382,-229 452,-156 452,-42l0,522l-39,0l-4,-44l-3,0C363,471 323,492 266,492C152,492 53,398 53,246C53,88 131,0 251,0C315,0 369,35 409,74l-1,-109C408,-132 357,-191 258,-191C208,-191 158,-177 110,-142 z M258,39C156,39 99,122 99,246C99,363 173,453 268,453C315,453 358,436 408,391l0,-273C358,67 311,39 258,39z"/>
+<glyph unicode="&#xE003;" horiz-adv-x="526" d="M554,715C532,725 506,731 484,731C408,731 365,682 365,587l0,-107l-222,0l0,86C143,640 172,683 229,683C252,683 274,679 298,667l12,36C284,715 255,721 229,721C147,721 99,669 99,569l0,-89l-65,-4l0,-34l65,0l0,-442l44,0l0,442l222,0l0,-442l44,0l0,442l111,0l0,38l-111,0l0,104C409,653 433,693 484,693C502,693 522,689 542,679z"/>
+<glyph unicode="&#xFB01;" horiz-adv-x="509" d="M99,480l-66,-4l0,-34l66,0l0,-442l44,0l0,442l111,0l0,38l-111,0l0,104C143,653 167,693 218,693C236,693 256,689 276,679l12,36C266,725 240,731 218,731C142,731 99,682 99,587 z M373,0l44,0l0,480l-44,0 z M396,675C374,675 356,660 356,635C356,612 374,596 396,596C418,596 436,612 436,635C436,660 418,675 396,675z"/>
+<glyph unicode="&#xFB02;" horiz-adv-x="500" d="M99,480l-66,-4l0,-34l66,0l0,-442l44,0l0,442l111,0l0,38l-111,0l0,104C143,653 167,693 218,693C236,693 256,689 276,679l12,36C266,725 240,731 218,731C142,731 99,682 99,587 z M438,29C428,27 424,27 420,27C408,27 399,37 399,58l0,661l-44,0l0,-655C355,12 375,-12 414,-12C428,-12 436,-10 445,-7z"/>
+<glyph unicode="&#xE004;" horiz-adv-x="539" d="M516,42C499,34 474,27 456,27C390,27 374,68 374,129l0,313l140,0l0,38l-140,0l0,139l-37,0l-6,-139l-188,0l0,104C143,653 167,693 218,693C236,693 256,689 276,679l12,36C266,725 240,731 218,731C142,731 99,682 99,587l0,-107l-66,-4l0,-34l66,0l0,-442l44,0l0,442l187,0l0,-309C330,47 357,-12 449,-12C469,-12 500,-4 528,6z"/>
+<glyph unicode="&#xE005;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0z"/>
+<glyph unicode="&#xE006;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M153,709l41,0l-92,106l-58,0z"/>
+<glyph unicode="&#xE007;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M270,815l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#xE008;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M80,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE009;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M215,716C260,716 283,764 286,808l-28,0C254,774 238,752 216,752C176,752 150,808 98,808C53,808 30,761 27,716l29,0C60,750 76,773 97,773C138,773 163,716 215,716z"/>
+<glyph unicode="&#xE00A;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M78,725C99,725 115,739 115,761C115,784 99,798 78,798C57,798 41,784 41,761C41,739 57,725 78,725 z M236,725C256,725 272,739 272,761C272,784 256,798 236,798C215,798 199,784 199,761C199,739 215,725 236,725z"/>
+<glyph unicode="&#xE00B;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M43,734l228,0l0,36l-228,0z"/>
+<glyph unicode="&#xE00C;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M157,721C179,721 197,737 197,762C197,785 179,801 157,801C135,801 116,785 116,762C116,737 135,721 157,721z"/>
+<glyph unicode="&#xE00D;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M234,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE00E;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M133,702C181,715 227,737 227,789C227,839 173,861 107,863l-4,-32C157,829 188,814 188,783C188,755 161,740 125,729z"/>
+<glyph unicode="&#xE00F;" horiz-adv-x="313" d="M43,0l225,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0 z M159,-194C180,-194 197,-178 197,-153C197,-130 180,-114 159,-114C137,-114 120,-130 120,-153C120,-178 137,-194 159,-194z"/>
+<glyph unicode="&#xE010;" horiz-adv-x="313" d="M43,0l100,0C109,-29 78,-73 78,-123C78,-178 115,-205 162,-205C184,-205 212,-194 227,-181l-16,27C197,-164 185,-168 168,-168C142,-168 117,-151 117,-116C117,-75 142,-32 185,0l83,0l0,40l-89,0l0,579l89,0l0,40l-225,0l0,-40l90,0l0,-579l-90,0z"/>
+<glyph unicode="&#xE011;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239z"/>
+<glyph unicode="&#xE012;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M291,572l37,0l-91,136l-53,0z"/>
+<glyph unicode="&#xE013;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M361,708l-52,0l-92,-136l38,0z"/>
+<glyph unicode="&#xE014;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M159,572l37,0l75,99l4,0l75,-99l36,0l-94,136l-39,0z"/>
+<glyph unicode="&#xE015;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M149,581l30,0C184,616 195,636 217,636C253,636 279,581 328,581C375,581 394,628 397,670l-31,0C362,636 350,615 329,615C294,615 266,670 218,670C170,670 152,624 149,581z"/>
+<glyph unicode="&#xE016;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M194,598C215,598 231,614 231,635C231,655 215,671 194,671C173,671 157,655 157,635C157,614 173,598 194,598 z M352,598C372,598 388,614 388,635C388,655 372,671 352,671C331,671 315,655 315,635C315,614 331,598 352,598z"/>
+<glyph unicode="&#xE017;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M159,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#xE018;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M273,576C354,576 386,644 392,695l-33,0C353,652 326,608 273,608C219,608 193,652 187,695l-33,0C160,644 191,576 273,576z"/>
+<glyph unicode="&#xE019;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M273,539C320,539 355,574 355,625C355,677 320,712 273,712C226,712 190,677 190,625C190,574 226,539 273,539 z M273,565C244,565 220,589 220,625C220,662 244,686 273,686C302,686 325,662 325,625C325,589 302,565 273,565z"/>
+<glyph unicode="&#xE01A;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M253,572l39,0l94,136l-36,0l-75,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#xE01B;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M274,-194C295,-194 312,-178 312,-153C312,-130 295,-114 274,-114C252,-114 236,-130 236,-153C236,-178 252,-194 274,-194z"/>
+<glyph unicode="&#xE01C;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M249,551C297,564 343,585 343,637C343,688 289,709 223,712l-4,-32C273,678 304,662 304,632C304,603 277,588 241,577z"/>
+<glyph unicode="&#xE01D;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M170,572l35,0l66,78l4,0l65,-78l36,0l-84,114l-39,0 z M351,637l33,0l90,111l-46,0z"/>
+<glyph unicode="&#xE01E;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M170,572l35,0l66,78l4,0l65,-78l36,0l-84,114l-39,0 z M369,748l-47,0l91,-111l32,0z"/>
+<glyph unicode="&#xE01F;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M170,572l35,0l66,78l4,0l65,-78l36,0l-84,114l-39,0 z M376,628C413,640 455,658 455,704C455,752 408,772 349,774l-3,-29C394,743 417,729 417,699C417,676 396,663 367,653z"/>
+<glyph unicode="&#xE020;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M162,570l36,0l73,69l4,0l73,-69l36,0l-91,100l-41,0 z M180,706C184,736 200,751 221,751C256,751 275,706 323,706C370,706 391,745 394,783l-29,0C361,753 346,738 324,738C289,738 271,783 222,783C175,783 154,744 151,706z"/>
+<glyph unicode="&#xE021;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M159,572l37,0l75,99l4,0l75,-99l36,0l-94,136l-39,0 z M274,-194C295,-194 312,-178 312,-153C312,-130 295,-114 274,-114C252,-114 236,-130 236,-153C236,-178 252,-194 274,-194z"/>
+<glyph unicode="&#xE022;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M241,667l33,0l87,110l-47,0 z M273,576C354,576 386,644 392,695l-31,0C355,651 327,607 273,607C218,607 191,651 185,695l-31,0C160,644 191,576 273,576z"/>
+<glyph unicode="&#xE023;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M231,777l-46,0l86,-110l34,0 z M273,576C354,576 386,644 392,695l-31,0C355,651 327,607 273,607C218,607 191,651 185,695l-31,0C160,644 191,576 273,576z"/>
+<glyph unicode="&#xE024;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M273,576C354,576 386,644 392,695l-31,0C355,651 327,607 273,607C218,607 191,651 185,695l-31,0C160,644 191,576 273,576 z M251,675C289,687 330,705 330,752C330,799 283,819 224,821l-3,-29C269,790 292,777 292,746C292,723 271,710 243,701z"/>
+<glyph unicode="&#xE025;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M273,576C354,576 384,628 390,675l-31,0C353,640 326,607 273,607C220,607 193,640 187,675l-31,0C161,628 191,576 273,576 z M151,706l29,0C184,736 200,751 221,751C256,751 275,706 323,706C370,706 391,745 394,783l-29,0C361,753 346,738 324,738C289,738 271,783 222,783C175,783 154,744 151,706z"/>
+<glyph unicode="&#xE026;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l4,-62l38,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239 z M273,576C354,576 386,644 392,695l-33,0C353,652 326,608 273,608C219,608 193,652 187,695l-33,0C160,644 191,576 273,576 z M274,-194C295,-194 312,-178 312,-153C312,-130 295,-114 274,-114C252,-114 236,-130 236,-153C236,-178 252,-194 274,-194z"/>
+<glyph unicode="&#xE027;" horiz-adv-x="544" d="M99,239C99,360 172,453 268,453C315,453 357,436 408,391l0,-285C357,55 310,27 257,27C155,27 99,112 99,239 z M52,239C52,77 130,-12 251,-12C315,-12 368,23 407,62l3,0l5,-55C362,-31 327,-71 327,-122C327,-176 363,-203 409,-203C430,-203 458,-193 474,-180l-16,26C444,-164 432,-168 415,-168C389,-168 366,-150 366,-116C366,-73 396,-34 452,0l0,480l-39,0l-3,-46l-2,0C363,471 323,492 266,492C151,492 52,394 52,239z"/>
+<glyph unicode="&#xE028;" horiz-adv-x="545" d="M110,-142l-20,-35C137,-209 194,-229 258,-229C382,-229 452,-156 452,-42l0,522l-39,0l-4,-44l-3,0C363,471 323,492 266,492C152,492 53,398 53,246C53,88 131,0 251,0C315,0 369,35 409,74l-1,-109C408,-132 357,-191 258,-191C208,-191 158,-177 110,-142 z M258,39C156,39 99,122 99,246C99,363 173,453 268,453C315,453 358,436 408,391l0,-273C358,67 311,39 258,39z"/>
+<glyph unicode="&#xE029;" horiz-adv-x="545" d="M110,-142l-20,-35C137,-209 194,-229 258,-229C382,-229 452,-156 452,-42l0,522l-39,0l-4,-44l-3,0C363,471 323,492 266,492C152,492 53,398 53,246C53,88 131,0 251,0C315,0 369,35 409,74l-1,-109C408,-132 357,-191 258,-191C208,-191 158,-177 110,-142 z M258,39C156,39 99,122 99,246C99,363 173,453 268,453C315,453 358,436 408,391l0,-273C358,67 311,39 258,39 z M166,572l37,0l75,99l4,0l75,-99l37,0l-95,136l-39,0z"/>
+<glyph unicode="&#xE02A;" horiz-adv-x="545" d="M110,-142l-20,-35C137,-209 194,-229 258,-229C382,-229 452,-156 452,-42l0,522l-39,0l-4,-44l-3,0C363,471 323,492 266,492C152,492 53,398 53,246C53,88 131,0 251,0C315,0 369,35 409,74l-1,-109C408,-132 357,-191 258,-191C208,-191 158,-177 110,-142 z M258,39C156,39 99,122 99,246C99,363 173,453 268,453C315,453 358,436 408,391l0,-273C358,67 311,39 258,39 z M280,576C362,576 393,644 399,695l-33,0C360,652 333,608 280,608C226,608 200,652 194,695l-33,0C167,644 198,576 280,576z"/>
+<glyph unicode="&#xE02B;" horiz-adv-x="545" d="M110,-142l-20,-35C137,-209 194,-229 258,-229C382,-229 452,-156 452,-42l0,522l-39,0l-4,-44l-3,0C363,471 323,492 266,492C152,492 53,398 53,246C53,88 131,0 251,0C315,0 369,35 409,74l-1,-109C408,-132 357,-191 258,-191C208,-191 158,-177 110,-142 z M258,39C156,39 99,122 99,246C99,363 173,453 268,453C315,453 358,436 408,391l0,-273C358,67 311,39 258,39 z M280,596C302,596 318,612 318,637C318,660 302,676 280,676C258,676 242,660 242,637C242,612 258,596 280,596z"/>
+<glyph unicode="&#xE02C;" horiz-adv-x="545" d="M110,-142l-20,-35C137,-209 194,-229 258,-229C382,-229 452,-156 452,-42l0,522l-39,0l-4,-44l-3,0C363,471 323,492 266,492C152,492 53,398 53,246C53,88 131,0 251,0C315,0 369,35 409,74l-1,-109C408,-132 357,-191 258,-191C208,-191 158,-177 110,-142 z M258,39C156,39 99,122 99,246C99,363 173,453 268,453C315,453 358,436 408,391l0,-273C358,67 311,39 258,39 z M304,539l12,29C288,574 260,586 260,617C260,644 297,659 352,667l-6,30C281,689 220,664 220,612C220,571 249,550 304,539z"/>
+<glyph unicode="&#xE02D;" horiz-adv-x="545" d="M110,-142l-20,-35C137,-209 194,-229 258,-229C382,-229 452,-156 452,-42l0,522l-39,0l-4,-44l-3,0C363,471 323,492 266,492C152,492 53,398 53,246C53,88 131,0 251,0C315,0 369,35 409,74l-1,-109C408,-132 357,-191 258,-191C208,-191 158,-177 110,-142 z M258,39C156,39 99,122 99,246C99,363 173,453 268,453C315,453 358,436 408,391l0,-273C358,67 311,39 258,39 z M260,572l39,0l95,136l-37,0l-75,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#xE02E;" horiz-adv-x="545" d="M110,-142l-20,-35C137,-209 194,-229 258,-229C382,-229 452,-156 452,-42l0,522l-39,0l-4,-44l-3,0C363,471 323,492 266,492C152,492 53,398 53,246C53,88 131,0 251,0C315,0 369,35 409,74l-1,-109C408,-132 357,-191 258,-191C208,-191 158,-177 110,-142 z M258,39C156,39 99,122 99,246C99,363 173,453 268,453C315,453 358,436 408,391l0,-273C358,67 311,39 258,39 z M166,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#xE02F;" horiz-adv-x="545" d="M110,-142l-20,-35C137,-209 194,-229 258,-229C382,-229 452,-156 452,-42l0,522l-39,0l-4,-44l-3,0C363,471 323,492 266,492C152,492 53,398 53,246C53,88 131,0 251,0C315,0 369,35 409,74l-1,-109C408,-132 357,-191 258,-191C208,-191 158,-177 110,-142 z M258,39C156,39 99,122 99,246C99,363 173,453 268,453C315,453 358,436 408,391l0,-273C358,67 311,39 258,39 z M156,581l30,0C191,616 203,636 224,636C260,636 286,581 335,581C383,581 401,628 404,670l-30,0C369,636 357,615 336,615C302,615 274,670 225,670C177,670 159,624 156,581z"/>
+<glyph unicode="&#xE030;" horiz-adv-x="229" d="M92,0l44,0l0,719l-44,0z"/>
+<glyph unicode="&#xE031;" horiz-adv-x="229" d="M92,0l44,0l0,719l-44,0 z M221,866l-57,0l-93,-106l41,0z"/>
+<glyph unicode="&#xE032;" horiz-adv-x="234" d="M92,0l44,0l0,719l-44,0 z M228,548l9,156l0,50l-38,0l2,-206z"/>
+<glyph unicode="&#xE033;" horiz-adv-x="308" d="M92,0l44,0l0,719l-44,0 z M226,323C226,295 246,278 268,278C290,278 311,295 311,323C311,352 290,369 268,369C246,369 226,352 226,323z"/>
+<glyph unicode="&#xE034;" horiz-adv-x="229" d="M92,0l44,0l0,719l-44,0 z M89,-51l-12,-29C105,-86 133,-98 133,-129C133,-156 95,-171 40,-179l7,-30C111,-201 172,-176 172,-124C172,-83 144,-62 89,-51z"/>
+<glyph unicode="&#xE035;" horiz-adv-x="229" d="M92,0l44,0l0,719l-44,0 z M115,-194C137,-194 153,-178 153,-153C153,-130 137,-114 115,-114C93,-114 77,-130 77,-153C77,-178 93,-194 115,-194z"/>
+<glyph unicode="&#xE036;" horiz-adv-x="229" d="M92,0l44,0l0,719l-44,0 z M1,832l227,0l0,36l-227,0 z M115,-194C137,-194 153,-178 153,-153C153,-130 137,-114 115,-114C93,-114 77,-130 77,-153C77,-178 93,-194 115,-194z"/>
+<glyph unicode="&#xE037;" horiz-adv-x="229" d="M92,0l44,0l0,719l-44,0 z M228,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#xE038;" horiz-adv-x="231" d="M211,480l-75,-49l0,288l-44,0l0,-314l-64,-42l0,-42l64,42l0,-363l44,0l0,388l75,49z"/>
+<glyph unicode="&#xE039;" horiz-adv-x="509" d="M99,480l-66,-4l0,-34l66,0l0,-442l44,0l0,442l111,0l0,38l-111,0l0,104C143,653 167,693 218,693C236,693 256,689 276,679l12,36C266,725 240,731 218,731C142,731 99,682 99,587 z M373,719l0,-719l44,0l0,719z"/>
+<glyph unicode="&amp;" horiz-adv-x="575" d="M230,26C149,26 81,83 81,170C81,235 130,283 189,329C236,244 306,161 376,97C335,55 284,26 230,26 z M168,526C168,586 203,635 261,635C314,635 333,592 333,549C333,481 272,434 205,386C182,434 168,482 168,526 z M562,27C524,41 480,66 434,103C487,170 525,255 551,345l-43,0C485,261 451,187 404,128C336,188 267,270 221,354C296,410 373,466 373,551C373,620 334,671 263,671C183,671 127,609 127,524C127,473 144,417 171,361C102,310 36,254 36,167C36,58 121,-12 226,-12C300,-12 358,22 406,71C458,30 505,3 547,-12z"/>
+<glyph unicode="0" horiz-adv-x="479" d="M239,-12C361,-12 430,109 430,322C430,534 361,651 239,651C117,651 48,534 48,322C48,109 117,-12 239,-12 z M239,26C151,26 93,127 93,322C93,517 151,613 239,613C328,613 385,517 385,322C385,127 328,26 239,26z"/>
+<glyph unicode="1" horiz-adv-x="479" d="M84,0l334,0l0,39l-139,0l0,600l-36,0C213,622 172,608 120,599l0,-30l114,0l0,-530l-150,0z"/>
+<glyph unicode="2" horiz-adv-x="479" d="M41,0l392,0l0,40l-218,0C180,40 143,37 108,35C285,223 401,345 401,472C401,580 335,651 221,651C143,651 87,610 39,557l29,-28C107,577 159,613 217,613C313,613 356,551 356,471C356,360 251,241 41,28z"/>
+<glyph unicode="3" horiz-adv-x="479" d="M29,78C70,35 130,-12 232,-12C342,-12 427,58 427,169C427,259 361,318 282,335l0,4C352,363 404,413 404,497C404,595 328,651 229,651C155,651 100,616 56,573l26,-30C119,582 170,613 229,613C307,613 358,566 358,494C358,417 306,355 158,355l0,-39C317,316 381,256 381,168C381,83 318,27 232,27C144,27 93,67 55,109z"/>
+<glyph unicode="4" horiz-adv-x="479" d="M70,229l188,264C276,522 294,546 310,573l4,0C312,544 310,492 310,463l0,-234 z M448,229l-95,0l0,410l-40,0l-297,-422l0,-26l294,0l0,-191l43,0l0,191l95,0z"/>
+<glyph unicode="5" horiz-adv-x="479" d="M26,74C67,33 125,-12 227,-12C330,-12 431,65 431,201C431,341 344,403 236,403C189,403 155,389 122,369l20,231l255,0l0,39l-295,0l-23,-299l31,-19C148,347 180,364 229,364C324,364 385,302 385,199C385,96 311,27 226,27C139,27 89,66 51,105z"/>
+<glyph unicode="6" horiz-adv-x="479" d="M262,26C158,26 106,117 98,252C150,322 208,348 253,348C350,348 391,280 391,188C391,97 336,26 262,26 z M422,589C389,626 347,651 287,651C164,651 52,558 52,290C52,96 133,-12 261,-12C356,-12 436,72 436,188C436,317 370,386 258,386C199,386 141,351 97,297C99,532 186,612 287,612C328,612 367,594 395,559z"/>
+<glyph unicode="7" horiz-adv-x="479" d="M188,0l48,0C246,250 284,410 437,613l0,26l-393,0l0,-39l337,0C252,420 198,258 188,0z"/>
+<glyph unicode="8" horiz-adv-x="479" d="M84,166C84,236 132,289 197,327C296,288 392,254 392,156C392,83 333,25 243,25C151,25 84,87 84,166 z M290,335C206,368 120,404 120,495C120,564 172,614 243,614C326,614 374,554 374,483C374,428 344,379 290,335 z M40,164C40,63 126,-12 243,-12C359,-12 437,62 437,155C437,241 380,284 325,318l0,4C362,352 416,414 416,484C416,580 352,651 243,651C150,651 76,587 76,495C76,427 121,379 168,348l0,-4C108,312 40,250 40,164z"/>
+<glyph unicode="9" horiz-adv-x="479" d="M226,291C128,291 87,359 87,452C87,543 143,613 216,613C320,613 373,523 381,388C329,319 271,291 226,291 z M56,50C88,13 132,-12 191,-12C315,-12 426,82 426,350C426,544 345,651 218,651C123,651 43,568 43,452C43,323 109,254 220,254C280,254 338,289 382,342C380,107 293,27 192,27C150,27 111,45 83,80z"/>
+<glyph unicode="&#xE03A;" horiz-adv-x="513" d="M257,-12C385,-12 458,110 458,322C458,533 385,651 257,651C129,651 56,533 56,322C56,110 129,-12 257,-12 z M257,27C162,27 102,128 102,322C102,516 162,612 257,612C351,612 412,516 412,322C412,128 351,27 257,27z"/>
+<glyph unicode="&#xE03B;" horiz-adv-x="345" d="M172,0l44,0l0,639l-36,0C150,622 110,608 57,599l0,-30l115,0z"/>
+<glyph unicode="&#xE03C;" horiz-adv-x="486" d="M42,0l390,0l0,40l-216,0C181,40 144,37 109,35C286,223 401,345 401,472C401,580 335,651 222,651C146,651 91,614 39,557l29,-28C107,577 159,613 217,613C314,613 356,551 356,471C356,360 251,241 42,28z"/>
+<glyph unicode="&#xE03D;" horiz-adv-x="479" d="M29,78C70,35 130,-12 232,-12C342,-12 427,58 427,169C427,259 361,318 282,335l0,4C352,363 404,413 404,497C404,595 328,651 229,651C155,651 100,616 56,573l26,-30C119,582 170,613 229,613C307,613 358,566 358,494C358,417 306,355 158,355l0,-39C317,316 381,256 381,168C381,83 318,27 232,27C144,27 93,67 55,109z"/>
+<glyph unicode="&#xE03E;" horiz-adv-x="495" d="M87,229l187,264C292,522 310,546 326,573l4,0C328,544 326,492 326,463l0,-234 z M464,229l-95,0l0,410l-39,0l-297,-422l0,-26l293,0l0,-191l43,0l0,191l95,0z"/>
+<glyph unicode="&#xE03F;" horiz-adv-x="479" d="M26,74C67,33 125,-12 227,-12C330,-12 431,65 431,201C431,341 344,403 236,403C189,403 155,389 122,369l20,231l255,0l0,39l-295,0l-23,-299l31,-19C148,347 180,364 229,364C324,364 385,302 385,199C385,96 311,27 226,27C139,27 89,66 51,105z"/>
+<glyph unicode="&#xE040;" horiz-adv-x="504" d="M273,26C169,26 117,117 109,252C161,322 219,348 264,348C361,348 402,280 402,188C402,97 347,26 273,26 z M433,589C400,626 358,651 298,651C175,651 63,558 63,290C63,96 144,-12 272,-12C366,-12 447,72 447,188C447,317 381,386 269,386C210,386 152,352 108,298C110,532 197,612 298,612C339,612 378,594 406,559z"/>
+<glyph unicode="&#xE041;" horiz-adv-x="476" d="M178,0l48,0C236,250 272,410 423,613l0,26l-379,0l0,-39l323,0C240,420 188,258 178,0z"/>
+<glyph unicode="&#xE042;" horiz-adv-x="511" d="M101,166C101,236 149,289 214,327C313,288 409,254 409,156C409,83 350,25 260,25C168,25 101,87 101,166 z M307,335C223,368 137,404 137,495C137,564 189,614 260,614C343,614 391,554 391,483C391,428 361,379 307,335 z M57,164C57,63 143,-12 260,-12C376,-12 454,62 454,155C454,241 397,284 342,318l0,4C379,352 433,414 433,484C433,580 369,651 260,651C167,651 93,587 93,495C93,427 138,379 185,348l0,-4C125,312 57,250 57,164z"/>
+<glyph unicode="&#xE043;" horiz-adv-x="504" d="M235,291C137,291 96,359 96,452C96,543 152,613 225,613C329,613 382,523 390,388C338,319 280,291 235,291 z M65,50C97,13 141,-12 200,-12C324,-12 435,82 435,350C435,544 354,651 227,651C132,651 52,568 52,452C52,323 118,254 229,254C289,254 347,289 391,342C389,107 302,27 201,27C159,27 120,45 92,80z"/>
+<glyph unicode="&#xE044;" horiz-adv-x="479" d="M239,-12C358,-12 430,85 430,286C430,486 358,583 239,583C121,583 48,486 48,286C48,85 121,-12 239,-12 z M239,26C150,26 93,120 93,286C93,451 150,545 239,545C329,545 385,451 385,286C385,120 329,26 239,26z"/>
+<glyph unicode="&#xE045;" horiz-adv-x="479" d="M84,0l334,0l0,39l-139,0l0,532l-36,0C213,554 172,539 120,531l0,-31l114,0l0,-461l-150,0z"/>
+<glyph unicode="&#xE046;" horiz-adv-x="479" d="M41,0l392,0l0,40l-211,0C187,40 150,37 114,35C279,188 401,287 401,403C401,510 334,581 221,581C143,581 87,540 39,486l29,-27C107,507 159,543 217,543C313,543 355,480 355,402C355,302 249,205 41,28z"/>
+<glyph unicode="&#xE047;" horiz-adv-x="479" d="M29,7C70,-36 130,-83 232,-83C342,-83 427,-13 427,98C427,189 361,249 282,265l0,4C352,293 404,344 404,428C404,526 328,583 229,583C155,583 100,548 56,505l26,-31C119,514 170,544 229,544C307,544 358,497 358,425C358,348 306,285 158,285l0,-39C317,246 381,185 381,98C381,13 318,-44 232,-44C144,-44 93,-4 55,38z"/>
+<glyph unicode="&#xE048;" horiz-adv-x="479" d="M70,140l188,272C276,441 294,472 310,501l4,0C312,472 310,424 310,394l0,-254 z M448,140l-95,0l0,431l-40,0l-297,-443l0,-27l294,0l0,-172l43,0l0,172l95,0z"/>
+<glyph unicode="&#xE049;" horiz-adv-x="479" d="M26,4C67,-38 125,-83 227,-83C330,-83 431,-6 431,131C431,271 344,333 236,333C189,333 155,319 122,300l20,231l255,0l0,40l-295,0l-23,-300l31,-19C148,277 180,294 229,294C324,294 385,232 385,129C385,26 311,-44 226,-44C139,-44 89,-5 51,34z"/>
+<glyph unicode="&#xE04A;" horiz-adv-x="479" d="M264,26C160,26 108,117 100,252C152,322 210,348 255,348C352,348 393,280 393,188C393,97 338,26 264,26 z M424,589C391,626 349,651 289,651C166,651 54,558 54,290C54,96 135,-12 263,-12C357,-12 438,72 438,188C438,317 372,386 260,386C201,386 143,352 99,298C101,532 188,612 289,612C330,612 369,594 397,559z"/>
+<glyph unicode="&#xE04B;" horiz-adv-x="479" d="M188,-71l48,0C246,179 284,341 437,544l0,27l-393,0l0,-40l337,0C252,351 198,187 188,-71z"/>
+<glyph unicode="&#xE04C;" horiz-adv-x="479" d="M84,166C84,236 132,289 197,327C296,288 392,254 392,156C392,83 333,25 243,25C151,25 84,87 84,166 z M290,335C206,368 120,404 120,495C120,564 172,614 243,614C326,614 374,554 374,483C374,428 344,379 290,335 z M40,164C40,63 126,-12 243,-12C359,-12 437,62 437,155C437,241 380,284 325,318l0,4C362,352 416,414 416,484C416,580 352,651 243,651C150,651 76,587 76,495C76,427 121,379 168,348l0,-4C108,312 40,250 40,164z"/>
+<glyph unicode="&#xE04D;" horiz-adv-x="479" d="M219,206C116,206 77,278 77,374C77,470 136,545 216,545C324,545 376,449 382,304C329,233 270,206 219,206 z M57,-24C93,-60 136,-83 197,-83C321,-83 427,15 427,280C427,471 348,583 217,583C118,583 33,495 33,374C33,243 96,169 214,169C279,169 338,203 382,257C376,34 293,-44 197,-44C152,-44 113,-27 81,8z"/>
+<glyph unicode="&#xE04E;" horiz-adv-x="502" d="M247,-12C366,-12 438,85 438,286C438,486 366,583 247,583C129,583 56,486 56,286C56,85 129,-12 247,-12 z M247,26C158,26 101,120 101,286C101,451 158,545 247,545C337,545 393,451 393,286C393,120 337,26 247,26z"/>
+<glyph unicode="&#xE04F;" horiz-adv-x="345" d="M172,0l44,0l0,571l-36,0C150,554 110,539 57,531l0,-31l115,0z"/>
+<glyph unicode="&#xE050;" horiz-adv-x="485" d="M49,0l382,0l0,40l-202,0C194,40 157,37 122,35C286,188 400,287 400,403C400,510 337,581 224,581C146,581 94,540 46,486l29,-27C114,507 162,543 220,543C316,543 355,480 355,402C355,302 257,205 49,28z"/>
+<glyph unicode="&#xE051;" horiz-adv-x="479" d="M29,7C70,-36 130,-83 232,-83C342,-83 427,-13 427,98C427,189 361,249 282,265l0,4C352,293 404,344 404,428C404,526 328,583 229,583C155,583 100,548 56,505l26,-31C119,514 170,544 229,544C307,544 358,497 358,425C358,348 306,285 158,285l0,-39C317,246 381,185 381,98C381,13 318,-44 232,-44C144,-44 93,-4 55,38z"/>
+<glyph unicode="&#xE052;" horiz-adv-x="502" d="M78,140l188,272C284,441 302,472 318,501l4,0C320,472 318,424 318,394l0,-254 z M456,140l-95,0l0,431l-40,0l-297,-443l0,-27l294,0l0,-172l43,0l0,172l95,0z"/>
+<glyph unicode="&#xE053;" horiz-adv-x="479" d="M26,4C67,-38 125,-83 227,-83C330,-83 431,-6 431,131C431,271 344,333 236,333C189,333 155,319 122,300l20,231l255,0l0,40l-295,0l-23,-300l31,-19C148,277 180,294 229,294C324,294 385,232 385,129C385,26 311,-44 226,-44C139,-44 89,-5 51,34z"/>
+<glyph unicode="&#xE054;" horiz-adv-x="502" d="M272,26C168,26 116,117 108,252C160,322 218,348 263,348C360,348 401,280 401,188C401,97 346,26 272,26 z M432,589C399,626 357,651 297,651C174,651 62,558 62,290C62,96 143,-12 271,-12C365,-12 446,72 446,188C446,317 380,386 268,386C209,386 151,352 107,298C109,532 196,612 297,612C338,612 377,594 405,559z"/>
+<glyph unicode="&#xE055;" horiz-adv-x="474" d="M177,-71l48,0C235,180 272,341 423,544l0,27l-379,0l0,-40l323,0C240,351 188,187 177,-71z"/>
+<glyph unicode="&#xE056;" horiz-adv-x="502" d="M92,166C92,236 140,289 205,327C304,288 400,254 400,156C400,83 341,25 251,25C159,25 92,87 92,166 z M298,335C214,368 128,404 128,495C128,564 180,614 251,614C334,614 382,554 382,483C382,428 352,379 298,335 z M48,164C48,63 134,-12 251,-12C367,-12 445,62 445,155C445,241 388,284 333,318l0,4C370,352 424,414 424,484C424,580 360,651 251,651C158,651 84,587 84,495C84,427 129,379 176,348l0,-4C116,312 48,250 48,164z"/>
+<glyph unicode="&#xE057;" horiz-adv-x="502" d="M227,206C124,206 85,278 85,374C85,470 144,545 224,545C332,545 384,449 390,304C337,233 278,206 227,206 z M65,-24C101,-60 144,-83 205,-83C329,-83 435,15 435,280C435,471 356,583 225,583C126,583 41,495 41,374C41,243 104,169 222,169C287,169 346,203 390,257C384,34 301,-44 205,-44C160,-44 121,-27 89,8z"/>
+<glyph unicode="." horiz-adv-x="219" d="M67,33C67,5 88,-12 110,-12C132,-12 152,5 152,33C152,62 132,79 110,79C88,79 67,62 67,33z"/>
+<glyph unicode="," horiz-adv-x="219" d="M62,-155C122,-123 165,-65 165,8C165,52 144,79 114,79C92,79 71,64 71,37C71,10 90,-5 113,-5C117,-5 121,-5 125,-4C124,-59 93,-101 48,-125z"/>
+<glyph unicode=":" horiz-adv-x="219" d="M67,415C67,387 88,370 110,370C132,370 152,387 152,415C152,444 132,461 110,461C88,461 67,444 67,415 z M67,33C67,5 88,-12 110,-12C132,-12 152,5 152,33C152,62 132,79 110,79C88,79 67,62 67,33z"/>
+<glyph unicode=";" horiz-adv-x="219" d="M110,370C132,370 152,387 152,415C152,444 132,461 110,461C88,461 67,444 67,415C67,387 88,370 110,370 z M62,-155C122,-123 165,-65 165,8C165,52 144,79 114,79C92,79 71,64 71,37C71,10 90,-5 113,-5C117,-5 121,-5 125,-4C124,-59 93,-101 48,-125z"/>
+<glyph unicode="&#x2026;" horiz-adv-x="931" d="M104,33C104,5 125,-12 147,-12C169,-12 189,5 189,33C189,62 169,79 147,79C125,79 104,62 104,33 z M441,33C441,5 462,-12 484,-12C506,-12 526,5 526,33C526,62 506,79 484,79C462,79 441,62 441,33 z M779,33C779,5 799,-12 821,-12C843,-12 863,5 863,33C863,62 843,79 821,79C799,79 779,62 779,33z"/>
+<glyph unicode="!" horiz-adv-x="259" d="M113,179l33,0l6,420l1,71l-46,0l0,-71 z M87,33C87,5 108,-12 130,-12C152,-12 172,5 172,33C172,62 152,79 130,79C108,79 87,62 87,33z"/>
+<glyph unicode="&#xA1;" horiz-adv-x="259" d="M146,301l-33,0l-6,-420l0,-71l46,0l-1,71 z M172,448C172,475 152,492 130,492C108,492 87,475 87,448C87,418 108,401 130,401C152,401 172,418 172,448z"/>
+<glyph unicode="?" horiz-adv-x="402" d="M163,179l40,0C184,332 352,393 352,529C352,616 294,682 196,682C127,682 76,648 37,604l27,-25C97,620 144,643 193,643C271,643 306,588 306,526C306,403 141,345 163,179 z M144,33C144,5 164,-12 186,-12C208,-12 229,5 229,33C229,62 208,79 186,79C164,79 144,62 144,33z"/>
+<glyph unicode="&#xBF;" horiz-adv-x="402" d="M240,301l-41,0C218,149 51,87 51,-49C51,-136 109,-202 207,-202C275,-202 327,-167 366,-124l-28,25C305,-139 258,-163 210,-163C131,-163 96,-107 96,-46C96,77 261,135 240,301 z M258,448C258,475 238,492 216,492C194,492 174,475 174,448C174,418 194,401 216,401C238,401 258,418 258,448z"/>
+<glyph unicode="'" horiz-adv-x="219" d="M92,477l33,0l9,147l0,69l-51,0l1,-69z"/>
+<glyph unicode="&quot;" horiz-adv-x="360" d="M92,477l33,0l9,147l0,69l-51,0l1,-69 z M234,477l32,0l9,147l1,69l-52,0l1,-69z"/>
+<glyph unicode="&#x2018;" horiz-adv-x="219" d="M143,703C90,668 58,618 58,547C58,504 76,480 102,480C125,480 142,495 142,520C142,545 122,557 102,557C99,557 96,557 94,556C94,613 117,644 161,680z"/>
+<glyph unicode="&#x2019;" horiz-adv-x="219" d="M76,477C130,512 162,562 162,633C162,676 144,700 117,700C94,700 78,685 78,660C78,635 98,623 117,623C120,623 123,623 125,624C125,567 102,536 58,500z"/>
+<glyph unicode="&#x201C;" horiz-adv-x="360" d="M143,703C90,668 58,618 58,547C58,504 76,480 102,480C125,480 142,495 142,520C142,545 122,557 102,557C99,557 96,557 94,556C94,613 117,644 161,680 z M285,703C231,668 199,618 199,547C199,504 217,480 244,480C267,480 283,495 283,520C283,545 263,557 244,557C241,557 238,557 235,556C235,612 258,644 303,680z"/>
+<glyph unicode="&#x201D;" horiz-adv-x="360" d="M76,477C130,512 162,562 162,633C162,676 144,700 117,700C94,700 78,685 78,660C78,635 98,623 117,623C120,623 123,623 125,624C125,567 102,536 58,500 z M217,477C271,512 303,562 303,633C303,676 285,700 258,700C235,700 219,685 219,660C219,635 239,623 258,623C261,623 264,623 266,624C266,567 243,536 199,500z"/>
+<glyph unicode="&#x201A;" horiz-adv-x="219" d="M76,-131C130,-96 162,-46 162,25C162,68 144,92 117,92C94,92 78,77 78,52C78,27 98,15 117,15C120,15 123,15 125,16C125,-41 102,-72 58,-108z"/>
+<glyph unicode="&#x201E;" horiz-adv-x="360" d="M76,-131C130,-96 162,-46 162,25C162,68 144,92 117,92C94,92 78,77 78,52C78,27 98,15 117,15C120,15 123,15 125,16C125,-41 102,-72 58,-108 z M217,-131C271,-96 303,-46 303,25C303,68 285,92 258,92C235,92 219,77 219,52C219,27 239,15 258,15C261,15 264,15 266,16C266,-41 243,-72 199,-108z"/>
+<glyph unicode="&#x2039;" horiz-adv-x="259" d="M180,72l25,19l-123,161l123,159l-25,21l-137,-161l0,-38z"/>
+<glyph unicode="&#x203A;" horiz-adv-x="259" d="M54,91l24,-19l138,161l0,38l-138,161l-24,-21l122,-159z"/>
+<glyph unicode="&#xAB;" horiz-adv-x="399" d="M180,72l25,19l-123,161l123,159l-25,21l-137,-161l0,-38 z M321,72l24,19l-122,161l122,159l-24,21l-138,-161l0,-38z"/>
+<glyph unicode="&#xBB;" horiz-adv-x="399" d="M54,91l24,-19l138,161l0,38l-138,161l-24,-21l122,-159 z M195,91l24,-19l137,161l0,38l-137,161l-24,-21l122,-159z"/>
+<glyph unicode="-" horiz-adv-x="299" d="M40,230l220,0l0,39l-220,0z"/>
+<glyph unicode="&#xAD;" horiz-adv-x="299" d="M40,230l220,0l0,39l-220,0z"/>
+<glyph unicode="&#x2013;" horiz-adv-x="480" d="M40,232l400,0l0,36l-400,0z"/>
+<glyph unicode="&#x2014;" horiz-adv-x="800" d="M40,232l720,0l0,36l-720,0z"/>
+<glyph unicode="&#x2012;" horiz-adv-x="479" d="M40,232l400,0l0,36l-400,0z"/>
+<glyph unicode="&#x2015;" horiz-adv-x="800" d="M40,232l720,0l0,36l-720,0z"/>
+<glyph unicode="&#xB7;" horiz-adv-x="219" d="M67,322C67,294 88,277 110,277C132,277 152,294 152,322C152,351 132,368 110,368C88,368 67,351 67,322z"/>
+<glyph unicode="&#x2022;" horiz-adv-x="281" d="M140,154C192,154 241,196 241,264C241,331 192,374 140,374C89,374 40,331 40,264C40,196 89,154 140,154z"/>
+<glyph unicode="_" horiz-adv-x="500" d="M12,-79l0,-38l476,0l0,38z"/>
+<glyph unicode="(" horiz-adv-x="279" d="M220,-175l27,16C168,-33 127,120 127,278C127,436 168,589 247,715l-27,16C138,598 88,454 88,278C88,102 138,-42 220,-175z"/>
+<glyph unicode=")" horiz-adv-x="279" d="M32,-159l27,-16C141,-42 191,102 191,278C191,454 141,598 59,731l-27,-16C111,589 152,436 152,278C152,120 111,-33 32,-159z"/>
+<glyph unicode="[" horiz-adv-x="279" d="M98,-152l160,0l0,29l-125,0l0,802l125,0l0,29l-160,0z"/>
+<glyph unicode="]" horiz-adv-x="279" d="M21,-123l0,-29l160,0l0,860l-160,0l0,-29l125,0l0,-802z"/>
+<glyph unicode="{" horiz-adv-x="279" d="M227,-123C166,-123 150,-90 150,-20C150,45 156,100 156,172C156,229 145,264 105,276l0,4C145,292 156,325 156,384C156,456 150,511 150,576C150,646 166,679 227,679l31,0l0,29l-34,0C150,708 113,681 113,580C113,506 121,444 121,373C121,334 105,294 35,294l0,-32C105,262 121,222 121,181C121,112 113,50 113,-24C113,-125 150,-152 224,-152l34,0l0,29z"/>
+<glyph unicode="}" horiz-adv-x="279" d="M21,-123l0,-29l34,0C129,-152 166,-125 166,-24C166,50 158,112 158,181C158,222 174,262 244,262l0,32C174,294 158,334 158,373C158,444 166,506 166,580C166,681 129,708 55,708l-34,0l0,-29l31,0C113,679 129,646 129,576C129,511 123,456 123,384C123,325 135,292 174,280l0,-4C135,264 123,229 123,172C123,100 129,45 129,-20C129,-90 113,-123 52,-123z"/>
+<glyph unicode="/" horiz-adv-x="357" d="M9,-160l38,0l305,870l-38,0z"/>
+<glyph unicode="|" horiz-adv-x="226" d="M95,-250l36,0l0,1000l-36,0z"/>
+<glyph unicode="\" horiz-adv-x="357" d="M311,-160l38,0l-306,870l-38,0z"/>
+<glyph unicode="&#xA6;" horiz-adv-x="226" d="M95,279l36,0l0,471l-36,0 z M95,220l0,-470l36,0l0,470z"/>
+<glyph unicode="*" horiz-adv-x="395" d="M132,462l66,83l64,-83l27,20l-54,88l90,36l-10,30l-95,-25l-7,101l-32,0l-7,-102l-95,26l-9,-30l90,-36l-55,-88z"/>
+<glyph unicode="&#x2020;" horiz-adv-x="420" d="M189,-80l42,0l-2,602l132,-2l0,42l-132,-3l2,153l-42,0l3,-153l-132,3l0,-42l132,2z"/>
+<glyph unicode="&#x2021;" horiz-adv-x="420" d="M60,70l132,3l-3,-153l42,0l-2,153l132,-3l0,42l-132,-3l2,207l-2,207l132,-3l0,42l-132,-3l2,153l-42,0l3,-153l-132,3l0,-42l132,3l-3,-207l3,-207l-132,3z"/>
+<glyph unicode="&#xA7;" horiz-adv-x="479" d="M312,181C228,236 92,250 92,355C92,406 123,433 168,459C251,405 387,389 387,281C387,227 360,203 312,181 z M381,628C344,658 296,681 241,681C149,681 106,621 106,564C106,529 119,503 139,483C89,456 50,416 50,352C50,170 333,206 333,70C333,24 294,-15 233,-15C172,-15 136,7 102,39l-30,-28C111,-26 164,-52 233,-52C310,-52 376,0 376,72C376,108 363,135 342,156C393,184 429,218 429,284C429,469 148,436 148,567C148,605 175,643 242,643C292,643 325,623 357,597z"/>
+<glyph unicode="&#xB6;" horiz-adv-x="515" d="M373,-80l46,0l0,739l-46,0 z M291,244l28,0l0,415l-44,0C138,659 42,601 42,451C42,302 144,244 291,244z"/>
+<glyph unicode="&#xA9;" horiz-adv-x="741" d="M51,322C51,120 198,-12 371,-12C543,-12 690,120 690,322C690,523 543,652 371,652C198,652 51,523 51,322 z M86,322C86,502 217,622 371,622C524,622 655,502 655,322C655,141 524,19 371,19C217,19 86,141 86,322 z M201,322C201,197 281,124 376,124C440,124 477,151 513,183l-20,28C462,183 426,161 378,161C297,161 244,223 244,322C244,412 301,472 380,472C420,472 447,457 478,428l23,26C469,486 434,509 381,509C286,509 201,438 201,322z"/>
+<glyph unicode="&#x2117;" horiz-adv-x="739" d="M261,136l41,0l0,129l93,0C471,265 530,307 530,388C530,461 471,497 395,497l-134,0 z M302,299l0,164l81,0C447,463 487,440 487,388C487,326 447,299 383,299 z M51,322C51,120 198,-12 371,-12C543,-12 690,120 690,322C690,523 543,652 371,652C198,652 51,523 51,322 z M86,322C86,502 217,622 371,622C524,622 655,502 655,322C655,141 524,19 371,19C217,19 86,141 86,322z"/>
+<glyph unicode="&#xAE;" horiz-adv-x="401" d="M200,324C300,324 382,401 382,517C382,634 300,712 200,712C101,712 18,634 18,517C18,401 101,324 200,324 z M200,353C116,353 49,422 49,517C49,613 116,684 200,684C284,684 351,613 351,517C351,422 284,353 200,353 z M132,418l32,0l0,76l47,0l39,-76l37,0l-49,86C261,511 278,535 278,560C278,610 240,624 201,624l-69,0 z M164,521l0,75l32,0C232,596 244,581 244,558C244,532 223,521 193,521z"/>
+<glyph unicode="&#x2122;" horiz-adv-x="610" d="M307,369l38,0l0,161l-5,98l4,0l82,-211l34,0l82,211l4,0l-5,-98l0,-161l38,0l0,307l-52,0l-50,-125l-31,-86l-4,0l-31,86l-52,125l-52,0 z M109,369l38,0l0,272l108,0l0,35l-253,0l0,-35l107,0z"/>
+<glyph unicode="&#x2120;" horiz-adv-x="610" d="M140,357C202,357 239,397 239,440C239,485 217,507 179,525l-49,25C102,563 85,578 85,601C85,627 105,649 143,649C167,649 191,635 211,618l21,26C211,665 178,681 145,681C89,681 48,651 48,600C48,555 79,533 107,519l49,-26C188,476 202,470 202,439C202,409 180,389 143,389C106,389 81,403 56,428l-24,-25C58,375 96,357 140,357 z M307,369l38,0l0,161l-5,98l4,0l82,-211l34,0l82,211l4,0l-5,-98l0,-161l38,0l0,307l-52,0l-50,-125l-31,-86l-4,0l-31,86l-52,125l-52,0z"/>
+<glyph unicode="@" horiz-adv-x="814" d="M52,202C52,-18 195,-146 388,-146C456,-146 518,-128 575,-92l-16,30C511,-91 457,-110 391,-110C212,-110 90,10 90,205C90,443 263,598 446,598C619,598 725,485 725,313C725,172 646,91 582,91C521,91 499,135 522,226l36,189l-34,0l-9,-40l-2,0C493,407 466,423 430,423C312,423 244,295 244,198C244,108 296,62 358,62C404,62 445,93 480,132l2,0C487,80 526,56 579,56C662,56 763,146 763,316C763,506 642,633 449,633C238,633 52,463 52,202 z M284,201C284,285 339,387 429,387C459,387 479,375 503,338l-31,-173C432,119 396,98 364,98C319,98 284,125 284,201z"/>
+<glyph unicode="&#xE058;" horiz-adv-x="754" d="M52,289C52,90 184,-18 359,-18C414,-18 466,-5 512,25l-17,28C458,28 411,17 362,17C203,17 90,109 90,291C90,506 246,646 416,646C571,646 665,551 665,394C665,261 597,189 540,189C486,189 472,228 493,324l37,169l-36,0l-10,-40l-2,0C464,485 436,501 404,501C286,501 224,379 224,286C224,208 273,160 329,160C378,160 416,192 449,230l2,0C454,182 486,154 535,154C617,154 703,240 703,396C703,571 589,681 423,681C225,681 52,524 52,289 z M336,196C297,196 263,226 263,292C263,370 316,466 401,466C432,466 449,454 473,417l-31,-154C402,217 367,196 336,196z"/>
+<glyph unicode="#" horiz-adv-x="479" d="M93,0l35,0l26,214l149,0l-25,-214l35,0l25,214l91,0l0,36l-86,0l21,170l85,0l0,36l-82,0l25,194l-34,0l-26,-194l-149,0l25,194l-35,0l-25,-194l-92,0l0,-36l88,0l-21,-170l-87,0l0,-36l83,0 z M158,250l21,170l150,0l-21,-170z"/>
+<glyph unicode="&#xE059;" horiz-adv-x="362" d="M181,428C268,428 322,502 322,636C322,768 268,842 181,842C94,842 40,768 40,636C40,502 94,428 181,428 z M181,461C119,461 79,525 79,636C79,747 119,809 181,809C243,809 283,747 283,636C283,525 243,461 181,461z"/>
+<glyph unicode="&#xE05A;" horiz-adv-x="362" d="M176,440l38,0l0,390l-33,0C158,811 132,799 94,791l0,-27l82,0z"/>
+<glyph unicode="&#xE05B;" horiz-adv-x="362" d="M56,440l255,0l0,34l-192,0C219,573 288,637 288,719C288,801 239,842 167,842C118,842 71,809 47,769l25,-23C94,780 127,808 163,808C215,808 249,772 249,715C249,649 190,589 56,465z"/>
+<glyph unicode="&#xE05C;" horiz-adv-x="362" d="M40,503C67,463 116,428 177,428C250,428 308,471 308,543C308,598 264,631 217,640C260,657 292,690 292,739C292,804 239,842 174,842C124,842 84,815 56,779l25,-22C106,788 139,809 170,809C221,809 253,779 253,736C253,691 209,652 131,652l0,-28C216,624 269,595 269,544C269,491 227,461 178,461C133,461 93,487 69,525z"/>
+<glyph unicode="&#xE05D;" horiz-adv-x="362" d="M94,586l73,108l56,83l4,0l-4,-104l0,-87 z M317,586l-58,0l0,244l-36,0l-177,-255l0,-21l177,0l0,-114l36,0l0,114l58,0z"/>
+<glyph unicode="&#xE05E;" horiz-adv-x="362" d="M40,503C69,463 113,428 181,428C255,428 313,481 313,562C313,649 257,695 186,695C156,695 133,686 113,675l13,119l166,0l0,36l-199,0l-20,-185l24,-16C118,646 143,665 179,665C236,665 274,625 274,563C274,503 234,461 181,461C130,461 95,487 69,525z"/>
+<glyph unicode="&#xE05F;" horiz-adv-x="362" d="M194,461C134,461 94,511 89,599C125,639 155,651 190,651C249,651 279,610 279,557C279,503 245,461 194,461 z M297,818C275,832 251,842 213,842C128,842 50,781 50,620C50,498 108,428 193,428C264,428 317,484 317,557C317,630 275,683 195,683C155,683 120,667 88,638C94,760 154,809 212,809C240,809 261,799 280,787z"/>
+<glyph unicode="&#xE060;" horiz-adv-x="362" d="M139,440l40,0C187,579 212,681 311,807l0,23l-261,0l0,-34l216,0C181,684 149,583 139,440z"/>
+<glyph unicode="&#xE061;" horiz-adv-x="362" d="M87,539C87,577 109,610 152,634C213,611 272,597 272,539C272,496 230,460 179,460C123,460 87,499 87,539 z M206,653C149,671 104,695 104,741C104,780 138,808 179,808C222,808 258,782 258,742C258,710 241,680 206,653 z M49,536C49,478 100,428 179,428C253,428 310,476 310,540C310,586 283,615 236,639l0,4C259,661 296,691 296,741C296,802 245,842 179,842C116,842 66,800 66,741C66,699 90,675 124,653l0,-4C85,627 49,587 49,536z"/>
+<glyph unicode="&#xE062;" horiz-adv-x="362" d="M168,619C110,619 79,660 79,713C79,767 114,809 164,809C226,809 264,759 269,670C233,631 204,619 168,619 z M61,452C84,438 107,428 146,428C230,428 308,489 308,650C308,772 250,842 165,842C94,842 41,786 41,713C41,640 84,587 163,587C203,587 239,603 270,632C264,510 204,461 147,461C119,461 97,471 79,483z"/>
+<glyph unicode="&#xE063;" horiz-adv-x="219" d="M152,368l26,16C123,462 104,546 104,634C104,722 123,806 178,883l-26,16C96,822 66,742 66,634C66,525 96,445 152,368z"/>
+<glyph unicode="&#xE064;" horiz-adv-x="219" d="M41,384l27,-16C123,445 153,525 153,634C153,742 123,822 68,899l-27,-16C96,806 114,722 114,634C114,546 96,462 41,384z"/>
+<glyph unicode="&#xE065;" horiz-adv-x="159" d="M44,470C44,446 59,432 79,432C100,432 115,446 115,470C115,493 100,507 79,507C59,507 44,493 44,470z"/>
+<glyph unicode="&#xE066;" horiz-adv-x="159" d="M47,333C93,353 125,399 125,448C125,487 108,507 81,507C63,507 45,494 45,470C45,448 63,438 81,438C84,438 87,438 90,439C90,401 67,373 34,359z"/>
+<glyph unicode="&#xE067;" horiz-adv-x="362" d="M181,-192C268,-192 322,-118 322,16C322,148 268,222 181,222C94,222 40,148 40,16C40,-118 94,-192 181,-192 z M181,-159C119,-159 79,-96 79,16C79,127 119,189 181,189C243,189 283,127 283,16C283,-96 243,-159 181,-159z"/>
+<glyph unicode="&#xE068;" horiz-adv-x="362" d="M176,-180l38,0l0,390l-33,0C158,191 132,179 94,171l0,-27l82,0z"/>
+<glyph unicode="&#xE069;" horiz-adv-x="362" d="M56,-180l255,0l0,34l-192,0C219,-48 288,17 288,99C288,181 239,222 167,222C118,222 71,189 47,149l25,-23C94,160 127,188 163,188C215,188 249,152 249,95C249,29 190,-31 56,-156z"/>
+<glyph unicode="&#xE06A;" horiz-adv-x="362" d="M40,-118C67,-157 116,-192 177,-192C250,-192 308,-149 308,-77C308,-23 264,11 217,20C260,37 292,70 292,119C292,183 239,222 174,222C124,222 84,195 56,159l25,-22C106,168 139,189 170,189C221,189 253,159 253,115C253,71 209,32 131,32l0,-28C216,4 269,-25 269,-76C269,-129 227,-159 178,-159C133,-159 93,-133 69,-96z"/>
+<glyph unicode="&#xE06B;" horiz-adv-x="362" d="M94,-35l73,109l56,83l4,0l-4,-104l0,-88 z M317,-35l-58,0l0,245l-36,0l-177,-255l0,-21l177,0l0,-114l36,0l0,114l58,0z"/>
+<glyph unicode="&#xE06C;" horiz-adv-x="362" d="M40,-118C69,-157 113,-192 181,-192C255,-192 313,-140 313,-58C313,29 257,75 186,75C156,75 133,66 113,55l13,119l166,0l0,36l-199,0l-20,-185l24,-17C118,26 143,45 179,45C236,45 274,5 274,-57C274,-118 234,-159 181,-159C130,-159 95,-133 69,-96z"/>
+<glyph unicode="&#xE06D;" horiz-adv-x="362" d="M194,-159C133,-159 94,-109 89,-21C125,18 155,31 190,31C249,31 279,-10 279,-63C279,-117 245,-159 194,-159 z M297,197C275,212 251,222 213,222C128,222 50,160 50,0C50,-123 108,-192 193,-192C264,-192 317,-136 317,-63C317,9 275,63 195,63C155,63 120,47 88,18C94,140 154,189 212,189C240,189 261,179 280,166z"/>
+<glyph unicode="&#xE06E;" horiz-adv-x="362" d="M139,-180l40,0C187,-41 212,61 311,187l0,23l-261,0l0,-34l216,0C181,63 149,-37 139,-180z"/>
+<glyph unicode="&#xE06F;" horiz-adv-x="362" d="M87,-81C87,-43 109,-11 152,14C213,-9 272,-23 272,-81C272,-125 230,-161 179,-161C123,-161 87,-121 87,-81 z M206,33C149,51 104,75 104,121C104,160 138,188 179,188C222,188 258,162 258,122C258,90 241,60 206,33 z M49,-84C49,-142 100,-192 179,-192C253,-192 310,-144 310,-80C310,-34 283,-5 236,19l0,4C259,41 296,71 296,121C296,182 245,222 179,222C116,222 66,180 66,121C66,79 90,55 124,33l0,-4C85,7 49,-33 49,-84z"/>
+<glyph unicode="&#xE070;" horiz-adv-x="362" d="M168,-1C110,-1 79,40 79,93C79,147 114,189 164,189C226,189 265,138 270,49C233,11 204,-1 168,-1 z M61,-168C84,-183 107,-192 146,-192C230,-192 308,-131 308,30C308,152 250,222 165,222C94,222 41,165 41,93C41,20 84,-33 163,-33C203,-33 239,-17 270,12C264,-110 204,-159 147,-159C119,-159 97,-149 79,-137z"/>
+<glyph unicode="&#xE071;" horiz-adv-x="219" d="M152,-253l26,17C123,-158 104,-74 104,14C104,102 123,186 178,263l-26,16C96,201 66,122 66,14C66,-95 96,-175 152,-253z"/>
+<glyph unicode="&#xE072;" horiz-adv-x="219" d="M41,-236l27,-17C123,-175 153,-95 153,14C153,122 123,201 68,279l-27,-16C96,186 114,102 114,14C114,-74 96,-158 41,-236z"/>
+<glyph unicode="&#xE073;" horiz-adv-x="159" d="M44,-151C44,-174 59,-188 79,-188C100,-188 115,-174 115,-151C115,-127 100,-113 79,-113C59,-113 44,-127 44,-151z"/>
+<glyph unicode="&#xE074;" horiz-adv-x="159" d="M47,-287C93,-267 125,-222 125,-172C125,-133 108,-113 81,-113C63,-113 45,-126 45,-150C45,-172 63,-182 81,-182C84,-182 87,-182 90,-181C90,-219 67,-247 34,-261z"/>
+<glyph unicode="&#xE075;" horiz-adv-x="362" d="M181,-12C268,-12 322,62 322,196C322,328 268,402 181,402C94,402 40,328 40,196C40,62 94,-12 181,-12 z M181,21C119,21 79,85 79,196C79,307 119,369 181,369C243,369 283,307 283,196C283,85 243,21 181,21z"/>
+<glyph unicode="&#xE076;" horiz-adv-x="362" d="M176,0l38,0l0,390l-33,0C158,371 132,359 94,351l0,-27l82,0z"/>
+<glyph unicode="&#xE077;" horiz-adv-x="362" d="M56,0l255,0l0,34l-192,0C219,133 288,197 288,279C288,361 239,402 167,402C118,402 71,369 47,329l25,-23C94,340 127,368 163,368C215,368 249,332 249,275C249,209 190,149 56,25z"/>
+<glyph unicode="&#xE078;" horiz-adv-x="362" d="M40,63C67,23 116,-12 177,-12C250,-12 308,31 308,103C308,158 264,191 217,200C260,217 292,250 292,299C292,364 239,402 174,402C124,402 84,375 56,339l25,-22C106,348 139,369 170,369C221,369 253,339 253,296C253,251 209,212 131,212l0,-28C216,184 269,155 269,104C269,51 227,21 178,21C133,21 93,47 69,85z"/>
+<glyph unicode="&#xE079;" horiz-adv-x="362" d="M94,146l73,108l56,83l4,0l-4,-104l0,-87 z M317,146l-58,0l0,244l-36,0l-177,-255l0,-21l177,0l0,-114l36,0l0,114l58,0z"/>
+<glyph unicode="&#xE07A;" horiz-adv-x="362" d="M40,63C69,23 113,-12 181,-12C255,-12 313,41 313,122C313,209 257,255 186,255C156,255 133,246 113,235l13,119l166,0l0,36l-199,0l-20,-185l24,-16C118,206 143,225 179,225C236,225 274,185 274,123C274,63 234,21 181,21C130,21 95,47 69,85z"/>
+<glyph unicode="&#xE07B;" horiz-adv-x="362" d="M194,21C134,21 94,71 89,159C125,199 155,211 190,211C249,211 279,170 279,117C279,63 245,21 194,21 z M297,378C275,392 251,402 213,402C128,402 50,341 50,180C50,58 108,-12 193,-12C264,-12 317,44 317,117C317,190 275,243 195,243C155,243 120,227 88,198C94,320 154,369 212,369C240,369 261,359 280,347z"/>
+<glyph unicode="&#xE07C;" horiz-adv-x="362" d="M139,0l40,0C187,139 212,241 311,367l0,23l-261,0l0,-34l216,0C181,244 149,143 139,0z"/>
+<glyph unicode="&#xE07D;" horiz-adv-x="362" d="M87,99C87,137 109,170 152,194C213,171 272,157 272,99C272,56 230,20 179,20C123,20 87,59 87,99 z M206,213C149,231 104,255 104,301C104,340 138,368 179,368C222,368 258,342 258,302C258,270 241,240 206,213 z M49,96C49,38 100,-12 179,-12C253,-12 310,36 310,100C310,146 283,175 236,199l0,4C259,221 296,251 296,301C296,362 245,402 179,402C116,402 66,360 66,301C66,259 90,235 124,213l0,-4C85,187 49,147 49,96z"/>
+<glyph unicode="&#xE07E;" horiz-adv-x="362" d="M168,179C110,179 79,220 79,273C79,327 114,369 164,369C226,369 264,319 269,230C233,191 204,179 168,179 z M61,12C84,-2 107,-12 146,-12C230,-12 308,49 308,210C308,332 250,402 165,402C94,402 41,346 41,273C41,200 84,147 163,147C203,147 239,163 270,192C264,70 204,21 147,21C119,21 97,31 79,43z"/>
+<glyph unicode="&#xE07F;" horiz-adv-x="219" d="M152,-72l26,16C123,22 104,106 104,194C104,282 123,366 178,443l-26,16C96,382 66,302 66,194C66,85 96,5 152,-72z"/>
+<glyph unicode="&#xE080;" horiz-adv-x="219" d="M41,-56l27,-16C123,5 153,85 153,194C153,302 123,382 68,459l-27,-16C96,366 114,282 114,194C114,106 96,22 41,-56z"/>
+<glyph unicode="&#xE081;" horiz-adv-x="159" d="M44,30C44,6 59,-8 79,-8C100,-8 115,6 115,30C115,53 100,67 79,67C59,67 44,53 44,30z"/>
+<glyph unicode="&#xE082;" horiz-adv-x="159" d="M47,-107C93,-87 125,-41 125,8C125,47 108,67 81,67C63,67 45,54 45,30C45,8 63,-2 81,-2C84,-2 87,-2 90,-1C90,-39 67,-67 34,-81z"/>
+<glyph unicode="&#xE083;" horiz-adv-x="362" d="M181,257C268,257 322,331 322,465C322,597 268,671 181,671C94,671 40,597 40,465C40,331 94,257 181,257 z M181,290C119,290 79,354 79,465C79,576 119,638 181,638C243,638 283,576 283,465C283,354 243,290 181,290z"/>
+<glyph unicode="&#xE084;" horiz-adv-x="362" d="M176,269l38,0l0,390l-33,0C158,640 132,628 94,620l0,-27l82,0z"/>
+<glyph unicode="&#xE085;" horiz-adv-x="362" d="M56,269l255,0l0,34l-192,0C219,402 288,466 288,548C288,630 239,671 167,671C118,671 71,638 47,598l25,-23C94,609 127,637 163,637C215,637 249,601 249,544C249,478 190,418 56,294z"/>
+<glyph unicode="&#xE086;" horiz-adv-x="362" d="M40,332C67,292 116,257 177,257C250,257 308,300 308,372C308,427 264,460 217,469C260,486 292,519 292,568C292,633 239,671 174,671C124,671 84,644 56,608l25,-22C106,617 139,638 170,638C221,638 253,608 253,565C253,520 209,481 131,481l0,-28C216,453 269,424 269,373C269,320 227,290 178,290C133,290 93,316 69,354z"/>
+<glyph unicode="&#xE087;" horiz-adv-x="362" d="M94,415l73,108l56,83l4,0l-4,-104l0,-87 z M317,415l-58,0l0,244l-36,0l-177,-255l0,-21l177,0l0,-114l36,0l0,114l58,0z"/>
+<glyph unicode="&#xE088;" horiz-adv-x="362" d="M40,332C69,292 113,257 181,257C255,257 313,310 313,391C313,478 257,524 186,524C156,524 133,515 113,504l13,119l166,0l0,36l-199,0l-20,-185l24,-16C118,475 143,494 179,494C236,494 274,454 274,392C274,332 234,290 181,290C130,290 95,316 69,354z"/>
+<glyph unicode="&#xE089;" horiz-adv-x="362" d="M194,290C134,290 94,340 89,428C125,468 155,480 190,480C249,480 279,439 279,386C279,332 245,290 194,290 z M297,647C275,661 251,671 213,671C128,671 50,610 50,449C50,327 108,257 193,257C264,257 317,313 317,386C317,459 275,512 195,512C155,512 120,496 88,467C94,589 154,638 212,638C240,638 261,628 280,616z"/>
+<glyph unicode="&#xE08A;" horiz-adv-x="362" d="M139,269l40,0C187,408 212,510 311,636l0,23l-261,0l0,-34l216,0C181,513 149,412 139,269z"/>
+<glyph unicode="&#xE08B;" horiz-adv-x="362" d="M87,368C87,406 109,439 152,463C213,440 272,426 272,368C272,325 230,289 179,289C123,289 87,328 87,368 z M206,482C149,500 104,524 104,570C104,609 138,637 179,637C222,637 258,611 258,571C258,539 241,509 206,482 z M49,365C49,307 100,257 179,257C253,257 310,305 310,369C310,415 283,444 236,468l0,4C259,490 296,520 296,570C296,631 245,671 179,671C116,671 66,629 66,570C66,528 90,504 124,482l0,-4C85,456 49,416 49,365z"/>
+<glyph unicode="&#xE08C;" horiz-adv-x="362" d="M168,448C110,448 79,489 79,542C79,596 114,638 164,638C226,638 264,588 269,499C233,460 204,448 168,448 z M61,281C84,267 107,257 146,257C230,257 308,318 308,479C308,601 250,671 165,671C94,671 41,615 41,542C41,469 84,416 163,416C203,416 239,432 270,461C264,339 204,290 147,290C119,290 97,300 79,312z"/>
+<glyph unicode="&#xE08D;" horiz-adv-x="219" d="M152,197l26,16C123,291 104,375 104,463C104,551 123,635 178,712l-26,16C96,651 66,571 66,463C66,354 96,274 152,197z"/>
+<glyph unicode="&#xE08E;" horiz-adv-x="219" d="M41,213l27,-16C123,274 153,354 153,463C153,571 123,651 68,728l-27,-16C96,635 114,551 114,463C114,375 96,291 41,213z"/>
+<glyph unicode="&#xE08F;" horiz-adv-x="159" d="M44,299C44,275 59,261 79,261C100,261 115,275 115,299C115,322 100,336 79,336C59,336 44,322 44,299z"/>
+<glyph unicode="&#xE090;" horiz-adv-x="159" d="M47,162C93,182 125,228 125,277C125,316 108,336 81,336C63,336 45,323 45,299C45,277 63,267 81,267C84,267 87,267 90,268C90,230 67,202 34,188z"/>
+<glyph unicode="&#xAA;" horiz-adv-x="337" d="M139,261C182,261 217,284 245,308l4,0l6,-39l30,0l0,200C285,545 259,595 182,595C130,595 82,570 56,552l15,-27C94,541 138,562 178,562C233,562 247,521 248,470C105,457 42,422 42,352C42,295 82,261 139,261 z M148,293C107,293 81,312 81,355C81,400 124,431 248,444l0,-102C212,309 179,293 148,293z"/>
+<glyph unicode="&#xE091;" horiz-adv-x="367" d="M76,434C76,507 123,562 179,562C208,562 240,551 272,522l0,-179C238,312 210,296 180,296C108,296 76,348 76,434 z M37,432C37,323 89,261 174,261C214,261 242,282 269,306l4,0l5,-37l31,0l0,318l-29,0l-5,-31l-4,0C244,581 214,595 178,595C103,595 37,532 37,432z"/>
+<glyph unicode="&#xBA;" horiz-adv-x="360" d="M179,261C260,261 325,323 325,428C325,534 260,595 179,595C98,595 33,534 33,428C33,323 98,261 179,261 z M179,294C115,294 72,349 72,428C72,508 115,562 179,562C243,562 286,508 286,428C286,349 243,294 179,294z"/>
+<glyph unicode="&#xE092;" horiz-adv-x="337" d="M139,261C182,261 217,284 245,308l4,0l6,-39l30,0l0,200C285,545 259,595 182,595C130,595 82,570 56,552l15,-27C94,541 138,562 178,562C233,562 247,521 248,470C105,457 42,422 42,352C42,295 82,261 139,261 z M148,293C107,293 81,312 81,355C81,400 124,431 248,444l0,-102C212,309 179,293 148,293z"/>
+<glyph unicode="&#xE093;" horiz-adv-x="367" d="M58,269l29,0l4,31l4,0C125,275 160,261 190,261C266,261 330,325 330,434C330,532 287,595 200,595C159,595 126,572 93,544l2,63l0,135l-37,0 z M95,333l0,178C129,543 164,562 195,562C262,562 291,509 291,434C291,348 247,294 189,294C162,294 127,305 95,333z"/>
+<glyph unicode="&#xE094;" horiz-adv-x="302" d="M183,261C231,261 260,279 284,299l-17,26C246,307 221,294 184,294C118,294 72,349 72,428C72,506 120,562 183,562C218,562 236,552 259,533l19,26C257,577 228,595 183,595C104,595 33,534 33,428C33,321 96,261 183,261z"/>
+<glyph unicode="&#xE095;" horiz-adv-x="367" d="M174,261C214,261 242,282 269,306l4,0l6,-37l30,0l0,473l-37,0l0,-128l2,-57C243,581 214,595 178,595C103,595 37,532 37,434C37,323 89,261 174,261 z M180,294C108,294 76,348 76,434C76,507 123,562 179,562C208,562 240,551 272,522l0,-179C238,312 210,294 180,294z"/>
+<glyph unicode="&#xE096;" horiz-adv-x="330" d="M182,261C229,261 262,278 289,295l-16,27C251,306 220,293 185,293C115,293 70,345 69,421l230,0C301,437 301,441 301,452C301,505 277,595 175,595C96,595 31,530 31,428C31,320 98,261 182,261 z M69,451C77,519 117,562 175,562C243,562 266,502 266,451z"/>
+<glyph unicode="&#xE097;" horiz-adv-x="183" d="M201,740C183,748 170,750 151,750C96,750 67,709 67,646l0,-59l-46,-3l0,-28l46,0l0,-287l37,0l0,287l74,0l0,31l-74,0l0,63C104,689 120,718 153,718C170,718 182,714 192,710z"/>
+<glyph unicode="&#xE098;" horiz-adv-x="332" d="M69,211C69,232 82,253 108,270C122,266 140,266 149,266l64,0C259,266 285,254 285,222C285,185 239,149 171,149C106,149 69,172 69,211 z M34,206C34,151 84,119 165,119C262,119 322,170 322,226C322,279 288,301 214,301l-67,0C102,301 87,316 87,339C87,358 98,371 111,381C127,371 146,368 163,368C227,368 279,414 279,481C279,509 266,538 248,553l70,0l0,32l-105,0C198,591 184,595 163,595C98,595 46,549 46,482C46,444 66,413 87,396l0,-4C71,381 52,361 52,335C52,311 64,293 80,283l0,-4C50,259 34,234 34,206 z M163,398C116,398 82,432 82,482C82,533 116,563 163,563C206,563 244,532 244,482C244,432 206,398 163,398z"/>
+<glyph unicode="&#xE099;" horiz-adv-x="356" d="M58,269l37,0l0,236C134,544 166,561 195,561C255,561 268,524 268,466l0,-197l38,0l0,204C306,544 281,595 205,595C163,595 123,569 94,538l1,70l0,134l-37,0z"/>
+<glyph unicode="&#xE09A;" horiz-adv-x="153" d="M78,659C96,659 110,672 110,690C110,708 96,721 78,721C60,721 46,708 46,690C46,672 60,659 78,659 z M58,269l37,0l0,318l-37,0z"/>
+<glyph unicode="&#xE09B;" horiz-adv-x="157" d="M21,119C72,119 97,151 97,222l0,365l-37,0l0,-369C60,178 52,153 17,153C3,153 -3,155 -12,159l-10,-32C-6,121 3,119 21,119 z M80,659C98,659 112,672 112,690C112,708 98,721 80,721C62,721 48,708 48,690C48,672 62,659 80,659z"/>
+<glyph unicode="&#xE09C;" horiz-adv-x="317" d="M58,269l37,0l0,82l68,81l105,-163l44,0l-125,190l108,128l-45,0l-151,-181l-4,0l0,336l-37,0z"/>
+<glyph unicode="&#xE09D;" horiz-adv-x="162" d="M58,322C58,282 71,261 106,261C118,261 125,263 132,266l-7,30C119,294 115,294 111,294C101,294 95,300 95,317l0,425l-37,0z"/>
+<glyph unicode="&#xE09E;" horiz-adv-x="548" d="M58,269l37,0l0,236C133,544 159,561 187,561C242,561 257,524 257,466l0,-197l38,0l0,236C332,544 359,561 387,561C442,561 457,524 457,466l0,-197l37,0l0,204C494,544 467,595 397,595C355,595 317,565 286,532C273,575 242,595 197,595C155,595 123,571 96,539l-4,0l-5,48l-29,0z"/>
+<glyph unicode="&#xE09F;" horiz-adv-x="359" d="M58,269l37,0l0,236C134,544 166,561 197,561C255,561 268,524 268,466l0,-197l38,0l0,204C306,544 281,595 205,595C163,595 125,571 96,539l-4,0l-5,48l-29,0z"/>
+<glyph unicode="&#xE0A0;" horiz-adv-x="360" d="M179,261C260,261 325,323 325,428C325,534 260,595 179,595C98,595 33,534 33,428C33,323 98,261 179,261 z M179,294C115,294 72,349 72,428C72,508 115,562 179,562C243,562 286,508 286,428C286,349 243,294 179,294z"/>
+<glyph unicode="&#xE0A1;" horiz-adv-x="367" d="M58,130l37,0l0,110l-2,59C122,275 160,261 190,261C266,261 330,325 330,434C330,532 287,595 200,595C159,595 125,571 97,547l-4,0l-6,40l-29,0 z M95,333l0,178C129,543 164,562 195,562C262,562 291,509 291,434C291,348 247,294 189,294C162,294 127,305 95,333z"/>
+<glyph unicode="&#xE0A2;" horiz-adv-x="367" d="M272,130l37,0l0,457l-29,0l-5,-31l-4,0C245,581 214,595 178,595C103,595 37,532 37,428C37,323 89,261 175,261C213,261 247,279 274,304l-2,-61 z M180,294C108,294 76,348 76,428C76,507 123,562 179,562C208,562 240,550 272,522l0,-184C240,309 210,294 180,294z"/>
+<glyph unicode="&#xE0A3;" horiz-adv-x="221" d="M58,269l39,0l0,213C122,538 154,557 185,557C195,557 207,555 214,553l9,35C215,592 201,595 188,595C150,595 122,571 97,530l-3,0l-7,57l-29,0z"/>
+<glyph unicode="&#xE0A4;" horiz-adv-x="275" d="M21,305C52,281 95,261 144,261C207,261 252,300 252,355C252,415 199,430 150,449C111,465 75,476 75,512C75,537 96,563 139,563C174,563 192,552 216,535l22,26C213,580 180,595 139,595C73,595 37,552 37,510C37,454 90,433 137,415C175,401 214,386 214,351C214,319 188,293 144,293C102,293 71,310 42,332z"/>
+<glyph unicode="&#xE0A5;" horiz-adv-x="216" d="M68,363C68,303 88,261 153,261C169,261 193,267 210,273l-10,30C187,297 173,294 160,294C120,294 106,320 106,361l0,193l93,0l0,33l-93,0l0,93l-32,0l-5,-93l-51,-3l0,-30l50,0z"/>
+<glyph unicode="&#xE0A6;" horiz-adv-x="363" d="M158,261C200,261 238,285 267,316l4,0l5,-47l29,0l0,318l-37,0l0,-236C229,311 197,294 166,294C108,294 95,332 95,389l0,198l-38,0l0,-204C57,311 82,261 158,261z"/>
+<glyph unicode="&#xE0A7;" horiz-adv-x="301" d="M127,269l46,0l120,318l-38,0l-68,-191l-35,-93l-4,0l-33,93l-68,191l-39,0z"/>
+<glyph unicode="&#xE0A8;" horiz-adv-x="466" d="M109,269l47,0l53,186l23,92l2,0l25,-92l51,-186l48,0l92,318l-38,0l-51,-198l-25,-87l-4,0l-23,87l-56,198l-40,0l-54,-198l-23,-87l-4,0l-23,87l-52,198l-41,0z"/>
+<glyph unicode="&#xE0A9;" horiz-adv-x="283" d="M8,269l41,0l51,80l38,57l4,0l37,-57l51,-80l43,0l-107,163l100,155l-42,0l-46,-75l-31,-52l-4,0l-33,52l-49,75l-43,0l101,-151z"/>
+<glyph unicode="&#xE0AA;" horiz-adv-x="299" d="M27,169l-9,-34C29,131 41,129 54,129C115,129 149,182 169,239l122,348l-38,0l-62,-189C181,368 169,338 160,306l-4,0C144,338 131,371 121,398l-74,189l-39,0l132,-321l-8,-24C117,195 90,163 53,163C44,163 36,165 27,169z"/>
+<glyph unicode="&#xE0AB;" horiz-adv-x="277" d="M19,269l240,0l0,33l-191,0l185,262l0,23l-213,0l0,-33l164,0l-185,-264z"/>
+<glyph unicode="&#xE0AC;" horiz-adv-x="330" d="M183,647l34,0l-60,91l-44,0 z M182,270C229,270 262,287 289,304l-16,27C251,315 220,302 185,302C115,302 70,354 69,430l230,0C301,446 301,450 301,461C301,514 277,604 175,604C96,604 31,539 31,437C31,329 98,270 182,270 z M69,460C77,528 117,571 175,571C243,571 266,511 266,460z"/>
+<glyph unicode="&#xE0AD;" horiz-adv-x="330" d="M135,647l34,0l71,91l-44,0 z M182,270C229,270 262,287 289,304l-16,27C251,315 220,302 185,302C115,302 70,354 69,430l230,0C301,446 301,450 301,461C301,514 277,604 175,604C96,604 31,539 31,437C31,329 98,270 182,270 z M69,460C77,528 117,571 175,571C243,571 266,511 266,460z"/>
+<glyph unicode="&#xE0AE;" horiz-adv-x="330" d="M157,261C238,261 297,325 297,428C297,535 242,595 153,595C108,595 78,577 51,560l16,-27C91,549 117,562 153,562C224,562 260,510 259,440l-229,0C27,424 27,420 27,409C27,351 54,261 157,261 z M157,293C89,293 62,346 62,410l197,0C255,333 215,293 157,293z"/>
+<glyph unicode="&#xE0AF;" horiz-adv-x="367" d="M76,434C76,507 123,562 179,562C208,562 240,551 272,522l0,-179C238,312 210,296 180,296C108,296 76,348 76,434 z M37,432C37,323 89,261 174,261C214,261 242,282 269,306l4,0l5,-37l31,0l0,318l-29,0l-5,-31l-4,0C244,581 214,595 178,595C103,595 37,532 37,432z"/>
+<glyph unicode="&#xE0B0;" horiz-adv-x="367" d="M75,184l-16,-29C92,133 131,119 172,119C258,119 309,171 309,249l0,338l-29,0l-5,-31l-3,0C244,581 214,595 179,595C103,595 37,532 37,432C37,335 89,273 175,273C214,273 241,293 274,320l-2,-49l0,-19C272,192 236,153 173,153C139,153 105,163 75,184 z M180,307C109,307 76,360 76,434C76,507 123,561 180,561C208,561 240,550 272,522l0,-167C238,324 210,307 180,307z"/>
+<glyph unicode="&#xE0B1;" horiz-adv-x="153" d="M58,269l37,0l0,473l-37,0z"/>
+<glyph unicode="&#xB0;" horiz-adv-x="311" d="M156,447C215,447 270,491 270,565C270,640 215,684 156,684C97,684 42,640 42,565C42,491 97,447 156,447 z M156,479C109,479 76,516 76,565C76,616 109,653 156,653C203,653 236,616 236,565C236,516 203,479 156,479z"/>
+<glyph unicode="&#xA4;" horiz-adv-x="479" d="M57,114l66,68C155,153 196,137 239,137C282,137 324,153 355,182l67,-68l26,28l-65,67C406,241 420,282 420,328C420,376 406,418 382,450l66,68l-26,28l-67,-69C324,505 282,521 239,521C196,521 154,505 123,477l-66,69l-27,-28l66,-68C72,418 58,376 58,328C58,282 72,241 96,209l-66,-67 z M102,328C102,420 165,484 239,484C314,484 376,420 376,328C376,237 314,174 239,174C165,174 102,237 102,328z"/>
+<glyph unicode="$" horiz-adv-x="479" d="M402,580C368,616 330,646 265,650l0,99l-39,0l0,-99C144,641 85,579 85,495C85,292 374,347 374,150C374,77 328,27 244,27C175,27 121,63 83,97l-24,-31C98,29 157,-6 226,-11l0,-99l39,0l0,99C354,-3 419,58 419,153C419,381 130,322 130,497C130,563 177,612 246,612C308,612 338,589 376,552z"/>
+<glyph unicode="&#xA3;" horiz-adv-x="479" d="M133,40l0,4C179,88 205,138 205,221C205,247 202,270 197,293l157,0l0,36l-165,0C175,381 157,428 157,481C157,554 200,612 282,612C335,612 369,586 397,553l29,27C396,618 351,651 282,651C177,651 112,586 112,481C112,429 130,379 144,329l-24,0l-66,-3l0,-33l100,0C159,270 163,246 163,221C163,144 131,69 57,27l0,-27l371,0l0,40z"/>
+<glyph unicode="&#xA5;" horiz-adv-x="479" d="M30,639l172,-336l-152,0l0,-33l166,0l0,-71l-166,0l0,-34l166,0l0,-165l45,0l0,165l168,0l0,34l-168,0l0,71l168,0l0,33l-154,0l174,336l-46,0l-94,-193C286,402 267,358 242,309l-4,0C214,358 193,402 172,446l-94,193z"/>
+<glyph unicode="&#x20AC;" horiz-adv-x="479" d="M445,107C406,53 366,26 311,26C215,26 153,111 136,246l238,0l0,33l-241,0C132,293 132,307 132,322C132,334 132,345 133,356l281,0l0,33l-278,0C151,528 217,613 323,613C369,613 406,586 435,546l29,27C435,615 383,651 323,651C194,651 107,552 89,389l-65,-4l0,-29l62,0C85,345 85,333 85,321C85,307 85,293 86,279l-62,-4l0,-29l65,0C109,87 191,-12 308,-12C382,-12 432,24 474,82z"/>
+<glyph unicode="&#xA2;" horiz-adv-x="479" d="M255,121C164,134 107,207 107,311C107,416 169,488 255,502 z M412,173C380,144 338,121 289,119l0,385C334,502 370,482 400,455l24,28C393,513 352,541 289,543l0,109l-34,0l0,-111C148,530 62,449 62,311C62,174 142,92 255,81l0,-109l34,0l0,108C347,82 396,108 435,144z"/>
+<glyph unicode="&#x192;" horiz-adv-x="479" d="M443,653C425,661 402,671 369,671C278,671 237,593 223,468l-7,-63l-32,0l-67,-4l0,-33l95,0l-28,-262C174,11 147,-59 76,-59C57,-59 39,-55 24,-48l-13,-34C28,-92 50,-98 76,-98C173,-98 214,-21 227,102l29,266l142,0l0,37l-138,0l7,67C276,553 300,632 369,632C397,632 415,623 431,617z"/>
+<glyph unicode="&#x20A1;" horiz-adv-x="479" d="M274,610C284,612 294,613 305,613C318,613 330,611 341,607l-69,-580C248,30 226,39 207,53 z M179,79C136,130 112,215 112,322C112,467 158,569 241,602 z M427,107C390,56 353,29 302,26l68,568C388,582 404,565 418,545l29,27C429,597 404,620 374,634l14,115l-30,0l-12,-104C333,649 319,651 305,651C296,651 287,651 278,650l12,99l-31,0l-13,-105C134,614 65,496 65,321C65,184 106,80 173,27l-16,-137l31,0l14,119C222,-2 244,-8 268,-11l-12,-99l30,0l12,98C367,-9 416,26 456,82z"/>
+<glyph unicode="&#x20A4;" horiz-adv-x="479" d="M133,40l0,4C179,88 205,138 205,221C205,230 205,238 204,246l150,0l0,34l-154,0C196,303 190,324 184,345l170,0l0,34l-179,0C165,413 157,446 157,481C157,554 200,612 282,612C335,612 369,586 397,553l29,27C396,618 351,651 282,651C177,651 112,586 112,481C112,446 120,412 129,379l-12,0l-63,-4l0,-30l86,0C146,324 152,302 157,280l-38,0l-65,-5l0,-29l108,0C163,238 163,229 163,221C163,144 131,69 57,27l0,-27l371,0l0,40z"/>
+<glyph unicode="&#x20A6;" horiz-adv-x="479" d="M345,276l-69,0l-24,68l93,0l0,-63 z M353,54l-4,0l-61,189l58,0 z M134,276l0,68l76,0l24,-68 z M126,586l4,0l62,-190l7,-21l-66,0 z M459,344l0,31l-73,0l0,264l-41,0l0,-264l-104,0l-94,264l-54,0l0,-264l-77,-4l0,-27l77,0l0,-68l-77,-4l0,-29l77,0l0,-243l41,0l0,243l112,0l86,-243l54,0l0,243l73,0l0,33l-73,0l0,68z"/>
+<glyph unicode="&#x20A7;" horiz-adv-x="479" d="M137,299l0,139l216,0C346,344 283,299 174,299 z M174,604C284,604 347,570 353,474l-216,0l0,130 z M464,474l-66,0C391,593 305,639 185,639l-91,0l0,-165l-80,-5l0,-31l80,0l0,-438l43,0l0,263l48,0C305,263 390,320 398,438l66,0z"/>
+<glyph unicode="&#x20AB;" horiz-adv-x="479" d="M80,0l335,0l0,34l-335,0 z M343,206C305,162 268,144 230,144C154,144 113,203 113,297C113,374 166,437 234,437C277,437 304,422 343,386 z M384,595l0,78l-41,0l0,-78l-146,0l0,-34l146,0l0,-45l4,-93C312,454 283,474 232,474C146,474 69,404 69,295C69,173 130,107 224,107C275,107 313,132 343,164l3,0l5,-47l33,0l0,444l81,5l0,29z"/>
+<glyph unicode="&#x20B1;" horiz-adv-x="479" d="M137,427l0,67l214,0C353,483 354,470 354,457C354,446 353,436 352,427 z M137,299l0,96l208,0C324,330 265,299 174,299 z M174,604C261,604 319,582 343,525l-206,0l0,79 z M464,525l-75,0C363,607 286,639 185,639l-91,0l0,-114l-80,-4l0,-27l80,0l0,-67l-80,-4l0,-28l80,0l0,-395l43,0l0,263l48,0C289,263 367,306 391,395l73,0l0,32l-67,0C398,437 399,447 399,457C399,470 398,482 396,494l68,0z"/>
+<glyph unicode="&#x20B2;" horiz-adv-x="479" d="M277,313l0,-39l120,0l0,-196C376,51 329,27 279,27C165,27 100,143 100,322C100,500 169,613 291,613C338,613 375,586 405,546l29,27C405,613 356,649 298,651l0,98l-38,0l0,-100C132,632 52,509 52,321C52,126 135,-1 260,-11l0,-99l38,0l0,99C354,-6 403,17 440,60l0,253z"/>
+<glyph unicode="&#x20B5;" horiz-adv-x="479" d="M274,27C171,39 112,153 112,322C112,485 170,593 274,610 z M427,107C392,59 357,32 310,27l0,586C354,611 389,585 417,546l29,27C418,614 368,649 310,651l0,99l-36,0l0,-101C145,632 65,509 65,321C65,126 147,-2 274,-11l0,-99l36,0l0,99C373,-5 418,30 456,82z"/>
+<glyph unicode="&#x20B9;" horiz-adv-x="479" d="M443,639l-370,0l0,-38l75,0C252,601 317,572 331,499l-191,0l-67,-4l0,-30l260,0C331,365 263,320 148,320l-75,0l0,-39l82,0l197,-281l54,0l-201,283C307,295 376,355 379,465l64,0l0,34l-66,0C368,548 337,586 295,606l148,0z"/>
+<glyph unicode="&#x20BA;" horiz-adv-x="479" d="M176,31l0,277l176,92l0,36l-176,-92l0,82l176,92l0,36l-176,-92l0,177l-46,0l0,-199l-102,-53l0,-36l102,52l0,-82l-102,-52l0,-36l102,52l0,-297C295,-15 445,57 445,218C445,239 443,253 438,279l-40,-13C404,245 404,230 404,215C404,91 273,32 176,31z"/>
+<glyph unicode="&#x2044;" horiz-adv-x="80" d="M-126,-12l367,683l-38,0l-368,-683z"/>
+<glyph unicode="&#x2215;" horiz-adv-x="80" d="M-126,-12l367,683l-38,0l-368,-683z"/>
+<glyph unicode="&#xE0B2;" horiz-adv-x="80" d="M-126,-12l367,683l-38,0l-368,-683z"/>
+<glyph unicode="%" horiz-adv-x="805" d="M181,257C268,257 322,331 322,465C322,597 268,671 181,671C94,671 40,597 40,465C40,331 94,257 181,257 z M181,290C119,290 79,354 79,465C79,576 119,638 181,638C243,638 283,576 283,465C283,354 243,290 181,290 z M236,-12l368,683l-38,0l-368,-683 z M624,-12C711,-12 765,62 765,196C765,328 711,402 624,402C537,402 483,328 483,196C483,62 537,-12 624,-12 z M624,21C562,21 522,85 522,196C522,307 562,369 624,369C686,369 726,307 726,196C726,85 686,21 624,21z"/>
+<glyph unicode="&#x2030;" horiz-adv-x="1162" d="M233,-12l367,683l-38,0l-368,-683 z M181,257C268,257 322,331 322,465C322,597 268,671 181,671C94,671 40,597 40,465C40,331 94,257 181,257 z M181,290C119,290 79,354 79,465C79,576 119,638 181,638C243,638 283,576 283,465C283,354 243,290 181,290 z M621,-12C708,-12 762,62 762,196C762,328 708,402 621,402C534,402 480,328 480,196C480,62 534,-12 621,-12 z M621,21C559,21 518,85 518,196C518,307 559,369 621,369C683,369 723,307 723,196C723,85 683,21 621,21 z M981,-12C1068,-12 1122,62 1122,196C1122,328 1068,402 981,402C894,402 840,328 840,196C840,62 894,-12 981,-12 z M981,21C919,21 879,85 879,196C879,307 919,369 981,369C1043,369 1083,307 1083,196C1083,85 1043,21 981,21z"/>
+<glyph unicode="&#xBC;" horiz-adv-x="764" d="M193,269l0,390l-33,0C136,640 111,628 72,620l0,-27l83,0l0,-324 z M545,671l-368,-683l39,0l367,683 z M496,146l73,108l56,83l4,0l-4,-104l0,-87 z M719,146l-58,0l0,244l-35,0l-177,-255l0,-21l176,0l0,-114l36,0l0,114l58,0z"/>
+<glyph unicode="&#xBD;" horiz-adv-x="786" d="M155,269l38,0l0,390l-33,0C136,640 111,628 72,620l0,-27l83,0 z M193,-12l367,683l-38,0l-368,-683 z M481,0l254,0l0,34l-191,0C643,133 713,197 713,279C713,361 663,402 591,402C542,402 496,369 471,329l25,-23C518,340 551,368 588,368C639,368 674,332 674,275C674,209 614,149 481,25z"/>
+<glyph unicode="&#xBE;" horiz-adv-x="783" d="M81,586C106,617 138,638 169,638C220,638 253,608 253,565C253,520 208,481 131,481l0,-28C215,453 268,424 268,373C268,320 227,290 177,290C133,290 93,316 69,354l-29,-22C67,292 116,257 177,257C250,257 308,300 308,372C308,427 263,460 216,469C259,486 292,519 292,568C292,633 238,671 173,671C124,671 84,644 56,608 z M592,671l-368,-683l38,0l368,683 z M514,146l74,108l56,83l4,0l-4,-104l0,-87 z M738,146l-58,0l0,244l-36,0l-177,-255l0,-21l177,0l0,-114l36,0l0,114l58,0z"/>
+<glyph unicode="&#x2153;" horiz-adv-x="785" d="M155,269l38,0l0,390l-33,0C136,640 111,628 72,620l0,-27l83,0 z M187,-12l367,683l-38,0l-368,-683 z M463,63C490,23 539,-12 600,-12C673,-12 731,31 731,103C731,158 687,191 640,200C683,217 715,250 715,299C715,364 662,402 597,402C547,402 507,375 479,339l25,-22C529,348 562,369 593,369C644,369 676,339 676,296C676,251 632,212 554,212l0,-28C639,184 692,155 692,104C692,51 650,21 601,21C556,21 516,47 492,85z"/>
+<glyph unicode="&#x2154;" horiz-adv-x="804" d="M57,269l254,0l0,34l-191,0C219,402 289,466 289,548C289,630 239,671 167,671C118,671 72,638 47,598l25,-23C94,609 127,637 164,637C215,637 250,601 250,544C250,478 190,418 57,294 z M237,-12l367,683l-38,0l-368,-683 z M482,63C509,23 558,-12 619,-12C692,-12 750,31 750,103C750,158 706,191 659,200C702,217 734,250 734,299C734,364 681,402 616,402C566,402 526,375 498,339l25,-22C548,348 581,369 612,369C663,369 695,339 695,296C695,251 651,212 573,212l0,-28C658,184 711,155 711,104C711,51 669,21 620,21C575,21 535,47 511,85z"/>
+<glyph unicode="&#x215B;" horiz-adv-x="785" d="M155,269l38,0l0,390l-33,0C136,640 111,628 72,620l0,-27l83,0 z M197,-12l367,683l-38,0l-368,-683 z M510,99C510,137 533,170 576,194C637,171 695,157 695,99C695,56 653,20 602,20C546,20 510,59 510,99 z M629,213C572,231 527,255 527,301C527,340 561,368 602,368C646,368 681,342 681,302C681,270 664,240 629,213 z M472,96C472,38 523,-12 602,-12C676,-12 733,36 733,100C733,146 706,175 659,199l0,4C683,221 719,251 719,301C719,362 668,402 602,402C539,402 489,360 489,301C489,259 513,235 547,213l0,-4C508,187 472,147 472,96z"/>
+<glyph unicode="&#x215C;" horiz-adv-x="804" d="M40,332C67,292 116,257 177,257C250,257 308,300 308,372C308,427 264,460 217,469C260,486 292,519 292,568C292,633 239,671 174,671C124,671 84,644 56,608l25,-22C106,617 139,638 170,638C221,638 253,608 253,565C253,520 209,481 131,481l0,-28C216,453 269,424 269,373C269,320 227,290 178,290C133,290 93,316 69,354 z M236,-12l367,683l-38,0l-368,-683 z M529,99C529,137 552,170 595,194C656,171 714,157 714,99C714,56 672,20 621,20C565,20 529,59 529,99 z M648,213C591,231 546,255 546,301C546,340 580,368 621,368C665,368 700,342 700,302C700,270 683,240 648,213 z M491,96C491,38 542,-12 621,-12C695,-12 752,36 752,100C752,146 725,175 678,199l0,4C702,221 738,251 738,301C738,362 687,402 621,402C558,402 508,360 508,301C508,259 532,235 566,213l0,-4C527,187 491,147 491,96z"/>
+<glyph unicode="&#x215D;" horiz-adv-x="804" d="M40,332C69,292 113,257 181,257C255,257 313,310 313,391C313,478 257,524 186,524C156,524 133,515 113,504l13,119l166,0l0,36l-199,0l-20,-185l24,-16C118,475 143,494 179,494C236,494 274,454 274,392C274,332 234,290 181,290C130,290 95,316 69,354 z M236,-12l367,683l-38,0l-368,-683 z M529,99C529,137 552,170 595,194C656,171 714,157 714,99C714,56 672,20 621,20C565,20 529,59 529,99 z M648,213C591,231 546,255 546,301C546,340 580,368 621,368C665,368 700,342 700,302C700,270 683,240 648,213 z M491,96C491,38 542,-12 621,-12C695,-12 752,36 752,100C752,146 725,175 678,199l0,4C702,221 738,251 738,301C738,362 687,402 621,402C558,402 508,360 508,301C508,259 532,235 566,213l0,-4C527,187 491,147 491,96z"/>
+<glyph unicode="&#x215E;" horiz-adv-x="784" d="M119,269l40,0C167,408 192,510 291,636l0,23l-261,0l0,-34l216,0C161,513 129,412 119,269 z M186,-12l367,683l-38,0l-368,-683 z M509,99C509,137 532,170 575,194C636,171 694,157 694,99C694,56 652,20 601,20C545,20 509,59 509,99 z M628,213C571,231 526,255 526,301C526,340 560,368 601,368C645,368 680,342 680,302C680,270 663,240 628,213 z M471,96C471,38 522,-12 601,-12C675,-12 732,36 732,100C732,146 705,175 658,199l0,4C682,221 718,251 718,301C718,362 667,402 601,402C538,402 488,360 488,301C488,259 512,235 546,213l0,-4C507,187 471,147 471,96z"/>
+<glyph unicode="+" horiz-adv-x="479" d="M219,110l41,0l0,201l185,0l0,38l-185,0l0,201l-41,0l0,-201l-185,0l0,-38l185,0z"/>
+<glyph unicode="&#x2212;" horiz-adv-x="479" d="M34,311l411,0l0,38l-411,0z"/>
+<glyph unicode="&#xD7;" horiz-adv-x="479" d="M78,135l161,168l162,-168l26,28l-161,167l161,167l-26,28l-162,-169l-161,169l-27,-28l162,-167l-162,-167z"/>
+<glyph unicode="&#xF7;" horiz-adv-x="479" d="M239,469C261,469 277,485 277,510C277,533 261,549 239,549C218,549 201,533 201,510C201,485 218,469 239,469 z M201,150C201,125 218,109 239,109C261,109 277,125 277,150C277,173 261,189 239,189C218,189 201,173 201,150 z M34,311l411,0l0,38l-411,0z"/>
+<glyph unicode="&#x2219;" horiz-adv-x="486" d="M195,323C195,295 216,278 238,278C260,278 280,295 280,323C280,352 260,369 238,369C216,369 195,352 195,323z"/>
+<glyph unicode="=" horiz-adv-x="479" d="M34,413l411,0l0,38l-411,0 z M34,209l411,0l0,38l-411,0z"/>
+<glyph unicode="&lt;" horiz-adv-x="479" d="M34,310l411,-164l0,43l-232,90l-133,51l0,4l133,51l232,90l0,43l-411,-164z"/>
+<glyph unicode="&gt;" horiz-adv-x="479" d="M445,354l-411,164l0,-43l232,-90l133,-51l0,-4l-133,-51l-232,-90l0,-43l411,164z"/>
+<glyph unicode="&#x2264;" horiz-adv-x="479" d="M34,0l411,0l0,37l-411,0 z M34,312l411,-160l0,43l-232,88l-133,50l0,4l133,50l232,88l0,43l-411,-160z"/>
+<glyph unicode="&#x2265;" horiz-adv-x="479" d="M34,0l411,0l0,37l-411,0 z M445,358l-411,160l0,-43l232,-88l133,-50l0,-4l-133,-50l-232,-88l0,-43l411,160z"/>
+<glyph unicode="&#xB1;" horiz-adv-x="479" d="M219,109l41,0l0,201l185,0l0,37l-185,0l0,203l-41,0l0,-203l-185,0l0,-37l185,0 z M34,0l411,0l0,37l-411,0z"/>
+<glyph unicode="^" horiz-adv-x="479" d="M66,290l43,0l77,203l51,133l4,0l52,-133l77,-203l43,0l-151,380l-46,0z"/>
+<glyph unicode="&#x2260;" horiz-adv-x="479" d="M66,80l41,0l79,129l259,0l0,38l-236,0l102,166l134,0l0,38l-111,0l79,129l-41,0l-79,-129l-259,0l0,-38l236,0l-102,-166l-134,0l0,-38l111,0z"/>
+<glyph unicode="~" horiz-adv-x="479" d="M69,293C93,340 118,356 148,356C206,356 252,266 329,266C368,266 410,293 438,347l-28,20C386,320 361,304 331,304C273,304 227,394 150,394C111,394 69,367 40,311z"/>
+<glyph unicode="&#x2248;" horiz-adv-x="479" d="M69,395C93,442 118,458 148,458C206,458 252,368 329,368C368,368 410,395 438,449l-28,20C386,422 361,406 331,406C273,406 227,496 150,496C111,496 69,469 40,413 z M69,191C93,238 118,254 148,254C206,254 252,164 329,164C368,164 410,191 438,245l-28,20C386,218 361,202 331,202C273,202 227,292 150,292C111,292 69,265 40,209z"/>
+<glyph unicode="&#xAC;" horiz-adv-x="479" d="M34,311l370,0l0,-201l41,0l0,239l-411,0z"/>
+<glyph unicode="&#x3C0;" horiz-adv-x="534" d="M113,0l44,0l0,440l221,0l0,-354C378,24 398,-12 451,-12C466,-12 478,-10 494,-3l-8,36C475,29 467,27 459,27C433,27 422,50 422,80l0,360l79,0l0,40l-407,0l-67,-4l0,-36l86,0z"/>
+<glyph unicode="&#x221E;" horiz-adv-x="763" d="M182,182C270,182 325,254 360,292l4,0C423,220 478,167 564,167C658,167 722,238 722,333C722,428 657,494 562,494C474,494 411,428 366,367l-4,0C326,413 272,478 189,478C107,478 41,420 41,328C41,245 107,182 182,182 z M386,334C440,411 493,457 558,457C637,457 682,402 682,331C682,265 639,211 566,211C501,211 451,250 386,334 z M187,220C130,220 81,264 81,331C81,397 128,434 186,434C244,434 290,391 340,326C301,269 250,220 187,220z"/>
+<glyph unicode="&#xB5;" horiz-adv-x="537" d="M92,-200l44,0l0,154l-2,90C160,0 194,-11 243,-11C306,-11 355,25 400,80l3,0l4,-80l38,0l0,480l-44,0l0,-354C344,58 303,28 246,28C169,28 136,76 136,178l0,302l-44,0z"/>
+<glyph unicode="&#x2202;" horiz-adv-x="499" d="M213,27C141,27 80,89 80,180C80,275 131,360 254,360C303,360 357,338 411,277C391,131 322,27 213,27 z M141,580C173,613 216,633 259,633C349,633 416,563 416,363C416,349 416,336 415,323C371,369 312,399 253,399C113,399 36,306 36,177C36,59 119,-12 209,-12C361,-12 461,140 461,363C461,583 376,672 263,672C205,672 154,648 118,609z"/>
+<glyph unicode="&#x222B;" horiz-adv-x="299" d="M65,-116l-7,-36C66,-156 81,-158 100,-158C189,-158 209,-64 209,60C209,198 166,431 166,573C166,681 176,750 233,750C247,750 259,748 267,746l7,36C268,786 251,788 234,788C143,788 123,693 123,570C123,433 168,198 168,56C168,-52 158,-120 99,-120C85,-120 73,-118 65,-116z"/>
+<glyph unicode="&#x221A;" horiz-adv-x="539" d="M158,384l-109,-51l15,-31l69,32l150,-439l41,0l217,925l-38,0l-189,-813C309,-10 307,-28 303,-45l-4,0C295,-28 290,-10 284,7z"/>
+<glyph unicode="&#x2206;" horiz-adv-x="559" d="M27,0l505,0l0,27l-229,633l-48,0l-228,-633 z M79,40l123,347l76,218l4,0l74,-218l124,-347z"/>
+<glyph unicode="&#x2126;" horiz-adv-x="661" d="M44,0l214,0l0,33C177,89 104,189 104,348C104,517 189,630 331,630C472,630 557,517 557,348C557,189 484,89 403,33l0,-33l214,0l0,39l-143,0l0,4C539,105 605,201 605,348C605,544 497,672 331,672C164,672 56,544 56,348C56,201 123,105 188,43l0,-4l-144,0z"/>
+<glyph unicode="&#x2211;" horiz-adv-x="487" d="M19,-87l0,-33l468,0l0,40l-409,0l0,4l250,337l-239,335l0,4l367,0l0,39l-425,0l0,-33l245,-346z"/>
+<glyph unicode="&#x220F;" horiz-adv-x="652" d="M94,-120l46,0l0,719l370,0l0,-719l48,0l0,759l-464,0z"/>
+<glyph unicode="&#x2113;" horiz-adv-x="373" d="M150,529C150,633 186,682 228,682C268,682 298,653 298,573C298,465 236,356 150,266 z M338,71C314,48 289,27 247,27C195,27 150,68 150,176l0,38C257,315 340,448 340,575C340,670 292,720 227,720C160,720 106,665 106,518l0,-294C81,202 55,181 28,163l20,-31C68,145 87,160 106,175l0,-10C106,49 168,-12 243,-12C293,-12 332,17 358,43z"/>
+<glyph unicode="&#x212E;" horiz-adv-x="800" d="M184,108C180,114 176,120 176,128l0,184C176,314 178,316 180,316l574,0C754,318 754,322 754,324C754,510 596,660 400,660C204,660 46,510 46,324C46,138 204,-12 400,-12C514,-12 616,40 682,120l-52,0C574,52 492,8 402,8C316,8 238,46 184,108 z M180,334C178,334 176,336 176,340l0,180C176,528 180,536 184,542C240,602 316,640 402,640C484,640 560,604 616,546C622,540 626,532 626,524l0,-184C626,336 624,334 620,334z"/>
+<glyph unicode="&#x2190;" horiz-adv-x="620" d="M29,250l269,-264l26,27l-231,220l487,0l0,38l-487,0l231,220l-26,27l-269,-264z"/>
+<glyph unicode="&#x2191;" horiz-adv-x="620" d="M308,526l-265,-269l28,-26l219,231l0,-486l39,0l0,486l220,-231l27,26l-264,269z"/>
+<glyph unicode="&#x2192;" horiz-adv-x="620" d="M589,254l-269,264l-26,-27l230,-220l-486,0l0,-38l486,0l-230,-220l26,-27l269,264z"/>
+<glyph unicode="&#x2193;" horiz-adv-x="620" d="M312,-24l264,269l-27,26l-220,-231l0,486l-39,0l0,-486l-219,231l-28,-26l265,-269z"/>
+<glyph unicode="&#x25A0;" horiz-adv-x="283" d="M54,174l175,0l0,180l-175,0z"/>
+<glyph unicode="&#x25C6;" horiz-adv-x="283" d="M142,138l126,126l-126,125l-127,-125z"/>
+<glyph unicode="&#x25C9;" horiz-adv-x="421" d="M210,208C238,208 262,229 262,264C262,297 238,318 210,318C183,318 158,297 158,264C158,229 183,208 210,208 z M210,91C300,91 379,154 379,264C379,372 300,436 210,436C121,436 42,372 42,264C42,154 121,91 210,91 z M210,125C144,125 79,174 79,264C79,354 144,403 210,403C277,403 341,354 341,264C341,174 277,125 210,125z"/>
+<glyph unicode="&#x2752;" horiz-adv-x="353" d="M85,162l0,156l148,0l0,-156 z M54,134l201,0l44,53l0,197l-191,0l-54,-44z"/>
+<glyph unicode="&#x25B2;" horiz-adv-x="559" d="M25,48l508,0l0,2l-251,477l-4,0l-253,-477z"/>
+<glyph unicode="&#x25B3;" horiz-adv-x="559" d="M93,84l187,367l188,-367 z M25,48l508,0l0,2l-251,477l-4,0l-253,-477z"/>
+<glyph unicode="&#x25B6;" horiz-adv-x="559" d="M59,27l2,0l477,253l0,4l-477,251l-2,0z"/>
+<glyph unicode="&#x25B7;" horiz-adv-x="559" d="M97,94l0,375l361,-187 z M59,27l2,0l477,253l0,4l-477,251l-2,0z"/>
+<glyph unicode="&#x25BC;" horiz-adv-x="559" d="M278,37l4,0l251,475l0,2l-508,0l0,-2z"/>
+<glyph unicode="&#x25BD;" horiz-adv-x="559" d="M468,478l-188,-366l-187,366 z M25,512l253,-476l4,0l251,476l0,2l-508,0z"/>
+<glyph unicode="&#x25C0;" horiz-adv-x="559" d="M21,280l476,-253l2,0l0,508l-2,0l-476,-251z"/>
+<glyph unicode="&#x25C1;" horiz-adv-x="559" d="M101,282l360,187l0,-375 z M499,535l-2,0l-476,-251l0,-4l476,-253l2,0z"/>
+<glyph unicode="&#x2610;" horiz-adv-x="794" d="M107,23l0,581l546,0l0,-581 z M74,-10l601,0l45,53l0,626l-593,0l-53,-43z"/>
+<glyph unicode="&#x2611;" horiz-adv-x="794" d="M653,23l-546,0l0,581l510,0C516,464 431,299 386,144l-4,0C355,233 307,327 256,406l-35,-24C276,300 325,204 361,101l56,7C466,280 551,446 653,583 z M771,784C735,750 700,711 666,669l-539,0l-53,-43l0,-636l601,0l45,53l0,623C747,697 775,726 803,752z"/>
+<glyph unicode="&#x2713;" horiz-adv-x="592" d="M198,-13C271,245 426,489 597,649l-32,32C396,518 240,260 170,23l-4,0C136,116 85,214 30,297l-34,-24C55,187 105,88 143,-20z"/>
+<glyph unicode="&#x266A;" horiz-adv-x="479" d="M31,49C31,5 73,-21 126,-21C202,-21 283,28 283,126l0,434C369,534 416,471 416,406C416,370 414,347 404,314l27,-10C441,333 453,377 453,426C453,499 433,555 346,619C296,655 286,665 276,694l-33,0l0,-549C234,151 208,157 182,157C90,157 31,104 31,49z"/>
+<glyph unicode="&#x25CA;" horiz-adv-x="499" d="M225,-10l49,0l166,340l-166,340l-49,0l-166,-340 z M247,28l-68,139l-75,163l75,161l68,141l4,0l68,-141l76,-161l-76,-163l-68,-139z"/>
+<glyph unicode="&#x2032;" horiz-adv-x="219" d="M82,481l29,0l27,138l10,74l-43,0z"/>
+<glyph unicode="&#x2033;" horiz-adv-x="360" d="M82,481l29,0l27,138l10,74l-43,0 z M223,481l29,0l27,138l10,74l-42,0z"/>
+<glyph unicode="&#x2BB;" horiz-adv-x="219" d="M143,703C90,668 58,618 58,547C58,504 76,480 102,480C125,480 142,495 142,520C142,545 122,557 102,557C99,557 96,557 94,556C94,613 117,644 161,680z"/>
+<glyph unicode="&#x2BC;" horiz-adv-x="219" d="M76,477C130,512 162,562 162,633C162,676 144,700 117,700C94,700 78,685 78,660C78,635 98,623 117,623C120,623 123,623 125,624C125,567 102,536 58,500z"/>
+<glyph unicode="&#x2BE;" horiz-adv-x="141" d="M33,539C95,537 133,570 133,625C133,680 95,714 33,712l0,-25C80,687 101,662 101,625C101,589 80,563 33,563z"/>
+<glyph unicode="&#x2BF;" horiz-adv-x="159" d="M124,712C63,714 24,680 24,625C24,570 63,537 124,539l0,24C77,563 56,589 56,625C56,662 77,687 124,687z"/>
+<glyph unicode="`" horiz-adv-x="535" d="M285,572l38,0l-92,136l-52,0z"/>
+<glyph unicode="&#xB4;" horiz-adv-x="535" d="M356,708l-53,0l-91,-136l37,0z"/>
+<glyph unicode="&#x2C6;" horiz-adv-x="535" d="M154,572l36,0l75,99l4,0l75,-99l37,0l-94,136l-39,0z"/>
+<glyph unicode="&#x2C7;" horiz-adv-x="535" d="M248,572l39,0l94,136l-37,0l-75,-99l-4,0l-75,99l-36,0z"/>
+<glyph unicode="&#x2C8;" horiz-adv-x="95" d="M32,529l31,0l6,172l-43,0z"/>
+<glyph unicode="&#x2C9;" horiz-adv-x="259" d="M16,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x2CA;" horiz-adv-x="218" d="M196,708l-53,0l-91,-136l37,0z"/>
+<glyph unicode="&#x2CB;" horiz-adv-x="218" d="M125,572l38,0l-92,136l-52,0z"/>
+<glyph unicode="&#x2CC;" horiz-adv-x="95" d="M32,-75l-6,-172l43,0l-6,172z"/>
+<glyph unicode="&#x2DC;" horiz-adv-x="535" d="M144,581l30,0C178,616 190,636 211,636C248,636 274,581 322,581C370,581 388,628 391,670l-30,0C357,636 345,615 323,615C289,615 261,670 212,670C165,670 147,624 144,581z"/>
+<glyph unicode="&#xA8;" horiz-adv-x="535" d="M189,598C209,598 225,614 225,635C225,655 209,671 189,671C168,671 152,655 152,635C152,614 168,598 189,598 z M346,598C367,598 383,614 383,635C383,655 367,671 346,671C325,671 310,655 310,635C310,614 325,598 346,598z"/>
+<glyph unicode="&#xAF;" horiz-adv-x="535" d="M154,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x2D8;" horiz-adv-x="535" d="M267,576C349,576 381,644 386,695l-33,0C348,652 321,608 267,608C214,608 187,652 181,695l-32,0C154,644 186,576 267,576z"/>
+<glyph unicode="&#x2DA;" horiz-adv-x="535" d="M267,539C314,539 350,574 350,625C350,677 314,712 267,712C221,712 185,677 185,625C185,574 221,539 267,539 z M267,565C238,565 215,589 215,625C215,662 238,686 267,686C297,686 320,662 320,625C320,589 297,565 267,565z"/>
+<glyph unicode="&#x2DD;" horiz-adv-x="535" d="M185,570l34,0l84,138l-46,0 z M319,570l33,0l84,138l-46,0z"/>
+<glyph unicode="&#x2D9;" horiz-adv-x="535" d="M267,596C289,596 305,612 305,637C305,660 289,676 267,676C246,676 229,660 229,637C229,612 246,596 267,596z"/>
+<glyph unicode="&#xB8;" horiz-adv-x="535" d="M228,-74C267,-84 295,-97 295,-127C295,-155 257,-170 202,-178l7,-30C273,-200 334,-175 334,-123C334,-83 307,-65 274,-54l29,56l-35,0z"/>
+<glyph unicode="&#x2DB;" horiz-adv-x="535" d="M213,-122C213,-176 249,-203 294,-203C316,-203 344,-193 359,-180l-16,26C330,-164 318,-168 300,-168C275,-168 251,-151 251,-116C251,-73 282,-30 328,4l-43,0C248,-25 213,-71 213,-122z"/>
+<glyph unicode="&#x300;" horiz-adv-x="0" d="M18,572l38,0l-92,136l-52,0z"/>
+<glyph unicode="&#xE0B3;" horiz-adv-x="0" d="M-3,709l40,0l-92,106l-58,0z"/>
+<glyph unicode="&#x301;" horiz-adv-x="0" d="M88,708l-52,0l-92,-136l38,0z"/>
+<glyph unicode="&#xE0B4;" horiz-adv-x="0" d="M113,815l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#x302;" horiz-adv-x="0" d="M-114,572l37,0l75,99l4,0l75,-99l37,0l-95,136l-38,0z"/>
+<glyph unicode="&#xE0B5;" horiz-adv-x="0" d="M-77,709l75,72l4,0l75,-72l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#x303;" horiz-adv-x="0" d="M-124,581l30,0C-89,616 -77,636 -56,636C-20,636 6,581 55,581C103,581 121,628 124,670l-30,0C89,636 77,615 56,615C22,615 -6,670 -55,670C-103,670 -121,624 -124,581z"/>
+<glyph unicode="&#xE0B6;" horiz-adv-x="0" d="M59,716C104,716 127,764 130,808l-29,0C97,774 81,752 60,752C19,752 -6,808 -59,808C-104,808 -127,761 -130,716l29,0C-97,750 -81,773 -60,773C-19,773 6,716 59,716z"/>
+<glyph unicode="&#x304;" horiz-adv-x="0" d="M-113,606l226,0l0,36l-226,0z"/>
+<glyph unicode="&#xE0B7;" horiz-adv-x="0" d="M-114,734l228,0l0,36l-228,0z"/>
+<glyph unicode="&#x306;" horiz-adv-x="0" d="M0,576C82,576 113,644 119,695l-33,0C80,652 53,608 0,608C-53,608 -80,652 -86,695l-33,0C-113,644 -82,576 0,576z"/>
+<glyph unicode="&#xE0B8;" horiz-adv-x="0" d="M0,711C76,711 109,769 115,815l-33,0C76,780 52,743 0,743C-52,743 -76,780 -82,815l-33,0C-109,769 -76,711 0,711z"/>
+<glyph unicode="&#x307;" horiz-adv-x="0" d="M0,596C22,596 38,612 38,637C38,660 22,676 0,676C-22,676 -38,660 -38,637C-38,612 -22,596 0,596z"/>
+<glyph unicode="&#xE0B9;" horiz-adv-x="0" d="M0,721C22,721 40,737 40,762C40,785 22,801 0,801C-22,801 -40,785 -40,762C-40,737 -22,721 0,721z"/>
+<glyph unicode="&#x308;" horiz-adv-x="0" d="M-79,598C-58,598 -42,614 -42,635C-42,655 -58,671 -79,671C-100,671 -115,655 -115,635C-115,614 -100,598 -79,598 z M79,598C100,598 115,614 115,635C115,655 100,671 79,671C58,671 42,655 42,635C42,614 58,598 79,598z"/>
+<glyph unicode="&#xE0BA;" horiz-adv-x="0" d="M-79,725C-58,725 -42,739 -42,761C-42,784 -58,798 -79,798C-100,798 -115,784 -115,761C-115,739 -100,725 -79,725 z M79,725C100,725 115,739 115,761C115,784 100,798 79,798C58,798 42,784 42,761C42,739 58,725 79,725z"/>
+<glyph unicode="&#x309;" horiz-adv-x="0" d="M-24,551C24,564 71,585 71,637C71,688 16,709 -50,712l-4,-32C1,678 31,662 31,632C31,603 4,588 -32,577z"/>
+<glyph unicode="&#xE0BB;" horiz-adv-x="0" d="M-24,702C24,715 71,737 71,789C71,839 16,861 -50,863l-4,-32C1,829 31,814 31,783C31,755 4,740 -32,729z"/>
+<glyph unicode="&#x30A;" horiz-adv-x="0" d="M0,539C47,539 82,574 82,625C82,677 47,712 0,712C-47,712 -82,677 -82,625C-82,574 -47,539 0,539 z M0,565C-29,565 -52,589 -52,625C-52,662 -29,686 0,686C29,686 52,662 52,625C52,589 29,565 0,565z"/>
+<glyph unicode="&#xE0BC;" horiz-adv-x="0" d="M0,700C45,700 82,732 82,782C82,831 45,864 0,864C-47,864 -82,831 -82,782C-82,732 -47,700 0,700 z M0,726C-29,726 -52,745 -52,782C-52,817 -29,838 0,838C27,838 51,817 51,782C51,745 27,726 0,726z"/>
+<glyph unicode="&#x30B;" horiz-adv-x="0" d="M-82,570l34,0l83,138l-45,0 z M51,570l34,0l84,138l-46,0z"/>
+<glyph unicode="&#xE0BD;" horiz-adv-x="0" d="M-56,709l80,106l-49,0l-67,-106 z M53,709l36,0l80,106l-49,0z"/>
+<glyph unicode="&#x30C;" horiz-adv-x="0" d="M-19,572l38,0l95,136l-37,0l-75,-99l-4,0l-75,99l-37,0z"/>
+<glyph unicode="&#xE0BE;" horiz-adv-x="0" d="M77,815l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#x30F;" horiz-adv-x="0" d="M10,708l-45,0l83,-138l34,0 z M-123,708l-46,0l84,-138l34,0z"/>
+<glyph unicode="&#xE0BF;" horiz-adv-x="0" d="M92,709l-67,106l-49,0l80,-106 z M-120,815l-49,0l80,-106l36,0z"/>
+<glyph unicode="&#x312;" horiz-adv-x="0" d="M27,717C-24,691 -43,649 -43,607C-43,567 -28,546 -2,546C16,546 31,557 31,583C31,606 12,615 -4,615C-7,615 -9,615 -12,614C-11,645 4,672 42,693z"/>
+<glyph unicode="&#x313;" horiz-adv-x="0" d="M-27,545C23,571 43,614 43,656C43,696 28,717 2,717C-16,717 -31,706 -31,680C-31,657 -12,648 3,648C6,648 9,648 11,649C10,618 -5,590 -42,570z"/>
+<glyph unicode="&#x31B;" horiz-adv-x="0" d="M-2,438C73,448 126,477 126,540C126,560 119,578 107,596l-35,-20C81,563 86,550 86,537C86,497 56,476 -8,468z"/>
+<glyph unicode="&#x323;" horiz-adv-x="0" d="M0,-194C22,-194 38,-178 38,-153C38,-130 22,-114 0,-114C-22,-114 -38,-130 -38,-153C-38,-178 -22,-194 0,-194z"/>
+<glyph unicode="&#x324;" horiz-adv-x="0" d="M-79,-191C-58,-191 -42,-175 -42,-155C-42,-134 -58,-118 -79,-118C-100,-118 -115,-134 -115,-155C-115,-175 -100,-191 -79,-191 z M79,-191C100,-191 115,-175 115,-155C115,-134 100,-118 79,-118C58,-118 42,-134 42,-155C42,-175 58,-191 79,-191z"/>
+<glyph unicode="&#x326;" horiz-adv-x="0" d="M-25,-51l-13,-29C-9,-86 19,-98 19,-129C19,-156 -19,-171 -74,-179l7,-30C-3,-201 58,-176 58,-124C58,-83 29,-62 -25,-51z"/>
+<glyph unicode="&#x327;" horiz-adv-x="0" d="M-48,-74C-9,-84 19,-97 19,-127C19,-155 -19,-170 -74,-178l7,-30C-3,-200 58,-175 58,-123C58,-83 30,-65 -2,-54l29,56l-35,0z"/>
+<glyph unicode="&#xE0C0;" horiz-adv-x="0" d="M-48,-74C-9,-84 19,-97 19,-127C19,-155 -19,-170 -74,-178l7,-30C-3,-200 58,-175 58,-123C58,-83 30,-65 -2,-54l29,56l-35,0z"/>
+<glyph unicode="&#x328;" horiz-adv-x="0" d="M-54,-122C-54,-176 -19,-203 27,-203C48,-203 77,-193 92,-180l-16,26C63,-164 50,-168 33,-168C8,-168 -16,-151 -16,-116C-16,-73 14,-30 61,4l-44,0C-19,-25 -54,-71 -54,-122z"/>
+<glyph unicode="&#xE0C1;" horiz-adv-x="0" d="M18,4C-19,-25 -53,-71 -53,-123C-53,-178 -15,-205 31,-205C53,-205 81,-194 97,-181l-17,27C67,-164 55,-168 37,-168C12,-168 -14,-151 -14,-116C-14,-74 14,-30 60,4z"/>
+<glyph unicode="&#x32E;" horiz-adv-x="0" d="M0,-203C82,-203 113,-135 119,-84l-33,0C80,-127 53,-170 0,-170C-53,-170 -80,-127 -86,-84l-33,0C-113,-135 -82,-203 0,-203z"/>
+<glyph unicode="&#x331;" horiz-adv-x="0" d="M113,-124l-228,0l0,-36l228,0z"/>
+<glyph unicode="&#xE0C2;" horiz-adv-x="0" d="M-79,598C-59,598 -43,614 -43,634C-43,654 -59,669 -79,669C-99,669 -114,654 -114,634C-114,614 -99,598 -79,598 z M79,598C99,598 114,614 114,634C114,654 99,669 79,669C59,669 43,654 43,634C43,614 59,598 79,598 z M-115,747l228,0l0,33l-228,0z"/>
+<glyph unicode="&#xE0C3;" horiz-adv-x="0" d="M-114,854l228,0l0,33l-228,0 z M-79,725C-59,725 -43,738 -43,760C-43,782 -59,796 -79,796C-99,796 -114,782 -114,760C-114,738 -99,725 -79,725 z M79,725C99,725 114,738 114,760C114,782 99,796 79,796C59,796 43,782 43,760C43,738 59,725 79,725z"/>
+<glyph unicode="&#xE0C4;" horiz-adv-x="0" d="M-43,710l36,0l96,98l-52,0 z M-79,598C-59,598 -43,614 -43,634C-43,654 -59,669 -79,669C-99,669 -114,654 -114,634C-114,614 -99,598 -79,598 z M79,598C99,598 114,614 114,634C114,654 99,669 79,669C59,669 43,654 43,634C43,614 59,598 79,598z"/>
+<glyph unicode="&#xE0C5;" horiz-adv-x="0" d="M-37,829l39,0l109,106l-54,0 z M-79,725C-59,725 -43,738 -43,760C-43,782 -59,796 -79,796C-99,796 -114,782 -114,760C-114,738 -99,725 -79,725 z M79,725C99,725 114,738 114,760C114,782 99,796 79,796C59,796 43,782 43,760C43,738 59,725 79,725z"/>
+<glyph unicode="&#xE0C6;" horiz-adv-x="0" d="M-20,710l40,0l93,98l-39,0l-72,-67l-4,0l-72,67l-39,0 z M-79,598C-59,598 -43,614 -43,634C-43,654 -59,669 -79,669C-99,669 -114,654 -114,634C-114,614 -99,598 -79,598 z M79,598C99,598 114,614 114,634C114,654 99,669 79,669C59,669 43,654 43,634C43,614 59,598 79,598z"/>
+<glyph unicode="&#xE0C7;" horiz-adv-x="0" d="M-79,725C-59,725 -43,738 -43,760C-43,782 -59,796 -79,796C-99,796 -114,782 -114,760C-114,738 -99,725 -79,725 z M79,725C99,725 114,738 114,760C114,782 99,796 79,796C59,796 43,782 43,760C43,738 59,725 79,725 z M77,935l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE0C8;" horiz-adv-x="0" d="M-37,808l-52,0l96,-98l36,0 z M79,598C99,598 114,614 114,634C114,654 99,669 79,669C59,669 43,654 43,634C43,614 59,598 79,598 z M-79,598C-59,598 -43,614 -43,634C-43,654 -59,669 -79,669C-99,669 -114,654 -114,634C-114,614 -99,598 -79,598z"/>
+<glyph unicode="&#xE0C9;" horiz-adv-x="0" d="M-57,935l-54,0l109,-106l39,0 z M79,725C99,725 114,738 114,760C114,782 99,796 79,796C59,796 43,782 43,760C43,738 59,725 79,725 z M-79,725C-59,725 -43,738 -43,760C-43,782 -59,796 -79,796C-99,796 -114,782 -114,760C-114,738 -99,725 -79,725z"/>
+<glyph unicode="&#xE0CA;" horiz-adv-x="0" d="M-103,572l36,0l65,78l4,0l65,-78l36,0l-84,114l-38,0 z M78,637l33,0l90,111l-46,0z"/>
+<glyph unicode="&#xE0CB;" horiz-adv-x="0" d="M79,770l33,0l86,106l-48,0 z M-111,709l39,0l70,66l4,0l70,-66l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#xE0CC;" horiz-adv-x="0" d="M-103,572l36,0l65,78l4,0l65,-78l36,0l-84,114l-38,0 z M96,748l-47,0l91,-111l33,0z"/>
+<glyph unicode="&#xE0CD;" horiz-adv-x="0" d="M80,876l-47,0l86,-106l33,0 z M-111,709l39,0l70,66l4,0l70,-66l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#xE0CE;" horiz-adv-x="0" d="M-103,572l36,0l65,78l4,0l65,-78l36,0l-84,114l-38,0 z M103,628C140,640 182,658 182,704C182,752 135,772 76,774l-3,-29C121,743 144,729 144,699C144,676 123,663 95,653z"/>
+<glyph unicode="&#xE0CF;" horiz-adv-x="0" d="M102,757C140,766 181,785 181,831C181,878 134,896 75,899l-5,-31C118,866 143,856 143,826C143,803 120,791 92,784 z M-111,709l39,0l70,66l4,0l70,-66l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#xE0D0;" horiz-adv-x="0" d="M-111,570l36,0l73,69l4,0l73,-69l36,0l-91,100l-40,0 z M-93,706C-88,736 -73,751 -51,751C-16,751 2,706 51,706C97,706 119,745 121,783l-28,0C88,753 73,738 51,738C16,738 -2,783 -51,783C-97,783 -119,744 -121,706z"/>
+<glyph unicode="&#xE0D1;" horiz-adv-x="0" d="M-111,709l39,0l70,66l4,0l70,-66l39,0l-91,100l-40,0 z M-93,843C-89,873 -73,892 -51,892C-17,892 3,843 51,843C98,843 119,886 122,924l-29,0C89,894 73,875 51,875C17,875 -3,924 -51,924C-98,924 -119,881 -122,843z"/>
+<glyph unicode="&#xE0D2;" horiz-adv-x="0" d="M-32,667l34,0l86,110l-46,0 z M0,576C82,576 113,644 119,695l-31,0C82,651 55,607 0,607C-55,607 -82,651 -88,695l-31,0C-113,644 -82,576 0,576z"/>
+<glyph unicode="&#xE0D3;" horiz-adv-x="0" d="M-35,799l33,0l95,97l-49,0 z M0,711C72,711 107,766 113,811l-31,0C74,776 51,742 0,742C-51,742 -74,776 -82,811l-31,0C-107,766 -72,711 0,711z"/>
+<glyph unicode="&#xE0D4;" horiz-adv-x="0" d="M-42,777l-46,0l86,-110l34,0 z M0,576C82,576 113,644 119,695l-31,0C82,651 55,607 0,607C-55,607 -82,651 -88,695l-31,0C-113,644 -82,576 0,576z"/>
+<glyph unicode="&#xE0D5;" horiz-adv-x="0" d="M-44,896l-49,0l95,-97l33,0 z M0,711C72,711 107,766 113,811l-31,0C74,776 51,742 0,742C-51,742 -74,776 -82,811l-31,0C-107,766 -72,711 0,711z"/>
+<glyph unicode="&#xE0D6;" horiz-adv-x="0" d="M0,576C82,576 113,644 119,695l-31,0C82,651 55,607 0,607C-55,607 -82,651 -88,695l-31,0C-113,644 -82,576 0,576 z M-22,675C16,687 57,705 57,752C57,799 11,819 -48,821l-4,-29C-4,790 19,777 19,746C19,723 -1,710 -30,701z"/>
+<glyph unicode="&#xE0D7;" horiz-adv-x="0" d="M-17,797C21,807 62,825 62,871C62,919 15,937 -44,939l-5,-30C-1,906 24,896 24,866C24,843 1,832 -27,824 z M0,711C72,711 107,766 113,811l-31,0C74,776 51,742 0,742C-51,742 -74,776 -82,811l-31,0C-107,766 -72,711 0,711z"/>
+<glyph unicode="&#xE0D8;" horiz-adv-x="0" d="M0,576C82,576 111,628 117,675l-31,0C80,640 53,607 0,607C-53,607 -80,640 -86,675l-31,0C-111,628 -82,576 0,576 z M-121,706l28,0C-88,736 -73,751 -51,751C-16,751 2,706 51,706C97,706 119,745 121,783l-28,0C88,753 73,738 51,738C16,738 -2,783 -51,783C-97,783 -119,744 -121,706z"/>
+<glyph unicode="&#xE0D9;" horiz-adv-x="0" d="M0,711C72,711 107,766 113,811l-31,0C74,776 51,742 0,742C-51,742 -74,776 -82,811l-31,0C-107,766 -72,711 0,711 z M-93,843C-89,873 -73,892 -51,892C-17,892 3,843 51,843C98,843 119,886 122,924l-29,0C89,894 73,875 51,875C17,875 -3,924 -51,924C-98,924 -119,881 -122,843z"/>
+<glyph unicode="&#xE0DA;" horiz-adv-x="5" d="M0,548l8,156l0,50l-38,0l3,-206z"/>
+<glyph unicode="&#xE0DB;" horiz-adv-x="0" d="M24,539l12,29C8,574 -20,586 -20,617C-20,644 17,659 72,667l-6,30C1,689 -60,664 -60,612C-60,571 -31,550 24,539z"/>
+<glyph unicode="&#xA0;" horiz-adv-x="199"/>
+<glyph unicode="&#x2007;" horiz-adv-x="479"/>
+<glyph unicode="&#xE0DC;" horiz-adv-x="133"/>
+<glyph unicode="&#xE0DD;" horiz-adv-x="133"/>
+<glyph unicode="&#x243;" horiz-adv-x="588" d="M157,37l0,141l166,0l0,33l-166,0l0,124l133,0C424,335 502,289 502,193C502,86 421,37 290,37 z M157,622l119,0C397,622 461,586 461,501C461,414 406,370 270,370l-113,0 z M389,357C467,377 506,431 506,499C506,609 421,659 289,659l-178,0l0,-448l-78,-3l0,-30l78,0l0,-178l191,0C451,0 547,65 547,193C547,285 486,339 389,353z"/>
+<glyph unicode="&#x12C;" horiz-adv-x="240" d="M97,0l46,0l0,659l-46,0 z M120,711C196,711 229,769 235,815l-32,0C197,780 172,743 120,743C69,743 44,780 38,815l-33,0C11,769 45,711 120,711z"/>
+<glyph unicode="&#x14E;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M326,711C402,711 435,769 441,815l-32,0C403,780 378,743 326,743C275,743 250,780 244,815l-33,0C217,769 251,711 326,711z"/>
+<glyph unicode="&#x180;" horiz-adv-x="528" d="M136,354C193,405 245,433 293,433C403,433 445,349 445,237C445,113 375,27 278,27C241,27 189,44 136,89 z M136,491l0,90l190,0l0,33l-190,0l0,105l-44,0l0,-105l-77,-4l0,-29l77,0l0,-581l37,0l5,45l2,0C181,10 234,-12 280,-12C393,-12 492,80 492,237C492,380 428,472 300,472C241,472 183,438 134,397z"/>
+<glyph unicode="&#x12D;" horiz-adv-x="229" d="M92,0l44,0l0,480l-44,0 z M115,576C197,576 228,644 234,695l-33,0C195,652 169,608 115,608C62,608 35,652 29,695l-33,0C2,644 34,576 115,576z"/>
+<glyph unicode="&#x14F;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M267,576C349,576 381,644 386,695l-33,0C348,652 321,608 267,608C214,608 187,652 181,695l-32,0C154,644 186,576 267,576z"/>
+<glyph unicode="&#xE0DE;" horiz-adv-x="0" d="M-111,570l36,0l73,69l4,0l73,-69l36,0l-91,100l-40,0 z M0,697C70,697 102,741 107,783l-31,0C71,752 47,728 0,728C-47,728 -71,752 -76,783l-31,0C-102,741 -70,697 0,697z"/>
+<glyph unicode="&#xE0DF;" horiz-adv-x="0" d="M-111,709l39,0l70,66l4,0l70,-66l39,0l-91,100l-40,0 z M0,836C72,836 107,880 113,922l-31,0C74,891 51,867 0,867C-51,867 -74,891 -82,922l-31,0C-107,880 -72,836 0,836z"/>
+<glyph unicode="&#x1E06;" horiz-adv-x="578" d="M97,0l191,0C437,0 533,65 533,192C533,283 473,337 376,351l0,4C453,375 493,430 493,499C493,609 408,659 275,659l-178,0 z M143,369l0,252l119,0C383,621 447,585 447,500C447,413 392,369 257,369 z M143,38l0,294l133,0C411,332 488,286 488,192C488,86 407,38 276,38 z M405,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#x1E07;" horiz-adv-x="544" d="M92,0l37,0l5,45l2,0C181,10 234,-12 280,-12C393,-12 492,84 492,247C492,396 428,492 300,492C241,492 183,458 134,417l2,94l0,208l-44,0 z M136,89l0,285C193,425 245,453 293,453C403,453 445,365 445,247C445,117 375,27 278,27C241,27 189,44 136,89 z M392,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#x1E34;" horiz-adv-x="558" d="M97,0l46,0l0,227l134,153l218,-380l53,0l-239,415l210,244l-55,0l-319,-366l-2,0l0,366l-46,0 z M435,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#x1E35;" horiz-adv-x="464" d="M92,0l44,0l0,131l108,126l159,-257l49,0l-182,290l156,190l-51,0l-237,-291l-2,0l0,530l-44,0 z M371,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#x1E16;" horiz-adv-x="515" d="M97,0l371,0l0,40l-325,0l0,290l264,0l0,40l-264,0l0,249l315,0l0,40l-361,0 z M242,829l39,0l109,106l-54,0 z M165,734l228,0l0,36l-228,0z"/>
+<glyph unicode="&#x1E17;" horiz-adv-x="483" d="M52,239C52,82 151,-12 274,-12C344,-12 387,12 425,35l-18,34C371,43 330,26 278,26C170,26 99,113 97,234l346,0C445,246 445,258 445,270C445,411 375,492 261,492C154,492 52,396 52,239 z M97,268C107,383 180,454 262,454C348,454 403,391 403,268 z M218,710l36,0l96,98l-52,0 z M148,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x1E52;" horiz-adv-x="652" d="M326,-12C485,-12 598,123 598,332C598,540 485,671 326,671C168,671 55,540 55,332C55,123 168,-12 326,-12 z M326,30C192,30 103,149 103,332C103,514 192,629 326,629C460,629 549,514 549,332C549,149 460,30 326,30 z M285,829l39,0l109,106l-53,0 z M209,734l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x1E53;" horiz-adv-x="535" d="M52,239C52,80 152,-12 267,-12C383,-12 483,80 483,239C483,400 383,492 267,492C152,492 52,400 52,239 z M98,239C98,366 170,453 267,453C364,453 437,366 437,239C437,113 364,27 267,27C170,27 98,113 98,239 z M224,710l36,0l97,98l-53,0 z M154,606l227,0l0,36l-227,0z"/>
+<glyph unicode="&#x2016;" horiz-adv-x="354" d="M95,-250l36,0l0,1000l-36,0 z M223,-250l36,0l0,1000l-36,0z"/>
+<glyph unicode="&#x203D;" horiz-adv-x="404" d="M205,477l1,68l-43,0l2,-68l5,-298l9,0l21,0l2,0C183,329 354,389 354,530C354,615 295,682 196,682C127,682 73,648 34,604l27,-25C95,621 143,644 193,644C273,644 309,588 309,525C309,439 240,389 202,313 z M186,79C164,79 144,62 144,33C144,5 164,-12 186,-12C208,-12 229,5 229,33C229,62 208,79 186,79z"/>
+<glyph unicode="&#x231C;" horiz-adv-x="279" d="M98,0l35,0l0,660l125,0l0,28l-160,0z"/>
+<glyph unicode="&#x231D;" horiz-adv-x="279" d="M181,688l-160,0l0,-28l125,0l0,-660l35,0z"/>
+<glyph unicode="&#x231E;" horiz-adv-x="279" d="M98,-49l160,0l0,29l-125,0l0,659l-35,0z"/>
+<glyph unicode="&#x231F;" horiz-adv-x="279" d="M181,639l-35,0l0,-659l-125,0l0,-29l160,0z"/>
+<glyph unicode="&#x27E6;" horiz-adv-x="343" d="M98,-152l224,0l0,29l-121,0l0,802l121,0l0,29l-224,0 z M130,679l41,0l0,-802l-41,0z"/>
+<glyph unicode="&#x27E7;" horiz-adv-x="343" d="M245,708l-224,0l0,-29l121,0l0,-802l-121,0l0,-29l224,0 z M213,679l0,-802l-41,0l0,802z"/>
+<glyph unicode="&#x2E22;" horiz-adv-x="279" d="M98,278l35,0l0,401l125,0l0,29l-160,0z"/>
+<glyph unicode="&#x2E23;" horiz-adv-x="279" d="M181,708l-160,0l0,-29l125,0l0,-401l35,0z"/>
+<glyph unicode="&#x2E24;" horiz-adv-x="279" d="M98,-152l160,0l0,29l-125,0l0,401l-35,0z"/>
+<glyph unicode="&#x2E25;" horiz-adv-x="279" d="M181,278l-35,0l0,-401l-125,0l0,-29l160,0z"/>
+<glyph unicode="&#xE0E0;" horiz-adv-x="479" d="M239,-12C361,-12 430,109 430,322C430,534 361,651 239,651C117,651 48,534 48,322C48,109 117,-12 239,-12 z M239,26C150,26 92,128 92,322C92,516 150,613 239,613C328,613 386,516 386,322C386,128 328,26 239,26 z M239,267C267,267 294,288 294,327C294,366 267,387 239,387C211,387 185,366 185,327C185,288 211,267 239,267z"/>
+<glyph unicode="&#xE0E1;" horiz-adv-x="479" d="M357,125C331,59 290,25 239,25C150,25 92,127 92,322C92,384 98,436 109,478 z M122,518C147,582 188,614 239,614C328,614 386,517 386,322C386,260 380,208 370,166 z M239,651C117,651 48,534 48,322C48,109 117,-12 239,-12C361,-12 430,109 430,322C430,534 361,651 239,651z"/>
+<glyph unicode="&#xE0E2;" horiz-adv-x="513" d="M257,-12C385,-12 458,110 458,322C458,533 385,651 257,651C129,651 56,533 56,322C56,110 129,-12 257,-12 z M257,27C162,27 101,129 101,322C101,515 162,612 257,612C352,612 413,515 413,322C413,129 352,27 257,27 z M257,267C285,267 311,288 311,327C311,366 285,387 257,387C229,387 202,366 202,327C202,288 229,267 257,267z"/>
+<glyph unicode="&#xE0E3;" horiz-adv-x="513" d="M382,125C355,59 311,25 257,25C162,25 100,127 100,322C100,385 106,437 118,480 z M131,518C159,582 202,614 257,614C351,614 414,517 414,322C414,259 407,206 396,163 z M257,651C129,651 56,533 56,322C56,110 129,-12 257,-12C385,-12 458,110 458,322C458,533 385,651 257,651z"/>
+<glyph unicode="&#xE0E4;" horiz-adv-x="229" d="M115,596C137,596 155,612 155,635C155,660 137,675 115,675C93,675 75,660 75,635C75,612 93,596 115,596 z M92,0l44,0l0,480l-44,0z"/>
+<glyph unicode="&#xE0E5;" horiz-adv-x="451" d="M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE0E6;" horiz-adv-x="514" d="M97,0l164,0C387,0 469,49 469,150C469,220 418,260 346,273l0,4C404,293 435,334 435,386C435,475 362,512 250,512l-153,0 z M143,288l0,188l97,0C340,476 392,449 392,385C392,322 347,288 236,288 z M143,36l0,218l108,0C362,254 425,221 425,150C425,64 353,36 251,36z"/>
+<glyph unicode="&#xE0E7;" horiz-adv-x="494" d="M55,257C55,90 151,-12 290,-12C362,-12 411,14 456,62l-27,28C391,49 349,29 292,29C175,29 103,116 103,257C103,396 176,483 296,483C346,483 384,462 414,431l27,30C410,494 360,524 296,524C153,524 55,421 55,257z"/>
+<glyph unicode="&#xE0E8;" horiz-adv-x="540" d="M97,0l132,0C400,0 485,100 485,257C485,415 400,512 228,512l-131,0 z M143,37l0,438l83,0C373,475 437,387 437,257C437,119 373,37 226,37z"/>
+<glyph unicode="&#xE0E9;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0z"/>
+<glyph unicode="&#xE0EA;" horiz-adv-x="424" d="M97,0l46,0l0,241l220,0l0,37l-220,0l0,196l261,0l0,38l-307,0z"/>
+<glyph unicode="&#xE0EB;" horiz-adv-x="534" d="M55,257C55,90 152,-12 296,-12C369,-12 427,12 462,43l0,212l-172,0l0,-37l128,0l0,-153C392,42 349,29 300,29C175,29 103,117 103,257C103,397 179,483 304,483C363,483 400,461 428,433l27,30C424,492 378,524 304,524C156,524 55,421 55,257z"/>
+<glyph unicode="&#xE0EC;" horiz-adv-x="578" d="M97,0l46,0l0,252l292,0l0,-252l46,0l0,512l-46,0l0,-220l-292,0l0,220l-46,0z"/>
+<glyph unicode="&#xE0ED;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0z"/>
+<glyph unicode="&#xE0EE;" horiz-adv-x="419" d="M41,67C69,18 117,-12 180,-12C284,-12 324,57 324,141l0,371l-46,0l0,-366C278,64 245,29 179,29C134,29 101,47 74,90z"/>
+<glyph unicode="&#xE0EF;" horiz-adv-x="491" d="M97,0l46,0l0,176l111,113l176,-289l51,0l-198,321l177,191l-53,0l-262,-276l-2,0l0,276l-46,0z"/>
+<glyph unicode="&#xE0F0;" horiz-adv-x="417" d="M97,0l298,0l0,39l-252,0l0,473l-46,0z"/>
+<glyph unicode="&#xE0F1;" horiz-adv-x="624" d="M97,0l43,0l0,320C140,363 136,420 134,464l4,0l43,-114l114,-296l34,0l114,296l42,114l4,0C486,419 485,363 485,320l0,-320l42,0l0,512l-60,0l-111,-293l-42,-111l-4,0l-40,111l-112,293l-61,0z"/>
+<glyph unicode="&#xE0F2;" horiz-adv-x="573" d="M97,0l43,0l0,303C140,353 137,403 134,453l4,0l62,-103l228,-350l47,0l0,512l-42,0l0,-299C433,162 436,109 438,59l-4,0l-61,102l-228,351l-48,0z"/>
+<glyph unicode="&#xE0F3;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29z"/>
+<glyph unicode="&#xE0F4;" horiz-adv-x="499" d="M97,0l46,0l0,214l109,0C377,214 453,263 453,366C453,474 377,512 252,512l-155,0 z M143,250l0,224l100,0C354,474 406,447 406,365C406,284 357,250 247,250z"/>
+<glyph unicode="&#xE0F5;" horiz-adv-x="574" d="M103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,116 397,26 287,26C176,26 103,116 103,257 z M510,-93C495,-98 478,-102 453,-102C385,-102 334,-73 309,-11C432,0 519,102 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,104 138,2 260,-11C289,-87 355,-142 449,-142C478,-142 505,-137 520,-131z"/>
+<glyph unicode="&#xE0F6;" horiz-adv-x="500" d="M143,474l106,0C346,474 399,447 399,372C399,300 350,264 249,264l-106,0 z M456,0l-150,231C391,243 444,292 444,373C444,474 370,512 259,512l-162,0l0,-512l46,0l0,228l114,0l148,-228z"/>
+<glyph unicode="&#xE0F7;" horiz-adv-x="457" d="M46,64C92,20 154,-12 237,-12C346,-12 416,48 416,128C416,212 367,238 291,268l-71,30C159,323 122,344 122,396C122,451 169,486 241,486C295,486 340,464 373,433l26,30C366,496 311,524 241,524C146,524 76,472 76,393C76,324 132,287 202,259l70,-29C327,207 369,188 369,125C369,66 320,26 238,26C172,26 115,54 74,97z"/>
+<glyph unicode="&#xE0F8;" horiz-adv-x="453" d="M204,0l46,0l0,474l174,0l0,38l-395,0l0,-38l175,0z"/>
+<glyph unicode="&#xE0F9;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0z"/>
+<glyph unicode="&#xE0FA;" horiz-adv-x="421" d="M187,0l49,0l180,512l-46,0l-98,-290C251,159 236,112 215,50l-4,0C190,112 173,159 152,222l-99,290l-49,0z"/>
+<glyph unicode="&#xE0FB;" horiz-adv-x="664" d="M153,0l50,0l97,338C310,379 320,414 330,454l4,0C343,414 353,379 363,338l99,-338l49,0l124,512l-44,0l-67,-293C511,163 500,107 488,52l-4,0C468,107 454,163 439,219l-84,293l-44,0l-85,-293C212,163 196,107 183,52l-3,0C167,107 154,163 142,219l-67,293l-47,0z"/>
+<glyph unicode="&#xE0FC;" horiz-adv-x="420" d="M17,0l48,0l93,151C173,176 188,201 206,232l4,0C229,201 244,176 259,151l94,-151l50,0l-166,262l154,250l-48,0l-87,-144C243,345 230,325 215,296l-4,0C193,325 182,345 167,368l-89,144l-49,0l154,-247z"/>
+<glyph unicode="&#xE0FD;" horiz-adv-x="384" d="M169,0l46,0l0,205l167,307l-48,0l-80,-154C235,320 216,285 196,248l-4,0C171,285 151,320 132,358l-81,154l-48,0l166,-307z"/>
+<glyph unicode="&#xE0FE;" horiz-adv-x="472" d="M50,0l374,0l0,38l-317,0l313,448l0,26l-343,0l0,-38l287,0l-314,-448z"/>
+<glyph unicode="&#xE0FF;" horiz-adv-x="451" d="M262,590l-92,106l-58,0l110,-106 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE100;" horiz-adv-x="451" d="M338,696l-58,0l-92,-106l41,0 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE101;" horiz-adv-x="451" d="M223,663l4,0l75,-73l40,0l-96,106l-42,0l-96,-106l40,0 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE102;" horiz-adv-x="451" d="M326,689C322,656 306,633 285,633C244,633 219,689 167,689C122,689 99,642 96,597l28,0C128,631 144,654 166,654C206,654 232,597 284,597C329,597 352,645 355,689 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE103;" horiz-adv-x="451" d="M304,606C325,606 341,620 341,642C341,665 325,679 304,679C283,679 267,665 267,642C267,620 283,606 304,606 z M146,606C167,606 183,620 183,642C183,665 167,679 146,679C126,679 110,665 110,642C110,620 126,606 146,606 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE104;" horiz-adv-x="451" d="M339,651l-228,0l0,-36l228,0 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE105;" horiz-adv-x="451" d="M308,696C302,661 277,624 225,624C174,624 149,661 143,696l-33,0C116,651 150,592 225,592C301,592 334,651 340,696 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE106;" horiz-adv-x="451" d="M225,719C253,719 276,698 276,663C276,626 253,607 225,607C196,607 173,626 173,663C173,698 196,719 225,719 z M225,581C270,581 307,614 307,663C307,712 270,745 225,745C178,745 143,712 143,663C143,614 178,581 225,581 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE107;" horiz-adv-x="451" d="M246,590l96,106l-40,0l-75,-72l-4,0l-75,72l-40,0l96,-106 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE108;" horiz-adv-x="451" d="M225,-114C204,-114 187,-130 187,-153C187,-178 204,-194 225,-194C247,-194 263,-178 263,-153C263,-130 247,-114 225,-114 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M443,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0l61,-168z"/>
+<glyph unicode="&#xE109;" horiz-adv-x="451" d="M202,584C249,597 296,618 296,670C296,720 241,742 175,744l-4,-31C226,710 257,695 257,665C257,636 230,621 193,610 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE10A;" horiz-adv-x="451" d="M423,757l-47,0l-72,-106l33,0 z M223,657l4,0l70,-67l39,0l-91,100l-40,0l-90,-100l39,0 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE10B;" horiz-adv-x="451" d="M377,651l-71,106l-48,0l86,-106 z M223,657l4,0l70,-67l39,0l-91,100l-40,0l-90,-100l39,0 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE10C;" horiz-adv-x="451" d="M327,638C365,648 406,666 406,712C406,760 360,778 301,780l-6,-30C344,747 368,737 368,707C368,684 346,673 317,665 z M223,657l4,0l70,-67l39,0l-91,100l-40,0l-90,-100l39,0 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE10D;" horiz-adv-x="451" d="M318,805C314,775 298,756 277,756C242,756 222,805 174,805C128,805 106,762 103,724l29,0C137,754 152,773 174,773C209,773 228,724 276,724C323,724 344,767 347,805 z M205,690l-90,-100l39,0l69,67l4,0l70,-67l39,0l-91,100 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE10E;" horiz-adv-x="451" d="M223,663l4,0l75,-73l40,0l-96,106l-42,0l-96,-106l40,0 z M225,-114C204,-114 187,-130 187,-153C187,-178 204,-194 225,-194C247,-194 263,-178 263,-153C263,-130 247,-114 225,-114 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M443,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0l61,-168z"/>
+<glyph unicode="&#xE10F;" horiz-adv-x="451" d="M318,777l-48,0l-80,-97l34,0 z M307,693C299,657 276,623 225,623C174,623 151,657 143,693l-31,0C118,647 153,592 225,592C297,592 332,647 338,693 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE110;" horiz-adv-x="451" d="M261,680l-80,97l-49,0l95,-97 z M307,693C299,657 276,623 225,623C174,623 151,657 143,693l-31,0C118,647 153,592 225,592C297,592 332,647 338,693 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE111;" horiz-adv-x="451" d="M208,678C246,688 287,706 287,752C287,800 241,818 182,820l-6,-30C225,788 249,778 249,747C249,724 226,713 198,705 z M307,693C299,657 276,623 225,623C174,623 151,657 143,693l-31,0C118,647 153,592 225,592C297,592 332,647 338,693 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE112;" horiz-adv-x="451" d="M318,805C314,775 298,756 277,756C242,756 222,805 174,805C128,805 106,762 103,724l29,0C137,754 152,773 174,773C209,773 228,724 276,724C323,724 344,767 347,805 z M112,693C118,647 153,592 225,592C297,592 332,647 338,693l-31,0C299,657 276,623 225,623C174,623 151,657 143,693 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M395,0l48,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0z"/>
+<glyph unicode="&#xE113;" horiz-adv-x="451" d="M308,696C302,661 277,624 225,624C174,624 149,661 143,696l-33,0C116,651 150,592 225,592C301,592 334,651 340,696 z M225,-114C204,-114 187,-130 187,-153C187,-178 204,-194 225,-194C247,-194 263,-178 263,-153C263,-130 247,-114 225,-114 z M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M443,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0l61,-168z"/>
+<glyph unicode="&#xE114;" horiz-adv-x="451" d="M130,205l34,93C186,359 203,408 223,468l4,0C247,409 265,359 287,298l34,-93 z M463,-154C449,-164 437,-168 419,-168C394,-168 369,-151 369,-116C369,-75 401,-27 443,0l-194,512l-47,0l-194,-512l46,0l62,168l218,0l61,-168l6,0C365,-25 330,-73 330,-123C330,-178 367,-205 414,-205C436,-205 464,-194 479,-181z"/>
+<glyph unicode="&#xE115;" horiz-adv-x="694" d="M184,198l59,100C277,357 313,418 346,475l3,0l0,-277 z M395,38l0,215l202,0l0,37l-202,0l0,184l243,0l0,38l-314,0l-303,-512l47,0l95,161l186,0l0,-161l299,0l0,38z"/>
+<glyph unicode="&#xE116;" horiz-adv-x="531" d="M160,34l0,98l145,0l0,31l-145,0l0,91l108,0C379,254 442,221 442,149C442,63 370,34 268,34 z M160,478l97,0C357,478 409,451 409,386C409,322 364,288 253,288l-93,0 z M363,277C421,293 452,334 452,386C452,475 379,512 267,512l-153,0l0,-349l-77,-2l0,-29l77,0l0,-132l164,0C404,0 486,49 486,150C486,220 435,260 363,273z"/>
+<glyph unicode="&#xE117;" horiz-adv-x="514" d="M97,0l164,0C387,0 469,49 469,150C469,220 418,260 346,273l0,4C404,293 435,334 435,386C435,475 362,512 250,512l-153,0 z M143,288l0,188l97,0C340,476 392,449 392,385C392,322 347,288 236,288 z M143,36l0,218l108,0C362,254 425,221 425,150C425,64 353,36 251,36 z M392,-124l-228,0l0,-36l228,0z"/>
+<glyph unicode="&#xE118;" horiz-adv-x="494" d="M429,90C391,49 349,29 292,29C175,29 103,116 103,257C103,396 176,483 296,483C346,483 384,462 414,431l27,30C410,494 360,524 296,524C153,524 55,421 55,257C55,97 143,-3 272,-11l-33,-63C277,-84 305,-97 305,-127C305,-155 268,-170 213,-178l6,-30C284,-200 345,-175 345,-123C345,-83 317,-65 285,-54l22,43C370,-8 415,18 456,62z"/>
+<glyph unicode="&#xE119;" horiz-adv-x="494" d="M55,257C55,90 151,-12 290,-12C362,-12 411,14 456,62l-27,28C391,49 349,29 292,29C175,29 103,116 103,257C103,396 176,483 296,483C346,483 384,462 414,431l27,30C410,494 360,524 296,524C153,524 55,421 55,257 z M401,696l-58,0l-93,-106l41,0z"/>
+<glyph unicode="&#xE11A;" horiz-adv-x="494" d="M55,257C55,90 151,-12 290,-12C362,-12 411,14 456,62l-27,28C391,49 349,29 292,29C175,29 103,116 103,257C103,396 176,483 296,483C346,483 384,462 414,431l27,30C410,494 360,524 296,524C153,524 55,421 55,257 z M211,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE11B;" horiz-adv-x="494" d="M55,257C55,90 151,-12 290,-12C362,-12 411,14 456,62l-27,28C391,49 349,29 292,29C175,29 103,116 103,257C103,396 176,483 296,483C346,483 384,462 414,431l27,30C410,494 360,524 296,524C153,524 55,421 55,257 z M365,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE11C;" horiz-adv-x="494" d="M55,257C55,90 151,-12 290,-12C362,-12 411,14 456,62l-27,28C391,49 349,29 292,29C175,29 103,116 103,257C103,396 176,483 296,483C346,483 384,462 414,431l27,30C410,494 360,524 296,524C153,524 55,421 55,257 z M288,602C310,602 328,619 328,643C328,666 310,683 288,683C266,683 247,666 247,643C247,619 266,602 288,602z"/>
+<glyph unicode="&#xE11D;" horiz-adv-x="539" d="M97,0l132,0C400,0 485,100 485,257C485,415 400,512 228,512l-131,0 z M143,37l0,438l83,0C373,475 437,387 437,257C437,119 373,37 226,37 z M353,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE11E;" horiz-adv-x="539" d="M97,0l132,0C400,0 485,100 485,257C485,415 400,512 228,512l-131,0 z M143,37l0,438l83,0C373,475 437,387 437,257C437,119 373,37 226,37 z M271,-194C293,-194 309,-178 309,-153C309,-130 293,-114 271,-114C250,-114 233,-130 233,-153C233,-178 250,-194 271,-194z"/>
+<glyph unicode="&#xE11F;" horiz-adv-x="539" d="M97,0l132,0C400,0 485,100 485,257C485,415 400,512 228,512l-131,0 z M143,37l0,438l83,0C373,475 437,387 437,257C437,119 373,37 226,37 z M385,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#xE120;" horiz-adv-x="557" d="M160,37l0,218l145,0l0,33l-145,0l0,187l83,0C390,475 454,387 454,257C454,119 390,37 243,37 z M114,512l0,-224l-77,-2l0,-31l77,0l0,-255l132,0C417,0 502,100 502,257C502,415 417,512 245,512z"/>
+<glyph unicode="&#xE121;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M259,590l40,0l-92,106l-58,0z"/>
+<glyph unicode="&#xE122;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M375,696l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#xE123;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M185,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE124;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M339,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE125;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M183,606C204,606 220,620 220,642C220,665 204,679 183,679C162,679 147,665 147,642C147,620 162,606 183,606 z M341,606C362,606 377,620 377,642C377,665 362,679 341,679C320,679 304,665 304,642C304,620 320,606 341,606z"/>
+<glyph unicode="&#xE126;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M148,615l228,0l0,36l-228,0z"/>
+<glyph unicode="&#xE127;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M262,592C338,592 371,651 377,696l-33,0C338,661 314,624 262,624C210,624 186,661 180,696l-33,0C153,651 186,592 262,592z"/>
+<glyph unicode="&#xE128;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M262,602C284,602 302,619 302,643C302,666 284,683 262,683C240,683 222,666 222,643C222,619 240,602 262,602z"/>
+<glyph unicode="&#xE129;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M265,-194C286,-194 303,-178 303,-153C303,-130 286,-114 265,-114C243,-114 227,-130 227,-153C227,-178 243,-194 265,-194z"/>
+<glyph unicode="&#xE12A;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M238,584C286,597 333,618 333,670C333,720 278,742 212,744l-4,-31C263,710 293,695 293,665C293,636 266,621 230,610z"/>
+<glyph unicode="&#xE12B;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M321,597C366,597 389,645 392,689l-29,0C359,656 343,633 322,633C281,633 256,689 203,689C158,689 135,642 132,597l29,0C165,631 181,654 202,654C243,654 268,597 321,597z"/>
+<glyph unicode="&#xE12C;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M341,651l33,0l86,106l-48,0 z M151,590l39,0l70,67l4,0l70,-67l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#xE12D;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M342,757l-47,0l86,-106l33,0 z M151,590l39,0l70,67l4,0l70,-67l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#xE12E;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M364,638C402,648 443,666 443,712C443,760 396,778 337,780l-5,-30C380,747 405,737 405,707C405,684 382,673 354,665 z M151,590l39,0l70,67l4,0l70,-67l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#xE12F;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M151,590l39,0l70,67l4,0l70,-67l39,0l-91,100l-40,0 z M169,724C173,754 189,773 211,773C246,773 265,724 313,724C360,724 381,767 384,805l-29,0C351,775 335,756 314,756C279,756 259,805 211,805C165,805 143,762 140,724z"/>
+<glyph unicode="&#xE130;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M185,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106 z M265,-194C286,-194 303,-178 303,-153C303,-130 286,-114 265,-114C243,-114 227,-130 227,-153C227,-178 243,-194 265,-194z"/>
+<glyph unicode="&#xE131;" horiz-adv-x="461" d="M97,0l254,0C311,-25 278,-71 278,-123C278,-178 316,-205 362,-205C384,-205 412,-194 427,-181l-16,27C398,-164 385,-168 368,-168C343,-168 317,-151 317,-116C317,-58 367,-9 412,0l2,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0z"/>
+<glyph unicode="&#xE132;" horiz-adv-x="461" d="M97,0l317,0l0,38l-271,0l0,215l221,0l0,37l-221,0l0,184l261,0l0,38l-307,0 z M225,711l39,0l109,106l-54,0 z M148,615l228,0l0,36l-228,0z"/>
+<glyph unicode="&#xE133;" horiz-adv-x="534" d="M55,257C55,90 152,-12 296,-12C369,-12 427,12 462,43l0,212l-172,0l0,-37l128,0l0,-153C392,42 349,29 300,29C175,29 103,117 103,257C103,397 179,483 304,483C363,483 400,461 428,433l27,30C424,492 378,524 304,524C156,524 55,421 55,257 z M225,590l75,73l4,0l74,-73l41,0l-96,106l-43,0l-96,-106z"/>
+<glyph unicode="&#xE134;" horiz-adv-x="534" d="M55,257C55,90 152,-12 296,-12C369,-12 427,12 462,43l0,212l-172,0l0,-37l128,0l0,-153C392,42 349,29 300,29C175,29 103,117 103,257C103,397 179,483 304,483C363,483 400,461 428,433l27,30C424,492 378,524 304,524C156,524 55,421 55,257 z M302,592C377,592 410,651 417,696l-33,0C378,661 353,624 302,624C250,624 225,661 219,696l-33,0C193,651 226,592 302,592z"/>
+<glyph unicode="&#xE135;" horiz-adv-x="534" d="M55,257C55,90 152,-12 296,-12C369,-12 427,12 462,43l0,212l-172,0l0,-37l128,0l0,-153C392,42 349,29 300,29C175,29 103,117 103,257C103,397 179,483 304,483C363,483 400,461 428,433l27,30C424,492 378,524 304,524C156,524 55,421 55,257 z M302,602C323,602 342,619 342,643C342,666 323,683 302,683C280,683 261,666 261,643C261,619 280,602 302,602z"/>
+<glyph unicode="&#xE136;" horiz-adv-x="534" d="M55,257C55,90 152,-12 296,-12C369,-12 427,12 462,43l0,212l-172,0l0,-37l128,0l0,-153C392,42 349,29 300,29C175,29 103,117 103,257C103,397 179,483 304,483C363,483 400,461 428,433l27,30C424,492 378,524 304,524C156,524 55,421 55,257 z M270,-51l-12,-29C286,-86 314,-98 314,-129C314,-156 277,-171 222,-179l6,-30C292,-201 353,-176 353,-124C353,-83 325,-62 270,-51z"/>
+<glyph unicode="&#xE137;" horiz-adv-x="534" d="M55,257C55,90 152,-12 296,-12C369,-12 427,12 462,43l0,212l-172,0l0,-37l128,0l0,-153C392,42 349,29 300,29C175,29 103,117 103,257C103,397 179,483 304,483C363,483 400,461 428,433l27,30C424,492 378,524 304,524C156,524 55,421 55,257 z M378,696l-74,-72l-4,0l-75,72l-41,0l96,-106l43,0l96,106z"/>
+<glyph unicode="&#xE138;" horiz-adv-x="534" d="M55,257C55,90 152,-12 296,-12C369,-12 427,12 462,43l0,212l-172,0l0,-37l128,0l0,-153C392,42 349,29 300,29C175,29 103,117 103,257C103,397 179,483 304,483C363,483 400,461 428,433l27,30C424,492 378,524 304,524C156,524 55,421 55,257 z M188,615l227,0l0,36l-227,0z"/>
+<glyph unicode="&#xE139;" horiz-adv-x="534" d="M55,257C55,90 152,-12 296,-12C369,-12 427,12 462,43l0,212l-172,0l0,-37l128,0l0,-153C392,42 349,29 300,29C175,29 103,117 103,257C103,397 179,483 304,483C363,483 400,461 428,433l27,30C424,492 378,524 304,524C156,524 55,421 55,257 z M360,597C405,597 428,645 431,689l-28,0C398,656 383,633 361,633C321,633 295,689 243,689C198,689 175,642 172,597l28,0C205,631 221,654 242,654C283,654 308,597 360,597z"/>
+<glyph unicode="&#xE13A;" horiz-adv-x="578" d="M97,0l46,0l0,252l292,0l0,-252l46,0l0,512l-46,0l0,-220l-292,0l0,220l-46,0 z M212,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE13B;" horiz-adv-x="578" d="M97,0l46,0l0,252l292,0l0,-252l46,0l0,512l-46,0l0,-220l-292,0l0,220l-46,0 z M289,-194C311,-194 327,-178 327,-153C327,-130 311,-114 289,-114C267,-114 251,-130 251,-153C251,-178 267,-194 289,-194z"/>
+<glyph unicode="&#xE13C;" horiz-adv-x="578" d="M97,0l46,0l0,252l292,0l0,-252l46,0l0,512l-46,0l0,-220l-292,0l0,220l-46,0 z M289,-203C371,-203 402,-135 408,-84l-33,0C369,-127 343,-170 289,-170C236,-170 209,-127 203,-84l-33,0C176,-135 207,-203 289,-203z"/>
+<glyph unicode="&#xE13D;" horiz-adv-x="613" d="M455,291l-292,0l0,92l292,0 z M576,414l-75,0l0,98l-46,0l0,-98l-292,0l0,98l-46,0l0,-98l-81,-4l0,-27l81,0l0,-383l46,0l0,253l292,0l0,-253l46,0l0,383l75,0z"/>
+<glyph unicode="&#xE13E;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M117,590l40,0l-92,106l-58,0z"/>
+<glyph unicode="&#xE13F;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M233,696l-58,0l-92,-106l41,0z"/>
+<glyph unicode="&#xE140;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M43,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE141;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M179,597C224,597 247,645 250,689l-29,0C217,656 201,633 180,633C139,633 114,689 62,689C17,689 -6,642 -9,597l28,0C23,631 39,654 61,654C101,654 127,597 179,597z"/>
+<glyph unicode="&#xE142;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M41,606C62,606 78,620 78,642C78,665 62,679 41,679C21,679 5,665 5,642C5,620 21,606 41,606 z M199,606C220,606 236,620 236,642C236,665 220,679 199,679C178,679 162,665 162,642C162,620 178,606 199,606z"/>
+<glyph unicode="&#xE143;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M6,615l228,0l0,36l-228,0z"/>
+<glyph unicode="&#xE144;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M120,602C142,602 160,619 160,643C160,666 142,683 120,683C98,683 80,666 80,643C80,619 98,602 120,602z"/>
+<glyph unicode="&#xE145;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M197,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE146;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M97,584C144,597 191,618 191,670C191,720 136,742 70,744l-4,-31C121,710 152,695 152,665C152,636 125,621 88,610z"/>
+<glyph unicode="&#xE147;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M120,-194C142,-194 158,-178 158,-153C158,-130 142,-114 120,-114C99,-114 82,-130 82,-153C82,-178 99,-194 120,-194z"/>
+<glyph unicode="&#xE148;" horiz-adv-x="240" d="M97,0l9,0C72,-34 44,-69 44,-123C44,-178 82,-205 128,-205C150,-205 178,-194 193,-181l-16,27C164,-164 151,-168 134,-168C109,-168 83,-151 83,-116C83,-72 109,-38 143,0l0,512l-46,0z"/>
+<glyph unicode="&#xE149;" horiz-adv-x="240" d="M97,0l46,0l0,512l-46,0 z M120,592C196,592 229,651 235,696l-32,0C197,661 172,624 120,624C69,624 44,661 38,696l-33,0C11,651 45,592 120,592z"/>
+<glyph unicode="&#xE14A;" horiz-adv-x="419" d="M41,67C69,18 117,-12 180,-12C284,-12 324,57 324,141l0,371l-46,0l0,-366C278,64 245,29 179,29C134,29 101,47 74,90 z M218,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE14B;" horiz-adv-x="491" d="M97,0l46,0l0,176l111,113l176,-289l51,0l-198,321l177,191l-53,0l-262,-276l-2,0l0,276l-46,0 z M263,-51l-13,-29C279,-86 307,-98 307,-129C307,-156 269,-171 214,-179l7,-30C285,-201 346,-176 346,-124C346,-83 317,-62 263,-51z"/>
+<glyph unicode="&#xE14C;" horiz-adv-x="491" d="M97,0l46,0l0,176l111,113l176,-289l51,0l-198,321l177,191l-53,0l-262,-276l-2,0l0,276l-46,0 z M401,-124l-228,0l0,-36l228,0z"/>
+<glyph unicode="&#xE14D;" horiz-adv-x="417" d="M97,0l298,0l0,39l-252,0l0,473l-46,0 z M239,696l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#xE14E;" horiz-adv-x="417" d="M97,0l298,0l0,39l-252,0l0,473l-46,0 z M326,399l8,156l0,50l-38,0l3,-206z"/>
+<glyph unicode="&#xE14F;" horiz-adv-x="417" d="M97,0l298,0l0,39l-252,0l0,473l-46,0 z M232,-51l-13,-29C248,-86 276,-98 276,-129C276,-156 238,-171 183,-179l7,-30C254,-201 315,-176 315,-124C315,-83 286,-62 232,-51z"/>
+<glyph unicode="&#xE150;" horiz-adv-x="417" d="M97,0l298,0l0,39l-252,0l0,473l-46,0 z M285,269C285,241 306,224 328,224C350,224 370,241 370,269C370,298 350,315 328,315C306,315 285,298 285,269z"/>
+<glyph unicode="&#xE151;" horiz-adv-x="417" d="M97,0l298,0l0,39l-252,0l0,473l-46,0 z M257,-194C279,-194 295,-178 295,-153C295,-130 279,-114 257,-114C235,-114 219,-130 219,-153C219,-178 235,-194 257,-194z"/>
+<glyph unicode="&#xE152;" horiz-adv-x="417" d="M97,0l298,0l0,39l-252,0l0,473l-46,0 z M12,615l228,0l0,36l-228,0 z M257,-194C279,-194 295,-178 295,-153C295,-130 279,-114 257,-114C235,-114 219,-130 219,-153C219,-178 235,-194 257,-194z"/>
+<glyph unicode="&#xE153;" horiz-adv-x="417" d="M97,0l298,0l0,39l-252,0l0,473l-46,0 z M370,-124l-228,0l0,-36l228,0z"/>
+<glyph unicode="&#xE154;" horiz-adv-x="417" d="M148,39l0,171l163,86l0,39l-163,-86l0,263l-46,0l0,-284l-88,-47l0,-40l88,47l0,-188l298,0l0,39z"/>
+<glyph unicode="&#xE155;" horiz-adv-x="624" d="M97,0l43,0l0,320C140,363 136,420 134,464l4,0l43,-114l114,-296l34,0l114,296l42,114l4,0C486,419 485,363 485,320l0,-320l42,0l0,512l-60,0l-111,-293l-42,-111l-4,0l-40,111l-112,293l-61,0 z M312,-194C334,-194 350,-178 350,-153C350,-130 334,-114 312,-114C291,-114 274,-130 274,-153C274,-178 291,-194 312,-194z"/>
+<glyph unicode="&#xE156;" horiz-adv-x="573" d="M97,0l43,0l0,303C140,353 137,403 134,453l4,0l62,-103l228,-350l47,0l0,512l-42,0l0,-299C433,162 436,109 438,59l-4,0l-61,102l-228,351l-48,0 z M407,696l-57,0l-93,-106l41,0z"/>
+<glyph unicode="&#xE157;" horiz-adv-x="573" d="M97,0l43,0l0,303C140,353 137,403 134,453l4,0l62,-103l228,-350l47,0l0,512l-42,0l0,-299C433,162 436,109 438,59l-4,0l-61,102l-228,351l-48,0 z M371,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE158;" horiz-adv-x="573" d="M97,0l43,0l0,303C140,353 137,403 134,453l4,0l62,-103l228,-350l47,0l0,512l-42,0l0,-299C433,162 436,109 438,59l-4,0l-61,102l-228,351l-48,0 z M353,597C398,597 421,645 424,689l-28,0C391,656 375,633 354,633C313,633 288,689 236,689C191,689 168,642 165,597l28,0C198,631 213,654 235,654C275,654 301,597 353,597z"/>
+<glyph unicode="&#xE159;" horiz-adv-x="573" d="M97,0l43,0l0,303C140,353 137,403 134,453l4,0l62,-103l228,-350l47,0l0,512l-42,0l0,-299C433,162 436,109 438,59l-4,0l-61,102l-228,351l-48,0 z M269,-51l-13,-29C285,-86 313,-98 313,-129C313,-156 275,-171 220,-179l7,-30C291,-201 352,-176 352,-124C352,-83 323,-62 269,-51z"/>
+<glyph unicode="&#xE15A;" horiz-adv-x="573" d="M97,0l43,0l0,303C140,353 137,403 134,453l4,0l62,-103l228,-350l47,0l0,512l-42,0l0,-299C433,162 436,109 438,59l-4,0l-61,102l-228,351l-48,0 z M294,602C316,602 335,619 335,643C335,666 316,683 294,683C273,683 254,666 254,643C254,619 273,602 294,602z"/>
+<glyph unicode="&#xE15B;" horiz-adv-x="573" d="M97,0l43,0l0,303C140,353 137,403 134,453l4,0l62,-103l228,-350l47,0l0,512l-42,0l0,-299C433,162 436,109 438,59l-4,0l-61,102l-228,351l-48,0 z M294,-194C316,-194 332,-178 332,-153C332,-130 316,-114 294,-114C272,-114 256,-130 256,-153C256,-178 272,-194 294,-194z"/>
+<glyph unicode="&#xE15C;" horiz-adv-x="573" d="M97,0l43,0l0,303C140,353 137,403 134,453l4,0l62,-103l228,-350l47,0l0,512l-42,0l0,-299C433,162 436,109 438,59l-4,0l-61,102l-228,351l-48,0 z M407,-124l-228,0l0,-36l228,0z"/>
+<glyph unicode="&#xE15D;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M284,590l40,0l-92,106l-58,0z"/>
+<glyph unicode="&#xE15E;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M400,696l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#xE15F;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M210,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE160;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M346,597C391,597 414,645 417,689l-29,0C384,656 368,633 347,633C306,633 281,689 228,689C183,689 160,642 157,597l29,0C190,631 206,654 227,654C268,654 293,597 346,597z"/>
+<glyph unicode="&#xE161;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M208,606C229,606 245,620 245,642C245,665 229,679 208,679C187,679 172,665 172,642C172,620 187,606 208,606 z M366,606C387,606 402,620 402,642C402,665 387,679 366,679C345,679 329,665 329,642C329,620 345,606 366,606z"/>
+<glyph unicode="&#xE162;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M173,615l228,0l0,36l-228,0z"/>
+<glyph unicode="&#xE163;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M231,590l80,106l-49,0l-67,-106 z M340,590l36,0l80,106l-49,0z"/>
+<glyph unicode="&#xE164;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M364,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE165;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M287,-194C309,-194 325,-178 325,-153C325,-130 309,-114 287,-114C265,-114 249,-130 249,-153C249,-178 265,-194 287,-194z"/>
+<glyph unicode="&#xE166;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M263,584C311,597 358,618 358,670C358,720 303,742 237,744l-4,-31C288,710 318,695 318,665C318,636 291,621 255,610z"/>
+<glyph unicode="&#xE167;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M366,651l33,0l86,106l-48,0 z M176,590l39,0l70,67l4,0l70,-67l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#xE168;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M367,757l-47,0l86,-106l33,0 z M176,590l39,0l70,67l4,0l70,-67l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#xE169;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M389,638C427,648 468,666 468,712C468,760 421,778 362,780l-5,-30C405,747 430,737 430,707C430,684 407,673 379,665 z M176,590l39,0l70,67l4,0l70,-67l39,0l-91,100l-40,0z"/>
+<glyph unicode="&#xE16A;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M176,590l39,0l70,67l4,0l70,-67l39,0l-91,100l-40,0 z M194,724C198,754 214,773 236,773C271,773 290,724 338,724C385,724 406,767 409,805l-29,0C376,775 360,756 339,756C304,756 284,805 236,805C190,805 168,762 165,724z"/>
+<glyph unicode="&#xE16B;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M210,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106 z M287,-194C309,-194 325,-178 325,-153C325,-130 309,-114 287,-114C265,-114 249,-130 249,-153C249,-178 265,-194 287,-194z"/>
+<glyph unicode="&#xE16C;" horiz-adv-x="574" d="M435,404C459,367 472,317 472,257C472,117 398,28 287,28C235,28 192,47 160,81 z M139,109C115,147 102,197 102,257C102,398 175,484 287,484C339,484 382,465 414,432 z M528,514l-26,21l-60,-71C402,503 348,524 287,524C151,524 55,422 55,257C55,182 75,120 110,74l-64,-75l26,-21l60,70C172,10 225,-12 287,-12C422,-12 519,93 519,257C519,332 499,394 464,439z"/>
+<glyph unicode="&#xE16D;" horiz-adv-x="717" d="M55,255C55,97 143,0 321,0l349,0l0,38l-253,0l0,215l202,0l0,37l-202,0l0,184l243,0l0,38l-340,0C143,512 55,413 55,255 z M371,475l0,-437l-48,0C170,38 103,125 103,255C103,394 170,475 323,475z"/>
+<glyph unicode="&#xE16E;" horiz-adv-x="574" d="M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M484,590C493,577 498,564 498,551C498,514 472,493 418,484C382,510 337,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12C422,-12 519,93 519,257C519,344 492,413 447,459C502,473 538,502 538,554C538,574 531,592 519,610z"/>
+<glyph unicode="&#xE16F;" horiz-adv-x="574" d="M400,696l-58,0l-92,-106l40,0 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M484,590C493,577 498,564 498,551C498,514 472,493 418,484C382,510 337,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12C422,-12 519,93 519,257C519,344 492,413 447,459C502,473 538,502 538,554C538,574 531,592 519,610z"/>
+<glyph unicode="&#xE170;" horiz-adv-x="574" d="M324,590l-92,106l-58,0l110,-106 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M484,590C493,577 498,564 498,551C498,514 472,493 418,484C382,510 337,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12C422,-12 519,93 519,257C519,344 492,413 447,459C502,473 538,502 538,554C538,574 531,592 519,610z"/>
+<glyph unicode="&#xE171;" horiz-adv-x="574" d="M263,584C311,597 358,618 358,670C358,720 303,742 237,744l-4,-31C288,710 318,695 318,665C318,636 291,621 255,610 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M484,590C493,577 498,564 498,551C498,514 472,493 418,484C382,510 337,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12C422,-12 519,93 519,257C519,344 492,413 447,459C502,473 538,502 538,554C538,574 531,592 519,610z"/>
+<glyph unicode="&#xE172;" horiz-adv-x="574" d="M388,689C384,656 368,633 347,633C306,633 281,689 228,689C183,689 160,642 157,597l29,0C190,631 206,654 227,654C268,654 293,597 346,597C391,597 414,645 417,689 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M484,590C493,577 498,564 498,551C498,514 472,493 418,484C382,510 337,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12C422,-12 519,93 519,257C519,344 492,413 447,459C502,473 538,502 538,554C538,574 531,592 519,610z"/>
+<glyph unicode="&#xE173;" horiz-adv-x="574" d="M287,-114C265,-114 249,-130 249,-153C249,-178 265,-194 287,-194C309,-194 325,-178 325,-153C325,-130 309,-114 287,-114 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M484,590C493,577 498,564 498,551C498,514 472,493 418,484C382,510 337,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12C422,-12 519,93 519,257C519,344 492,413 447,459C502,473 538,502 538,554C538,574 531,592 519,610z"/>
+<glyph unicode="&#xE174;" horiz-adv-x="574" d="M519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,92 147,-12 294,-12C256,-43 234,-83 234,-123C234,-178 272,-205 318,-205C340,-205 368,-194 384,-181l-17,27C354,-164 342,-168 324,-168C299,-168 273,-151 273,-116C273,-80 299,-33 356,-8C460,38 519,122 519,257 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29z"/>
+<glyph unicode="&#xE175;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M287,592C363,592 396,651 402,696l-33,0C363,661 339,624 287,624C235,624 211,661 205,696l-33,0C178,651 211,592 287,592z"/>
+<glyph unicode="&#xE176;" horiz-adv-x="574" d="M287,-12C422,-12 519,93 519,257C519,422 422,524 287,524C151,524 55,422 55,257C55,93 151,-12 287,-12 z M287,29C176,29 103,117 103,257C103,397 176,483 287,483C397,483 471,397 471,257C471,117 397,29 287,29 z M250,711l39,0l109,106l-54,0 z M173,615l228,0l0,36l-228,0z"/>
+<glyph unicode="&#xE177;" horiz-adv-x="500" d="M385,696l-58,0l-92,-106l40,0 z M143,474l106,0C346,474 399,447 399,372C399,300 350,264 249,264l-106,0 z M456,0l-150,231C391,243 444,292 444,373C444,474 370,512 259,512l-162,0l0,-512l46,0l0,228l114,0l148,-228z"/>
+<glyph unicode="&#xE178;" horiz-adv-x="500" d="M293,590l96,106l-40,0l-75,-72l-4,0l-75,72l-40,0l96,-106 z M143,474l106,0C346,474 399,447 399,372C399,300 350,264 249,264l-106,0 z M456,0l-150,231C391,243 444,292 444,373C444,474 370,512 259,512l-162,0l0,-512l46,0l0,228l114,0l148,-228z"/>
+<glyph unicode="&#xE179;" horiz-adv-x="500" d="M237,-80C265,-86 293,-98 293,-129C293,-156 255,-171 200,-179l7,-30C271,-201 332,-176 332,-124C332,-83 304,-62 249,-51 z M143,474l106,0C346,474 399,447 399,372C399,300 350,264 249,264l-106,0 z M306,231C391,243 444,292 444,373C444,474 370,512 259,512l-162,0l0,-512l46,0l0,228l114,0l148,-228l51,0z"/>
+<glyph unicode="&#xE17A;" horiz-adv-x="500" d="M274,-114C253,-114 236,-130 236,-153C236,-178 253,-194 274,-194C296,-194 312,-178 312,-153C312,-130 296,-114 274,-114 z M143,474l106,0C346,474 399,447 399,372C399,300 350,264 249,264l-106,0 z M306,231C391,243 444,292 444,373C444,474 370,512 259,512l-162,0l0,-512l46,0l0,228l114,0l148,-228l51,0z"/>
+<glyph unicode="&#xE17B;" horiz-adv-x="500" d="M386,651l-228,0l0,-36l228,0 z M274,-114C253,-114 236,-130 236,-153C236,-178 253,-194 274,-194C296,-194 312,-178 312,-153C312,-130 296,-114 274,-114 z M143,474l106,0C346,474 399,447 399,372C399,300 350,264 249,264l-106,0 z M306,231C391,243 444,292 444,373C444,474 370,512 259,512l-162,0l0,-512l46,0l0,228l114,0l148,-228l51,0z"/>
+<glyph unicode="&#xE17C;" horiz-adv-x="500" d="M159,-160l229,0l0,36l-229,0 z M143,474l106,0C346,474 399,447 399,372C399,300 350,264 249,264l-106,0 z M306,231C391,243 444,292 444,373C444,474 370,512 259,512l-162,0l0,-512l46,0l0,228l114,0l148,-228l51,0z"/>
+<glyph unicode="&#xE17D;" horiz-adv-x="457" d="M46,64C92,20 154,-12 237,-12C346,-12 416,48 416,128C416,212 367,238 291,268l-71,30C159,323 122,344 122,396C122,451 169,486 241,486C295,486 340,464 373,433l26,30C366,496 311,524 241,524C146,524 76,472 76,393C76,324 132,287 202,259l70,-29C327,207 369,188 369,125C369,66 320,26 238,26C172,26 115,54 74,97 z M357,696l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#xE17E;" horiz-adv-x="457" d="M46,64C92,20 154,-12 237,-12C346,-12 416,48 416,128C416,212 367,238 291,268l-71,30C159,323 122,344 122,396C122,451 169,486 241,486C295,486 340,464 373,433l26,30C366,496 311,524 241,524C146,524 76,472 76,393C76,324 132,287 202,259l70,-29C327,207 369,188 369,125C369,66 320,26 238,26C172,26 115,54 74,97 z M167,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE17F;" horiz-adv-x="457" d="M46,64C92,20 154,-12 237,-12C346,-12 416,48 416,128C416,212 367,238 291,268l-71,30C159,323 122,344 122,396C122,451 169,486 241,486C295,486 340,464 373,433l26,30C366,496 311,524 241,524C146,524 76,472 76,393C76,324 132,287 202,259l70,-29C327,207 369,188 369,125C369,66 320,26 238,26C172,26 115,54 74,97 z M321,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE180;" horiz-adv-x="457" d="M220,298C159,323 122,344 122,396C122,451 169,486 241,486C295,486 340,464 373,433l26,30C366,496 311,524 241,524C146,524 76,472 76,393C76,324 132,287 202,259l70,-29C327,207 369,188 369,125C369,66 320,26 238,26C172,26 115,54 74,97l-28,-33C89,23 147,-8 223,-12l-33,-62C229,-84 257,-97 257,-127C257,-155 219,-170 164,-178l7,-30C235,-200 296,-175 296,-123C296,-83 268,-65 236,-54l22,43C355,-4 416,53 416,128C416,212 367,238 291,268z"/>
+<glyph unicode="&#xE181;" horiz-adv-x="457" d="M46,64C92,20 154,-12 237,-12C346,-12 416,48 416,128C416,212 367,238 291,268l-71,30C159,323 122,344 122,396C122,451 169,486 241,486C295,486 340,464 373,433l26,30C366,496 311,524 241,524C146,524 76,472 76,393C76,324 132,287 202,259l70,-29C327,207 369,188 369,125C369,66 320,26 238,26C172,26 115,54 74,97 z M227,-51l-12,-29C243,-86 271,-98 271,-129C271,-156 233,-171 178,-179l7,-30C249,-201 310,-176 310,-124C310,-83 282,-62 227,-51z"/>
+<glyph unicode="&#xE182;" horiz-adv-x="457" d="M46,64C92,20 154,-12 237,-12C346,-12 416,48 416,128C416,212 367,238 291,268l-71,30C159,323 122,344 122,396C122,451 169,486 241,486C295,486 340,464 373,433l26,30C366,496 311,524 241,524C146,524 76,472 76,393C76,324 132,287 202,259l70,-29C327,207 369,188 369,125C369,66 320,26 238,26C172,26 115,54 74,97 z M244,602C266,602 284,619 284,643C284,666 266,683 244,683C222,683 204,666 204,643C204,619 222,602 244,602z"/>
+<glyph unicode="&#xE183;" horiz-adv-x="457" d="M46,64C92,20 154,-12 237,-12C346,-12 416,48 416,128C416,212 367,238 291,268l-71,30C159,323 122,344 122,396C122,451 169,486 241,486C295,486 340,464 373,433l26,30C366,496 311,524 241,524C146,524 76,472 76,393C76,324 132,287 202,259l70,-29C327,207 369,188 369,125C369,66 320,26 238,26C172,26 115,54 74,97 z M253,-194C274,-194 291,-178 291,-153C291,-130 274,-114 253,-114C231,-114 214,-130 214,-153C214,-178 231,-194 253,-194z"/>
+<glyph unicode="&#xE184;" horiz-adv-x="903" d="M46,64C92,20 154,-12 237,-12C346,-12 416,48 416,128C416,212 367,238 291,268l-71,30C159,323 122,344 122,396C122,451 169,486 241,486C295,486 340,464 373,433l26,30C366,496 311,524 241,524C146,524 76,472 76,393C76,324 132,287 202,259l70,-29C327,207 369,188 369,125C369,66 320,26 238,26C172,26 115,54 74,97 z M493,64C538,20 601,-12 684,-12C793,-12 862,48 862,128C862,212 813,238 738,268l-72,30C605,323 569,344 569,396C569,451 615,486 687,486C742,486 787,464 819,433l27,30C812,496 757,524 688,524C593,524 523,472 523,393C523,324 578,287 649,259l70,-29C774,207 816,188 816,125C816,66 766,26 685,26C618,26 562,54 521,97z"/>
+<glyph unicode="&#xE185;" horiz-adv-x="569" d="M98,0l46,0l0,315C144,430 204,484 301,484C364,484 403,450 424,410l-127,-127l3,-31C445,231 476,187 476,131C476,72 438,28 369,28C321,28 282,45 247,81l-28,-31C255,13 310,-12 370,-12C461,-12 524,53 524,130C524,203 479,261 345,281l129,128C442,476 390,524 303,524C182,524 98,450 98,326z"/>
+<glyph unicode="&#xE186;" horiz-adv-x="453" d="M204,0l46,0l0,474l174,0l0,38l-395,0l0,-38l175,0 z M304,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE187;" horiz-adv-x="453" d="M250,0l0,474l174,0l0,38l-395,0l0,-38l175,0l0,-474l6,0l-39,-74C210,-84 238,-97 238,-127C238,-155 200,-170 145,-178l7,-30C216,-200 277,-175 277,-123C277,-83 250,-65 217,-54l28,54z"/>
+<glyph unicode="&#xE188;" horiz-adv-x="453" d="M204,0l46,0l0,474l174,0l0,38l-395,0l0,-38l175,0 z M201,-51l-12,-29C217,-86 245,-98 245,-129C245,-156 208,-171 153,-179l6,-30C223,-201 284,-176 284,-124C284,-83 256,-62 201,-51z"/>
+<glyph unicode="&#xE189;" horiz-adv-x="453" d="M204,0l46,0l0,474l174,0l0,38l-395,0l0,-38l175,0 z M227,-194C248,-194 265,-178 265,-153C265,-130 248,-114 227,-114C205,-114 189,-130 189,-153C189,-178 205,-194 227,-194z"/>
+<glyph unicode="&#xE18A;" horiz-adv-x="453" d="M204,0l46,0l0,474l174,0l0,38l-395,0l0,-38l175,0 z M340,-124l-229,0l0,-36l229,0z"/>
+<glyph unicode="&#xE18B;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M281,590l41,0l-93,106l-57,0z"/>
+<glyph unicode="&#xE18C;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M397,696l-57,0l-93,-106l41,0z"/>
+<glyph unicode="&#xE18D;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M208,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE18E;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M343,597C388,597 411,645 414,689l-28,0C381,656 366,633 344,633C304,633 278,689 226,689C181,689 158,642 155,597l28,0C188,631 204,654 225,654C266,654 291,597 343,597z"/>
+<glyph unicode="&#xE18F;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M206,606C227,606 242,620 242,642C242,665 227,679 206,679C185,679 169,665 169,642C169,620 185,606 206,606 z M363,606C384,606 400,620 400,642C400,665 384,679 363,679C343,679 327,665 327,642C327,620 343,606 363,606z"/>
+<glyph unicode="&#xE190;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M171,615l227,0l0,36l-227,0z"/>
+<glyph unicode="&#xE191;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M285,592C360,592 393,651 400,696l-33,0C361,661 336,624 285,624C233,624 208,661 202,696l-32,0C176,651 209,592 285,592z"/>
+<glyph unicode="&#xE192;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M285,581C330,581 367,614 367,663C367,712 330,745 285,745C238,745 202,712 202,663C202,614 238,581 285,581 z M285,607C256,607 232,626 232,663C232,698 256,719 285,719C312,719 335,698 335,663C335,626 312,607 285,607z"/>
+<glyph unicode="&#xE193;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M229,590l79,106l-48,0l-68,-106 z M337,590l37,0l79,106l-48,0z"/>
+<glyph unicode="&#xE194;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M362,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE195;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M171,736l227,0l0,33l-227,0 z M206,606C226,606 241,620 241,641C241,663 226,677 206,677C186,677 170,663 170,641C170,620 186,606 206,606 z M363,606C384,606 399,620 399,641C399,663 384,677 363,677C343,677 328,663 328,641C328,620 343,606 363,606z"/>
+<glyph unicode="&#xE196;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M247,711l39,0l109,106l-53,0 z M206,606C226,606 241,620 241,641C241,663 226,677 206,677C186,677 170,663 170,641C170,620 186,606 206,606 z M363,606C384,606 399,620 399,641C399,663 384,677 363,677C343,677 328,663 328,641C328,620 343,606 363,606z"/>
+<glyph unicode="&#xE197;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M206,606C226,606 241,620 241,641C241,663 226,677 206,677C186,677 170,663 170,641C170,620 186,606 206,606 z M363,606C384,606 399,620 399,641C399,663 384,677 363,677C343,677 328,663 328,641C328,620 343,606 363,606 z M362,817l-75,-73l-4,0l-75,73l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE198;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M228,817l-54,0l109,-106l39,0 z M363,606C384,606 399,620 399,641C399,663 384,677 363,677C343,677 328,663 328,641C328,620 343,606 363,606 z M206,606C226,606 241,620 241,641C241,663 226,677 206,677C186,677 170,663 170,641C170,620 186,606 206,606z"/>
+<glyph unicode="&#xE199;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M285,-194C306,-194 323,-178 323,-153C323,-130 306,-114 285,-114C263,-114 247,-130 247,-153C247,-178 263,-194 285,-194z"/>
+<glyph unicode="&#xE19A;" horiz-adv-x="569" d="M95,198C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,314l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0 z M261,584C309,597 355,618 355,670C355,720 301,742 235,744l-4,-31C285,710 316,695 316,665C316,636 289,621 253,610z"/>
+<glyph unicode="&#xE19B;" horiz-adv-x="569" d="M474,512l-43,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0l0,-314C95,37 183,-12 296,-12C265,-42 232,-71 232,-123C232,-178 269,-205 316,-205C338,-205 366,-194 381,-181l-16,27C351,-164 339,-168 322,-168C296,-168 271,-151 271,-116C271,-81 302,-35 355,-8C416,24 474,63 474,198z"/>
+<glyph unicode="&#xE19C;" horiz-adv-x="580" d="M521,620C531,607 535,594 535,581C535,540 504,519 441,512l-10,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0l0,-314C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,288C527,498 575,522 575,584C575,604 568,622 556,640z"/>
+<glyph unicode="&#xE19D;" horiz-adv-x="580" d="M397,696l-57,0l-93,-106l41,0 z M521,620C531,607 535,594 535,581C535,540 504,519 441,512l-10,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0l0,-314C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,288C527,498 575,522 575,584C575,604 568,622 556,640z"/>
+<glyph unicode="&#xE19E;" horiz-adv-x="580" d="M322,590l-93,106l-57,0l109,-106 z M521,620C531,607 535,594 535,581C535,540 504,519 441,512l-10,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0l0,-314C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,288C527,498 575,522 575,584C575,604 568,622 556,640z"/>
+<glyph unicode="&#xE19F;" horiz-adv-x="580" d="M261,584C309,597 355,618 355,670C355,720 301,742 235,744l-4,-31C285,710 316,695 316,665C316,636 289,621 253,610 z M521,620C531,607 535,594 535,581C535,540 504,519 441,512l-10,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0l0,-314C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,288C527,498 575,522 575,584C575,604 568,622 556,640z"/>
+<glyph unicode="&#xE1A0;" horiz-adv-x="580" d="M386,689C381,656 366,633 344,633C304,633 278,689 226,689C181,689 158,642 155,597l28,0C188,631 204,654 225,654C266,654 291,597 343,597C388,597 411,645 414,689 z M521,620C531,607 535,594 535,581C535,540 504,519 441,512l-10,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0l0,-314C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,288C527,498 575,522 575,584C575,604 568,622 556,640z"/>
+<glyph unicode="&#xE1A1;" horiz-adv-x="580" d="M285,-114C263,-114 247,-130 247,-153C247,-178 263,-194 285,-194C306,-194 323,-178 323,-153C323,-130 306,-114 285,-114 z M521,620C531,607 535,594 535,581C535,540 504,519 441,512l-10,0l0,-309C431,68 363,29 285,29C207,29 141,68 141,203l0,309l-46,0l0,-314C95,36 186,-12 285,-12C383,-12 474,36 474,198l0,288C527,498 575,522 575,584C575,604 568,622 556,640z"/>
+<glyph unicode="&#xE1A2;" horiz-adv-x="664" d="M153,0l50,0l97,338C310,379 320,414 330,454l4,0C343,414 353,379 363,338l99,-338l49,0l124,512l-44,0l-67,-293C511,163 500,107 488,52l-4,0C468,107 454,163 439,219l-84,293l-44,0l-85,-293C212,163 196,107 183,52l-3,0C167,107 154,163 142,219l-67,293l-47,0 z M328,590l41,0l-92,106l-58,0z"/>
+<glyph unicode="&#xE1A3;" horiz-adv-x="664" d="M153,0l50,0l97,338C310,379 320,414 330,454l4,0C343,414 353,379 363,338l99,-338l49,0l124,512l-44,0l-67,-293C511,163 500,107 488,52l-4,0C468,107 454,163 439,219l-84,293l-44,0l-85,-293C212,163 196,107 183,52l-3,0C167,107 154,163 142,219l-67,293l-47,0 z M445,696l-58,0l-92,-106l40,0z"/>
+<glyph unicode="&#xE1A4;" horiz-adv-x="664" d="M153,0l50,0l97,338C310,379 320,414 330,454l4,0C343,414 353,379 363,338l99,-338l49,0l124,512l-44,0l-67,-293C511,163 500,107 488,52l-4,0C468,107 454,163 439,219l-84,293l-44,0l-85,-293C212,163 196,107 183,52l-3,0C167,107 154,163 142,219l-67,293l-47,0 z M255,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE1A5;" horiz-adv-x="664" d="M153,0l50,0l97,338C310,379 320,414 330,454l4,0C343,414 353,379 363,338l99,-338l49,0l124,512l-44,0l-67,-293C511,163 500,107 488,52l-4,0C468,107 454,163 439,219l-84,293l-44,0l-85,-293C212,163 196,107 183,52l-3,0C167,107 154,163 142,219l-67,293l-47,0 z M253,606C274,606 290,620 290,642C290,665 274,679 253,679C232,679 216,665 216,642C216,620 232,606 253,606 z M411,606C431,606 447,620 447,642C447,665 431,679 411,679C390,679 374,665 374,642C374,620 390,606 411,606z"/>
+<glyph unicode="&#xE1A6;" horiz-adv-x="384" d="M169,0l46,0l0,205l167,307l-48,0l-80,-154C235,320 216,285 196,248l-4,0C171,285 151,320 132,358l-81,154l-48,0l166,-307 z M191,590l40,0l-92,106l-58,0z"/>
+<glyph unicode="&#xE1A7;" horiz-adv-x="384" d="M169,0l46,0l0,205l167,307l-48,0l-80,-154C235,320 216,285 196,248l-4,0C171,285 151,320 132,358l-81,154l-48,0l166,-307 z M307,696l-58,0l-92,-106l41,0z"/>
+<glyph unicode="&#xE1A8;" horiz-adv-x="384" d="M169,0l46,0l0,205l167,307l-48,0l-80,-154C235,320 216,285 196,248l-4,0C171,285 151,320 132,358l-81,154l-48,0l166,-307 z M117,590l75,73l4,0l75,-73l40,0l-96,106l-42,0l-96,-106z"/>
+<glyph unicode="&#xE1A9;" horiz-adv-x="384" d="M169,0l46,0l0,205l167,307l-48,0l-80,-154C235,320 216,285 196,248l-4,0C171,285 151,320 132,358l-81,154l-48,0l166,-307 z M115,606C136,606 152,620 152,642C152,665 136,679 115,679C94,679 79,665 79,642C79,620 94,606 115,606 z M273,606C294,606 310,620 310,642C310,665 294,679 273,679C252,679 236,665 236,642C236,620 252,606 273,606z"/>
+<glyph unicode="&#xE1AA;" horiz-adv-x="384" d="M169,0l46,0l0,205l167,307l-48,0l-80,-154C235,320 216,285 196,248l-4,0C171,285 151,320 132,358l-81,154l-48,0l166,-307 z M194,602C216,602 234,619 234,643C234,666 216,683 194,683C172,683 154,666 154,643C154,619 172,602 194,602z"/>
+<glyph unicode="&#xE1AB;" horiz-adv-x="384" d="M169,0l46,0l0,205l167,307l-48,0l-80,-154C235,320 216,285 196,248l-4,0C171,285 151,320 132,358l-81,154l-48,0l166,-307 z M192,-194C213,-194 230,-178 230,-153C230,-130 213,-114 192,-114C170,-114 154,-130 154,-153C154,-178 170,-194 192,-194z"/>
+<glyph unicode="&#xE1AC;" horiz-adv-x="384" d="M169,0l46,0l0,205l167,307l-48,0l-80,-154C235,320 216,285 196,248l-4,0C171,285 151,320 132,358l-81,154l-48,0l166,-307 z M171,584C218,597 265,618 265,670C265,720 210,742 144,744l-4,-31C195,710 226,695 226,665C226,636 199,621 162,610z"/>
+<glyph unicode="&#xE1AD;" horiz-adv-x="384" d="M169,0l46,0l0,205l167,307l-48,0l-80,-154C235,320 216,285 196,248l-4,0C171,285 151,320 132,358l-81,154l-48,0l166,-307 z M253,597C298,597 321,645 324,689l-29,0C291,656 275,633 254,633C213,633 188,689 136,689C91,689 68,642 64,597l29,0C97,631 113,654 135,654C175,654 201,597 253,597z"/>
+<glyph unicode="&#xE1AE;" horiz-adv-x="472" d="M50,0l374,0l0,38l-317,0l313,448l0,26l-343,0l0,-38l287,0l-314,-448 z M360,696l-58,0l-92,-106l41,0z"/>
+<glyph unicode="&#xE1AF;" horiz-adv-x="472" d="M50,0l374,0l0,38l-317,0l313,448l0,26l-343,0l0,-38l287,0l-314,-448 z M324,696l-75,-72l-4,0l-75,72l-40,0l96,-106l42,0l96,106z"/>
+<glyph unicode="&#xE1B0;" horiz-adv-x="472" d="M50,0l374,0l0,38l-317,0l313,448l0,26l-343,0l0,-38l287,0l-314,-448 z M247,602C269,602 287,619 287,643C287,666 269,683 247,683C225,683 207,666 207,643C207,619 225,602 247,602z"/>
+<glyph unicode="&#xE1B1;" horiz-adv-x="472" d="M50,0l374,0l0,38l-317,0l313,448l0,26l-343,0l0,-38l287,0l-314,-448 z M254,-194C275,-194 292,-178 292,-153C292,-130 275,-114 254,-114C232,-114 216,-130 216,-153C216,-178 232,-194 254,-194z"/>
+<glyph unicode="&#xE1B2;" horiz-adv-x="557" d="M160,37l0,218l145,0l0,33l-145,0l0,187l83,0C390,475 454,387 454,257C454,119 390,37 243,37 z M114,512l0,-224l-77,-2l0,-31l77,0l0,-255l132,0C417,0 502,100 502,257C502,415 417,512 245,512z"/>
+<glyph unicode="&#xE1B3;" horiz-adv-x="504" d="M97,0l46,0l0,124l109,0C376,124 453,174 453,276C453,383 376,422 252,422l-109,0l0,90l-46,0 z M143,161l0,223l100,0C352,384 405,358 405,276C405,195 353,161 243,161z"/>
+<glyph unicode="&#xE1B4;" horiz-adv-x="569" d="M466,229C457,107 385,28 283,28C184,28 114,106 107,229 z M145,429C181,459 229,484 284,484C399,484 464,400 467,266l-404,0C63,261 62,256 62,252C62,99 148,-12 283,-12C418,-12 514,95 514,257C514,420 426,524 287,524C216,524 158,493 122,460z"/>
+<glyph unicode="&#xE1B5;" horiz-adv-x="498" d="M80,133C80,181 119,217 165,251C205,187 262,124 321,76C286,46 245,25 202,25C135,25 80,68 80,133 z M150,405C150,450 180,488 227,488C271,488 285,455 285,423C285,372 235,337 180,301C161,337 150,373 150,405 z M485,26C454,36 416,55 378,82C423,134 454,197 476,269l-41,0C416,206 388,149 349,104C292,148 235,210 196,272C258,315 322,358 322,424C322,479 291,524 229,524C160,524 112,470 112,404C112,366 126,323 148,280C90,241 36,198 36,130C36,46 107,-12 198,-12C260,-12 310,14 350,52C394,20 436,-1 472,-12z"/>
+<glyph unicode="&#xE1B6;" horiz-adv-x="478" d="M239,-12C355,-12 422,91 422,257C422,424 355,524 239,524C122,524 56,424 56,257C56,91 123,-12 239,-12 z M239,26C157,26 101,108 101,257C101,408 157,486 239,486C321,486 377,408 377,257C377,108 321,26 239,26z"/>
+<glyph unicode="&#xE1B7;" horiz-adv-x="333" d="M160,0l44,0l0,512l-36,0C140,498 105,486 57,479l0,-31l103,0z"/>
+<glyph unicode="&#xE1B8;" horiz-adv-x="435" d="M41,0l351,0l0,39l-180,0C172,39 138,37 108,35C263,180 366,277 366,379C366,467 304,524 202,524C135,524 83,495 38,447l28,-25C100,458 147,487 199,487C283,487 321,440 321,376C321,289 227,194 41,28z"/>
+<glyph unicode="&#xE1B9;" horiz-adv-x="438" d="M24,61C60,25 116,-12 207,-12C306,-12 384,45 384,134C384,208 326,254 256,268l0,3C316,291 363,331 363,397C363,477 294,524 204,524C137,524 87,497 48,460l24,-29C106,466 153,487 204,487C272,487 317,450 317,394C317,334 270,286 140,286l0,-36C283,250 338,204 338,135C338,70 283,26 207,26C128,26 83,57 49,91z"/>
+<glyph unicode="&#xE1BA;" horiz-adv-x="456" d="M89,187l161,203C269,414 282,431 297,454l3,0C299,429 298,387 298,362l0,-175 z M425,187l-84,0l0,325l-43,0l-263,-335l0,-27l263,0l0,-150l43,0l0,150l84,0z"/>
+<glyph unicode="&#xE1BB;" horiz-adv-x="447" d="M35,57C71,24 121,-12 213,-12C305,-12 397,49 397,160C397,271 317,322 221,322C182,322 151,310 123,295l15,179l228,0l0,38l-266,0l-20,-244l29,-17C142,272 171,287 215,287C296,287 350,237 350,159C350,78 286,26 212,26C134,26 91,57 58,87z"/>
+<glyph unicode="&#xE1BC;" horiz-adv-x="470" d="M261,26C168,26 120,91 112,199C159,253 212,274 252,274C339,274 377,221 377,149C377,78 326,26 261,26 z M408,473C378,503 338,524 283,524C168,524 67,446 67,232C67,73 142,-12 260,-12C348,-12 422,55 422,150C422,254 362,310 260,310C205,310 152,283 111,240C113,424 191,485 281,485C320,485 356,471 382,443z"/>
+<glyph unicode="&#xE1BD;" horiz-adv-x="411" d="M152,0l47,0C209,200 241,325 377,486l0,26l-344,0l0,-38l287,0C207,330 161,203 152,0z"/>
+<glyph unicode="&#xE1BE;" horiz-adv-x="476" d="M101,133C101,189 149,231 205,259C296,228 377,201 377,125C377,67 325,25 244,25C161,25 101,71 101,133 z M284,270C208,296 133,325 133,395C133,451 178,488 242,488C317,488 359,443 359,386C359,344 332,304 284,270 z M58,129C58,49 136,-12 243,-12C349,-12 421,48 421,124C421,194 370,228 320,255l0,3C354,283 401,332 401,388C401,466 343,524 244,524C158,524 90,472 90,395C90,342 131,303 173,278l0,-4C119,248 58,199 58,129z"/>
+<glyph unicode="&#xE1BF;" horiz-adv-x="466" d="M219,238C133,238 96,289 96,362C96,434 146,487 210,487C303,487 349,418 357,312C312,258 259,238 219,238 z M64,38C93,9 134,-12 191,-12C302,-12 403,65 403,279C403,438 327,524 211,524C125,524 52,457 52,362C52,257 112,201 212,201C267,201 319,229 358,270C356,90 279,27 189,27C151,27 116,40 89,67z"/>
+<glyph unicode="&#xE1C0;" horiz-adv-x="265" d="M40,251l185,0l0,39l-185,0z"/>
+<glyph unicode="&#xE1C1;" horiz-adv-x="411" d="M40,254l329,0l0,36l-329,0z"/>
+<glyph unicode="&#xE1C2;" horiz-adv-x="682" d="M40,254l602,0l0,36l-602,0z"/>
+<glyph unicode="&#x2B9;" horiz-adv-x="219" d="M82,481l29,0l27,138l10,74l-43,0z"/>
+<glyph unicode="&#xE1C3;" horiz-adv-x="348" d="M100,444l26,75C143,570 158,615 173,667l2,0C191,617 206,571 223,519l25,-75 z M307,269l40,0l-151,432l-41,0l-153,-432l38,0l49,143l170,0z"/>
+<glyph unicode="&#xE1C4;" horiz-adv-x="382" d="M61,269l131,0C291,269 356,311 356,395C356,455 317,490 253,500l0,3C304,515 330,552 330,596C330,669 272,701 184,701l-123,0 z M100,513l0,157l76,0C253,670 292,648 292,595C292,540 258,513 173,513 z M100,300l0,183l84,0C270,483 318,455 318,395C318,327 268,300 184,300z"/>
+<glyph unicode="&#xE1C5;" horiz-adv-x="372" d="M33,485C33,347 111,261 220,261C276,261 317,285 350,322l-22,24C298,313 265,295 221,295C130,295 74,369 74,487C74,601 132,676 224,676C262,676 293,659 317,633l22,24C315,685 275,709 223,709C112,709 33,622 33,485z"/>
+<glyph unicode="&#xE1C6;" horiz-adv-x="402" d="M61,269l106,0C300,269 367,354 367,487C367,619 300,701 166,701l-105,0 z M100,301l0,368l63,0C275,669 327,599 327,487C327,375 276,301 166,301z"/>
+<glyph unicode="&#xE1C7;" horiz-adv-x="341" d="M61,269l250,0l0,32l-211,0l0,181l173,0l0,33l-173,0l0,154l205,0l0,32l-244,0z"/>
+<glyph unicode="&#xE1C8;" horiz-adv-x="316" d="M61,269l39,0l0,204l173,0l0,32l-173,0l0,164l205,0l0,32l-244,0z"/>
+<glyph unicode="&#xE1C9;" horiz-adv-x="400" d="M33,486C33,347 112,261 225,261C282,261 328,282 355,310l0,175l-135,0l0,-32l100,0l0,-128C301,307 265,295 228,295C130,295 74,369 74,487C74,602 134,676 230,676C277,676 307,656 329,633l22,25C327,682 289,709 230,709C114,709 33,622 33,486z"/>
+<glyph unicode="&#xE1CA;" horiz-adv-x="424" d="M61,269l39,0l0,213l224,0l0,-213l39,0l0,432l-39,0l0,-186l-224,0l0,186l-39,0z"/>
+<glyph unicode="&#xE1CB;" horiz-adv-x="161" d="M61,269l39,0l0,432l-39,0z"/>
+<glyph unicode="&#xE1CC;" horiz-adv-x="308" d="M23,326C46,285 82,261 133,261C215,261 248,318 248,390l0,311l-38,0l0,-308C210,325 184,295 132,295C98,295 72,309 51,345z"/>
+<glyph unicode="&#xE1CD;" horiz-adv-x="371" d="M61,269l39,0l0,146l85,96l140,-242l43,0l-158,271l139,161l-45,0l-202,-232l-2,0l0,232l-39,0z"/>
+<glyph unicode="&#xE1CE;" horiz-adv-x="310" d="M61,269l237,0l0,32l-198,0l0,400l-39,0z"/>
+<glyph unicode="&#xE1CF;" horiz-adv-x="469" d="M61,269l36,0l0,269C97,573 94,620 92,657l3,0l35,-95l91,-249l29,0l90,249l35,95l2,0C375,620 372,573 372,538l0,-269l37,0l0,432l-51,0l-87,-245l-33,-93l-3,0l-34,93l-89,245l-51,0z"/>
+<glyph unicode="&#xE1D0;" horiz-adv-x="421" d="M61,269l36,0l0,256C97,567 94,608 93,650l2,0l50,-86l176,-295l40,0l0,432l-36,0l0,-252C325,406 328,361 330,320l-3,0l-49,86l-175,295l-42,0z"/>
+<glyph unicode="&#xE1D1;" horiz-adv-x="432" d="M216,261C324,261 399,349 399,487C399,623 324,709 216,709C110,709 33,624 33,487C33,349 110,261 216,261 z M216,295C131,295 74,371 74,487C74,603 131,676 216,676C303,676 359,603 359,487C359,371 303,295 216,295z"/>
+<glyph unicode="&#xE1D2;" horiz-adv-x="371" d="M61,269l39,0l0,181l86,0C282,450 344,491 344,579C344,669 283,701 186,701l-125,0 z M100,482l0,187l79,0C263,669 305,648 305,579C305,510 263,482 179,482z"/>
+<glyph unicode="&#xE1D3;" horiz-adv-x="432" d="M73,488C73,603 130,676 216,676C302,676 358,603 358,488C358,371 302,294 216,294C130,294 73,371 73,488 z M394,205C383,203 369,200 349,200C297,200 258,221 238,262C332,274 398,359 398,488C398,623 322,709 216,709C110,709 33,624 33,488C33,358 100,273 196,262C218,207 269,166 345,166C369,166 391,170 402,174z"/>
+<glyph unicode="&#xE1D4;" horiz-adv-x="373" d="M100,669l82,0C257,669 298,647 298,585C298,523 257,494 182,494l-82,0 z M347,269l-117,196C295,477 337,517 337,585C337,669 278,701 190,701l-129,0l0,-432l39,0l0,193l89,0l114,-193z"/>
+<glyph unicode="&#xE1D5;" horiz-adv-x="345" d="M28,326C65,287 115,261 178,261C265,261 320,313 320,383C320,445 280,471 229,494l-66,29C131,536 90,556 90,603C90,648 126,677 181,677C225,677 258,659 285,633l21,24C277,686 234,709 181,709C107,709 50,664 50,601C50,537 100,510 139,492l67,-29C248,444 282,428 282,377C282,328 243,295 179,295C130,295 84,315 52,352z"/>
+<glyph unicode="&#xE1D6;" horiz-adv-x="345" d="M154,269l38,0l0,400l136,0l0,32l-311,0l0,-32l137,0z"/>
+<glyph unicode="&#xE1D7;" horiz-adv-x="422" d="M60,439C60,303 131,261 211,261C290,261 361,303 361,439l0,262l-36,0l0,-260C325,329 272,295 211,295C151,295 98,329 98,441l0,260l-38,0z"/>
+<glyph unicode="&#xE1D8;" horiz-adv-x="327" d="M144,269l42,0l142,432l-40,0l-77,-245C195,404 185,363 168,312l-3,0C147,363 136,404 119,456l-78,245l-41,0z"/>
+<glyph unicode="&#xE1D9;" horiz-adv-x="512" d="M114,269l43,0l74,285C240,587 247,617 255,651l3,0C265,617 271,587 280,554l76,-285l43,0l97,432l-37,0l-53,-247C396,406 388,360 379,313l-3,0C364,360 354,407 342,454l-67,247l-37,0l-66,-247C160,406 150,360 139,313l-3,0C128,360 119,406 109,454l-53,247l-40,0z"/>
+<glyph unicode="&#xE1DA;" horiz-adv-x="323" d="M9,269l40,0l72,128C133,418 145,439 158,465l3,0C177,439 189,418 201,397l72,-128l41,0l-131,222l122,210l-40,0l-68,-122C187,559 178,543 165,520l-3,0C148,543 139,559 127,579l-67,122l-42,0l121,-208z"/>
+<glyph unicode="&#xE1DB;" horiz-adv-x="299" d="M130,269l39,0l0,173l132,259l-40,0l-63,-131C184,538 168,509 152,477l-3,0C133,509 118,538 103,570l-64,131l-41,0l132,-259z"/>
+<glyph unicode="&#xE1DC;" horiz-adv-x="354" d="M30,269l296,0l0,32l-249,0l246,377l0,23l-272,0l0,-32l225,0l-246,-377z"/>
+<glyph unicode="&#xE1DD;" horiz-adv-x="159" d="M44,470C44,446 59,432 79,432C100,432 115,446 115,470C115,493 100,507 79,507C59,507 44,493 44,470 z M44,706C44,682 59,668 79,668C100,668 115,682 115,706C115,729 100,743 79,743C59,743 44,729 44,706z"/>
+<glyph unicode="&#xE1DE;" horiz-adv-x="227" d="M40,619l150,0l0,31l-150,0z"/>
+<glyph unicode="&#xE1DF;" horiz-adv-x="347" d="M40,622l268,0l0,28l-268,0z"/>
+<glyph unicode="&#xE1E0;" horiz-adv-x="561" d="M40,622l482,0l0,28l-482,0z"/>
+<glyph unicode="&#xE1E1;" horiz-adv-x="0" d="M-43,710l36,0l96,98l-52,0 z M-113,606l226,0l0,36l-226,0z"/>
+<glyph unicode="&#xE1E2;" horiz-adv-x="0" d="M-37,829l39,0l109,106l-54,0 z M-114,734l228,0l0,36l-228,0z"/>
+<glyph unicode="&#xFEFF;" horiz-adv-x="0"/>
+</font>
diff --git a/configs/conferences/rustfestrome2018/config.php b/configs/conferences/rustfestrome2018/config.php
new file mode 100644
index 0000000..a7fbe3e
--- /dev/null
+++ b/configs/conferences/rustfestrome2018/config.php
@@ -0,0 +1,390 @@
+ <?php
+
+$CONFIG['CONFERENCE'] = array(
+ /**
+ * Der Startzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns davor, wird die Closed-Seite
+ * mit einem Text der Art "hat noch nicht angefangen" angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. (Siehe aber ENDS_AT
+ * und CLOSED weiter unten)
+ */
+ 'STARTS_AT' => strtotime("2018-11-24 09:00"),
+
+ /**
+ * Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie-
+ * Gut-Nach-Hause-Seite sowie einem Ausblick auf die kommenden Events angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten)
+ */
+ 'ENDS_AT' => strtotime("2018-11-25 18:00"),
+
+ /**
+ * Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before'
+ * simuliert, dass die Konferenz noch nicht begonnen hat. Der Wert 'after' simuliert, dass die Konferenz
+ * bereits beendet ist. 'running' simuliert eine laufende Konferenz.
+ *
+ * Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent
+ * zu 'running'.
+ */
+ //'CLOSED' => false,
+
+ /**
+ * Titel der Konferenz (kann Leer- und Sonderzeichen enthalten)
+ * Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als
+ * Anzeigetext benutzt
+ */
+ 'TITLE' => 'RustFest Rome 2018',
+
+ /**
+ * Veranstalter
+ * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'AUTHOR' => 'RustFest',
+
+ /**
+ * Beschreibungstext
+ * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'DESCRIPTION' => 'A conference dedicated to the Rust programming language',
+
+ /**
+ * Schlüsselwortliste, Kommasepariert
+ * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'KEYWORDS' => 'rustfest, rust, rome',
+
+ /**
+ * HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags)
+ * Sollte üblicherweise nur Inline-Elemente enthalten
+ * Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet
+ */
+ 'FOOTER_HTML' => '
+ by RustFest Video Team and <a href="https://c3voc.de">C3VOC</a>
+ ',
+
+ /**
+ * HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header)
+ * wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Blaues
+ * Wischiwaschi auf http://media.ccc.de/)
+ *
+ * Dieser HTML-Block wird üblicherweise in der main.less speziell für die
+ * Konferenz umgestaltet.
+ *
+ * Wird diese Zeile auskommentiert, wird kein Banner ausgegeben.
+ */
+ 'BANNER_HTML' => '<div class="logo"></div>',
+
+ /**
+ * Link zu den Recordings
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ 'RELEASES' => 'https://media.ccc.de/c/rustfest18rome',
+ //'RELEASES' => 'https://www.youtube.com/playlist?list=PL_AMhvchzBaeIQntCDiVNUUgmRaAzam1V',
+
+ /**
+ * Link zu einer (externen) ReLive-Übersichts-Seite
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELIVE' => 'http://vod.c3voc.de/',
+
+ /**
+ * Alternativ kann ein ReLive-Json konfiguriert werden, um die interne
+ * ReLive-Ansicht zu aktivieren.
+ *
+ * Wird beides aktiviert, hat der externe Link Vorrang!
+ * Wird beides auskommentiert, wird der Link nicht angezeigt
+ */
+ 'RELIVE_JSON' => 'http://live.ber.c3voc.de/relive/rustfest-rome/index.json',
+
+ /**
+ * APCU-Cache-Zeit in Sekunden
+ * Wird diese Zeile auskommentiert, werden die apc_*-Methoden nicht verwendet und
+ * das Relive-Json bei jedem Request von der Quelle geladen und geparst
+ */
+ //'RELIVE_JSON_CACHE' => 30*60,
+);
+
+/**
+ * Konfiguration der Stream-Übersicht auf der Startseite
+ */
+$CONFIG['OVERVIEW'] = array(
+ /**
+ * Abschnitte aud der Startseite und darunter aufgeführte Räume
+ * Es können beliebig neue Gruppen und Räume hinzugefügt werden
+ *
+ * Die Räume müssen in $CONFIG['ROOMS'] konfiguriert werden,
+ * sonst werden sie nicht angezeigt.
+ */
+ 'GROUPS' => array(
+ 'Lecture rooms' => array(
+ 'auditorium',
+ ),
+ ),
+);
+
+
+
+/**
+ * Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets oä.)
+ */
+$CONFIG['ROOMS'] = array(
+ /**
+ * Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs,
+ * in $CONFIG['OVERVIEW'] oder im Feedback verwendet wird.
+ */
+ 'auditorium' => array(
+ /**
+ * Angezeige-Name
+ */
+ 'DISPLAY' => 'Auditorium',
+
+ /**
+ * ID des Video/Audio-Streams. Die Stream-ID ist davon abhängig, welches
+ * Event-Case in welchem Raum aufgebaut wird und wird üblicherweise von
+ * s1 bis s5 durchnummeriert.
+ */
+ 'STREAM' => 's2',
+
+ /**
+ * Stream-Vorschaubildchen auf der Übersichtsseite anzeigen
+ * Damit das funktioniert muss der entsprechende runit-Task auf dem
+ * CDN-Quell-Host (live.ber) laufen.
+ */
+ 'PREVIEW' => true,
+
+ /**
+ * Übersetzungstonspur aktivieren
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist werden nur
+ * die native-Streams verwendet, andernfalls wird native und translated
+ * angeboten und auch für beide Tonspuren eine Player-Seite angezeigt.
+ */
+ 'TRANSLATION' => false,
+
+ /**
+ * stereo-Tonspur statt native-Tonspur benutzen
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist werden
+ * die "native"-Mono-Streams verwendet, andernfalls wird statt "native"
+ * der Streamname "stereo" eingesetzt. Im normalen Konferenz-Setup
+ * müssen dann beide Kanäle der Kamera mit einem Signal bespielt werden.
+ */
+ 'STEREO' => false,
+
+ /**
+ * SD-Video-Stream (1024×576) verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein SD-Video
+ * angeboten. Wird auch HD_VIDEO auf false gesetzt oder auskommentiert ist, wird
+ * für diesen Raum überhaupt kein Video angeboten.
+ *
+ * In diesem Fall wird, sofern jeweils aktiviert, Slides, Audio und zuletzt Musik
+ * als Default-Stream angenommen.
+ */
+ 'SD_VIDEO' => true,
+
+ /**
+ * HD-Video-Stream (1920×1080) verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein HD-Video
+ * angeboten. Wird auch SD_VIDEO auf false gesetzt oder auskommentiert ist, wird
+ * für diesen Raum überhaupt kein Video angeboten.
+ *
+ * In diesem Fall wird, sofern jeweils aktiviert, Slides, Audio und zuletzt Musik
+ * als Default-Stream angenommen.
+ */
+ 'HD_VIDEO' => true,
+
+ /**
+ * Slide-Only-Stream (1024×576) verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Slide-Only-
+ * Stream angeboten. Für diesen Raum wird dann keim Slides-Tab angeboten.
+ *
+ * In diesem Fall wird, sofern jeweils aktiviert, Audio und zuletzt Musik als
+ * Default-Stream angenommen.
+ */
+ 'SLIDES' => false,
+ 'DASH' => true,
+
+ /**
+ * Audio-Only-Stream verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Audio-Only-
+ * Stream angeboten. Für diesen Raum wird dann keim Audio-Tab angeboten.
+ *
+ * In diesem Fall wird, sofern aktiviert, Musik als Default-Stream angenommen.
+ */
+ 'AUDIO' => true,
+
+ /**
+ * Musik-Stream verfügbar
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist ẃird kein Musik-Stream
+ * angeboten. Für diesen Raum wird dann keim Musik-Tab angeboten.
+ *
+ * Ist kein einziger Stream angebote, wird statt der Stream-Seite ein 404-Fehler
+ * angezeigt.
+ */
+ 'MUSIC' => false,
+
+ /**
+ * Fahrplan-Ansicht auf der Raum-Seite aktivieren (boolean)
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird der Raum nicht im Fahrplan gesucht und auch auf der Startseite
+ * findet keine Darstellung statt.
+ *
+ * Ebenso können alle Fahrplan-Funktionialitäten durch auskommentieren
+ * des globalen $CONFIG['SCHEDULE']-Blocks deaktiviert werden
+ */
+ 'SCHEDULE' => true,
+
+ /**
+ * Name des Raums im Fahrplan
+ * Wenn diese Zeile auskommentiert ist wird der Raum-Slug verwendet
+ */
+ 'SCHEDULE_NAME' => 'Auditorium',
+
+ /**
+ * Feedback anzeigen (boolean)
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * taucht der Raum auch im globalen Feedback-Formular nicht auf.
+ *
+ * Ebenso können alle Feedback-Funktionialitäten durch auskommentieren
+ * des globalen $CONFIG['FEEDBACK']-Blocks deaktiviert werden
+ */
+ 'FEEDBACK' => false,
+
+ /**
+ * Subtitles-Player aktivieren (boolean)
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird der Subtitles-Button und die damit verbundenen Funktionen deaktiviert.
+ *
+ * Ebenso können alle Subtitles-Funktionialitäten durch auskommentieren
+ * des globalen $CONFIG['SUBTITLES']-Blocks deaktiviert werden
+ */
+ 'SUBTITLES' => false,
+
+ /**
+ * Embed-Form aktivieren (boolean)
+ *
+ * Ist dieses Feld auf true gesetzt, wird ein Embed-Tab unter dem Video
+ * angezeigt. Darüber kann der Player als iframe eingebunden werden.
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird kein Embed-Tab angeboten und die URL zum Einbetten existiert nicht.
+ *
+ * Ebenso können alle Embedding-Funktionialitäten durch auskommentieren
+ * des globalen $CONFIG['EMBED']-Blocks deaktiviert werden
+ */
+ 'EMBED' => true,
+
+ /**
+ * IRC-Link aktivieren (boolean)
+ *
+ * Solange Twitter oder IRC aktiviert ist, wird ein "Chat"-Tab mit den
+ * jeweiligen Links angezeigt.
+ *
+ * Ist dieses Feld auf true gesetzt, wird ein irc://-Link angezeigt.
+ * WebIrc wird nach dem Congress nicht mehr unterstützt ;)
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird kein IRC-Link angezeigt
+ *
+ * Ebenso können alle IRC-Links durch auskommentieren
+ * des globalen $CONFIG['IRC']-Blocks deaktiviert werden
+ */
+ 'IRC' => false,
+
+ /**
+ * Mit dem Angaben in diesem Block können die Vorgaben aus dem
+ * globalen $CONFIG['IRC'] Block überschrieben werden.
+ *
+ * Der globale $CONFIG['IRC']-Block muss trotzdem existieren,
+ * da sonst überhaupt kein IRC-Link erzeugt wird. (ggf. einfach `= true` setzen)
+ */
+ // 'IRC_CONFIG' => array(
+ // 'DISPLAY' => '#31C3-hall-1 @ hackint',
+ // 'URL' => 'irc://irc.hackint.eu:6667/31C3-hall-1',
+ // ),
+
+ /**
+ * Twitter-Link aktivieren (boolean)
+ *
+ * Ist dieses Feld auf true gesetzt, wird ein Link zu Twitter angezeigt.
+ *
+ * Solange Twitter oder IRC aktiviert ist, wird ein "Chat"-Tab mit den
+ * jeweiligen Links angezeigt.
+ *
+ * Wenn diese Zeile auskommentiert oder auf false gesetzt ist,
+ * wird kein Twitter-Link angezeigt
+ *
+ * Ebenso können alle Twitter-Links durch auskommentieren
+ * des globalen $CONFIG['TWITTER']-Blocks deaktiviert werden
+ **/
+ //'TWITTER' => true,
+
+ /**
+ * Mit dem Angaben in diesem Block können die Vorgaben aus dem
+ * globalen $CONFIG['TWITTER'] Block überschrieben werden.
+ *
+ * Der globale $CONFIG['TWITTER']-Block muss trotzdem existieren,
+ * da sonst überhaupt kein IRC-Link erzeugt wird. (ggf. einfach `= true` setzen)
+ */
+ // 'TWITTER_CONFIG' => array(
+ // 'DISPLAY' => '#fossgis2016 @ twitter',
+ // 'TEXT' => '#fossgis2016',
+ // ),
+ ),
+);
+
+/**
+ * Globaler Schalter für die Embedding-Funktionalitäten
+ *
+ * Wird diese Zeile auskommentiert oder auf False gesetzt, werden alle
+ * Embedding-Funktionen deaktiviert.
+ */
+$CONFIG['EMBED'] = true;
+
+/**
+ * Konfigurationen zum Konferenz-Fahrplan
+ * Wird dieser Block auskommentiert, werden alle Fahrplan-Bezogenen Features deaktiviert
+ */
+$CONFIG['SCHEDULE'] = array(
+ /**
+ * URL zum Fahrplan-XML
+ *
+ * Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht
+ * aufhören zu funktionieren. Wenn die Quelle unverlässlich ist ;) sollte ein
+ * externer HTTP-Cache vorgeschaltet werden.
+ */
+ 'URL' => 'https://rome.rustfest.eu/schedule.xml',
+ /**
+ * Nur die angegebenen Räume aus dem Fahrplan beachten
+ *
+ * Wird diese Zeile auskommentiert, werden alle Räume angezeigt
+ */
+ //'ROOMFILTER' => ['Galerie', 'Saal', ' GI Studio'],
+
+ /**
+ * Skalierung der Programm-Vorschau in Sekunden pro Pixel
+ */
+ 'SCALE' => 5,
+
+ /**
+ * Simuliere das Verhalten als wäre die Konferenz bereits heute
+ *
+ * Diese folgende Beispiel-Zeile Simuliert, dass das
+ * Konferenz-Datum 2014-12-29 auf den heutigen Tag 2015-02-24 verschoben ist.
+ */
+ //'SIMULATE_OFFSET' => strtotime(/* Conference-Date */ '2016-05-21') - strtotime(/* Today */ '2016-05-19'),
+ 'SIMULATE_OFFSET' => 3600*2,
+);
+
+return $CONFIG;
diff --git a/configs/conferences/rustfestrome2018/download.sh b/configs/conferences/rustfestrome2018/download.sh
new file mode 100755
index 0000000..1e37aa7
--- /dev/null
+++ b/configs/conferences/rustfestrome2018/download.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# fahrplan
+wget --no-check-certificate -q "https://rome.rustfest.eu/schedule.xml" -O /tmp/rfrome18-schedule.xml && mv /tmp/rfrome18-schedule.xml schedule.xml
+rm -f /tmp/rfrome18-schedule.xml
diff --git a/configs/conferences/rustfestrome2018/logo.svg b/configs/conferences/rustfestrome2018/logo.svg
new file mode 100644
index 0000000..a6a52cb
--- /dev/null
+++ b/configs/conferences/rustfestrome2018/logo.svg
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="svg2"
+ xml:space="preserve"
+ width="254.43544"
+ height="255.10266"
+ viewBox="0 0 254.43544 255.10266"
+ sodipodi:docname="logo.svg"
+ inkscape:version="0.92.2 2405546, 2018-03-11"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs6"><clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath18"><path
+ d="M 0,283.465 H 283.465 V 0 H 0 Z"
+ id="path16"
+ inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1918"
+ inkscape:window-height="1042"
+ id="namedview4"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="2.4976628"
+ inkscape:cx="92.067215"
+ inkscape:cy="143.17896"
+ inkscape:window-x="0"
+ inkscape:window-y="18"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="g10" /><g
+ id="g10"
+ inkscape:groupmode="layer"
+ inkscape:label="Sticker 6"
+ transform="matrix(1.3333333,0,0,-1.3333333,-61.759221,316.52773)"><g
+ id="g12"><g
+ id="g14"
+ clip-path="url(#clipPath18)"><g
+ id="g20"
+ transform="translate(236.9975,143.5558)"><path
+ d="m 0,0 c -0.008,0.139 -0.021,0.277 -0.04,0.415 l -0.205,1.529 c -0.03,0.226 -0.074,0.45 -0.131,0.67 l -0.382,1.47 C -0.801,4.251 -0.852,4.415 -0.91,4.577 l -0.527,1.47 c -0.06,0.165 -0.127,0.328 -0.201,0.487 l -0.675,1.441 c -0.051,0.111 -0.107,0.22 -0.166,0.327 l -0.792,1.441 c -0.067,0.124 -0.141,0.246 -0.218,0.365 l -0.938,1.441 c -0.077,0.118 -0.159,0.234 -0.245,0.347 l -1.056,1.382 c -1.072,1.404 -2.738,2.228 -4.505,2.228 h -9.145 c -1.949,8.563 -5.32,16.761 -9.917,24.117 l 6.451,6.47 c 1.287,1.29 1.875,3.12 1.58,4.919 l -0.293,1.794 c -0.023,0.138 -0.05,0.275 -0.083,0.411 l -0.411,1.706 c -0.02,0.084 -0.042,0.168 -0.066,0.251 l -0.469,1.617 c -0.027,0.092 -0.056,0.183 -0.087,0.273 l -0.264,0.765 c -0.021,0.059 -0.357,0.942 -0.357,0.942 -0.033,0.083 -0.067,0.167 -0.103,0.25 l -0.323,0.735 c -0.037,0.084 -0.076,0.167 -0.117,0.25 l -0.396,0.793 -0.352,0.677 c -0.046,0.089 -0.095,0.176 -0.145,0.263 l -0.382,0.647 c -0.052,0.088 -0.106,0.174 -0.162,0.259 l -0.411,0.617 c -0.058,0.087 -0.118,0.173 -0.181,0.257 l -0.44,0.588 c -0.064,0.086 -0.131,0.17 -0.199,0.252 l -0.47,0.558 c -0.068,0.083 -0.14,0.163 -0.213,0.241 l -0.499,0.53 c -0.074,0.078 -0.15,0.154 -0.228,0.228 l -0.528,0.5 c -0.078,0.074 -0.158,0.146 -0.24,0.215 l -0.557,0.471 c -0.082,0.069 -0.166,0.136 -0.252,0.2 l -0.587,0.441 c -0.082,0.063 -0.167,0.123 -0.253,0.18 l -0.616,0.412 c -0.087,0.059 -0.175,0.114 -0.265,0.167 l -0.645,0.382 c -0.085,0.051 -0.171,0.099 -0.259,0.144 l -0.761,0.398 -0.704,0.353 c -0.058,0.029 -0.879,0.408 -0.879,0.408 -0.084,0.039 -0.169,0.075 -0.254,0.109 l -0.734,0.295 c -0.083,0.033 -0.168,0.065 -0.253,0.094 l -0.762,0.265 c -0.08,0.028 -0.161,0.054 -0.244,0.078 l -1.583,0.471 c -0.116,0.035 -0.234,0.066 -0.353,0.093 l -1.671,0.382 c -0.109,0.025 -0.219,0.046 -0.329,0.065 l -1.759,0.294 c -0.312,0.052 -0.624,0.077 -0.934,0.077 -1.494,0 -2.943,-0.591 -4.015,-1.666 l -6.456,-6.475 c -7.35,4.642 -15.509,8.051 -24.001,10.028 v 9.118 c 0,1.56 -0.643,3.051 -1.777,4.122 l -0.437,0.413 -0.467,0.468 c -0.074,0.074 -0.15,0.146 -0.228,0.216 l -0.557,0.5 c -0.077,0.069 -0.156,0.136 -0.236,0.201 l -0.586,0.471 c -0.13,0.104 -0.263,0.202 -0.401,0.294 l -0.616,0.412 c -0.115,0.076 -0.233,0.149 -0.354,0.217 l -0.674,0.382 c -0.084,0.048 -0.17,0.094 -0.256,0.137 l -0.704,0.353 c -0.082,0.041 -0.165,0.08 -0.249,0.117 l -0.733,0.324 c -0.083,0.037 -0.166,0.071 -0.25,0.104 l -0.763,0.293 c -0.08,0.031 -0.161,0.061 -0.243,0.088 l -0.792,0.265 c -0.137,0.045 -0.276,0.086 -0.416,0.121 l -0.821,0.206 c -0.076,0.02 -0.153,0.037 -0.23,0.053 l -0.851,0.176 c -0.136,0.028 -0.273,0.051 -0.41,0.069 l -1.788,0.236 c -0.156,0.02 -0.312,0.035 -0.469,0.042 l -1.848,0.088 c -0.09,0.005 -0.181,0.007 -0.271,0.007 -0.09,0 -0.181,-0.002 -0.271,-0.007 l -1.847,-0.088 c -0.157,-0.007 -0.313,-0.022 -0.469,-0.042 l -1.788,-0.236 c -0.138,-0.018 -0.275,-0.041 -0.411,-0.069 l -0.851,-0.176 c -0.076,-0.016 -0.152,-0.033 -0.229,-0.052 l -0.821,-0.206 c -0.078,-0.02 -0.156,-0.041 -0.233,-0.064 l -0.791,-0.235 c -0.145,-0.043 -0.288,-0.092 -0.429,-0.146 l -0.763,-0.295 c -0.083,-0.032 -0.165,-0.066 -0.246,-0.102 l -0.733,-0.323 c -0.086,-0.038 -0.171,-0.078 -0.255,-0.12 l -0.703,-0.353 c -0.118,-0.059 -0.235,-0.123 -0.348,-0.19 l -0.645,-0.382 c -0.089,-0.053 -0.175,-0.107 -0.261,-0.164 l -0.615,-0.412 c -0.088,-0.059 -0.175,-0.12 -0.259,-0.184 l -0.587,-0.441 c -0.124,-0.094 -0.245,-0.192 -0.361,-0.296 l -0.528,-0.47 c -0.083,-0.075 -0.164,-0.152 -0.243,-0.231 l -0.499,-0.5 c -0.078,-0.078 -0.154,-0.159 -0.227,-0.242 l -0.47,-0.529 c -0.922,-1.04 -1.43,-2.383 -1.427,-3.773 l 0.02,-9.135 c -8.472,-1.95 -16.641,-5.338 -24.008,-9.953 l -6.439,6.458 c -1.073,1.076 -2.522,1.667 -4.015,1.667 -0.329,0 -0.661,-0.029 -0.992,-0.088 l -1.818,-0.324 c -0.084,-0.014 -0.168,-0.031 -0.251,-0.05 l -1.701,-0.382 c -0.116,-0.026 -0.23,-0.056 -0.345,-0.089 l -1.613,-0.471 c -0.091,-0.027 -0.181,-0.055 -0.271,-0.087 l -0.762,-0.264 c -0.06,-0.021 -0.943,-0.36 -0.943,-0.36 -0.084,-0.033 -0.168,-0.067 -0.25,-0.104 l -0.733,-0.323 c -0.083,-0.038 -0.166,-0.076 -0.248,-0.117 l -0.704,-0.353 c -0.03,-0.015 -0.765,-0.4 -0.765,-0.4 -0.089,-0.045 -0.176,-0.094 -0.261,-0.145 l -0.646,-0.382 c -0.088,-0.053 -0.174,-0.107 -0.26,-0.164 l -0.615,-0.412 c -0.088,-0.059 -0.175,-0.12 -0.259,-0.184 l -0.587,-0.441 c -0.084,-0.063 -0.166,-0.129 -0.247,-0.197 l -0.557,-0.47 c -0.082,-0.07 -0.163,-0.142 -0.242,-0.217 l -0.528,-0.5 c -0.078,-0.074 -0.154,-0.15 -0.228,-0.228 l -0.498,-0.53 c -0.075,-0.078 -0.146,-0.159 -0.216,-0.242 l -0.47,-0.559 c -0.067,-0.081 -0.133,-0.164 -0.196,-0.248 l -0.44,-0.588 c -0.063,-0.085 -0.125,-0.172 -0.183,-0.261 l -0.411,-0.617 c -0.056,-0.085 -0.109,-0.171 -0.161,-0.258 l -0.381,-0.647 c -0.051,-0.087 -0.1,-0.174 -0.146,-0.263 l -0.396,-0.762 -0.352,-0.706 c -0.028,-0.057 -0.404,-0.877 -0.404,-0.877 -0.039,-0.086 -0.077,-0.172 -0.111,-0.26 l -0.293,-0.736 c -0.033,-0.081 -0.064,-0.164 -0.092,-0.247 l -0.264,-0.764 c -0.028,-0.081 -0.055,-0.163 -0.079,-0.246 l -0.469,-1.588 c -0.034,-0.115 -0.064,-0.231 -0.09,-0.348 l -0.382,-1.676 c -0.031,-0.138 -0.058,-0.278 -0.079,-0.418 l -0.264,-1.764 c -0.266,-1.775 0.325,-3.572 1.592,-4.843 l 6.483,-6.501 c -4.666,-7.447 -8.074,-15.636 -10.026,-24.086 h -9.038 c -1.812,0 -3.515,-0.866 -4.582,-2.331 l -1.114,-1.529 c -0.069,-0.095 -0.135,-0.191 -0.197,-0.289 l -0.938,-1.471 c -0.06,-0.093 -0.117,-0.189 -0.171,-0.285 l -0.821,-1.471 c -0.073,-0.13 -0.14,-0.263 -0.203,-0.399 l -0.674,-1.471 c -0.068,-0.147 -0.129,-0.296 -0.183,-0.448 l -0.528,-1.471 c -0.058,-0.162 -0.109,-0.327 -0.153,-0.493 l -0.381,-1.471 c -0.044,-0.174 -0.082,-0.351 -0.11,-0.529 l -0.234,-1.471 c -0.03,-0.183 -0.05,-0.367 -0.061,-0.552 l -0.088,-1.47 c -0.011,-0.188 -0.013,-0.377 -0.006,-0.566 l 0.059,-1.471 c 0.009,-0.223 0.031,-0.446 0.066,-0.667 l 0.234,-1.47 c 0.029,-0.179 0.066,-0.356 0.111,-0.531 l 0.382,-1.47 c 0.043,-0.166 0.093,-0.33 0.151,-0.491 l 0.528,-1.471 c 0.06,-0.166 0.127,-0.329 0.201,-0.488 l 0.675,-1.441 c 0.051,-0.111 0.107,-0.221 0.166,-0.328 l 0.792,-1.441 c 0.068,-0.123 0.14,-0.244 0.217,-0.362 l 0.938,-1.441 c 0.057,-0.087 0.117,-0.173 0.178,-0.257 l 1.056,-1.441 c 1.068,-1.458 2.766,-2.319 4.573,-2.319 h 9.154 c 1.95,-8.519 5.333,-16.713 9.952,-24.103 l -6.436,-6.455 c -1.287,-1.289 -1.874,-3.118 -1.581,-4.916 l 0.293,-1.795 c 0.018,-0.108 0.039,-0.216 0.062,-0.324 l 0.382,-1.705 c 0.026,-0.114 0.055,-0.228 0.087,-0.341 l 0.469,-1.617 c 0.027,-0.092 0.056,-0.183 0.087,-0.273 l 0.264,-0.765 c 0.021,-0.059 0.357,-0.942 0.357,-0.942 0.033,-0.084 0.067,-0.168 0.104,-0.251 l 0.323,-0.735 c 0.036,-0.084 0.075,-0.167 0.116,-0.25 l 0.396,-0.791 0.352,-0.677 c 0.046,-0.089 0.095,-0.176 0.146,-0.263 l 0.381,-0.647 c 0.052,-0.087 0.105,-0.173 0.161,-0.258 l 0.411,-0.617 c 0.058,-0.089 0.12,-0.176 0.183,-0.261 l 0.44,-0.588 c 0.063,-0.084 0.129,-0.167 0.196,-0.248 l 0.47,-0.559 c 0.07,-0.083 0.141,-0.164 0.216,-0.242 l 0.498,-0.53 c 0.074,-0.078 0.15,-0.154 0.228,-0.228 l 0.528,-0.5 c 0.078,-0.074 0.158,-0.146 0.24,-0.215 l 0.557,-0.471 c 0.082,-0.069 0.166,-0.136 0.252,-0.2 l 0.586,-0.441 c 0.084,-0.063 0.17,-0.124 0.257,-0.182 l 0.615,-0.411 c 0.086,-0.058 0.172,-0.112 0.26,-0.165 l 0.646,-0.382 c 0.085,-0.051 0.172,-0.099 0.261,-0.145 l 1.351,-0.707 c 0.085,-0.045 0.17,-0.087 0.257,-0.127 l 0.704,-0.324 c 0.086,-0.039 0.173,-0.076 0.26,-0.111 l 0.733,-0.294 c 0.083,-0.034 0.166,-0.065 0.25,-0.094 l 0.763,-0.264 c 0.08,-0.029 0.162,-0.054 0.244,-0.079 l 1.583,-0.471 c 0.116,-0.034 0.233,-0.065 0.351,-0.092 l 1.671,-0.382 c 0.11,-0.026 0.219,-0.047 0.33,-0.066 l 1.76,-0.294 c 0.312,-0.052 0.624,-0.077 0.934,-0.077 1.494,0 2.943,0.591 4.015,1.666 l 6.466,6.485 c 7.378,-4.634 15.531,-8.029 23.981,-9.985 l 0.039,-9.224 c 0.007,-1.812 0.881,-3.512 2.35,-4.572 l 1.466,-1.059 c 0.084,-0.061 0.169,-0.119 0.257,-0.175 l 1.466,-0.941 c 0.093,-0.06 0.189,-0.118 0.287,-0.173 l 1.466,-0.823 c 0.13,-0.073 0.263,-0.141 0.399,-0.204 l 1.466,-0.676 c 0.148,-0.069 0.299,-0.131 0.453,-0.186 l 1.466,-0.529 c 0.128,-0.047 0.258,-0.088 0.389,-0.125 l 1.466,-0.412 c 0.21,-0.059 0.423,-0.106 0.638,-0.14 l 1.466,-0.235 c 0.184,-0.03 0.369,-0.05 0.555,-0.061 l 1.466,-0.089 c 0.114,-0.007 0.228,-0.01 0.342,-0.01 0.113,0 0.227,0.003 0.341,0.01 l 1.466,0.089 c 0.186,0.011 0.371,0.031 0.555,0.061 l 1.466,0.235 c 0.18,0.028 0.359,0.066 0.534,0.112 l 1.466,0.382 c 0.167,0.044 0.332,0.095 0.494,0.153 l 1.467,0.53 c 0.167,0.06 0.331,0.128 0.491,0.204 l 1.436,0.677 c 0.111,0.051 0.219,0.107 0.326,0.166 l 1.437,0.794 c 0.124,0.068 0.246,0.142 0.365,0.219 l 1.436,0.941 c 0.087,0.057 0.173,0.117 0.257,0.178 l 1.437,1.059 c 1.45,1.068 2.306,2.763 2.306,4.564 v 9.214 c 8.451,1.931 16.614,5.312 24.016,9.948 l 6.441,-6.46 c 1.072,-1.076 2.52,-1.667 4.015,-1.667 0.305,0 0.612,0.025 0.919,0.075 l 1.789,0.294 c 0.107,0.018 0.215,0.039 0.322,0.063 l 1.701,0.382 c 0.116,0.026 0.232,0.056 0.346,0.089 l 1.613,0.471 c 0.091,0.027 0.182,0.055 0.271,0.087 l 0.762,0.264 c 0.061,0.021 0.945,0.361 0.945,0.361 0.083,0.032 0.165,0.066 0.246,0.102 l 0.733,0.323 c 0.086,0.038 0.171,0.078 0.255,0.12 l 0.79,0.398 0.675,0.353 c 0.087,0.045 0.174,0.094 0.258,0.144 l 0.646,0.382 c 0.089,0.053 0.178,0.109 0.265,0.167 l 0.615,0.412 c 0.087,0.058 0.171,0.118 0.254,0.18 l 0.587,0.441 c 0.085,0.065 0.169,0.131 0.251,0.201 l 0.557,0.47 c 0.082,0.069 0.161,0.14 0.239,0.213 l 0.527,0.5 c 0.08,0.075 0.157,0.153 0.232,0.232 l 0.499,0.53 c 0.073,0.078 0.143,0.157 0.212,0.239 l 0.469,0.558 c 0.069,0.082 0.136,0.166 0.2,0.252 l 0.44,0.588 c 0.062,0.084 0.122,0.169 0.18,0.256 l 0.411,0.618 c 0.056,0.085 0.11,0.172 0.162,0.26 l 0.381,0.647 c 0.051,0.086 0.1,0.173 0.146,0.262 l 0.397,0.765 0.351,0.705 c 0.029,0.058 0.406,0.881 0.406,0.881 0.038,0.083 0.073,0.167 0.108,0.251 l 0.293,0.735 c 0.033,0.084 0.065,0.169 0.094,0.255 l 0.264,0.764 c 0.028,0.08 0.054,0.161 0.078,0.241 l 0.469,1.588 c 0.034,0.116 0.064,0.232 0.091,0.35 l 0.381,1.676 c 0.025,0.109 0.046,0.217 0.065,0.327 l 0.293,1.765 c 0.299,1.8 -0.286,3.633 -1.572,4.927 l -6.483,6.522 c 4.627,7.406 8.014,15.589 9.964,24.071 h 9.124 c 1.844,0 3.574,0.898 4.636,2.407 l 1.056,1.5 c 0.049,0.07 0.097,0.141 0.143,0.213 l 0.938,1.47 c 0.059,0.094 0.116,0.189 0.17,0.285 l 0.821,1.471 c 0.074,0.131 0.141,0.265 0.204,0.401 l 0.674,1.47 c 0.067,0.147 0.128,0.297 0.183,0.449 l 0.528,1.47 c 0.046,0.129 0.088,0.26 0.125,0.392 l 0.41,1.47 c 0.058,0.207 0.103,0.417 0.137,0.629 l 0.235,1.47 c 0.03,0.185 0.05,0.37 0.061,0.556 l 0.088,1.471 c 0.014,0.225 0.014,0.451 0,0.676 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path22"
+ inkscape:connector-curvature="0" /></g><g
+ id="g24"
+ transform="translate(236.9975,143.5558)"><path
+ d="m 0,0 c -0.008,0.139 -0.021,0.277 -0.04,0.415 l -0.205,1.529 c -0.03,0.226 -0.074,0.45 -0.131,0.67 l -0.382,1.47 C -0.801,4.251 -0.852,4.415 -0.91,4.577 l -0.527,1.47 c -0.06,0.165 -0.127,0.328 -0.201,0.487 l -0.675,1.441 c -0.051,0.111 -0.107,0.22 -0.166,0.327 l -0.792,1.441 c -0.067,0.124 -0.141,0.246 -0.218,0.365 l -0.938,1.441 c -0.077,0.118 -0.159,0.234 -0.245,0.347 l -1.056,1.382 c -1.072,1.404 -2.738,2.228 -4.505,2.228 h -9.145 c -1.949,8.563 -5.32,16.761 -9.917,24.117 l 6.451,6.47 c 1.287,1.29 1.875,3.12 1.58,4.919 l -0.293,1.794 c -0.023,0.138 -0.05,0.275 -0.083,0.411 l -0.411,1.706 c -0.02,0.084 -0.042,0.168 -0.066,0.251 l -0.469,1.617 c -0.027,0.092 -0.056,0.183 -0.087,0.273 l -0.264,0.765 c -0.021,0.059 -0.357,0.942 -0.357,0.942 -0.033,0.083 -0.067,0.167 -0.103,0.25 l -0.323,0.735 c -0.037,0.084 -0.076,0.167 -0.117,0.25 l -0.396,0.793 -0.352,0.677 c -0.046,0.089 -0.095,0.176 -0.145,0.263 l -0.382,0.647 c -0.052,0.088 -0.106,0.174 -0.162,0.259 l -0.411,0.617 c -0.058,0.087 -0.118,0.173 -0.181,0.257 l -0.44,0.588 c -0.064,0.086 -0.131,0.17 -0.199,0.252 l -0.47,0.558 c -0.068,0.083 -0.14,0.163 -0.213,0.241 l -0.499,0.53 c -0.074,0.078 -0.15,0.154 -0.228,0.228 l -0.528,0.5 c -0.078,0.074 -0.158,0.146 -0.24,0.215 l -0.557,0.471 c -0.082,0.069 -0.166,0.136 -0.252,0.2 l -0.587,0.441 c -0.082,0.063 -0.167,0.123 -0.253,0.18 l -0.616,0.412 c -0.087,0.059 -0.175,0.114 -0.265,0.167 l -0.645,0.382 c -0.085,0.051 -0.171,0.099 -0.259,0.144 l -0.761,0.398 -0.704,0.353 c -0.058,0.029 -0.879,0.408 -0.879,0.408 -0.084,0.039 -0.169,0.075 -0.254,0.109 l -0.734,0.295 c -0.083,0.033 -0.168,0.065 -0.253,0.094 l -0.762,0.265 c -0.08,0.028 -0.161,0.054 -0.244,0.078 l -1.583,0.471 c -0.116,0.035 -0.234,0.066 -0.353,0.093 l -1.671,0.382 c -0.109,0.025 -0.219,0.046 -0.329,0.065 l -1.759,0.294 c -0.312,0.052 -0.624,0.077 -0.934,0.077 -1.494,0 -2.943,-0.591 -4.015,-1.666 l -6.456,-6.475 c -7.35,4.642 -15.509,8.051 -24.001,10.028 v 9.118 c 0,1.56 -0.643,3.051 -1.777,4.122 l -0.437,0.413 -0.467,0.468 c -0.074,0.074 -0.15,0.146 -0.228,0.216 l -0.557,0.5 c -0.077,0.069 -0.156,0.136 -0.236,0.201 l -0.586,0.471 c -0.13,0.104 -0.263,0.202 -0.401,0.294 l -0.616,0.412 c -0.115,0.076 -0.233,0.149 -0.354,0.217 l -0.674,0.382 c -0.084,0.048 -0.17,0.094 -0.256,0.137 l -0.704,0.353 c -0.082,0.041 -0.165,0.08 -0.249,0.117 l -0.733,0.324 c -0.083,0.037 -0.166,0.071 -0.25,0.104 l -0.763,0.293 c -0.08,0.031 -0.161,0.061 -0.243,0.088 l -0.792,0.265 c -0.137,0.045 -0.276,0.086 -0.416,0.121 l -0.821,0.206 c -0.076,0.02 -0.153,0.037 -0.23,0.053 l -0.851,0.176 c -0.136,0.028 -0.273,0.051 -0.41,0.069 l -1.788,0.236 c -0.156,0.02 -0.312,0.035 -0.469,0.042 l -1.848,0.088 c -0.09,0.005 -0.181,0.007 -0.271,0.007 -0.09,0 -0.181,-0.002 -0.271,-0.007 l -1.847,-0.088 c -0.157,-0.007 -0.313,-0.022 -0.469,-0.042 l -1.788,-0.236 c -0.138,-0.018 -0.275,-0.041 -0.411,-0.069 l -0.851,-0.176 c -0.076,-0.016 -0.152,-0.033 -0.229,-0.052 l -0.821,-0.206 c -0.078,-0.02 -0.156,-0.041 -0.233,-0.064 l -0.791,-0.235 c -0.145,-0.043 -0.288,-0.092 -0.429,-0.146 l -0.763,-0.295 c -0.083,-0.032 -0.165,-0.066 -0.246,-0.102 l -0.733,-0.323 c -0.086,-0.038 -0.171,-0.078 -0.255,-0.12 l -0.703,-0.353 c -0.118,-0.059 -0.235,-0.123 -0.348,-0.19 l -0.645,-0.382 c -0.089,-0.053 -0.175,-0.107 -0.261,-0.164 l -0.615,-0.412 c -0.088,-0.059 -0.175,-0.12 -0.259,-0.184 l -0.587,-0.441 c -0.124,-0.094 -0.245,-0.192 -0.361,-0.296 l -0.528,-0.47 c -0.083,-0.075 -0.164,-0.152 -0.243,-0.231 l -0.499,-0.5 c -0.078,-0.078 -0.154,-0.159 -0.227,-0.242 l -0.47,-0.529 c -0.922,-1.04 -1.43,-2.383 -1.427,-3.773 l 0.02,-9.135 c -8.472,-1.95 -16.641,-5.338 -24.008,-9.953 l -6.439,6.458 c -1.073,1.076 -2.522,1.667 -4.015,1.667 -0.329,0 -0.661,-0.029 -0.992,-0.088 l -1.818,-0.324 c -0.084,-0.014 -0.168,-0.031 -0.251,-0.05 l -1.701,-0.382 c -0.116,-0.026 -0.23,-0.056 -0.345,-0.089 l -1.613,-0.471 c -0.091,-0.027 -0.181,-0.055 -0.271,-0.087 l -0.762,-0.264 c -0.06,-0.021 -0.943,-0.36 -0.943,-0.36 -0.084,-0.033 -0.168,-0.067 -0.25,-0.104 l -0.733,-0.323 c -0.083,-0.038 -0.166,-0.076 -0.248,-0.117 l -0.704,-0.353 c -0.03,-0.015 -0.765,-0.4 -0.765,-0.4 -0.089,-0.045 -0.176,-0.094 -0.261,-0.145 l -0.646,-0.382 c -0.088,-0.053 -0.174,-0.107 -0.26,-0.164 l -0.615,-0.412 c -0.088,-0.059 -0.175,-0.12 -0.259,-0.184 l -0.587,-0.441 c -0.084,-0.063 -0.166,-0.129 -0.247,-0.197 l -0.557,-0.47 c -0.082,-0.07 -0.163,-0.142 -0.242,-0.217 l -0.528,-0.5 c -0.078,-0.074 -0.154,-0.15 -0.228,-0.228 l -0.498,-0.53 c -0.075,-0.078 -0.146,-0.159 -0.216,-0.242 l -0.47,-0.559 c -0.067,-0.081 -0.133,-0.164 -0.196,-0.248 l -0.44,-0.588 c -0.063,-0.085 -0.125,-0.172 -0.183,-0.261 l -0.411,-0.617 c -0.056,-0.085 -0.109,-0.171 -0.161,-0.258 l -0.381,-0.647 c -0.051,-0.087 -0.1,-0.174 -0.146,-0.263 l -0.396,-0.762 -0.352,-0.706 c -0.028,-0.057 -0.404,-0.877 -0.404,-0.877 -0.039,-0.086 -0.077,-0.172 -0.111,-0.26 l -0.293,-0.736 c -0.033,-0.081 -0.064,-0.164 -0.092,-0.247 l -0.264,-0.764 c -0.028,-0.081 -0.055,-0.163 -0.079,-0.246 l -0.469,-1.588 c -0.034,-0.115 -0.064,-0.231 -0.09,-0.348 l -0.382,-1.676 c -0.031,-0.138 -0.058,-0.278 -0.079,-0.418 l -0.264,-1.764 c -0.266,-1.775 0.325,-3.572 1.592,-4.843 l 6.483,-6.501 c -4.666,-7.447 -8.074,-15.636 -10.026,-24.086 h -9.038 c -1.812,0 -3.515,-0.866 -4.582,-2.331 l -1.114,-1.529 c -0.069,-0.095 -0.135,-0.191 -0.197,-0.289 l -0.938,-1.471 c -0.06,-0.093 -0.117,-0.189 -0.171,-0.285 l -0.821,-1.471 c -0.073,-0.13 -0.14,-0.263 -0.203,-0.399 l -0.674,-1.471 c -0.068,-0.147 -0.129,-0.296 -0.183,-0.448 l -0.528,-1.471 c -0.058,-0.162 -0.109,-0.327 -0.153,-0.493 l -0.381,-1.471 c -0.044,-0.174 -0.082,-0.351 -0.11,-0.529 l -0.234,-1.471 c -0.03,-0.183 -0.05,-0.367 -0.061,-0.552 l -0.088,-1.47 c -0.011,-0.188 -0.013,-0.377 -0.006,-0.566 l 0.059,-1.471 c 0.009,-0.223 0.031,-0.446 0.066,-0.667 l 0.234,-1.47 c 0.029,-0.179 0.066,-0.356 0.111,-0.531 l 0.382,-1.47 c 0.043,-0.166 0.093,-0.33 0.151,-0.491 l 0.528,-1.471 c 0.06,-0.166 0.127,-0.329 0.201,-0.488 l 0.675,-1.441 c 0.051,-0.111 0.107,-0.221 0.166,-0.328 l 0.792,-1.441 c 0.068,-0.123 0.14,-0.244 0.217,-0.362 l 0.938,-1.441 c 0.057,-0.087 0.117,-0.173 0.178,-0.257 l 1.056,-1.441 c 1.068,-1.458 2.766,-2.319 4.573,-2.319 h 9.154 c 1.95,-8.519 5.333,-16.713 9.952,-24.103 l -6.436,-6.455 c -1.287,-1.289 -1.874,-3.118 -1.581,-4.916 l 0.293,-1.795 c 0.018,-0.108 0.039,-0.216 0.062,-0.324 l 0.382,-1.705 c 0.026,-0.114 0.055,-0.228 0.087,-0.341 l 0.469,-1.617 c 0.027,-0.092 0.056,-0.183 0.087,-0.273 l 0.264,-0.765 c 0.021,-0.059 0.357,-0.942 0.357,-0.942 0.033,-0.084 0.067,-0.168 0.104,-0.251 l 0.323,-0.735 c 0.036,-0.084 0.075,-0.167 0.116,-0.25 l 0.396,-0.791 0.352,-0.677 c 0.046,-0.089 0.095,-0.176 0.146,-0.263 l 0.381,-0.647 c 0.052,-0.087 0.105,-0.173 0.161,-0.258 l 0.411,-0.617 c 0.058,-0.089 0.12,-0.176 0.183,-0.261 l 0.44,-0.588 c 0.063,-0.084 0.129,-0.167 0.196,-0.248 l 0.47,-0.559 c 0.07,-0.083 0.141,-0.164 0.216,-0.242 l 0.498,-0.53 c 0.074,-0.078 0.15,-0.154 0.228,-0.228 l 0.528,-0.5 c 0.078,-0.074 0.158,-0.146 0.24,-0.215 l 0.557,-0.471 c 0.082,-0.069 0.166,-0.136 0.252,-0.2 l 0.586,-0.441 c 0.084,-0.063 0.17,-0.124 0.257,-0.182 l 0.615,-0.411 c 0.086,-0.058 0.172,-0.112 0.26,-0.165 l 0.646,-0.382 c 0.085,-0.051 0.172,-0.099 0.261,-0.145 l 1.351,-0.707 c 0.085,-0.045 0.17,-0.087 0.257,-0.127 l 0.704,-0.324 c 0.086,-0.039 0.173,-0.076 0.26,-0.111 l 0.733,-0.294 c 0.083,-0.034 0.166,-0.065 0.25,-0.094 l 0.763,-0.264 c 0.08,-0.029 0.162,-0.054 0.244,-0.079 l 1.583,-0.471 c 0.116,-0.034 0.233,-0.065 0.351,-0.092 l 1.671,-0.382 c 0.11,-0.026 0.219,-0.047 0.33,-0.066 l 1.76,-0.294 c 0.312,-0.052 0.624,-0.077 0.934,-0.077 1.494,0 2.943,0.591 4.015,1.666 l 6.466,6.485 c 7.378,-4.634 15.531,-8.029 23.981,-9.985 l 0.039,-9.224 c 0.007,-1.812 0.881,-3.512 2.35,-4.572 l 1.466,-1.059 c 0.084,-0.061 0.169,-0.119 0.257,-0.175 l 1.466,-0.941 c 0.093,-0.06 0.189,-0.118 0.287,-0.173 l 1.466,-0.823 c 0.13,-0.073 0.263,-0.141 0.399,-0.204 l 1.466,-0.676 c 0.148,-0.069 0.299,-0.131 0.453,-0.186 l 1.466,-0.529 c 0.128,-0.047 0.258,-0.088 0.389,-0.125 l 1.466,-0.412 c 0.21,-0.059 0.423,-0.106 0.638,-0.14 l 1.466,-0.235 c 0.184,-0.03 0.369,-0.05 0.555,-0.061 l 1.466,-0.089 c 0.114,-0.007 0.228,-0.01 0.342,-0.01 0.113,0 0.227,0.003 0.341,0.01 l 1.466,0.089 c 0.186,0.011 0.371,0.031 0.555,0.061 l 1.466,0.235 c 0.18,0.028 0.359,0.066 0.534,0.112 l 1.466,0.382 c 0.167,0.044 0.332,0.095 0.494,0.153 l 1.467,0.53 c 0.167,0.06 0.331,0.128 0.491,0.204 l 1.436,0.677 c 0.111,0.051 0.219,0.107 0.326,0.166 l 1.437,0.794 c 0.124,0.068 0.246,0.142 0.365,0.219 l 1.436,0.941 c 0.087,0.057 0.173,0.117 0.257,0.178 l 1.437,1.059 c 1.45,1.068 2.306,2.763 2.306,4.564 v 9.214 c 8.451,1.931 16.614,5.312 24.016,9.948 l 6.441,-6.46 c 1.072,-1.076 2.52,-1.667 4.015,-1.667 0.305,0 0.612,0.025 0.919,0.075 l 1.789,0.294 c 0.107,0.018 0.215,0.039 0.322,0.063 l 1.701,0.382 c 0.116,0.026 0.232,0.056 0.346,0.089 l 1.613,0.471 c 0.091,0.027 0.182,0.055 0.271,0.087 l 0.762,0.264 c 0.061,0.021 0.945,0.361 0.945,0.361 0.083,0.032 0.165,0.066 0.246,0.102 l 0.733,0.323 c 0.086,0.038 0.171,0.078 0.255,0.12 l 0.79,0.398 0.675,0.353 c 0.087,0.045 0.174,0.094 0.258,0.144 l 0.646,0.382 c 0.089,0.053 0.178,0.109 0.265,0.167 l 0.615,0.412 c 0.087,0.058 0.171,0.118 0.254,0.18 l 0.587,0.441 c 0.085,0.065 0.169,0.131 0.251,0.201 l 0.557,0.47 c 0.082,0.069 0.161,0.14 0.239,0.213 l 0.527,0.5 c 0.08,0.075 0.157,0.153 0.232,0.232 l 0.499,0.53 c 0.073,0.078 0.143,0.157 0.212,0.239 l 0.469,0.558 c 0.069,0.082 0.136,0.166 0.2,0.252 l 0.44,0.588 c 0.062,0.084 0.122,0.169 0.18,0.256 l 0.411,0.618 c 0.056,0.085 0.11,0.172 0.162,0.26 l 0.381,0.647 c 0.051,0.086 0.1,0.173 0.146,0.262 l 0.397,0.765 0.351,0.705 c 0.029,0.058 0.406,0.881 0.406,0.881 0.038,0.083 0.073,0.167 0.108,0.251 l 0.293,0.735 c 0.033,0.084 0.065,0.169 0.094,0.255 l 0.264,0.764 c 0.028,0.08 0.054,0.161 0.078,0.241 l 0.469,1.588 c 0.034,0.116 0.064,0.232 0.091,0.35 l 0.381,1.676 c 0.025,0.109 0.046,0.217 0.065,0.327 l 0.293,1.765 c 0.299,1.8 -0.286,3.633 -1.572,4.927 l -6.483,6.522 c 4.627,7.406 8.014,15.589 9.964,24.071 h 9.124 c 1.844,0 3.574,0.898 4.636,2.407 l 1.056,1.5 c 0.049,0.07 0.097,0.141 0.143,0.213 l 0.938,1.47 c 0.059,0.094 0.116,0.189 0.17,0.285 l 0.821,1.471 c 0.074,0.131 0.141,0.265 0.204,0.401 l 0.674,1.47 c 0.067,0.147 0.128,0.297 0.183,0.449 l 0.528,1.47 c 0.046,0.129 0.088,0.26 0.125,0.392 l 0.41,1.47 c 0.058,0.207 0.103,0.417 0.137,0.629 l 0.235,1.47 c 0.03,0.185 0.05,0.37 0.061,0.556 l 0.088,1.471 c 0.014,0.225 0.014,0.451 0,0.676 z"
+ style="fill:none;stroke:#231f20;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="path26"
+ inkscape:connector-curvature="0" /></g><g
+ id="g28"
+ transform="translate(97.9267,114.5446)"><path
+ d="M 0,0 -14.837,-14.88 C -21.258,-5.911 -25.598,4.5 -27.416,15.616 H -6.421 C -5.131,10.028 -2.961,4.764 0,0"
+ style="fill:#de183b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path30"
+ inkscape:connector-curvature="0" /></g><g
+ id="g32"
+ transform="translate(212.9536,153.3927)"><path
+ d="m 0,0 h -20.994 c -1.29,5.558 -3.46,10.822 -6.421,15.586 l 14.866,14.91 C -6.128,21.556 -1.818,11.116 0,0"
+ style="fill:#de183b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path34"
+ inkscape:connector-curvature="0" /></g><g
+ id="g36"
+ transform="translate(129.9453,91.4596)"><path
+ d="m 0,0 v -21.056 c -10.849,1.794 -21.258,6.087 -30.377,12.645 L -15.54,6.47 C -10.702,3.441 -5.454,1.265 0,0"
+ style="fill:#de183b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path38"
+ inkscape:connector-curvature="0" /></g><g
+ id="g40"
+ transform="translate(183.8964,200.504)"><path
+ d="m 0,0 v 0 l -14.836,-14.88 c -4.839,3.028 -10.087,5.205 -15.541,6.499 V 12.704 C -19.499,10.881 -9.09,6.587 0,0"
+ style="fill:#de183b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path42"
+ inkscape:connector-curvature="0" /></g><g
+ id="g44"
+ transform="translate(168.8837,97.841)"><path
+ d="M 0,0 14.836,-14.88 C 5.894,-21.291 -4.486,-25.673 -15.569,-27.467 V -6.411 C -9.999,-5.146 -4.75,-2.97 0,0"
+ style="fill:#de183b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path46"
+ inkscape:connector-curvature="0" /></g><g
+ id="g48"
+ transform="translate(130.1503,213.2081)"><path
+ d="m 0,0 v -21.056 c -5.541,-1.294 -10.819,-3.47 -15.569,-6.411 l -14.837,14.881 c 8.679,6.234 18.736,10.527 29.439,12.439 C -0.674,-0.118 -0.352,-0.059 0,0"
+ style="fill:#de183b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path50"
+ inkscape:connector-curvature="0" /></g><g
+ id="g52"
+ transform="translate(83.1777,184.0651)"><path
+ d="m 0,0 14.866,-14.88 c -3.02,-4.853 -5.19,-10.117 -6.48,-15.587 H -12.667 C -10.878,-19.586 -6.539,-9.146 0,0"
+ style="fill:#de183b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path54"
+ inkscape:connector-curvature="0" /></g><g
+ id="g56"
+ transform="translate(200.2871,99.4879)"><path
+ d="m 0,0 -14.866,14.88 c 3.02,4.852 5.19,10.117 6.48,15.586 H 12.608 C 10.819,19.585 6.539,9.146 0,0"
+ style="fill:#de183b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path58"
+ inkscape:connector-curvature="0" /></g><g
+ id="g60"
+ transform="translate(99.5688,83.049)"><path
+ d="M 0,0 14.836,14.88 C 8.092,19.115 2.463,24.82 -1.671,31.496 L -16.508,16.615 c 0.008,-0.011 0.018,-0.021 0.026,-0.032 l -9.702,-9.731 0.293,-1.794 0.381,-1.705 0.469,-1.618 0.264,-0.765 0.294,-0.764 0.322,-0.735 0.352,-0.706 0.352,-0.677 0.381,-0.647 0.41,-0.617 0.44,-0.588 0.469,-0.559 0.499,-0.53 0.528,-0.5 0.557,-0.47 0.586,-0.441 0.616,-0.411 0.645,-0.383 0.674,-0.353 0.675,-0.353 0.704,-0.323 0.732,-0.294 0.763,-0.265 1.583,-0.47 1.672,-0.383 1.759,-0.294 L 0,0"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path62"
+ inkscape:connector-curvature="0" /></g><g
+ id="g64"
+ transform="translate(185.5678,169.0079)"><path
+ d="m 0,0 14.836,14.88 9.735,9.764 -0.293,1.794 -0.411,1.706 -0.469,1.617 -0.264,0.764 -0.293,0.765 -0.322,0.735 -0.352,0.706 -0.352,0.676 -0.381,0.647 -0.411,0.618 -0.44,0.588 -0.469,0.559 -0.498,0.529 -0.528,0.5 -0.557,0.471 -0.587,0.441 -0.615,0.411 -0.645,0.383 -0.675,0.353 -0.703,0.353 -0.704,0.323 -0.733,0.294 -0.763,0.265 -1.583,0.47 -1.671,0.383 -1.76,0.294 -9.763,-9.793 -14.837,-14.88 C -9.735,12.381 -4.105,6.676 0,0"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path66"
+ inkscape:connector-curvature="0" /></g><g
+ id="g68"
+ transform="translate(141.7324,98.9293)"><path
+ d="m 0,0 c 2.023,0 3.665,-1.647 3.665,-3.676 0,-2.029 -1.642,-3.676 -3.665,-3.676 -2.023,0 -3.665,1.647 -3.665,3.676 C -3.665,-1.647 -2.023,0 0,0 M 10.204,-4.646 9.471,-3.353 8.738,-2.147 8.005,-1.029 7.272,0 6.539,0.941 5.806,1.794 5.073,2.559 4.34,3.235 3.607,3.793 2.874,4.264 2.141,4.646 1.408,4.911 0.674,5.058 -0.059,5.117 -0.792,5.058 -1.524,4.911 -2.258,4.646 -2.991,4.264 -3.724,3.793 -4.457,3.235 -5.19,2.559 -5.923,1.794 -6.656,0.941 -7.389,0 l -0.733,-1.029 -0.733,-1.118 -0.733,-1.206 -0.733,-1.293 -0.733,-1.383 -0.733,-1.441 -0.029,-21.056 0.058,-13.851 1.466,-1.059 1.466,-0.94 1.466,-0.824 1.466,-0.676 1.466,-0.53 1.467,-0.411 1.466,-0.236 1.466,-0.088 1.466,0.088 1.466,0.236 1.466,0.382 1.466,0.529 1.437,0.676 1.436,0.794 1.437,0.941 1.437,1.059 v 13.852 21.085 l -0.704,1.441 z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path70"
+ inkscape:connector-curvature="0" /></g><g
+ id="g72"
+ transform="translate(200.2871,99.5172)"><path
+ d="m 0,0 -14.837,14.851 c -4.222,-6.764 -9.91,-12.41 -16.537,-16.557 l 14.808,-14.851 9.734,-9.763 1.789,0.294 1.7,0.382 1.613,0.471 0.762,0.265 0.763,0.294 0.733,0.323 0.703,0.353 0.675,0.353 0.645,0.382 0.616,0.412 0.586,0.441 0.557,0.471 0.528,0.5 0.498,0.529 0.47,0.559 0.439,0.588 0.411,0.618 0.381,0.647 0.352,0.676 0.352,0.706 0.322,0.705 0.293,0.736 0.264,0.764 0.469,1.588 0.382,1.677 0.293,1.764 z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path74"
+ inkscape:connector-curvature="0" /></g><g
+ id="g76"
+ transform="translate(90.0097,210.3849)"><path
+ d="m 0,0 -1.818,-0.323 -1.701,-0.383 -1.612,-0.47 -0.763,-0.265 -0.762,-0.294 -0.733,-0.324 -0.704,-0.352 -0.674,-0.353 -0.645,-0.382 -0.616,-0.412 -0.586,-0.442 -0.557,-0.47 -0.528,-0.5 -0.499,-0.529 -0.469,-0.559 -0.439,-0.588 -0.411,-0.618 -0.381,-0.647 -0.352,-0.676 -0.352,-0.705 -0.322,-0.707 -0.294,-0.735 -0.263,-0.765 -0.47,-1.587 -0.381,-1.677 -0.264,-1.764 9.748,-9.776 c -0.005,-0.006 -0.009,-0.011 -0.013,-0.017 L 8.005,-41.2 c 4.222,6.793 9.911,12.439 16.566,16.556 L 9.735,-9.763 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path78"
+ inkscape:connector-curvature="0" /></g><g
+ id="g80"
+ transform="translate(188.1186,138.1002)"><path
+ d="m 0,0 c -2.023,0 -3.665,1.647 -3.665,3.676 0,2.03 1.642,3.676 3.665,3.676 2.023,0 3.665,-1.646 3.665,-3.676 C 3.665,1.647 2.023,0 0,0 m 43.22,5.117 -0.206,1.529 -0.381,1.471 -0.528,1.47 -0.674,1.441 -0.792,1.441 -0.938,1.441 -1.055,1.382 H 24.835 3.812 c 0.001,-0.003 0.001,-0.007 0.001,-0.01 L 2.346,14.704 0.968,13.969 -0.323,13.234 -1.525,12.499 -2.639,11.763 -3.665,11.028 -4.604,10.293 -5.454,9.558 -6.216,8.823 -6.891,8.087 -7.447,7.352 -7.917,6.617 -8.298,5.882 -8.562,5.146 -8.708,4.412 -8.767,3.676 l 0.059,-0.735 0.146,-0.735 0.293,-0.824 0.382,-0.735 0.469,-0.735 0.557,-0.735 0.674,-0.735 0.763,-0.735 0.85,-0.736 0.938,-0.735 1.027,-0.735 1.113,-0.735 1.203,-0.736 1.29,-0.735 1.378,-0.735 1.407,-0.735 h 20.994 c 0.002,0.009 0.003,0.019 0.004,0.029 h 13.777 l 1.056,1.5 0.938,1.47 0.821,1.471 0.675,1.47 0.527,1.471 0.411,1.47 0.235,1.471 0.088,1.469 z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path82"
+ inkscape:connector-curvature="0" /></g><g
+ id="g84"
+ transform="translate(95.3169,145.4523)"><path
+ d="m 0,0 c 2.023,0 3.666,-1.646 3.666,-3.676 0,-2.029 -1.613,-3.676 -3.666,-3.676 -1.994,0 -3.636,1.647 -3.636,3.676 C -3.636,-1.646 -2.023,0 0,0 m -2.346,-14.586 1.408,0.676 1.29,0.735 1.202,0.736 1.114,0.735 1.026,0.735 0.939,0.735 0.85,0.735 0.763,0.736 0.674,0.735 0.557,0.735 0.469,0.735 0.381,0.736 0.264,0.735 0.147,0.734 0.058,0.736 L 8.738,-2.882 8.591,-2.146 8.327,-1.412 7.946,-0.676 7.477,0.059 6.92,0.794 6.246,1.529 5.483,2.265 4.633,3 3.694,3.735 2.668,4.47 1.554,5.205 0.352,5.94 -0.938,6.676 -2.316,7.411 -3.753,8.146 h -21.053 -13.693 l -1.114,-1.529 -0.938,-1.471 -0.821,-1.47 -0.674,-1.47 -0.528,-1.471 -0.382,-1.47 -0.234,-1.471 -0.088,-1.47 0.059,-1.47 0.234,-1.471 0.381,-1.47 0.528,-1.47 0.675,-1.441 0.791,-1.441 0.939,-1.441 1.055,-1.441 h 13.81 l 20.994,0.029 z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path86"
+ inkscape:connector-curvature="0" /></g><g
+ id="g88"
+ transform="translate(141.7324,184.6237)"><path
+ d="m 0,0 c -2.023,0 -3.665,1.647 -3.665,3.676 0,2 1.642,3.646 3.665,3.646 2.023,0 3.665,-1.617 3.665,-3.646 C 3.665,1.647 2.023,0 0,0 m 10.761,43.347 -0.557,0.5 -0.586,0.471 -0.617,0.411 -0.674,0.383 -0.703,0.352 -0.733,0.324 -0.763,0.294 -0.792,0.265 -0.82,0.206 -0.851,0.176 -1.789,0.235 -1.847,0.089 -1.847,-0.089 -1.788,-0.235 -0.851,-0.176 -0.821,-0.206 -0.791,-0.236 -0.763,-0.294 -0.733,-0.323 -0.704,-0.353 -0.645,-0.382 -0.615,-0.412 -0.587,-0.441 -0.528,-0.47 -0.498,-0.5 -0.469,-0.53 0.029,-13.822 V 7.528 l 0.587,-1.5 0.733,-1.382 L -9.529,3.353 -8.796,2.146 -8.063,1.029 -7.33,0 l 0.733,-0.941 0.733,-0.853 0.733,-0.764 0.733,-0.677 0.733,-0.558 0.733,-0.471 0.733,-0.382 0.733,-0.265 0.733,-0.147 0.733,-0.059 0.733,0.059 0.733,0.147 0.792,0.265 0.733,0.382 0.733,0.471 0.733,0.558 0.733,0.677 0.733,0.764 0.733,0.853 0.733,0.941 0.733,1.029 0.733,1.117 0.733,1.207 0.733,1.293 0.733,1.382 0.733,1.471 v 21.085 13.763 l -0.498,0.471 z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path90"
+ inkscape:connector-curvature="0" /></g><g
+ id="g92"
+ transform="translate(110.1128,144.611)"><path
+ d="m 0,0 h 1.517 c 0.455,0 0.797,0.119 1.027,0.359 0.23,0.24 0.345,0.574 0.345,1.003 0,0.429 -0.116,0.766 -0.348,1.01 C 2.309,2.616 1.967,2.738 1.517,2.738 H 0 Z M 1.298,-1.845 H 0 V -5.362 H -2.397 V 4.583 H 1.517 C 2.696,4.583 3.618,4.321 4.283,3.798 4.948,3.275 5.28,2.536 5.28,1.581 5.28,0.889 5.14,0.316 4.859,-0.139 4.58,-0.594 4.141,-0.962 3.545,-1.244 L 5.621,-5.259 V -5.362 H 3.053 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path94"
+ inkscape:connector-curvature="0" /></g><g
+ id="g96"
+ transform="translate(124.6401,149.1935)"><path
+ d="m 0,0 v -6.509 c 0,-0.738 -0.157,-1.376 -0.471,-1.916 -0.314,-0.539 -0.765,-0.95 -1.352,-1.232 -0.588,-0.283 -1.282,-0.424 -2.084,-0.424 -1.211,0 -2.165,0.314 -2.861,0.943 -0.696,0.628 -1.052,1.488 -1.066,2.581 V 0 h 2.411 v -6.604 c 0.028,-1.089 0.533,-1.633 1.516,-1.633 0.496,0 0.872,0.137 1.127,0.41 0.256,0.273 0.383,0.717 0.383,1.332 V 0 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path98"
+ inkscape:connector-curvature="0" /></g><g
+ id="g100"
+ transform="translate(131.2651,141.8922)"><path
+ d="m 0,0 c 0,0.351 -0.124,0.624 -0.372,0.82 -0.249,0.195 -0.684,0.398 -1.308,0.607 -0.624,0.21 -1.134,0.413 -1.53,0.608 -1.289,0.633 -1.933,1.503 -1.933,2.609 0,0.552 0.161,1.037 0.482,1.459 0.321,0.421 0.775,0.749 1.362,0.983 0.588,0.235 1.248,0.351 1.981,0.351 0.714,0 1.356,-0.127 1.922,-0.382 C 1.172,6.8 1.612,6.437 1.926,5.966 2.241,5.495 2.397,4.956 2.397,4.351 h -2.39 c 0,0.405 -0.124,0.719 -0.372,0.942 -0.248,0.223 -0.584,0.335 -1.008,0.335 -0.428,0 -0.766,-0.095 -1.014,-0.283 -0.248,-0.189 -0.372,-0.429 -0.372,-0.721 0,-0.255 0.137,-0.486 0.41,-0.693 C -2.076,3.724 -1.596,3.51 -0.908,3.289 -0.221,3.067 0.344,2.83 0.786,2.575 1.86,1.956 2.397,1.102 2.397,0.014 c 0,-0.87 -0.327,-1.553 -0.983,-2.05 -0.656,-0.496 -1.555,-0.743 -2.698,-0.743 -0.806,0 -1.536,0.144 -2.189,0.433 -0.653,0.289 -1.145,0.685 -1.475,1.188 -0.33,0.504 -0.495,1.083 -0.495,1.739 h 2.404 c 0,-0.533 0.138,-0.926 0.413,-1.178 0.275,-0.254 0.723,-0.38 1.342,-0.38 0.396,0 0.709,0.086 0.94,0.256 C -0.115,-0.55 0,-0.31 0,0"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path102"
+ inkscape:connector-curvature="0" /></g><g
+ id="g104"
+ transform="translate(142.6987,147.3424)"><path
+ d="M 0,0 H -2.984 V -8.093 H -5.382 V 0 H -8.313 V 1.851 H 0 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path106"
+ inkscape:connector-curvature="0" /></g><g
+ id="g108"
+ transform="translate(149.9726,143.2106)"><path
+ d="M 0,0 H -3.866 V -3.961 H -6.263 V 5.983 H 0.389 V 4.132 H -3.866 V 1.844 H 0 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path110"
+ inkscape:connector-curvature="0" /></g><g
+ id="g112"
+ transform="translate(157.5263,143.4698)"><path
+ d="m 0,0 h -3.77 v -2.376 h 4.453 v -1.845 h -6.85 V 5.724 H 0.697 V 3.873 H -3.77 V 1.776 H 0 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path114"
+ inkscape:connector-curvature="0" /></g><g
+ id="g116"
+ transform="translate(164.3154,141.8922)"><path
+ d="m 0,0 c 0,0.351 -0.124,0.624 -0.372,0.82 -0.249,0.195 -0.684,0.398 -1.308,0.607 -0.624,0.21 -1.134,0.413 -1.53,0.608 -1.289,0.633 -1.933,1.503 -1.933,2.609 0,0.552 0.161,1.037 0.482,1.459 0.321,0.421 0.775,0.749 1.362,0.983 0.587,0.235 1.248,0.351 1.981,0.351 0.714,0 1.356,-0.127 1.922,-0.382 C 1.171,6.8 1.612,6.437 1.926,5.966 2.24,5.495 2.397,4.956 2.397,4.351 h -2.39 c 0,0.405 -0.124,0.719 -0.372,0.942 -0.249,0.223 -0.585,0.335 -1.008,0.335 -0.428,0 -0.766,-0.095 -1.014,-0.283 C -2.635,5.156 -2.759,4.916 -2.759,4.624 -2.759,4.369 -2.623,4.138 -2.35,3.931 -2.076,3.724 -1.596,3.51 -0.908,3.289 -0.221,3.067 0.344,2.83 0.786,2.575 1.86,1.956 2.397,1.102 2.397,0.014 c 0,-0.87 -0.328,-1.553 -0.983,-2.05 -0.656,-0.496 -1.555,-0.743 -2.698,-0.743 -0.806,0 -1.536,0.144 -2.189,0.433 -0.653,0.289 -1.146,0.685 -1.476,1.188 -0.329,0.504 -0.494,1.083 -0.494,1.739 h 2.403 c 0,-0.533 0.139,-0.926 0.414,-1.178 0.275,-0.254 0.723,-0.38 1.342,-0.38 0.396,0 0.709,0.086 0.939,0.256 C -0.115,-0.55 0,-0.31 0,0"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path118"
+ inkscape:connector-curvature="0" /></g><g
+ id="g120"
+ transform="translate(175.7485,147.3424)"><path
+ d="M 0,0 H -2.985 V -8.093 H -5.382 V 0 h -2.93 V 1.851 H 0 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path122"
+ inkscape:connector-curvature="0" /></g><g
+ id="g124"
+ transform="translate(125.3872,134.3082)"><path
+ d="m 0,0 h 1.516 c 0.467,0 0.79,0.146 0.966,0.437 0.066,0.11 0.1,0.251 0.1,0.423 0,0.279 -0.096,0.498 -0.285,0.659 C 2.107,1.68 1.855,1.761 1.542,1.761 H 0 Z M 0,-2.151 H -0.497 V 2.231 H 1.602 C 2.047,2.231 2.405,2.107 2.674,1.86 2.943,1.617 3.078,1.284 3.078,0.86 3.078,0.313 2.851,-0.06 2.396,-0.258 2.268,-0.315 2.142,-0.357 2.019,-0.384 L 3.17,-2.151 H 2.582 L 1.522,-0.47 H 0 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path126"
+ inkscape:connector-curvature="0" /></g><g
+ id="g128"
+ transform="translate(131.2651,132.587)"><path
+ d="M 0,0 C 0.521,0 0.942,0.17 1.264,0.51 1.573,0.836 1.728,1.253 1.728,1.761 1.728,2.269 1.573,2.686 1.264,3.012 0.942,3.352 0.521,3.521 0,3.521 -0.521,3.521 -0.942,3.352 -1.264,3.012 -1.573,2.686 -1.728,2.269 -1.728,1.761 -1.728,1.253 -1.573,0.836 -1.264,0.51 -0.942,0.17 -0.521,0 0,0 M 0,4.005 C 0.653,4.005 1.189,3.787 1.608,3.35 2.019,2.926 2.224,2.396 2.224,1.761 2.224,1.125 2.019,0.596 1.608,0.172 1.189,-0.265 0.653,-0.483 0,-0.483 c -0.653,0 -1.189,0.218 -1.608,0.655 -0.411,0.424 -0.616,0.953 -0.616,1.589 0,0.635 0.205,1.165 0.616,1.589 0.419,0.437 0.955,0.655 1.608,0.655"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path130"
+ inkscape:connector-curvature="0" /></g><g
+ id="g132"
+ transform="translate(138.5463,136.5392)"><path
+ d="m 0,0 v -4.382 h -0.496 v 3.627 L -2.118,-2.84 -3.766,-0.755 V -4.382 H -4.263 V 0 h 0.576 L -2.118,-2.079 -0.576,0 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path134"
+ inkscape:connector-curvature="0" /></g><g
+ id="g136"
+ transform="translate(140.1152,136.0626)"><path
+ d="M 0,0 V -1.47 H 2.436 V -1.953 H 0 V -3.429 H 2.728 V -3.906 H -0.496 V 0.477 H 2.728 V 0 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path138"
+ inkscape:connector-curvature="0" /></g><g
+ id="g140"
+ transform="translate(147.8208,135.2814)"><path
+ d="m 0,0 c 0,-0.19 -0.057,-0.373 -0.169,-0.549 -0.113,-0.177 -0.255,-0.343 -0.427,-0.497 -0.172,-0.155 -0.359,-0.3 -0.559,-0.437 -0.201,-0.137 -0.39,-0.27 -0.566,-0.4 C -1.898,-2.014 -2.047,-2.142 -2.168,-2.267 -2.29,-2.393 -2.357,-2.52 -2.37,-2.648 h 2.356 v -0.477 h -2.945 v 0.272 c 0,0.216 0.061,0.414 0.182,0.592 0.121,0.179 0.274,0.347 0.457,0.503 0.183,0.157 0.38,0.305 0.592,0.444 0.212,0.139 0.409,0.279 0.593,0.42 0.182,0.142 0.335,0.285 0.456,0.431 0.121,0.145 0.182,0.302 0.182,0.469 0,0.256 -0.085,0.457 -0.254,0.603 -0.17,0.145 -0.408,0.218 -0.712,0.218 -0.305,0 -0.549,-0.065 -0.732,-0.195 -0.183,-0.13 -0.292,-0.319 -0.327,-0.566 h -0.497 c 0.036,0.371 0.197,0.671 0.483,0.9 0.287,0.23 0.634,0.345 1.04,0.345 0.463,0 0.831,-0.124 1.105,-0.371 C -0.13,0.702 0,0.388 0,0"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path142"
+ inkscape:connector-curvature="0" /></g><g
+ id="g144"
+ transform="translate(149.9785,132.587)"><path
+ d="M 0,0 C 0.583,0.013 0.916,0.395 1,1.146 1.026,1.353 1.039,1.558 1.039,1.761 1.039,2.352 0.958,2.793 0.794,3.085 0.631,3.376 0.366,3.521 0,3.521 -0.366,3.521 -0.631,3.376 -0.794,3.085 -0.958,2.793 -1.04,2.352 -1.04,1.761 -1.04,1.169 -0.958,0.729 -0.794,0.437 -0.631,0.146 -0.367,0 0,0 M -1.536,1.761 C -1.536,3.257 -1.024,4.005 0,4.005 0.556,3.996 0.964,3.762 1.225,3.303 1.432,2.933 1.536,2.418 1.536,1.761 1.536,0.265 1.023,-0.483 0,-0.483 c -1.024,0 -1.536,0.748 -1.536,2.244"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path146"
+ inkscape:connector-curvature="0" /></g><g
+ id="g148"
+ transform="translate(153.8608,136.5392)"><path
+ d="m 0,0 v -4.382 h -0.496 v 3.905 H -1.423 V 0 Z"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path150"
+ inkscape:connector-curvature="0" /></g><g
+ id="g152"
+ transform="translate(157.0053,134.778)"><path
+ d="M 0,0 C 0.234,0 0.435,0.053 0.602,0.159 0.801,0.287 0.9,0.459 0.9,0.675 0.9,0.892 0.816,1.056 0.648,1.168 0.481,1.281 0.265,1.337 0,1.337 -0.265,1.337 -0.481,1.281 -0.649,1.168 -0.817,1.056 -0.9,0.892 -0.9,0.675 -0.9,0.459 -0.809,0.292 -0.625,0.176 -0.442,0.059 -0.234,0 0,0 m 0,-2.197 c 0.331,0 0.592,0.074 0.784,0.225 0.192,0.15 0.288,0.355 0.288,0.615 0,0.274 -0.106,0.497 -0.318,0.669 -0.198,0.154 -0.45,0.231 -0.754,0.231 -0.305,0 -0.556,-0.077 -0.755,-0.231 -0.212,-0.172 -0.318,-0.392 -0.318,-0.659 0,-0.267 0.096,-0.475 0.288,-0.625 0.192,-0.151 0.454,-0.225 0.785,-0.225 m 0.728,1.986 c 0.26,-0.102 0.465,-0.257 0.616,-0.464 0.15,-0.207 0.225,-0.423 0.225,-0.645 0,-0.223 -0.036,-0.415 -0.106,-0.576 C 1.392,-2.057 1.291,-2.195 1.158,-2.31 0.88,-2.553 0.494,-2.674 0,-2.674 c -0.495,0 -0.88,0.121 -1.159,0.364 -0.273,0.238 -0.41,0.554 -0.41,0.947 0,0.251 0.075,0.481 0.225,0.688 0.15,0.207 0.355,0.362 0.615,0.464 -0.167,0.061 -0.315,0.163 -0.443,0.304 -0.15,0.172 -0.225,0.377 -0.225,0.615 0,0.332 0.119,0.599 0.357,0.802 C -0.801,1.712 -0.455,1.814 0,1.814 0.454,1.814 0.801,1.712 1.039,1.51 1.277,1.307 1.396,1.04 1.396,0.708 1.396,0.36 1.249,0.093 0.953,-0.092 0.874,-0.146 0.798,-0.185 0.728,-0.211"
+ style="fill:#b21a33;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path154"
+ inkscape:connector-curvature="0" /></g></g></g></g></svg> \ No newline at end of file
diff --git a/configs/conferences/rustfestrome2018/main.less b/configs/conferences/rustfestrome2018/main.less
new file mode 100644
index 0000000..24f3239
--- /dev/null
+++ b/configs/conferences/rustfestrome2018/main.less
@@ -0,0 +1,54 @@
+@import "../../../assets/css/_structure.less";
+
+@brand-primary: #5252c9;
+
+@link-color: #1b5fbf;
+@panel-primary-border: white;
+
+@text-color: black;
+
+@font-face {
+ font-family: 'Source Sans Pro Light';
+ font-style: normal;
+ font-weight: normal;
+ src: url('SourceCodePro-Light.eot'); /* IE9 Compat Modes */
+ src: local('Source Code Pro Light'), local('SourceCodePro-Light'),
+ url('SourceCodePro-Light.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('SourceCodePro-Light.otf.woff2') format('woff2'), /* Super Modern Browsers */
+ url('SourceCodePro-Light.otf.woff') format('woff'), /* Modern Browsers */
+ url('SourceCodePro-Light.ttf') format('truetype'), /* Safari, Android, iOS */
+ url('SourceSansPro-Light.svg#SourceSansPro-Light') format('svg'); /* Legacy iOS */
+}
+
+body {
+ //background-color: @green;
+}
+
+footer {
+ background-color: white;
+
+ color: @link-color;
+ a {
+ color: @link-color;
+ &:hover {
+ text-decoration: underline;
+ color: @link-color;
+ }
+ }
+}
+
+body {
+ padding-bottom: 170px + 30px + 30px + 60px;
+ position: relative;
+}
+
+.logo {
+ background: url('logo.svg') no-repeat center;
+ height: 170px;
+ position: absolute;
+ bottom: 30px + 25px;
+ z-index: -100;
+
+ left: 0;
+ right: 0;
+}
diff --git a/configs/conferences/uplink2018/config.php b/configs/conferences/uplink2018/config.php
new file mode 100755
index 0000000..17258ce
--- /dev/null
+++ b/configs/conferences/uplink2018/config.php
@@ -0,0 +1,209 @@
+<?php
+
+$CONFIG['CONFERENCE'] = array(
+ /**
+ * Der Startzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns davor, wird die Closed-Seite
+ * mit einem Text der Art "hat noch nicht angefangen" angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. (Siehe aber ENDS_AT
+ * und CLOSED weiter unten)
+ */
+ 'STARTS_AT' => strtotime("2018-11-03 12:00"),
+
+ /**
+ * Der Endzeitpunkt der Konferenz als Unix-Timestamp. Befinden wir uns danach, wird eine Danke-Und-Kommen-Sie-
+ * Gut-Nach-Hause-Seite sowie einem Ausblick auf die kommenden Events angezeigt.
+ *
+ * Wird dieser Zeitpunkt nicht angegeben, endet die Konferenz nie. (Siehe aber CLOSED weiter unten)
+ */
+ 'ENDS_AT' => strtotime("2018-11-04 17:00"),
+
+ /**
+ * Hiermit kann die Funktionalitaet von STARTS_AT/ENDS_AT überschrieben werden. Der Wert 'before'
+ * simuliert, dass die Konferenz noch nicht begonnen hat. Der Wert 'after' simuliert, dass die Konferenz
+ * bereits beendet ist. 'running' simuliert eine laufende Konferenz.
+ *
+ * Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent
+ * zu 'running'.
+ */
+ //'CLOSED' => 'running',
+
+ /**
+ * Titel der Konferenz (kann Leer- und Sonderzeichen enthalten)
+ * Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als
+ * Anzeigetext benutzt
+ */
+ 'TITLE' => 'UpLink 2018',
+
+ /**
+ * Veranstalter
+ * Wird für den <meta name="author">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+ 'AUTHOR' => 'Selfnet',
+
+ /**
+ * Beschreibungstext
+ * Wird für den <meta name="description">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+// 'DESCRIPTION' => '<img src="./configs/conferences/jh-nord-2017/Icon_JH-Nord-2017.svg" class="iconjh">',
+
+ /**
+ * Schlüsselwortliste, Kommasepariert
+ * Wird für den <meta name="keywords">-Tag verdet. Wird diese Zeile auskommentiert, wird kein solcher
+ * <meta>-Tag generiert.
+ */
+// 'KEYWORDS' => '',
+
+ /**
+ * HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags)
+ * Sollte üblicherweise nur Inline-Elemente enthalten
+ * Wird diese Zeile auskommentiert, wird die Standard-Attribuierung für (c3voc.de) verwendet
+ */
+ 'FOOTER_HTML' => '
+ by <a href="https://www.selfnet.de/">Selfnet</a> &amp;
+ <a href="https://c3voc.de">C3VOC</a>
+ ',
+
+ /**
+ * HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header)
+ * wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Blaues
+ * Wischiwaschi auf http://media.ccc.de/)
+ *
+ * Dieser HTML-Block wird üblicherweise in der main.less speziell für die
+ * Konferenz umgestaltet.
+ *
+ * Wird diese Zeile auskommentiert, wird kein Banner ausgegeben.
+ */
+ //'BANNER_HTML' => '<img src="../configs/conferences/uplink2018/uplink_banner.png" class="jhnord">',
+
+ /**
+ * Link zu den Recordings
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELEASES' => 'https://media.ccc.de/c/mrmcd18',
+
+ /**
+ * Link zu einer (externen) ReLive-Übersichts-Seite
+ * Wird diese Zeile auskommentiert, wird der Link nicht angezeigt
+ */
+ //'RELIVE' => 'http://vod.c3voc.de/',
+
+ /**
+ * Alternativ kann ein ReLive-Json konfiguriert werden, um die interne
+ * ReLive-Ansicht zu aktivieren.
+ *
+ * Wird beides aktiviert, hat der externe Link Vorrang!
+ * Wird beides auskommentiert, wird der Link nicht angezeigt
+ */
+ #'RELIVE_JSON' => 'http://live.ber.c3voc.de/relive/mrmcd17/index.json',
+
+ /**
+ * APCU-Cache-Zeit in Sekunden
+ * Wird diese Zeile auskommentiert, werden die apc_*-Methoden nicht verwendet und
+ * das Relive-Json bei jedem Request von der Quelle geladen und geparst
+ */
+ //'RELIVE_JSON_CACHE' => 30*60,
+);
+
+/**
+ * Konfiguration der Stream-Übersicht auf der Startseite
+ */
+$CONFIG['OVERVIEW'] = array(
+ /**
+ * Abschnitte aud der Startseite und darunter aufgeführte Räume
+ * Es können beliebig neue Gruppen und Räume hinzugefügt werden
+ *
+ * Die Räume müssen in $CONFIG['ROOMS'] konfiguriert werden,
+ * sonst werden sie nicht angezeigt.
+ */
+ 'GROUPS' => array(
+ 'Lecture Rooms' => array(
+ 'oez',
+ ),
+ ),
+);
+
+
+
+/**
+ * Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets oä.)
+ */
+$CONFIG['ROOMS'] = array(
+ /**
+ * Array-Key ist der Raum-Slug, der z.B. auch zum erstellen der URLs,
+ * in $CONFIG['OVERVIEW'] oder im Feedback verwendet wird.
+ */
+ 'oez' => array(
+ 'DISPLAY' => 'Öz',
+ 'STREAM' => 'q1',
+ 'PREVIEW' => true,
+ 'TRANSLATION' => false,
+ 'STEREO' => false,
+
+ 'SD_VIDEO' => true,
+ 'HD_VIDEO' => true,
+ 'DASH' => true,
+ 'SLIDES' => false,
+
+ 'AUDIO' => false,
+ 'MUSIC' => false,
+
+ 'SCHEDULE' => false,
+ 'SCHEDULE_NAME' => 'Lichtspielhaus',
+
+ 'FEEDBACK' => false,
+ 'SUBTITLES' => false,
+
+ 'EMBED' => true,
+ 'IRC' => false,
+ )
+);
+
+/**
+ * Globaler Schalter für die Embedding-Funktionalitäten
+ *
+ * Wird diese Zeile auskommentiert oder auf False gesetzt, werden alle
+ * Embedding-Funktionen deaktiviert.
+ */
+$CONFIG['EMBED'] = true;
+
+/**
+ * Konfigurationen zum Konferenz-Fahrplan
+ * Wird dieser Block auskommentiert, werden alle Fahrplan-Bezogenen Features deaktiviert
+ */
+//$CONFIG['SCHEDULE'] = array(
+ /**
+ * URL zum Fahrplan-XML
+ *
+ * Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht
+ * aufhören zu funktionieren. Wenn die Quelle unverlässlich ist ;) sollte ein
+ * externer HTTP-Cache vorgeschaltet werden.
+ */
+// 'URL' => 'https://talks.mrmcd.net/2018/schedule/export?exporter=core-frab-xml',
+
+ /**
+ * Nur die angegebenen Räume aus dem Fahrplan beachten
+ *
+ * Wird diese Zeile auskommentiert, werden alle Räume angezeigt
+ */
+// 'ROOMFILTER' => array('Lichtspielhaus', 'Multiplex'),
+
+ /**
+ * Skalierung der Programm-Vorschau in Sekunden pro Pixel
+ */
+// 'SCALE' => 7,
+
+ /**
+ * Simuliere das Verhalten als wäre die Konferenz bereits heute
+ *
+ * Diese folgende Beispiel-Zeile Simuliert, dass das
+ * Konferenz-Datum 2014-12-29 auf den heutigen Tag 2015-02-24 verschoben ist.
+ */
+ //'SIMULATE_OFFSET' => strtotime(/* Conference-Date */ '2017-05-21') - strtotime(/* Today */ '2017-05-19'),
+// 'SIMULATE_OFFSET' => 0,
+//);
+
+
+return $CONFIG;
diff --git a/configs/conferences/uplink2018/logo.png b/configs/conferences/uplink2018/logo.png
new file mode 100644
index 0000000..c73503d
--- /dev/null
+++ b/configs/conferences/uplink2018/logo.png
Binary files differ
diff --git a/configs/conferences/uplink2018/main.less b/configs/conferences/uplink2018/main.less
new file mode 100755
index 0000000..722966b
--- /dev/null
+++ b/configs/conferences/uplink2018/main.less
@@ -0,0 +1,9 @@
+@import "../../../assets/css/_structure.less";
+
+// conference specific styles here
+
+@brand-primary: #1A1619;
+
+body.overview .panel-body {
+ min-height: 10px;
+}
diff --git a/configs/conferences/uplink2018/uplink_banner.png b/configs/conferences/uplink2018/uplink_banner.png
new file mode 100644
index 0000000..e44e9d5
--- /dev/null
+++ b/configs/conferences/uplink2018/uplink_banner.png
Binary files differ
diff --git a/index.php b/index.php
index 0de1823..95dac53 100644
--- a/index.php
+++ b/index.php
@@ -92,7 +92,6 @@ try {
));
}
-
// GLOBAL ROUTES
if($route == 'gen/main.css')
{
@@ -342,4 +341,5 @@ catch(Exception $e)
{
ob_clean();
require('view/500.php');
+ error_log("Caught: $e");
}
diff --git a/lib/less.php/Less.php b/lib/less.php/Less.php
index 69122e1..44cdffc 100644
--- a/lib/less.php/Less.php
+++ b/lib/less.php/Less.php
@@ -2,6 +2,23 @@
require_once( dirname(__FILE__).'/Cache.php');
+/* Added by dedeibel for php compatiblity.
+ * TODO open PR for the project – but is seems pretty dead
+ * https://github.com/oyejorge/less.php
+ */
+function count_if_countable($subject) {
+ if( !$subject ) {
+ return 0;
+ }
+ else if( is_array($subject) || ($subject instanceof \Countable) ) {
+ return count($subject);
+ }
+ else {
+ # newer php version compatibility
+ return 1;
+ }
+}
+
/**
* Class for parsing and compiling less files into css
*
@@ -87,7 +104,7 @@ class Less_Parser{
// mbstring.func_overload > 1 bugfix
// The encoding value must be set for each source file,
// therefore, to conserve resources and improve the speed of this design is taken here
- if (ini_get('mbstring.func_overload')) {
+ if (ini_get('mbstring.func_overload')) {
$this->mb_internal_encoding = ini_get('mbstring.internal_encoding');
@ini_set('mbstring.internal_encoding', 'ascii');
}
@@ -220,7 +237,7 @@ class Less_Parser{
@ini_set('precision',$precision);
setlocale(LC_NUMERIC, $locale);
- // If you previously defined $this->mb_internal_encoding
+ // If you previously defined $this->mb_internal_encoding
// is required to return the encoding as it was before
if ($this->mb_internal_encoding != '') {
@ini_set("mbstring.internal_encoding", $this->mb_internal_encoding);
@@ -282,7 +299,7 @@ class Less_Parser{
}
- for($i = 0; $i < count($visitors); $i++ ){
+ for($i = 0; $i < count_if_countable($visitors); $i++ ){
$visitors[$i]->run($evaldRoot);
}
@@ -688,7 +705,7 @@ class Less_Parser{
$match = $this->MatchReg($tok);
if( $match ){
- return count($match) === 1 ? $match[0] : $match;
+ return count_if_countable($match) === 1 ? $match[0] : $match;
}
}elseif( $char === '#' ){
@@ -1392,7 +1409,7 @@ class Less_Parser{
if( $isCall ){
// Variable
- if( property_exists($arg,'value') && count($arg->value) == 1 ){
+ if( property_exists($arg,'value') && count_if_countable($arg->value) == 1 ){
$val = $arg->value[0];
}
} else {
@@ -1467,7 +1484,7 @@ class Less_Parser{
$isSemiColonSeperated = true;
- if( count($expressions) > 1 ){
+ if( count_if_countable($expressions) > 1 ){
$value = $this->NewObj1('Less_Tree_Value', $expressions);
}
$argsSemiColon[] = array('name'=>$name, 'value'=>$value );
@@ -1794,7 +1811,7 @@ class Less_Parser{
$selectors[] = $s;
$this->parseComments();
- if( $s->condition && count($selectors) > 1 ){
+ if( $s->condition && count_if_countable($selectors) > 1 ){
$this->Error('Guards are only currently allowed on a single selector.');
}
@@ -2432,7 +2449,7 @@ class Less_Parser{
$this->rulePropertyMatch('/\\G(\*?)/', $offset, $length, $index, $name );
while( $this->rulePropertyMatch('/\\G((?:[\w-]+)|(?:@\{[\w-]+\}))/', $offset, $length, $index, $name )); // !
- if( (count($name) > 1) && $this->rulePropertyMatch('/\\G\s*((?:\+_|\+)?)\s*:/', $offset, $length, $index, $name) ){
+ if( (count_if_countable($name) > 1) && $this->rulePropertyMatch('/\\G\s*((?:\+_|\+)?)\s*:/', $offset, $length, $index, $name) ){
// at last, we have the complete match now. move forward,
// convert name particles to tree objects and return:
$this->skipWhitespace($length);
@@ -2625,7 +2642,7 @@ class Less_Parser{
}
-
+
/**
* Utility for css colors
@@ -2795,7 +2812,7 @@ class Less_Colors {
}
}
-
+
/**
@@ -2961,7 +2978,7 @@ class Less_Environment{
}
}
-
+
/**
* Builtin functions
@@ -3604,7 +3621,7 @@ class Less_Functions{
*/
private function _minmax( $isMin, $args ){
- $arg_count = count($args);
+ $arg_count = count_if_countable($args);
if( $arg_count < 1 ){
throw new Less_Exception_Compiler( 'one or more arguments required');
@@ -3659,7 +3676,7 @@ class Less_Functions{
if( $unitStatic && $unit !== $unitStatic ){
throw new Less_Exception_Compiler( 'incompatible types');
}
- $values[$unit] = count($order);
+ $values[$unit] = count_if_countable($order);
$order[] = $current;
continue;
}
@@ -3676,7 +3693,7 @@ class Less_Functions{
}
}
- if( count($order) == 1 ){
+ if( count_if_countable($order) == 1 ){
return $order[0];
}
$args = array();
@@ -3802,7 +3819,7 @@ class Less_Functions{
}
public function length($values){
- $n = (property_exists($values,'value') && is_array($values->value)) ? count($values->value) : 1;
+ $n = (property_exists($values,'value') && is_array($values->value)) ? count_if_countable($values->value) : 1;
return new Less_Tree_Dimension($n);
}
@@ -3887,7 +3904,7 @@ class Less_Functions{
$throw_message = 'svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position]';
$arguments = func_get_args();
- if( count($arguments) < 3 ){
+ if( count_if_countable($arguments) < 3 ){
throw new Less_Exception_Compiler( $throw_message );
}
@@ -3925,7 +3942,7 @@ class Less_Functions{
'<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none">' .
'<' . $gradientType . 'Gradient id="gradient" gradientUnits="userSpaceOnUse" ' . $gradientDirectionSvg . '>';
- for( $i = 0; $i < count($stops); $i++ ){
+ for( $i = 0; $i < count_if_countable($stops); $i++ ){
if( is_object($stops[$i]) && property_exists($stops[$i],'value') ){
$color = $stops[$i]->value[0];
$position = $stops[$i]->value[1];
@@ -3934,7 +3951,7 @@ class Less_Functions{
$position = null;
}
- if( !($color instanceof Less_Tree_Color) || (!(($i === 0 || $i+1 === count($stops)) && $position === null) && !($position instanceof Less_Tree_Dimension)) ){
+ if( !($color instanceof Less_Tree_Color) || (!(($i === 0 || $i+1 === count_if_countable($stops)) && $position === null) && !($position instanceof Less_Tree_Dimension)) ){
throw new Less_Exception_Compiler( $throw_message );
}
if( $position ){
@@ -4144,7 +4161,7 @@ class Less_Functions{
// ~ End of Color Blending
}
-
+
/**
* Mime lookup
@@ -4185,7 +4202,7 @@ class Less_Mime{
return $type && preg_match('/^text\//',$type) ? 'UTF-8' : '';
}
}
-
+
/**
* Tree
@@ -4218,7 +4235,7 @@ class Less_Tree{
*/
public static function outputRuleset( $output, $rules ){
- $ruleCnt = count($rules);
+ $ruleCnt = count_if_countable($rules);
Less_Environment::$tabLevel++;
@@ -4274,7 +4291,7 @@ class Less_Tree{
return $obj;
}
-}
+}
/**
* Parser output
@@ -4309,7 +4326,7 @@ class Less_Output{
* @return boolean
*/
public function isEmpty(){
- return count($this->strs) === 0;
+ return count_if_countable($this->strs) === 0;
}
@@ -4322,7 +4339,7 @@ class Less_Output{
return implode('',$this->strs);
}
-}
+}
/**
* Visitor
@@ -4371,7 +4388,7 @@ class Less_Visitor{
}
}
-
+
/**
* Replacing Visitor
@@ -4514,7 +4531,7 @@ abstract class Less_Configurable {
$this->options[$name] = $value;
}
-}
+}
/**
* Alpha
@@ -4564,7 +4581,7 @@ class Less_Tree_Alpha extends Less_Tree{
}
-}
+}
/**
* Anonymous
@@ -4622,7 +4639,7 @@ class Less_Tree_Anonymous extends Less_Tree{
}
}
-
+
/**
* Assignment
@@ -4661,7 +4678,7 @@ class Less_Tree_Assignment extends Less_Tree{
return $this->key . '=' . $this->value->toCSS();
}
}
-
+
/**
* Attribute
@@ -4714,7 +4731,7 @@ class Less_Tree_Attribute extends Less_Tree{
return '[' . $value . ']';
}
-}
+}
/**
@@ -4818,7 +4835,7 @@ class Less_Tree_Call extends Less_Tree{
public function genCSS( $output ){
$output->add( $this->name . '(', $this->currentFileInfo, $this->index );
- $args_len = count($this->args);
+ $args_len = count_if_countable($this->args);
for($i = 0; $i < $args_len; $i++ ){
$this->args[$i]->genCSS( $output );
if( $i + 1 < $args_len ){
@@ -4835,7 +4852,7 @@ class Less_Tree_Call extends Less_Tree{
//}
}
-
+
/**
* Color
@@ -5065,7 +5082,7 @@ class Less_Tree_Color extends Less_Tree{
}
}
-
+
/**
* Comment
@@ -5116,7 +5133,7 @@ class Less_Tree_Comment extends Less_Tree{
}
}
-
+
/**
* Condition
@@ -5188,7 +5205,7 @@ class Less_Tree_Condition extends Less_Tree{
}
}
-
+
/**
* DefaultFunc
@@ -5221,7 +5238,7 @@ class Less_Tree_DefaultFunc{
public static function reset(){
self::$value_ = self::$error_ = null;
}
-}
+}
/**
* DetachedRuleset
@@ -5261,7 +5278,7 @@ class Less_Tree_DetachedRuleset extends Less_Tree{
}
}
-
+
/**
* Dimension
@@ -5462,7 +5479,7 @@ class Less_Tree_Dimension extends Less_Tree{
return new Less_Tree_Dimension( $value, $unit);
}
}
-
+
/**
* Directive
@@ -5562,7 +5579,7 @@ class Less_Tree_Directive extends Less_Tree{
}
}
-
+
/**
* Element
@@ -5637,7 +5654,7 @@ class Less_Tree_Element extends Less_Tree{
}
}
-
+
/**
* Expression
@@ -5672,7 +5689,7 @@ class Less_Tree_Expression extends Less_Tree{
$returnValue = null;
if( $this->value ){
- $count = count($this->value);
+ $count = count_if_countable($this->value);
if( $count > 1 ){
@@ -5711,7 +5728,7 @@ class Less_Tree_Expression extends Less_Tree{
* @see Less_Tree::genCSS
*/
public function genCSS( $output ){
- $val_len = count($this->value);
+ $val_len = count_if_countable($this->value);
for( $i = 0; $i < $val_len; $i++ ){
$this->value[$i]->genCSS( $output );
if( $i + 1 < $val_len ){
@@ -5734,7 +5751,7 @@ class Less_Tree_Expression extends Less_Tree{
}
}
}
-
+
/**
* Extend
@@ -5797,7 +5814,7 @@ class Less_Tree_Extend extends Less_Tree{
$selfElements = array();
- for( $i = 0, $selectors_len = count($selectors); $i < $selectors_len; $i++ ){
+ for( $i = 0, $selectors_len = count_if_countable($selectors); $i < $selectors_len; $i++ ){
$selectorElements = $selectors[$i]->elements;
// duplicate the logic in genCSS function inside the selector node.
// future TODO - move both logics into the selector joiner visitor
@@ -5810,7 +5827,7 @@ class Less_Tree_Extend extends Less_Tree{
$this->selfSelectors = array(new Less_Tree_Selector($selfElements));
}
-}
+}
/**
* CSS @import node
@@ -6117,7 +6134,7 @@ class Less_Tree_Import extends Less_Tree{
}
}
-
+
/**
* Javascript
@@ -6147,7 +6164,7 @@ class Less_Tree_Javascript extends Less_Tree{
}
}
-
+
/**
* Keyword
@@ -6191,7 +6208,7 @@ class Less_Tree_Keyword extends Less_Tree{
}
}
}
-
+
/**
* Media
@@ -6290,7 +6307,7 @@ class Less_Tree_Media extends Less_Tree{
public function compileTop($env) {
$result = $this;
- if (count($env->mediaBlocks) > 1) {
+ if (count_if_countable($env->mediaBlocks) > 1) {
$selectors = $this->emptySelectors();
$result = new Less_Tree_Ruleset($selectors, $env->mediaBlocks);
$result->multiMedia = true;
@@ -6323,11 +6340,11 @@ class Less_Tree_Media extends Less_Tree{
$expressions = array();
foreach($permuted as $path){
- for( $i=0, $len=count($path); $i < $len; $i++){
+ for( $i=0, $len=count_if_countable($path); $i < $len; $i++){
$path[$i] = Less_Parser::is_method($path[$i], 'toCSS') ? $path[$i] : new Less_Tree_Anonymous($path[$i]);
}
- for( $i = count($path) - 1; $i > 0; $i-- ){
+ for( $i = count_if_countable($path) - 1; $i > 0; $i-- ){
array_splice($path, $i, 0, array(new Less_Tree_Anonymous('and')));
}
@@ -6345,7 +6362,7 @@ class Less_Tree_Media extends Less_Tree{
if (!$arr)
return array();
- if (count($arr) == 1)
+ if (count_if_countable($arr) == 1)
return $arr[0];
$result = array();
@@ -6370,7 +6387,7 @@ class Less_Tree_Media extends Less_Tree{
}
}
-
+
/**
* A simple css name-value pair
@@ -6411,7 +6428,7 @@ class Less_Tree_NameValue extends Less_Tree{
return $this;
}
}
-
+
/**
* Negative
@@ -6447,7 +6464,7 @@ class Less_Tree_Negative extends Less_Tree{
}
return new Less_Tree_Negative( $this->value->compile($env) );
}
-}
+}
/**
* Operation
@@ -6517,7 +6534,7 @@ class Less_Tree_Operation extends Less_Tree{
}
}
-
+
/**
* Paren
@@ -6552,7 +6569,7 @@ class Less_Tree_Paren extends Less_Tree{
}
}
-
+
/**
* Quoted
@@ -6633,7 +6650,7 @@ class Less_Tree_Quoted extends Less_Tree{
return $left < $right ? -1 : 1;
}
}
-
+
/**
* Rule
@@ -6694,7 +6711,7 @@ class Less_Tree_Rule extends Less_Tree{
if( is_array($name) ){
// expand 'primitive' name directly to get
// things faster (~10% for benchmark.less):
- if( count($name) === 1 && $name[0] instanceof Less_Tree_Keyword ){
+ if( count_if_countable($name) === 1 && $name[0] instanceof Less_Tree_Keyword ){
$name = $name[0]->value;
}else{
$name = $this->CompileName($env,$name);
@@ -6748,7 +6765,7 @@ class Less_Tree_Rule extends Less_Tree{
}
}
-
+
/**
* Ruleset
@@ -6802,7 +6819,7 @@ class Less_Tree_Ruleset extends Less_Tree{
public function accept( $visitor ){
if( $this->paths ){
- $paths_len = count($this->paths);
+ $paths_len = count_if_countable($this->paths);
for($i = 0,$paths_len; $i < $paths_len; $i++ ){
$this->paths[$i] = $visitor->visitArray($this->paths[$i]);
}
@@ -6822,7 +6839,7 @@ class Less_Tree_Ruleset extends Less_Tree{
// Store the frames around mixin definitions,
// so they can be evaluated like closures when the time comes.
- $rsRuleCnt = count($ruleset->rules);
+ $rsRuleCnt = count_if_countable($ruleset->rules);
for( $i = 0; $i < $rsRuleCnt; $i++ ){
if( $ruleset->rules[$i] instanceof Less_Tree_Mixin_Definition || $ruleset->rules[$i] instanceof Less_Tree_DetachedRuleset ){
$ruleset->rules[$i] = $ruleset->rules[$i]->compile($env);
@@ -6831,7 +6848,7 @@ class Less_Tree_Ruleset extends Less_Tree{
$mediaBlockCount = 0;
if( $env instanceof Less_Environment ){
- $mediaBlockCount = count($env->mediaBlocks);
+ $mediaBlockCount = count_if_countable($env->mediaBlocks);
}
// Evaluate mixin calls.
@@ -6850,14 +6867,14 @@ class Less_Tree_Ruleset extends Less_Tree{
$rule = $ruleset->rules[$i];
// for rulesets, check if it is a css guard and can be removed
- if( $rule instanceof Less_Tree_Ruleset && $rule->selectors && count($rule->selectors) === 1 ){
+ if( $rule instanceof Less_Tree_Ruleset && $rule->selectors && count_if_countable($rule->selectors) === 1 ){
// check if it can be folded in (e.g. & where)
if( $rule->selectors[0]->isJustParentSelector() ){
array_splice($ruleset->rules,$i--,1);
$rsRuleCnt--;
- for($j = 0; $j < count($rule->rules); $j++ ){
+ for($j = 0; $j < count_if_countable($rule->rules); $j++ ){
$subRule = $rule->rules[$j];
if( !($subRule instanceof Less_Tree_Rule) || !$subRule->variable ){
array_splice($ruleset->rules, ++$i, 0, array($subRule));
@@ -6874,7 +6891,7 @@ class Less_Tree_Ruleset extends Less_Tree{
$env->shiftFrame();
if ($mediaBlockCount) {
- $len = count($env->mediaBlocks);
+ $len = count_if_countable($env->mediaBlocks);
for($i = $mediaBlockCount; $i < $len; $i++ ){
$env->mediaBlocks[$i]->bubbleSelectors($ruleset->selectors);
}
@@ -6909,7 +6926,7 @@ class Less_Tree_Ruleset extends Less_Tree{
$temp[] = $r;
}
}
- $temp_count = count($temp)-1;
+ $temp_count = count_if_countable($temp)-1;
array_splice($ruleset->rules, $i, 1, $temp);
$rsRuleCnt += $temp_count;
$i += $temp_count;
@@ -6927,7 +6944,7 @@ class Less_Tree_Ruleset extends Less_Tree{
}
array_splice($ruleset->rules, $i, 1, $rules);
- $temp_count = count($rules);
+ $temp_count = count_if_countable($rules);
$rsRuleCnt += $temp_count - 1;
$i += $temp_count-1;
$ruleset->resetCache();
@@ -6990,7 +7007,7 @@ class Less_Tree_Ruleset extends Less_Tree{
function evalImports($env) {
- $rules_len = count($this->rules);
+ $rules_len = count_if_countable($this->rules);
for($i=0; $i < $rules_len; $i++){
$rule = $this->rules[$i];
@@ -6998,7 +7015,7 @@ class Less_Tree_Ruleset extends Less_Tree{
$rules = $rule->compile($env);
if( is_array($rules) ){
array_splice($this->rules, $i, 1, $rules);
- $temp_count = count($rules)-1;
+ $temp_count = count_if_countable($rules)-1;
$i += $temp_count;
$rules_len += $temp_count;
}else{
@@ -7148,7 +7165,7 @@ class Less_Tree_Ruleset extends Less_Tree{
}
*/
- $paths_len = count($this->paths);
+ $paths_len = count_if_countable($this->paths);
for( $i = 0; $i < $paths_len; $i++ ){
$path = $this->paths[$i];
$firstSelector = true;
@@ -7167,8 +7184,8 @@ class Less_Tree_Ruleset extends Less_Tree{
}
// Compile rules and rulesets
- $ruleNodes_len = count($ruleNodes);
- $rulesetNodes_len = count($rulesetNodes);
+ $ruleNodes_len = count_if_countable($ruleNodes);
+ $rulesetNodes_len = count_if_countable($rulesetNodes);
for( $i = 0; $i < $ruleNodes_len; $i++ ){
$rule = $ruleNodes[$i];
@@ -7326,7 +7343,7 @@ class Less_Tree_Ruleset extends Less_Tree{
}
//put together the parent selectors after the join
- if ( count($parentSel) > 1) {
+ if ( count_if_countable($parentSel) > 1) {
$afterParentJoin = array_merge($afterParentJoin, array_slice($parentSel,1) );
}
@@ -7383,7 +7400,7 @@ class Less_Tree_Ruleset extends Less_Tree{
// if the previous thing in sel is a parent this needs to join on to it
if( $sel ){
- $last = count($sel)-1;
+ $last = count_if_countable($sel)-1;
$sel[$last] = $sel[$last]->createDerived( array_merge($sel[$last]->elements, $elements) );
}else{
$sel[] = new Less_Tree_Selector( $elements );
@@ -7391,7 +7408,7 @@ class Less_Tree_Ruleset extends Less_Tree{
}
}
}
-
+
/**
* RulesetCall
@@ -7417,7 +7434,7 @@ class Less_Tree_RulesetCall extends Less_Tree{
}
}
-
+
/**
* Selector
@@ -7450,7 +7467,7 @@ class Less_Tree_Selector extends Less_Tree{
public function __construct( $elements, $extendList = array() , $condition = null, $index=null, $currentFileInfo=null, $isReferenced=null ){
$this->elements = $elements;
- $this->elements_len = count($elements);
+ $this->elements_len = count_if_countable($elements);
$this->extendList = $extendList;
$this->condition = $condition;
if( $currentFileInfo ){
@@ -7532,7 +7549,7 @@ class Less_Tree_Selector extends Less_Tree{
public function isJustParentSelector(){
return !$this->mediaEmpty &&
- count($this->elements) === 1 &&
+ count_if_countable($this->elements) === 1 &&
$this->elements[0]->value === '&' &&
($this->elements[0]->combinator === ' ' || $this->elements[0]->combinator === '');
}
@@ -7585,7 +7602,7 @@ class Less_Tree_Selector extends Less_Tree{
}
}
-
+
/**
* UnicodeDescriptor
@@ -7614,7 +7631,7 @@ class Less_Tree_UnicodeDescriptor extends Less_Tree{
}
}
-
+
/**
* Unit
@@ -7691,7 +7708,7 @@ class Less_Tree_Unit extends Less_Tree{
}
public function isSingular() {
- return count($this->numerator) <= 1 && !$this->denominator;
+ return count_if_countable($this->numerator) <= 1 && !$this->denominator;
}
@@ -7761,7 +7778,7 @@ class Less_Tree_Unit extends Less_Tree{
}
-
+
/**
* UnitConversions
@@ -7795,7 +7812,7 @@ class Less_Tree_UnitConversions{
'turn'=> 1
);
-}
+}
/**
* Url
@@ -7871,7 +7888,7 @@ class Less_Tree_Url extends Less_Tree{
}
}
-
+
/**
* Value
@@ -7909,7 +7926,7 @@ class Less_Tree_Value extends Less_Tree{
* @see Less_Tree::genCSS
*/
function genCSS( $output ){
- $len = count($this->value);
+ $len = count_if_countable($this->value);
for($i = 0; $i < $len; $i++ ){
$this->value[$i]->genCSS( $output );
if( $i+1 < $len ){
@@ -7919,7 +7936,7 @@ class Less_Tree_Value extends Less_Tree{
}
}
-
+
/**
* Variable
@@ -7971,7 +7988,7 @@ class Less_Tree_Variable extends Less_Tree{
}
}
-
+
class Less_Tree_Mixin_Call extends Less_Tree{
@@ -8034,7 +8051,7 @@ class Less_Tree_Mixin_Call extends Less_Tree{
// and build candidate list with corresponding flags. Then, when we know all possible matches,
// we make a final decision.
- $mixins_len = count($mixins);
+ $mixins_len = count_if_countable($mixins);
for( $m = 0; $m < $mixins_len; $m++ ){
$mixin = $mixins[$m];
@@ -8071,7 +8088,7 @@ class Less_Tree_Mixin_Call extends Less_Tree{
$count = array(0, 0, 0);
- for( $m = 0; $m < count($candidates); $m++ ){
+ for( $m = 0; $m < count_if_countable($candidates); $m++ ){
$count[ $candidates[$m]['group'] ]++;
}
@@ -8085,7 +8102,7 @@ class Less_Tree_Mixin_Call extends Less_Tree{
}
- $candidates_length = count($candidates);
+ $candidates_length = count_if_countable($candidates);
$length_1 = ($candidates_length == 1);
for( $m = 0; $m < $candidates_length; $m++){
@@ -8173,7 +8190,7 @@ class Less_Tree_Mixin_Call extends Less_Tree{
}
-
+
class Less_Tree_Mixin_Definition extends Less_Tree_Ruleset{
public $name;
@@ -8200,7 +8217,7 @@ class Less_Tree_Mixin_Definition extends Less_Tree_Ruleset{
$this->rules = $rules;
if( $params ){
- $this->arity = count($params);
+ $this->arity = count_if_countable($params);
foreach( $params as $p ){
if (! isset($p['name']) || ($p['name'] && !isset($p['value']))) {
$this->required++;
@@ -8233,7 +8250,7 @@ class Less_Tree_Mixin_Definition extends Less_Tree_Ruleset{
$argsLength = 0;
if( $args ){
- $argsLength = count($args);
+ $argsLength = count_if_countable($args);
for($i = 0; $i < $argsLength; $i++ ){
$arg = $args[$i];
@@ -8385,13 +8402,13 @@ class Less_Tree_Mixin_Definition extends Less_Tree_Ruleset{
}
public function matchArgs($args, $env = NULL){
- $argsLength = count($args);
+ $argsLength = count_if_countable($args);
if( !$this->variadic ){
if( $argsLength < $this->required ){
return false;
}
- if( $argsLength > count($this->params) ){
+ if( $argsLength > count_if_countable($this->params) ){
return false;
}
}else{
@@ -8414,7 +8431,7 @@ class Less_Tree_Mixin_Definition extends Less_Tree_Ruleset{
}
}
-
+
/**
* Extend Finder Visitor
@@ -8496,7 +8513,7 @@ class Less_Visitor_extendFinder extends Less_Visitor{
$extend->firstExtendOnThisSelectorPath = true;
}
- $end_key = count($this->allExtendsStack)-1;
+ $end_key = count_if_countable($this->allExtendsStack)-1;
$this->allExtendsStack[$end_key][] = $extend;
$j++;
}
@@ -8528,7 +8545,7 @@ class Less_Visitor_extendFinder extends Less_Visitor{
}
-
+
/*
class Less_Visitor_import extends Less_VisitorReplacing{
@@ -8667,7 +8684,7 @@ class Less_Visitor_import extends Less_VisitorReplacing{
*/
-
+
/**
* Join Selector Visitor
@@ -8730,14 +8747,14 @@ class Less_Visitor_joinSelector extends Less_Visitor{
public function visitMedia($mediaNode) {
$context = end($this->contexts); //$context = $this->contexts[ count($this->contexts) - 1];
- if( !count($context) || (is_object($context[0]) && $context[0]->multiMedia) ){
+ if( !count_if_countable($context) || (is_object($context[0]) && $context[0]->multiMedia) ){
$mediaNode->rules[0]->root = true;
}
}
}
-
+
/**
* Process Extends Visitor
@@ -8786,8 +8803,8 @@ class Less_Visitor_processExtends extends Less_Visitor{
// and the second is the target.
// the seperation into two lists allows us to process a subset of chains with a bigger set, as is the
// case when processing media queries
- for( $extendIndex = 0, $extendsList_len = count($extendsList); $extendIndex < $extendsList_len; $extendIndex++ ){
- for( $targetExtendIndex = 0; $targetExtendIndex < count($extendsListTarget); $targetExtendIndex++ ){
+ for( $extendIndex = 0, $extendsList_len = count_if_countable($extendsList); $extendIndex < $extendsList_len; $extendIndex++ ){
+ for( $targetExtendIndex = 0; $targetExtendIndex < count_if_countable($extendsListTarget); $targetExtendIndex++ ){
$extend = $extendsList[$extendIndex];
$targetExtend = $extendsListTarget[$targetExtendIndex];
@@ -8882,7 +8899,7 @@ class Less_Visitor_processExtends extends Less_Visitor{
}
$allExtends = end($this->allExtendsStack);
- $paths_len = count($rulesetNode->paths);
+ $paths_len = count_if_countable($rulesetNode->paths);
// look at each selector path in the ruleset, find any extend matches and then copy, find and replace
foreach($allExtends as $allExtend){
@@ -8939,11 +8956,11 @@ class Less_Visitor_processExtends extends Less_Visitor{
// loop through the haystack elements
- $haystack_path_len = count($haystackSelectorPath);
+ $haystack_path_len = count_if_countable($haystackSelectorPath);
for($haystackSelectorIndex = 0; $haystackSelectorIndex < $haystack_path_len; $haystackSelectorIndex++ ){
$hackstackSelector = $haystackSelectorPath[$haystackSelectorIndex];
- $haystack_elements_len = count($hackstackSelector->elements);
+ $haystack_elements_len = count_if_countable($hackstackSelector->elements);
for($hackstackElementIndex = 0; $hackstackElementIndex < $haystack_elements_len; $hackstackElementIndex++ ){
$haystackElement = $hackstackSelector->elements[$hackstackElementIndex];
@@ -9130,9 +9147,9 @@ class Less_Visitor_processExtends extends Less_Visitor{
$currentSelectorPathIndex = 0;
$currentSelectorPathElementIndex = 0;
$path = array();
- $selectorPath_len = count($selectorPath);
+ $selectorPath_len = count_if_countable($selectorPath);
- for($matchIndex = 0, $matches_len = count($matches); $matchIndex < $matches_len; $matchIndex++ ){
+ for($matchIndex = 0, $matches_len = count_if_countable($matches); $matchIndex < $matches_len; $matchIndex++ ){
$match = $matches[$matchIndex];
@@ -9159,7 +9176,7 @@ class Less_Visitor_processExtends extends Less_Visitor{
);
if( $currentSelectorPathIndex === $match['pathIndex'] && $matchIndex > 0 ){
- $last_key = count($path)-1;
+ $last_key = count_if_countable($path)-1;
$path[$last_key]->elements = array_merge($path[$last_key]->elements,$newElements);
}else{
$path = array_merge( $path, array_slice( $selectorPath, $currentSelectorPathIndex, $match['pathIndex'] ));
@@ -9168,7 +9185,7 @@ class Less_Visitor_processExtends extends Less_Visitor{
$currentSelectorPathIndex = $match['endPathIndex'];
$currentSelectorPathElementIndex = $match['endPathElementIndex'];
- if( $currentSelectorPathElementIndex >= count($selectorPath[$currentSelectorPathIndex]->elements) ){
+ if( $currentSelectorPathElementIndex >= count_if_countable($selectorPath[$currentSelectorPathIndex]->elements) ){
$currentSelectorPathElementIndex = 0;
$currentSelectorPathIndex++;
}
@@ -9205,7 +9222,7 @@ class Less_Visitor_processExtends extends Less_Visitor{
array_pop($this->allExtendsStack);
}
-}
+}
/**
* toCSS Visitor
@@ -9317,7 +9334,7 @@ class Less_Visitor_toCSS extends Less_VisitorReplacing{
// Compile rules and rulesets
- $nodeRuleCnt = count($rulesetNode->rules);
+ $nodeRuleCnt = count_if_countable($rulesetNode->rules);
for( $i = 0; $i < $nodeRuleCnt; ){
$rule = $rulesetNode->rules[$i];
@@ -9339,7 +9356,7 @@ class Less_Visitor_toCSS extends Less_VisitorReplacing{
if( $rulesetNode->rules ){
- if( count($rulesetNode->rules) > 1 ){
+ if( count_if_countable($rulesetNode->rules) > 1 ){
$this->_mergeRules( $rulesetNode->rules );
$this->_removeDuplicateRules( $rulesetNode->rules );
}
@@ -9354,7 +9371,7 @@ class Less_Visitor_toCSS extends Less_VisitorReplacing{
}
- if( count($rulesets) === 1 ){
+ if( count_if_countable($rulesets) === 1 ){
return $rulesets[0];
}
return $rulesets;
@@ -9402,7 +9419,7 @@ class Less_Visitor_toCSS extends Less_VisitorReplacing{
protected function _removeDuplicateRules( &$rules ){
// remove duplicates
$ruleCache = array();
- for( $i = count($rules)-1; $i >= 0 ; $i-- ){
+ for( $i = count_if_countable($rules)-1; $i >= 0 ; $i-- ){
$rule = $rules[$i];
if( $rule instanceof Less_Tree_Rule || $rule instanceof Less_Tree_NameValue ){
@@ -9431,7 +9448,7 @@ class Less_Visitor_toCSS extends Less_VisitorReplacing{
//obj($rules);
- $rules_len = count($rules);
+ $rules_len = count_if_countable($rules);
for( $i = 0; $i < $rules_len; $i++ ){
$rule = $rules[$i];
@@ -9456,7 +9473,7 @@ class Less_Visitor_toCSS extends Less_VisitorReplacing{
foreach($groups as $parts){
- if( count($parts) > 1 ){
+ if( count_if_countable($parts) > 1 ){
$rule = $parts[0];
$spacedGroups = array();
$lastSpacedGroup = array();
@@ -9579,7 +9596,7 @@ class Less_Exception_Parser extends Exception{
$lines = explode("\n",$this->input);
- $count = count($lines);
+ $count = count_if_countable($lines);
$start_line = max(0, $line-3);
$last_line = min($count, $start_line+6);
$num_len = strlen($last_line);
@@ -9682,7 +9699,7 @@ class Less_Exception_Chunk extends Less_Exception_Parser{
$cc = $this->CharCode($this->parserCurrentIndex);
if ((($cc >= 97) && ($cc <= 122)) || ($cc < 34)) {
// a-z or whitespace
- continue;
+ break;
}
switch ($cc) {
@@ -9691,7 +9708,7 @@ class Less_Exception_Chunk extends Less_Exception_Parser{
case 40:
$parenLevel++;
$lastParen = $this->parserCurrentIndex;
- continue;
+ break;
// )
case 41:
@@ -9699,18 +9716,18 @@ class Less_Exception_Chunk extends Less_Exception_Parser{
if( $parenLevel < 0 ){
return $this->fail("missing opening `(`");
}
- continue;
+ break;
// ;
case 59:
//if (!$parenLevel) { $this->emitChunk(); }
- continue;
+ break;
// {
case 123:
$level++;
$lastOpening = $this->parserCurrentIndex;
- continue;
+ break;
// }
case 125:
@@ -9720,10 +9737,10 @@ class Less_Exception_Chunk extends Less_Exception_Parser{
}
//if (!$level && !$parenLevel) { $this->emitChunk(); }
- continue;
+ break;
// \
case 92:
- if ($this->parserCurrentIndex < $this->input_len - 1) { $this->parserCurrentIndex++; continue; }
+ if ($this->parserCurrentIndex < $this->input_len - 1) { $this->parserCurrentIndex++; break; }
return $this->fail("unescaped `\\`");
// ", ' and `
@@ -9743,12 +9760,12 @@ class Less_Exception_Chunk extends Less_Exception_Parser{
$this->parserCurrentIndex++;
}
}
- if ($matched) { continue; }
+ if ($matched) { break; }
return $this->fail("unmatched `" + chr($cc) + "`", $currentChunkStartIndex);
// /, check for comment
case 47:
- if ($parenLevel || ($this->parserCurrentIndex == $this->input_len - 1)) { continue; }
+ if ($parenLevel || ($this->parserCurrentIndex == $this->input_len - 1)) { break; }
$cc2 = $this->CharCode($this->parserCurrentIndex+1);
if ($cc2 == 47) {
// //, find lnfeed
@@ -9769,14 +9786,14 @@ class Less_Exception_Chunk extends Less_Exception_Parser{
return $this->fail("missing closing `*/`", $currentChunkStartIndex);
}
}
- continue;
+ break;
// *, check for unmatched */
case 42:
if (($this->parserCurrentIndex < $this->input_len - 1) && ($this->CharCode($this->parserCurrentIndex+1) == 47)) {
return $this->fail("unmatched `/*`");
}
- continue;
+ break;
}
}
@@ -9928,16 +9945,16 @@ class Less_Output_Mapped extends Less_Output {
$this->generator->addMapping(
$this->lineNumber + 1, // generated_line
$this->column, // generated_column
- count($sourceLines), // original_line
+ count_if_countable($sourceLines), // original_line
strlen($sourceColumns), // original_column
$fileInfo
);
}else{
- for($i = 0, $count = count($lines); $i < $count; $i++){
+ for($i = 0, $count = count_if_countable($lines); $i < $count; $i++){
$this->generator->addMapping(
$this->lineNumber + $i + 1, // generated_line
$i === 0 ? $this->column : 0, // generated_column
- count($sourceLines) + $i, // original_line
+ count_if_countable($sourceLines) + $i, // original_line
$i === 0 ? strlen($sourceColumns) : 0, // original_column
$fileInfo
);
@@ -9945,10 +9962,10 @@ class Less_Output_Mapped extends Less_Output {
}
}
- if(count($lines) === 1){
+ if(count_if_countable($lines) === 1){
$this->column += strlen($columns);
}else{
- $this->lineNumber += count($lines) - 1;
+ $this->lineNumber += count_if_countable($lines) - 1;
$this->column = strlen($columns);
}
@@ -9956,7 +9973,7 @@ class Less_Output_Mapped extends Less_Output {
parent::add($chunk);
}
-}
+}
/**
* Encode / Decode Base64 VLQ.
@@ -10314,7 +10331,7 @@ class Less_SourceMap_Generator extends Less_Configurable {
$basePath = $this->getOption('sourceMapBasepath');
// "Trim" the 'sourceMapBasepath' from the output filename.
- if (strpos($filename, $basePath) === 0) {
+ if (! empty($basePath) && strpos($filename, (string) $basePath) === 0) {
$filename = substr($filename, strlen($basePath));
}
@@ -10399,7 +10416,7 @@ class Less_SourceMap_Generator extends Less_Configurable {
}
// less.js compat fixes
- if( count($sourceMap['sources']) && empty($sourceMap['sourceRoot']) ){
+ if( count_if_countable($sourceMap['sources']) && empty($sourceMap['sourceRoot']) ){
unset($sourceMap['sourceRoot']);
}
@@ -10429,7 +10446,7 @@ class Less_SourceMap_Generator extends Less_Configurable {
*/
public function generateMappings(){
- if( !count($this->mappings) ){
+ if( !count_if_countable($this->mappings) ){
return '';
}
@@ -10507,4 +10524,4 @@ class Less_SourceMap_Generator extends Less_Configurable {
return $path;
}
-} \ No newline at end of file
+} \ No newline at end of file
diff --git a/lib/less.php/Less.php.ori b/lib/less.php/Less.php.ori
new file mode 100644
index 0000000..69122e1
--- /dev/null
+++ b/lib/less.php/Less.php.ori
@@ -0,0 +1,10510 @@
+<?php
+
+require_once( dirname(__FILE__).'/Cache.php');
+
+/**
+ * Class for parsing and compiling less files into css
+ *
+ * @package Less
+ * @subpackage parser
+ *
+ */
+class Less_Parser{
+
+
+ /**
+ * Default parser options
+ */
+ public static $default_options = array(
+ 'compress' => false, // option - whether to compress
+ 'strictUnits' => false, // whether units need to evaluate correctly
+ 'strictMath' => false, // whether math has to be within parenthesis
+ 'relativeUrls' => true, // option - whether to adjust URL's to be relative
+ 'urlArgs' => array(), // whether to add args into url tokens
+ 'numPrecision' => 8,
+
+ 'import_dirs' => array(),
+ 'import_callback' => null,
+ 'cache_dir' => null,
+ 'cache_method' => 'php', // false, 'serialize', 'php', 'var_export', 'callback';
+ 'cache_callback_get' => null,
+ 'cache_callback_set' => null,
+
+ 'sourceMap' => false, // whether to output a source map
+ 'sourceMapBasepath' => null,
+ 'sourceMapWriteTo' => null,
+ 'sourceMapURL' => null,
+
+ 'plugins' => array(),
+
+ );
+
+ public static $options = array();
+
+
+ private $input; // Less input string
+ private $input_len; // input string length
+ private $pos; // current index in `input`
+ private $saveStack = array(); // holds state for backtracking
+ private $furthest;
+ private $mb_internal_encoding = ''; // for remember exists value of mbstring.internal_encoding
+
+ /**
+ * @var Less_Environment
+ */
+ private $env;
+
+ protected $rules = array();
+
+ private static $imports = array();
+
+ public static $has_extends = false;
+
+ public static $next_id = 0;
+
+ /**
+ * Filename to contents of all parsed the files
+ *
+ * @var array
+ */
+ public static $contentsMap = array();
+
+
+ /**
+ * @param Less_Environment|array|null $env
+ */
+ public function __construct( $env = null ){
+
+ // Top parser on an import tree must be sure there is one "env"
+ // which will then be passed around by reference.
+ if( $env instanceof Less_Environment ){
+ $this->env = $env;
+ }else{
+ $this->SetOptions(Less_Parser::$default_options);
+ $this->Reset( $env );
+ }
+
+ // mbstring.func_overload > 1 bugfix
+ // The encoding value must be set for each source file,
+ // therefore, to conserve resources and improve the speed of this design is taken here
+ if (ini_get('mbstring.func_overload')) {
+ $this->mb_internal_encoding = ini_get('mbstring.internal_encoding');
+ @ini_set('mbstring.internal_encoding', 'ascii');
+ }
+
+ }
+
+
+ /**
+ * Reset the parser state completely
+ *
+ */
+ public function Reset( $options = null ){
+ $this->rules = array();
+ self::$imports = array();
+ self::$has_extends = false;
+ self::$imports = array();
+ self::$contentsMap = array();
+
+ $this->env = new Less_Environment($options);
+ $this->env->Init();
+
+ //set new options
+ if( is_array($options) ){
+ $this->SetOptions(Less_Parser::$default_options);
+ $this->SetOptions($options);
+ }
+ }
+
+ /**
+ * Set one or more compiler options
+ * options: import_dirs, cache_dir, cache_method
+ *
+ */
+ public function SetOptions( $options ){
+ foreach($options as $option => $value){
+ $this->SetOption($option,$value);
+ }
+ }
+
+ /**
+ * Set one compiler option
+ *
+ */
+ public function SetOption($option,$value){
+
+ switch($option){
+
+ case 'import_dirs':
+ $this->SetImportDirs($value);
+ return;
+
+ case 'cache_dir':
+ if( is_string($value) ){
+ Less_Cache::SetCacheDir($value);
+ Less_Cache::CheckCacheDir();
+ }
+ return;
+ }
+
+ Less_Parser::$options[$option] = $value;
+ }
+
+ /**
+ * Registers a new custom function
+ *
+ * @param string $name function name
+ * @param callable $callback callback
+ */
+ public function registerFunction($name, $callback) {
+ $this->env->functions[$name] = $callback;
+ }
+
+ /**
+ * Removed an already registered function
+ *
+ * @param string $name function name
+ */
+ public function unregisterFunction($name) {
+ if( isset($this->env->functions[$name]) )
+ unset($this->env->functions[$name]);
+ }
+
+
+ /**
+ * Get the current css buffer
+ *
+ * @return string
+ */
+ public function getCss(){
+
+ $precision = ini_get('precision');
+ @ini_set('precision',16);
+ $locale = setlocale(LC_NUMERIC, 0);
+ setlocale(LC_NUMERIC, "C");
+
+ try {
+
+ $root = new Less_Tree_Ruleset(array(), $this->rules );
+ $root->root = true;
+ $root->firstRoot = true;
+
+
+ $this->PreVisitors($root);
+
+ self::$has_extends = false;
+ $evaldRoot = $root->compile($this->env);
+
+
+
+ $this->PostVisitors($evaldRoot);
+
+ if( Less_Parser::$options['sourceMap'] ){
+ $generator = new Less_SourceMap_Generator($evaldRoot, Less_Parser::$contentsMap, Less_Parser::$options );
+ // will also save file
+ // FIXME: should happen somewhere else?
+ $css = $generator->generateCSS();
+ }else{
+ $css = $evaldRoot->toCSS();
+ }
+
+ if( Less_Parser::$options['compress'] ){
+ $css = preg_replace('/(^(\s)+)|((\s)+$)/', '', $css);
+ }
+
+ } catch (Exception $exc) {
+ // Intentional fall-through so we can reset environment
+ }
+
+ //reset php settings
+ @ini_set('precision',$precision);
+ setlocale(LC_NUMERIC, $locale);
+
+ // If you previously defined $this->mb_internal_encoding
+ // is required to return the encoding as it was before
+ if ($this->mb_internal_encoding != '') {
+ @ini_set("mbstring.internal_encoding", $this->mb_internal_encoding);
+ $this->mb_internal_encoding = '';
+ }
+
+ // Rethrow exception after we handled resetting the environment
+ if (!empty($exc)) {
+ throw $exc;
+ }
+
+
+
+ return $css;
+ }
+
+ /**
+ * Run pre-compile visitors
+ *
+ */
+ private function PreVisitors($root){
+
+ if( Less_Parser::$options['plugins'] ){
+ foreach(Less_Parser::$options['plugins'] as $plugin){
+ if( !empty($plugin->isPreEvalVisitor) ){
+ $plugin->run($root);
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Run post-compile visitors
+ *
+ */
+ private function PostVisitors($evaldRoot){
+
+ $visitors = array();
+ $visitors[] = new Less_Visitor_joinSelector();
+ if( self::$has_extends ){
+ $visitors[] = new Less_Visitor_processExtends();
+ }
+ $visitors[] = new Less_Visitor_toCSS();
+
+
+ if( Less_Parser::$options['plugins'] ){
+ foreach(Less_Parser::$options['plugins'] as $plugin){
+ if( property_exists($plugin,'isPreEvalVisitor') && $plugin->isPreEvalVisitor ){
+ continue;
+ }
+
+ if( property_exists($plugin,'isPreVisitor') && $plugin->isPreVisitor ){
+ array_unshift( $visitors, $plugin);
+ }else{
+ $visitors[] = $plugin;
+ }
+ }
+ }
+
+
+ for($i = 0; $i < count($visitors); $i++ ){
+ $visitors[$i]->run($evaldRoot);
+ }
+
+ }
+
+
+ /**
+ * Parse a Less string into css
+ *
+ * @param string $str The string to convert
+ * @param string $uri_root The url of the file
+ * @return Less_Tree_Ruleset|Less_Parser
+ */
+ public function parse( $str, $file_uri = null ){
+
+ if( !$file_uri ){
+ $uri_root = '';
+ $filename = 'anonymous-file-'.Less_Parser::$next_id++.'.less';
+ }else{
+ $file_uri = self::WinPath($file_uri);
+ $filename = $file_uri;
+ $uri_root = dirname($file_uri);
+ }
+
+ $previousFileInfo = $this->env->currentFileInfo;
+ $uri_root = self::WinPath($uri_root);
+ $this->SetFileInfo($filename, $uri_root);
+
+ $this->input = $str;
+ $this->_parse();
+
+ if( $previousFileInfo ){
+ $this->env->currentFileInfo = $previousFileInfo;
+ }
+
+ return $this;
+ }
+
+
+ /**
+ * Parse a Less string from a given file
+ *
+ * @throws Less_Exception_Parser
+ * @param string $filename The file to parse
+ * @param string $uri_root The url of the file
+ * @param bool $returnRoot Indicates whether the return value should be a css string a root node
+ * @return Less_Tree_Ruleset|Less_Parser
+ */
+ public function parseFile( $filename, $uri_root = '', $returnRoot = false){
+
+ if( !file_exists($filename) ){
+ $this->Error(sprintf('File `%s` not found.', $filename));
+ }
+
+
+ // fix uri_root?
+ // Instead of The mixture of file path for the first argument and directory path for the second argument has bee
+ if( !$returnRoot && !empty($uri_root) && basename($uri_root) == basename($filename) ){
+ $uri_root = dirname($uri_root);
+ }
+
+
+ $previousFileInfo = $this->env->currentFileInfo;
+
+
+ if( $filename ){
+ $filename = self::WinPath(realpath($filename));
+ }
+ $uri_root = self::WinPath($uri_root);
+
+ $this->SetFileInfo($filename, $uri_root);
+
+ self::AddParsedFile($filename);
+
+ if( $returnRoot ){
+ $rules = $this->GetRules( $filename );
+ $return = new Less_Tree_Ruleset(array(), $rules );
+ }else{
+ $this->_parse( $filename );
+ $return = $this;
+ }
+
+ if( $previousFileInfo ){
+ $this->env->currentFileInfo = $previousFileInfo;
+ }
+
+ return $return;
+ }
+
+
+ /**
+ * Allows a user to set variables values
+ * @param array $vars
+ * @return Less_Parser
+ */
+ public function ModifyVars( $vars ){
+
+ $this->input = Less_Parser::serializeVars( $vars );
+ $this->_parse();
+
+ return $this;
+ }
+
+
+ /**
+ * @param string $filename
+ */
+ public function SetFileInfo( $filename, $uri_root = ''){
+
+ $filename = Less_Environment::normalizePath($filename);
+ $dirname = preg_replace('/[^\/\\\\]*$/','',$filename);
+
+ if( !empty($uri_root) ){
+ $uri_root = rtrim($uri_root,'/').'/';
+ }
+
+ $currentFileInfo = array();
+
+ //entry info
+ if( isset($this->env->currentFileInfo) ){
+ $currentFileInfo['entryPath'] = $this->env->currentFileInfo['entryPath'];
+ $currentFileInfo['entryUri'] = $this->env->currentFileInfo['entryUri'];
+ $currentFileInfo['rootpath'] = $this->env->currentFileInfo['rootpath'];
+
+ }else{
+ $currentFileInfo['entryPath'] = $dirname;
+ $currentFileInfo['entryUri'] = $uri_root;
+ $currentFileInfo['rootpath'] = $dirname;
+ }
+
+ $currentFileInfo['currentDirectory'] = $dirname;
+ $currentFileInfo['currentUri'] = $uri_root.basename($filename);
+ $currentFileInfo['filename'] = $filename;
+ $currentFileInfo['uri_root'] = $uri_root;
+
+
+ //inherit reference
+ if( isset($this->env->currentFileInfo['reference']) && $this->env->currentFileInfo['reference'] ){
+ $currentFileInfo['reference'] = true;
+ }
+
+ $this->env->currentFileInfo = $currentFileInfo;
+ }
+
+
+ /**
+ * @deprecated 1.5.1.2
+ *
+ */
+ public function SetCacheDir( $dir ){
+
+ if( !file_exists($dir) ){
+ if( mkdir($dir) ){
+ return true;
+ }
+ throw new Less_Exception_Parser('Less.php cache directory couldn\'t be created: '.$dir);
+
+ }elseif( !is_dir($dir) ){
+ throw new Less_Exception_Parser('Less.php cache directory doesn\'t exist: '.$dir);
+
+ }elseif( !is_writable($dir) ){
+ throw new Less_Exception_Parser('Less.php cache directory isn\'t writable: '.$dir);
+
+ }else{
+ $dir = self::WinPath($dir);
+ Less_Cache::$cache_dir = rtrim($dir,'/').'/';
+ return true;
+ }
+ }
+
+
+ /**
+ * Set a list of directories or callbacks the parser should use for determining import paths
+ *
+ * @param array $dirs
+ */
+ public function SetImportDirs( $dirs ){
+ Less_Parser::$options['import_dirs'] = array();
+
+ foreach($dirs as $path => $uri_root){
+
+ $path = self::WinPath($path);
+ if( !empty($path) ){
+ $path = rtrim($path,'/').'/';
+ }
+
+ if ( !is_callable($uri_root) ){
+ $uri_root = self::WinPath($uri_root);
+ if( !empty($uri_root) ){
+ $uri_root = rtrim($uri_root,'/').'/';
+ }
+ }
+
+ Less_Parser::$options['import_dirs'][$path] = $uri_root;
+ }
+ }
+
+ /**
+ * @param string $file_path
+ */
+ private function _parse( $file_path = null ){
+ $this->rules = array_merge($this->rules, $this->GetRules( $file_path ));
+ }
+
+
+ /**
+ * Return the results of parsePrimary for $file_path
+ * Use cache and save cached results if possible
+ *
+ * @param string|null $file_path
+ */
+ private function GetRules( $file_path ){
+
+ $this->SetInput($file_path);
+
+ $cache_file = $this->CacheFile( $file_path );
+ if( $cache_file ){
+ if( Less_Parser::$options['cache_method'] == 'callback' ){
+ if( is_callable(Less_Parser::$options['cache_callback_get']) ){
+ $cache = call_user_func_array(
+ Less_Parser::$options['cache_callback_get'],
+ array($this, $file_path, $cache_file)
+ );
+
+ if( $cache ){
+ $this->UnsetInput();
+ return $cache;
+ }
+ }
+
+ }elseif( file_exists($cache_file) ){
+ switch(Less_Parser::$options['cache_method']){
+
+ // Using serialize
+ // Faster but uses more memory
+ case 'serialize':
+ $cache = unserialize(file_get_contents($cache_file));
+ if( $cache ){
+ touch($cache_file);
+ $this->UnsetInput();
+ return $cache;
+ }
+ break;
+
+
+ // Using generated php code
+ case 'var_export':
+ case 'php':
+ $this->UnsetInput();
+ return include($cache_file);
+ }
+ }
+ }
+
+ $rules = $this->parsePrimary();
+
+ if( $this->pos < $this->input_len ){
+ throw new Less_Exception_Chunk($this->input, null, $this->furthest, $this->env->currentFileInfo);
+ }
+
+ $this->UnsetInput();
+
+
+ //save the cache
+ if( $cache_file ){
+ if( Less_Parser::$options['cache_method'] == 'callback' ){
+ if( is_callable(Less_Parser::$options['cache_callback_set']) ){
+ call_user_func_array(
+ Less_Parser::$options['cache_callback_set'],
+ array($this, $file_path, $cache_file, $rules)
+ );
+ }
+
+ }else{
+ //msg('write cache file');
+ switch(Less_Parser::$options['cache_method']){
+ case 'serialize':
+ file_put_contents( $cache_file, serialize($rules) );
+ break;
+ case 'php':
+ file_put_contents( $cache_file, '<?php return '.self::ArgString($rules).'; ?>' );
+ break;
+ case 'var_export':
+ //Requires __set_state()
+ file_put_contents( $cache_file, '<?php return '.var_export($rules,true).'; ?>' );
+ break;
+ }
+
+ Less_Cache::CleanCache();
+ }
+ }
+
+ return $rules;
+ }
+
+
+ /**
+ * Set up the input buffer
+ *
+ */
+ public function SetInput( $file_path ){
+
+ if( $file_path ){
+ $this->input = file_get_contents( $file_path );
+ }
+
+ $this->pos = $this->furthest = 0;
+
+ // Remove potential UTF Byte Order Mark
+ $this->input = preg_replace('/\\G\xEF\xBB\xBF/', '', $this->input);
+ $this->input_len = strlen($this->input);
+
+
+ if( Less_Parser::$options['sourceMap'] && $this->env->currentFileInfo ){
+ $uri = $this->env->currentFileInfo['currentUri'];
+ Less_Parser::$contentsMap[$uri] = $this->input;
+ }
+
+ }
+
+
+ /**
+ * Free up some memory
+ *
+ */
+ public function UnsetInput(){
+ unset($this->input, $this->pos, $this->input_len, $this->furthest);
+ $this->saveStack = array();
+ }
+
+
+ public function CacheFile( $file_path ){
+
+ if( $file_path && $this->CacheEnabled() ){
+
+ $env = get_object_vars($this->env);
+ unset($env['frames']);
+
+ $parts = array();
+ $parts[] = $file_path;
+ $parts[] = filesize( $file_path );
+ $parts[] = filemtime( $file_path );
+ $parts[] = $env;
+ $parts[] = Less_Version::cache_version;
+ $parts[] = Less_Parser::$options['cache_method'];
+ return Less_Cache::$cache_dir . Less_Cache::$prefix . base_convert( sha1(json_encode($parts) ), 16, 36) . '.lesscache';
+ }
+ }
+
+
+ static function AddParsedFile($file){
+ self::$imports[] = $file;
+ }
+
+ static function AllParsedFiles(){
+ return self::$imports;
+ }
+
+ /**
+ * @param string $file
+ */
+ static function FileParsed($file){
+ return in_array($file,self::$imports);
+ }
+
+
+ function save() {
+ $this->saveStack[] = $this->pos;
+ }
+
+ private function restore() {
+ $this->pos = array_pop($this->saveStack);
+ }
+
+ private function forget(){
+ array_pop($this->saveStack);
+ }
+
+
+ private function isWhitespace($offset = 0) {
+ return preg_match('/\s/',$this->input[ $this->pos + $offset]);
+ }
+
+ /**
+ * Parse from a token, regexp or string, and move forward if match
+ *
+ * @param array $toks
+ * @return array
+ */
+ private function match($toks){
+
+ // The match is confirmed, add the match length to `this::pos`,
+ // and consume any extra white-space characters (' ' || '\n')
+ // which come after that. The reason for this is that LeSS's
+ // grammar is mostly white-space insensitive.
+ //
+
+ foreach($toks as $tok){
+
+ $char = $tok[0];
+
+ if( $char === '/' ){
+ $match = $this->MatchReg($tok);
+
+ if( $match ){
+ return count($match) === 1 ? $match[0] : $match;
+ }
+
+ }elseif( $char === '#' ){
+ $match = $this->MatchChar($tok[1]);
+
+ }else{
+ // Non-terminal, match using a function call
+ $match = $this->$tok();
+
+ }
+
+ if( $match ){
+ return $match;
+ }
+ }
+ }
+
+ /**
+ * @param string[] $toks
+ *
+ * @return string
+ */
+ private function MatchFuncs($toks){
+
+ if( $this->pos < $this->input_len ){
+ foreach($toks as $tok){
+ $match = $this->$tok();
+ if( $match ){
+ return $match;
+ }
+ }
+ }
+
+ }
+
+ // Match a single character in the input,
+ private function MatchChar($tok){
+ if( ($this->pos < $this->input_len) && ($this->input[$this->pos] === $tok) ){
+ $this->skipWhitespace(1);
+ return $tok;
+ }
+ }
+
+ // Match a regexp from the current start point
+ private function MatchReg($tok){
+
+ if( preg_match($tok, $this->input, $match, 0, $this->pos) ){
+ $this->skipWhitespace(strlen($match[0]));
+ return $match;
+ }
+ }
+
+
+ /**
+ * Same as match(), but don't change the state of the parser,
+ * just return the match.
+ *
+ * @param string $tok
+ * @return integer
+ */
+ public function PeekReg($tok){
+ return preg_match($tok, $this->input, $match, 0, $this->pos);
+ }
+
+ /**
+ * @param string $tok
+ */
+ public function PeekChar($tok){
+ //return ($this->input[$this->pos] === $tok );
+ return ($this->pos < $this->input_len) && ($this->input[$this->pos] === $tok );
+ }
+
+
+ /**
+ * @param integer $length
+ */
+ public function skipWhitespace($length){
+
+ $this->pos += $length;
+
+ for(; $this->pos < $this->input_len; $this->pos++ ){
+ $c = $this->input[$this->pos];
+
+ if( ($c !== "\n") && ($c !== "\r") && ($c !== "\t") && ($c !== ' ') ){
+ break;
+ }
+ }
+ }
+
+
+ /**
+ * @param string $tok
+ * @param string|null $msg
+ */
+ public function expect($tok, $msg = NULL) {
+ $result = $this->match( array($tok) );
+ if (!$result) {
+ $this->Error( $msg ? "Expected '" . $tok . "' got '" . $this->input[$this->pos] . "'" : $msg );
+ } else {
+ return $result;
+ }
+ }
+
+ /**
+ * @param string $tok
+ */
+ public function expectChar($tok, $msg = null ){
+ $result = $this->MatchChar($tok);
+ if( !$result ){
+ $this->Error( $msg ? "Expected '" . $tok . "' got '" . $this->input[$this->pos] . "'" : $msg );
+ }else{
+ return $result;
+ }
+ }
+
+ //
+ // Here in, the parsing rules/functions
+ //
+ // The basic structure of the syntax tree generated is as follows:
+ //
+ // Ruleset -> Rule -> Value -> Expression -> Entity
+ //
+ // Here's some LESS code:
+ //
+ // .class {
+ // color: #fff;
+ // border: 1px solid #000;
+ // width: @w + 4px;
+ // > .child {...}
+ // }
+ //
+ // And here's what the parse tree might look like:
+ //
+ // Ruleset (Selector '.class', [
+ // Rule ("color", Value ([Expression [Color #fff]]))
+ // Rule ("border", Value ([Expression [Dimension 1px][Keyword "solid"][Color #000]]))
+ // Rule ("width", Value ([Expression [Operation "+" [Variable "@w"][Dimension 4px]]]))
+ // Ruleset (Selector [Element '>', '.child'], [...])
+ // ])
+ //
+ // In general, most rules will try to parse a token with the `$()` function, and if the return
+ // value is truly, will return a new node, of the relevant type. Sometimes, we need to check
+ // first, before parsing, that's when we use `peek()`.
+ //
+
+ //
+ // The `primary` rule is the *entry* and *exit* point of the parser.
+ // The rules here can appear at any level of the parse tree.
+ //
+ // The recursive nature of the grammar is an interplay between the `block`
+ // rule, which represents `{ ... }`, the `ruleset` rule, and this `primary` rule,
+ // as represented by this simplified grammar:
+ //
+ // primary → (ruleset | rule)+
+ // ruleset → selector+ block
+ // block → '{' primary '}'
+ //
+ // Only at one point is the primary rule not called from the
+ // block rule: at the root level.
+ //
+ private function parsePrimary(){
+ $root = array();
+
+ while( true ){
+
+ if( $this->pos >= $this->input_len ){
+ break;
+ }
+
+ $node = $this->parseExtend(true);
+ if( $node ){
+ $root = array_merge($root,$node);
+ continue;
+ }
+
+ //$node = $this->MatchFuncs( array( 'parseMixinDefinition', 'parseRule', 'parseRuleset', 'parseMixinCall', 'parseComment', 'parseDirective'));
+ $node = $this->MatchFuncs( array( 'parseMixinDefinition', 'parseNameValue', 'parseRule', 'parseRuleset', 'parseMixinCall', 'parseComment', 'parseRulesetCall', 'parseDirective'));
+
+ if( $node ){
+ $root[] = $node;
+ }elseif( !$this->MatchReg('/\\G[\s\n;]+/') ){
+ break;
+ }
+
+ if( $this->PeekChar('}') ){
+ break;
+ }
+ }
+
+ return $root;
+ }
+
+
+
+ // We create a Comment node for CSS comments `/* */`,
+ // but keep the LeSS comments `//` silent, by just skipping
+ // over them.
+ private function parseComment(){
+
+ if( $this->input[$this->pos] !== '/' ){
+ return;
+ }
+
+ if( $this->input[$this->pos+1] === '/' ){
+ $match = $this->MatchReg('/\\G\/\/.*/');
+ return $this->NewObj4('Less_Tree_Comment',array($match[0], true, $this->pos, $this->env->currentFileInfo));
+ }
+
+ //$comment = $this->MatchReg('/\\G\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/');
+ $comment = $this->MatchReg('/\\G\/\*(?s).*?\*+\/\n?/');//not the same as less.js to prevent fatal errors
+ if( $comment ){
+ return $this->NewObj4('Less_Tree_Comment',array($comment[0], false, $this->pos, $this->env->currentFileInfo));
+ }
+ }
+
+ private function parseComments(){
+ $comments = array();
+
+ while( $this->pos < $this->input_len ){
+ $comment = $this->parseComment();
+ if( !$comment ){
+ break;
+ }
+
+ $comments[] = $comment;
+ }
+
+ return $comments;
+ }
+
+
+
+ //
+ // A string, which supports escaping " and '
+ //
+ // "milky way" 'he\'s the one!'
+ //
+ private function parseEntitiesQuoted() {
+ $j = $this->pos;
+ $e = false;
+ $index = $this->pos;
+
+ if( $this->input[$this->pos] === '~' ){
+ $j++;
+ $e = true; // Escaped strings
+ }
+
+ if( $this->input[$j] != '"' && $this->input[$j] !== "'" ){
+ return;
+ }
+
+ if ($e) {
+ $this->MatchChar('~');
+ }
+
+ // Fix for #124: match escaped newlines
+ //$str = $this->MatchReg('/\\G"((?:[^"\\\\\r\n]|\\\\.)*)"|\'((?:[^\'\\\\\r\n]|\\\\.)*)\'/');
+ $str = $this->MatchReg('/\\G"((?:[^"\\\\\r\n]|\\\\.|\\\\\r\n|\\\\[\n\r\f])*)"|\'((?:[^\'\\\\\r\n]|\\\\.|\\\\\r\n|\\\\[\n\r\f])*)\'/');
+
+ if( $str ){
+ $result = $str[0][0] == '"' ? $str[1] : $str[2];
+ return $this->NewObj5('Less_Tree_Quoted',array($str[0], $result, $e, $index, $this->env->currentFileInfo) );
+ }
+ return;
+ }
+
+
+ //
+ // A catch-all word, such as:
+ //
+ // black border-collapse
+ //
+ private function parseEntitiesKeyword(){
+
+ //$k = $this->MatchReg('/\\G[_A-Za-z-][_A-Za-z0-9-]*/');
+ $k = $this->MatchReg('/\\G%|\\G[_A-Za-z-][_A-Za-z0-9-]*/');
+ if( $k ){
+ $k = $k[0];
+ $color = $this->fromKeyword($k);
+ if( $color ){
+ return $color;
+ }
+ return $this->NewObj1('Less_Tree_Keyword',$k);
+ }
+ }
+
+ // duplicate of Less_Tree_Color::FromKeyword
+ private function FromKeyword( $keyword ){
+ $keyword = strtolower($keyword);
+
+ if( Less_Colors::hasOwnProperty($keyword) ){
+ // detect named color
+ return $this->NewObj1('Less_Tree_Color',substr(Less_Colors::color($keyword), 1));
+ }
+
+ if( $keyword === 'transparent' ){
+ return $this->NewObj3('Less_Tree_Color', array( array(0, 0, 0), 0, true));
+ }
+ }
+
+ //
+ // A function call
+ //
+ // rgb(255, 0, 255)
+ //
+ // We also try to catch IE's `alpha()`, but let the `alpha` parser
+ // deal with the details.
+ //
+ // The arguments are parsed with the `entities.arguments` parser.
+ //
+ private function parseEntitiesCall(){
+ $index = $this->pos;
+
+ if( !preg_match('/\\G([\w-]+|%|progid:[\w\.]+)\(/', $this->input, $name,0,$this->pos) ){
+ return;
+ }
+ $name = $name[1];
+ $nameLC = strtolower($name);
+
+ if ($nameLC === 'url') {
+ return null;
+ }
+
+ $this->pos += strlen($name);
+
+ if( $nameLC === 'alpha' ){
+ $alpha_ret = $this->parseAlpha();
+ if( $alpha_ret ){
+ return $alpha_ret;
+ }
+ }
+
+ $this->MatchChar('('); // Parse the '(' and consume whitespace.
+
+ $args = $this->parseEntitiesArguments();
+
+ if( !$this->MatchChar(')') ){
+ return;
+ }
+
+ if ($name) {
+ return $this->NewObj4('Less_Tree_Call',array($name, $args, $index, $this->env->currentFileInfo) );
+ }
+ }
+
+ /**
+ * Parse a list of arguments
+ *
+ * @return array
+ */
+ private function parseEntitiesArguments(){
+
+ $args = array();
+ while( true ){
+ $arg = $this->MatchFuncs( array('parseEntitiesAssignment','parseExpression') );
+ if( !$arg ){
+ break;
+ }
+
+ $args[] = $arg;
+ if( !$this->MatchChar(',') ){
+ break;
+ }
+ }
+ return $args;
+ }
+
+ private function parseEntitiesLiteral(){
+ return $this->MatchFuncs( array('parseEntitiesDimension','parseEntitiesColor','parseEntitiesQuoted','parseUnicodeDescriptor') );
+ }
+
+ // Assignments are argument entities for calls.
+ // They are present in ie filter properties as shown below.
+ //
+ // filter: progid:DXImageTransform.Microsoft.Alpha( *opacity=50* )
+ //
+ private function parseEntitiesAssignment() {
+
+ $key = $this->MatchReg('/\\G\w+(?=\s?=)/');
+ if( !$key ){
+ return;
+ }
+
+ if( !$this->MatchChar('=') ){
+ return;
+ }
+
+ $value = $this->parseEntity();
+ if( $value ){
+ return $this->NewObj2('Less_Tree_Assignment',array($key[0], $value));
+ }
+ }
+
+ //
+ // Parse url() tokens
+ //
+ // We use a specific rule for urls, because they don't really behave like
+ // standard function calls. The difference is that the argument doesn't have
+ // to be enclosed within a string, so it can't be parsed as an Expression.
+ //
+ private function parseEntitiesUrl(){
+
+
+ if( $this->input[$this->pos] !== 'u' || !$this->matchReg('/\\Gurl\(/') ){
+ return;
+ }
+
+ $value = $this->match( array('parseEntitiesQuoted','parseEntitiesVariable','/\\Gdata\:.*?[^\)]+/','/\\G(?:(?:\\\\[\(\)\'"])|[^\(\)\'"])+/') );
+ if( !$value ){
+ $value = '';
+ }
+
+
+ $this->expectChar(')');
+
+
+ if( isset($value->value) || $value instanceof Less_Tree_Variable ){
+ return $this->NewObj2('Less_Tree_Url',array($value, $this->env->currentFileInfo));
+ }
+
+ return $this->NewObj2('Less_Tree_Url', array( $this->NewObj1('Less_Tree_Anonymous',$value), $this->env->currentFileInfo) );
+ }
+
+
+ //
+ // A Variable entity, such as `@fink`, in
+ //
+ // width: @fink + 2px
+ //
+ // We use a different parser for variable definitions,
+ // see `parsers.variable`.
+ //
+ private function parseEntitiesVariable(){
+ $index = $this->pos;
+ if ($this->PeekChar('@') && ($name = $this->MatchReg('/\\G@@?[\w-]+/'))) {
+ return $this->NewObj3('Less_Tree_Variable', array( $name[0], $index, $this->env->currentFileInfo));
+ }
+ }
+
+
+ // A variable entity useing the protective {} e.g. @{var}
+ private function parseEntitiesVariableCurly() {
+ $index = $this->pos;
+
+ if( $this->input_len > ($this->pos+1) && $this->input[$this->pos] === '@' && ($curly = $this->MatchReg('/\\G@\{([\w-]+)\}/')) ){
+ return $this->NewObj3('Less_Tree_Variable',array('@'.$curly[1], $index, $this->env->currentFileInfo));
+ }
+ }
+
+ //
+ // A Hexadecimal color
+ //
+ // #4F3C2F
+ //
+ // `rgb` and `hsl` colors are parsed through the `entities.call` parser.
+ //
+ private function parseEntitiesColor(){
+ if ($this->PeekChar('#') && ($rgb = $this->MatchReg('/\\G#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/'))) {
+ return $this->NewObj1('Less_Tree_Color',$rgb[1]);
+ }
+ }
+
+ //
+ // A Dimension, that is, a number and a unit
+ //
+ // 0.5em 95%
+ //
+ private function parseEntitiesDimension(){
+
+ $c = @ord($this->input[$this->pos]);
+
+ //Is the first char of the dimension 0-9, '.', '+' or '-'
+ if (($c > 57 || $c < 43) || $c === 47 || $c == 44){
+ return;
+ }
+
+ $value = $this->MatchReg('/\\G([+-]?\d*\.?\d+)(%|[a-z]+)?/');
+ if( $value ){
+
+ if( isset($value[2]) ){
+ return $this->NewObj2('Less_Tree_Dimension', array($value[1],$value[2]));
+ }
+ return $this->NewObj1('Less_Tree_Dimension',$value[1]);
+ }
+ }
+
+
+ //
+ // A unicode descriptor, as is used in unicode-range
+ //
+ // U+0?? or U+00A1-00A9
+ //
+ function parseUnicodeDescriptor() {
+ $ud = $this->MatchReg('/\\G(U\+[0-9a-fA-F?]+)(\-[0-9a-fA-F?]+)?/');
+ if( $ud ){
+ return $this->NewObj1('Less_Tree_UnicodeDescriptor', $ud[0]);
+ }
+ }
+
+
+ //
+ // JavaScript code to be evaluated
+ //
+ // `window.location.href`
+ //
+ private function parseEntitiesJavascript(){
+ $e = false;
+ $j = $this->pos;
+ if( $this->input[$j] === '~' ){
+ $j++;
+ $e = true;
+ }
+ if( $this->input[$j] !== '`' ){
+ return;
+ }
+ if( $e ){
+ $this->MatchChar('~');
+ }
+ $str = $this->MatchReg('/\\G`([^`]*)`/');
+ if( $str ){
+ return $this->NewObj3('Less_Tree_Javascript', array($str[1], $this->pos, $e));
+ }
+ }
+
+
+ //
+ // The variable part of a variable definition. Used in the `rule` parser
+ //
+ // @fink:
+ //
+ private function parseVariable(){
+ if ($this->PeekChar('@') && ($name = $this->MatchReg('/\\G(@[\w-]+)\s*:/'))) {
+ return $name[1];
+ }
+ }
+
+
+ //
+ // The variable part of a variable definition. Used in the `rule` parser
+ //
+ // @fink();
+ //
+ private function parseRulesetCall(){
+
+ if( $this->input[$this->pos] === '@' && ($name = $this->MatchReg('/\\G(@[\w-]+)\s*\(\s*\)\s*;/')) ){
+ return $this->NewObj1('Less_Tree_RulesetCall', $name[1] );
+ }
+ }
+
+
+ //
+ // extend syntax - used to extend selectors
+ //
+ function parseExtend($isRule = false){
+
+ $index = $this->pos;
+ $extendList = array();
+
+
+ if( !$this->MatchReg( $isRule ? '/\\G&:extend\(/' : '/\\G:extend\(/' ) ){ return; }
+
+ do{
+ $option = null;
+ $elements = array();
+ while( true ){
+ $option = $this->MatchReg('/\\G(all)(?=\s*(\)|,))/');
+ if( $option ){ break; }
+ $e = $this->parseElement();
+ if( !$e ){ break; }
+ $elements[] = $e;
+ }
+
+ if( $option ){
+ $option = $option[1];
+ }
+
+ $extendList[] = $this->NewObj3('Less_Tree_Extend', array( $this->NewObj1('Less_Tree_Selector',$elements), $option, $index ));
+
+ }while( $this->MatchChar(",") );
+
+ $this->expect('/\\G\)/');
+
+ if( $isRule ){
+ $this->expect('/\\G;/');
+ }
+
+ return $extendList;
+ }
+
+
+ //
+ // A Mixin call, with an optional argument list
+ //
+ // #mixins > .square(#fff);
+ // .rounded(4px, black);
+ // .button;
+ //
+ // The `while` loop is there because mixins can be
+ // namespaced, but we only support the child and descendant
+ // selector for now.
+ //
+ private function parseMixinCall(){
+
+ $char = $this->input[$this->pos];
+ if( $char !== '.' && $char !== '#' ){
+ return;
+ }
+
+ $index = $this->pos;
+ $this->save(); // stop us absorbing part of an invalid selector
+
+ $elements = $this->parseMixinCallElements();
+
+ if( $elements ){
+
+ if( $this->MatchChar('(') ){
+ $returned = $this->parseMixinArgs(true);
+ $args = $returned['args'];
+ $this->expectChar(')');
+ }else{
+ $args = array();
+ }
+
+ $important = $this->parseImportant();
+
+ if( $this->parseEnd() ){
+ $this->forget();
+ return $this->NewObj5('Less_Tree_Mixin_Call', array( $elements, $args, $index, $this->env->currentFileInfo, $important));
+ }
+ }
+
+ $this->restore();
+ }
+
+
+ private function parseMixinCallElements(){
+ $elements = array();
+ $c = null;
+
+ while( true ){
+ $elemIndex = $this->pos;
+ $e = $this->MatchReg('/\\G[#.](?:[\w-]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/');
+ if( !$e ){
+ break;
+ }
+ $elements[] = $this->NewObj4('Less_Tree_Element', array($c, $e[0], $elemIndex, $this->env->currentFileInfo));
+ $c = $this->MatchChar('>');
+ }
+
+ return $elements;
+ }
+
+
+
+ /**
+ * @param boolean $isCall
+ */
+ private function parseMixinArgs( $isCall ){
+ $expressions = array();
+ $argsSemiColon = array();
+ $isSemiColonSeperated = null;
+ $argsComma = array();
+ $expressionContainsNamed = null;
+ $name = null;
+ $returner = array('args'=>array(), 'variadic'=> false);
+
+ $this->save();
+
+ while( true ){
+ if( $isCall ){
+ $arg = $this->MatchFuncs( array( 'parseDetachedRuleset','parseExpression' ) );
+ } else {
+ $this->parseComments();
+ if( $this->input[ $this->pos ] === '.' && $this->MatchReg('/\\G\.{3}/') ){
+ $returner['variadic'] = true;
+ if( $this->MatchChar(";") && !$isSemiColonSeperated ){
+ $isSemiColonSeperated = true;
+ }
+
+ if( $isSemiColonSeperated ){
+ $argsSemiColon[] = array('variadic'=>true);
+ }else{
+ $argsComma[] = array('variadic'=>true);
+ }
+ break;
+ }
+ $arg = $this->MatchFuncs( array('parseEntitiesVariable','parseEntitiesLiteral','parseEntitiesKeyword') );
+ }
+
+ if( !$arg ){
+ break;
+ }
+
+
+ $nameLoop = null;
+ if( $arg instanceof Less_Tree_Expression ){
+ $arg->throwAwayComments();
+ }
+ $value = $arg;
+ $val = null;
+
+ if( $isCall ){
+ // Variable
+ if( property_exists($arg,'value') && count($arg->value) == 1 ){
+ $val = $arg->value[0];
+ }
+ } else {
+ $val = $arg;
+ }
+
+
+ if( $val instanceof Less_Tree_Variable ){
+
+ if( $this->MatchChar(':') ){
+ if( $expressions ){
+ if( $isSemiColonSeperated ){
+ $this->Error('Cannot mix ; and , as delimiter types');
+ }
+ $expressionContainsNamed = true;
+ }
+
+ // we do not support setting a ruleset as a default variable - it doesn't make sense
+ // However if we do want to add it, there is nothing blocking it, just don't error
+ // and remove isCall dependency below
+ $value = null;
+ if( $isCall ){
+ $value = $this->parseDetachedRuleset();
+ }
+ if( !$value ){
+ $value = $this->parseExpression();
+ }
+
+ if( !$value ){
+ if( $isCall ){
+ $this->Error('could not understand value for named argument');
+ } else {
+ $this->restore();
+ $returner['args'] = array();
+ return $returner;
+ }
+ }
+
+ $nameLoop = ($name = $val->name);
+ }elseif( !$isCall && $this->MatchReg('/\\G\.{3}/') ){
+ $returner['variadic'] = true;
+ if( $this->MatchChar(";") && !$isSemiColonSeperated ){
+ $isSemiColonSeperated = true;
+ }
+ if( $isSemiColonSeperated ){
+ $argsSemiColon[] = array('name'=> $arg->name, 'variadic' => true);
+ }else{
+ $argsComma[] = array('name'=> $arg->name, 'variadic' => true);
+ }
+ break;
+ }elseif( !$isCall ){
+ $name = $nameLoop = $val->name;
+ $value = null;
+ }
+ }
+
+ if( $value ){
+ $expressions[] = $value;
+ }
+
+ $argsComma[] = array('name'=>$nameLoop, 'value'=>$value );
+
+ if( $this->MatchChar(',') ){
+ continue;
+ }
+
+ if( $this->MatchChar(';') || $isSemiColonSeperated ){
+
+ if( $expressionContainsNamed ){
+ $this->Error('Cannot mix ; and , as delimiter types');
+ }
+
+ $isSemiColonSeperated = true;
+
+ if( count($expressions) > 1 ){
+ $value = $this->NewObj1('Less_Tree_Value', $expressions);
+ }
+ $argsSemiColon[] = array('name'=>$name, 'value'=>$value );
+
+ $name = null;
+ $expressions = array();
+ $expressionContainsNamed = false;
+ }
+ }
+
+ $this->forget();
+ $returner['args'] = ($isSemiColonSeperated ? $argsSemiColon : $argsComma);
+ return $returner;
+ }
+
+
+
+ //
+ // A Mixin definition, with a list of parameters
+ //
+ // .rounded (@radius: 2px, @color) {
+ // ...
+ // }
+ //
+ // Until we have a finer grained state-machine, we have to
+ // do a look-ahead, to make sure we don't have a mixin call.
+ // See the `rule` function for more information.
+ //
+ // We start by matching `.rounded (`, and then proceed on to
+ // the argument list, which has optional default values.
+ // We store the parameters in `params`, with a `value` key,
+ // if there is a value, such as in the case of `@radius`.
+ //
+ // Once we've got our params list, and a closing `)`, we parse
+ // the `{...}` block.
+ //
+ private function parseMixinDefinition(){
+ $cond = null;
+
+ $char = $this->input[$this->pos];
+ if( ($char !== '.' && $char !== '#') || ($char === '{' && $this->PeekReg('/\\G[^{]*\}/')) ){
+ return;
+ }
+
+ $this->save();
+
+ $match = $this->MatchReg('/\\G([#.](?:[\w-]|\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/');
+ if( $match ){
+ $name = $match[1];
+
+ $argInfo = $this->parseMixinArgs( false );
+ $params = $argInfo['args'];
+ $variadic = $argInfo['variadic'];
+
+
+ // .mixincall("@{a}");
+ // looks a bit like a mixin definition..
+ // also
+ // .mixincall(@a: {rule: set;});
+ // so we have to be nice and restore
+ if( !$this->MatchChar(')') ){
+ $this->furthest = $this->pos;
+ $this->restore();
+ return;
+ }
+
+
+ $this->parseComments();
+
+ if ($this->MatchReg('/\\Gwhen/')) { // Guard
+ $cond = $this->expect('parseConditions', 'Expected conditions');
+ }
+
+ $ruleset = $this->parseBlock();
+
+ if( is_array($ruleset) ){
+ $this->forget();
+ return $this->NewObj5('Less_Tree_Mixin_Definition', array( $name, $params, $ruleset, $cond, $variadic));
+ }
+
+ $this->restore();
+ }else{
+ $this->forget();
+ }
+ }
+
+ //
+ // Entities are the smallest recognized token,
+ // and can be found inside a rule's value.
+ //
+ private function parseEntity(){
+
+ return $this->MatchFuncs( array('parseEntitiesLiteral','parseEntitiesVariable','parseEntitiesUrl','parseEntitiesCall','parseEntitiesKeyword','parseEntitiesJavascript','parseComment') );
+ }
+
+ //
+ // A Rule terminator. Note that we use `peek()` to check for '}',
+ // because the `block` rule will be expecting it, but we still need to make sure
+ // it's there, if ';' was ommitted.
+ //
+ private function parseEnd(){
+ return $this->MatchChar(';') || $this->PeekChar('}');
+ }
+
+ //
+ // IE's alpha function
+ //
+ // alpha(opacity=88)
+ //
+ private function parseAlpha(){
+
+ if ( ! $this->MatchReg('/\\G\(opacity=/i')) {
+ return;
+ }
+
+ $value = $this->MatchReg('/\\G[0-9]+/');
+ if( $value ){
+ $value = $value[0];
+ }else{
+ $value = $this->parseEntitiesVariable();
+ if( !$value ){
+ return;
+ }
+ }
+
+ $this->expectChar(')');
+ return $this->NewObj1('Less_Tree_Alpha',$value);
+ }
+
+
+ //
+ // A Selector Element
+ //
+ // div
+ // + h1
+ // #socks
+ // input[type="text"]
+ //
+ // Elements are the building blocks for Selectors,
+ // they are made out of a `Combinator` (see combinator rule),
+ // and an element name, such as a tag a class, or `*`.
+ //
+ private function parseElement(){
+ $c = $this->parseCombinator();
+ $index = $this->pos;
+
+ $e = $this->match( array('/\\G(?:\d+\.\d+|\d+)%/', '/\\G(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/',
+ '#*', '#&', 'parseAttribute', '/\\G\([^()@]+\)/', '/\\G[\.#](?=@)/', 'parseEntitiesVariableCurly') );
+
+ if( is_null($e) ){
+ $this->save();
+ if( $this->MatchChar('(') ){
+ if( ($v = $this->parseSelector()) && $this->MatchChar(')') ){
+ $e = $this->NewObj1('Less_Tree_Paren',$v);
+ $this->forget();
+ }else{
+ $this->restore();
+ }
+ }else{
+ $this->forget();
+ }
+ }
+
+ if( !is_null($e) ){
+ return $this->NewObj4('Less_Tree_Element',array( $c, $e, $index, $this->env->currentFileInfo));
+ }
+ }
+
+ //
+ // Combinators combine elements together, in a Selector.
+ //
+ // Because our parser isn't white-space sensitive, special care
+ // has to be taken, when parsing the descendant combinator, ` `,
+ // as it's an empty space. We have to check the previous character
+ // in the input, to see if it's a ` ` character.
+ //
+ private function parseCombinator(){
+ if( $this->pos < $this->input_len ){
+ $c = $this->input[$this->pos];
+ if ($c === '>' || $c === '+' || $c === '~' || $c === '|' || $c === '^' ){
+
+ $this->pos++;
+ if( $this->input[$this->pos] === '^' ){
+ $c = '^^';
+ $this->pos++;
+ }
+
+ $this->skipWhitespace(0);
+
+ return $c;
+ }
+
+ if( $this->pos > 0 && $this->isWhitespace(-1) ){
+ return ' ';
+ }
+ }
+ }
+
+ //
+ // A CSS selector (see selector below)
+ // with less extensions e.g. the ability to extend and guard
+ //
+ private function parseLessSelector(){
+ return $this->parseSelector(true);
+ }
+
+ //
+ // A CSS Selector
+ //
+ // .class > div + h1
+ // li a:hover
+ //
+ // Selectors are made out of one or more Elements, see above.
+ //
+ private function parseSelector( $isLess = false ){
+ $elements = array();
+ $extendList = array();
+ $condition = null;
+ $when = false;
+ $extend = false;
+ $e = null;
+ $c = null;
+ $index = $this->pos;
+
+ while( ($isLess && ($extend = $this->parseExtend())) || ($isLess && ($when = $this->MatchReg('/\\Gwhen/') )) || ($e = $this->parseElement()) ){
+ if( $when ){
+ $condition = $this->expect('parseConditions', 'expected condition');
+ }elseif( $condition ){
+ //error("CSS guard can only be used at the end of selector");
+ }elseif( $extend ){
+ $extendList = array_merge($extendList,$extend);
+ }else{
+ //if( count($extendList) ){
+ //error("Extend can only be used at the end of selector");
+ //}
+ if( $this->pos < $this->input_len ){
+ $c = $this->input[ $this->pos ];
+ }
+ $elements[] = $e;
+ $e = null;
+ }
+
+ if( $c === '{' || $c === '}' || $c === ';' || $c === ',' || $c === ')') { break; }
+ }
+
+ if( $elements ){
+ return $this->NewObj5('Less_Tree_Selector',array($elements, $extendList, $condition, $index, $this->env->currentFileInfo));
+ }
+ if( $extendList ) {
+ $this->Error('Extend must be used to extend a selector, it cannot be used on its own');
+ }
+ }
+
+ private function parseTag(){
+ return ( $tag = $this->MatchReg('/\\G[A-Za-z][A-Za-z-]*[0-9]?/') ) ? $tag : $this->MatchChar('*');
+ }
+
+ private function parseAttribute(){
+
+ $val = null;
+
+ if( !$this->MatchChar('[') ){
+ return;
+ }
+
+ $key = $this->parseEntitiesVariableCurly();
+ if( !$key ){
+ $key = $this->expect('/\\G(?:[_A-Za-z0-9-\*]*\|)?(?:[_A-Za-z0-9-]|\\\\.)+/');
+ }
+
+ $op = $this->MatchReg('/\\G[|~*$^]?=/');
+ if( $op ){
+ $val = $this->match( array('parseEntitiesQuoted','/\\G[0-9]+%/','/\\G[\w-]+/','parseEntitiesVariableCurly') );
+ }
+
+ $this->expectChar(']');
+
+ return $this->NewObj3('Less_Tree_Attribute',array( $key, $op[0], $val));
+ }
+
+ //
+ // The `block` rule is used by `ruleset` and `mixin.definition`.
+ // It's a wrapper around the `primary` rule, with added `{}`.
+ //
+ private function parseBlock(){
+ if( $this->MatchChar('{') ){
+ $content = $this->parsePrimary();
+ if( $this->MatchChar('}') ){
+ return $content;
+ }
+ }
+ }
+
+ private function parseBlockRuleset(){
+ $block = $this->parseBlock();
+
+ if( $block ){
+ $block = $this->NewObj2('Less_Tree_Ruleset',array( null, $block));
+ }
+
+ return $block;
+ }
+
+ private function parseDetachedRuleset(){
+ $blockRuleset = $this->parseBlockRuleset();
+ if( $blockRuleset ){
+ return $this->NewObj1('Less_Tree_DetachedRuleset',$blockRuleset);
+ }
+ }
+
+ //
+ // div, .class, body > p {...}
+ //
+ private function parseRuleset(){
+ $selectors = array();
+
+ $this->save();
+
+ while( true ){
+ $s = $this->parseLessSelector();
+ if( !$s ){
+ break;
+ }
+ $selectors[] = $s;
+ $this->parseComments();
+
+ if( $s->condition && count($selectors) > 1 ){
+ $this->Error('Guards are only currently allowed on a single selector.');
+ }
+
+ if( !$this->MatchChar(',') ){
+ break;
+ }
+ if( $s->condition ){
+ $this->Error('Guards are only currently allowed on a single selector.');
+ }
+ $this->parseComments();
+ }
+
+
+ if( $selectors ){
+ $rules = $this->parseBlock();
+ if( is_array($rules) ){
+ $this->forget();
+ return $this->NewObj2('Less_Tree_Ruleset',array( $selectors, $rules)); //Less_Environment::$strictImports
+ }
+ }
+
+ // Backtrack
+ $this->furthest = $this->pos;
+ $this->restore();
+ }
+
+ /**
+ * Custom less.php parse function for finding simple name-value css pairs
+ * ex: width:100px;
+ *
+ */
+ private function parseNameValue(){
+
+ $index = $this->pos;
+ $this->save();
+
+
+ //$match = $this->MatchReg('/\\G([a-zA-Z\-]+)\s*:\s*((?:\'")?[a-zA-Z0-9\-% \.,!]+?(?:\'")?)\s*([;}])/');
+ $match = $this->MatchReg('/\\G([a-zA-Z\-]+)\s*:\s*([\'"]?[#a-zA-Z0-9\-%\.,]+?[\'"]?) *(! *important)?\s*([;}])/');
+ if( $match ){
+
+ if( $match[4] == '}' ){
+ $this->pos = $index + strlen($match[0])-1;
+ }
+
+ if( $match[3] ){
+ $match[2] .= ' !important';
+ }
+
+ return $this->NewObj4('Less_Tree_NameValue',array( $match[1], $match[2], $index, $this->env->currentFileInfo));
+ }
+
+ $this->restore();
+ }
+
+
+ private function parseRule( $tryAnonymous = null ){
+
+ $merge = false;
+ $startOfRule = $this->pos;
+
+ $c = $this->input[$this->pos];
+ if( $c === '.' || $c === '#' || $c === '&' ){
+ return;
+ }
+
+ $this->save();
+ $name = $this->MatchFuncs( array('parseVariable','parseRuleProperty'));
+
+ if( $name ){
+
+ $isVariable = is_string($name);
+
+ $value = null;
+ if( $isVariable ){
+ $value = $this->parseDetachedRuleset();
+ }
+
+ $important = null;
+ if( !$value ){
+
+ // prefer to try to parse first if its a variable or we are compressing
+ // but always fallback on the other one
+ //if( !$tryAnonymous && is_string($name) && $name[0] === '@' ){
+ if( !$tryAnonymous && (Less_Parser::$options['compress'] || $isVariable) ){
+ $value = $this->MatchFuncs( array('parseValue','parseAnonymousValue'));
+ }else{
+ $value = $this->MatchFuncs( array('parseAnonymousValue','parseValue'));
+ }
+
+ $important = $this->parseImportant();
+
+ // a name returned by this.ruleProperty() is always an array of the form:
+ // [string-1, ..., string-n, ""] or [string-1, ..., string-n, "+"]
+ // where each item is a tree.Keyword or tree.Variable
+ if( !$isVariable && is_array($name) ){
+ $nm = array_pop($name);
+ if( $nm->value ){
+ $merge = $nm->value;
+ }
+ }
+ }
+
+
+ if( $value && $this->parseEnd() ){
+ $this->forget();
+ return $this->NewObj6('Less_Tree_Rule',array( $name, $value, $important, $merge, $startOfRule, $this->env->currentFileInfo));
+ }else{
+ $this->furthest = $this->pos;
+ $this->restore();
+ if( $value && !$tryAnonymous ){
+ return $this->parseRule(true);
+ }
+ }
+ }else{
+ $this->forget();
+ }
+ }
+
+ function parseAnonymousValue(){
+
+ if( preg_match('/\\G([^@+\/\'"*`(;{}-]*);/',$this->input, $match, 0, $this->pos) ){
+ $this->pos += strlen($match[1]);
+ return $this->NewObj1('Less_Tree_Anonymous',$match[1]);
+ }
+ }
+
+ //
+ // An @import directive
+ //
+ // @import "lib";
+ //
+ // Depending on our environment, importing is done differently:
+ // In the browser, it's an XHR request, in Node, it would be a
+ // file-system operation. The function used for importing is
+ // stored in `import`, which we pass to the Import constructor.
+ //
+ private function parseImport(){
+
+ $this->save();
+
+ $dir = $this->MatchReg('/\\G@import?\s+/');
+
+ if( $dir ){
+ $options = $this->parseImportOptions();
+ $path = $this->MatchFuncs( array('parseEntitiesQuoted','parseEntitiesUrl'));
+
+ if( $path ){
+ $features = $this->parseMediaFeatures();
+ if( $this->MatchChar(';') ){
+ if( $features ){
+ $features = $this->NewObj1('Less_Tree_Value',$features);
+ }
+
+ $this->forget();
+ return $this->NewObj5('Less_Tree_Import',array( $path, $features, $options, $this->pos, $this->env->currentFileInfo));
+ }
+ }
+ }
+
+ $this->restore();
+ }
+
+ private function parseImportOptions(){
+
+ $options = array();
+
+ // list of options, surrounded by parens
+ if( !$this->MatchChar('(') ){
+ return $options;
+ }
+ do{
+ $optionName = $this->parseImportOption();
+ if( $optionName ){
+ $value = true;
+ switch( $optionName ){
+ case "css":
+ $optionName = "less";
+ $value = false;
+ break;
+ case "once":
+ $optionName = "multiple";
+ $value = false;
+ break;
+ }
+ $options[$optionName] = $value;
+ if( !$this->MatchChar(',') ){ break; }
+ }
+ }while( $optionName );
+ $this->expectChar(')');
+ return $options;
+ }
+
+ private function parseImportOption(){
+ $opt = $this->MatchReg('/\\G(less|css|multiple|once|inline|reference)/');
+ if( $opt ){
+ return $opt[1];
+ }
+ }
+
+ private function parseMediaFeature() {
+ $nodes = array();
+
+ do{
+ $e = $this->MatchFuncs(array('parseEntitiesKeyword','parseEntitiesVariable'));
+ if( $e ){
+ $nodes[] = $e;
+ } elseif ($this->MatchChar('(')) {
+ $p = $this->parseProperty();
+ $e = $this->parseValue();
+ if ($this->MatchChar(')')) {
+ if ($p && $e) {
+ $r = $this->NewObj7('Less_Tree_Rule', array( $p, $e, null, null, $this->pos, $this->env->currentFileInfo, true));
+ $nodes[] = $this->NewObj1('Less_Tree_Paren',$r);
+ } elseif ($e) {
+ $nodes[] = $this->NewObj1('Less_Tree_Paren',$e);
+ } else {
+ return null;
+ }
+ } else
+ return null;
+ }
+ } while ($e);
+
+ if ($nodes) {
+ return $this->NewObj1('Less_Tree_Expression',$nodes);
+ }
+ }
+
+ private function parseMediaFeatures() {
+ $features = array();
+
+ do{
+ $e = $this->parseMediaFeature();
+ if( $e ){
+ $features[] = $e;
+ if (!$this->MatchChar(',')) break;
+ }else{
+ $e = $this->parseEntitiesVariable();
+ if( $e ){
+ $features[] = $e;
+ if (!$this->MatchChar(',')) break;
+ }
+ }
+ } while ($e);
+
+ return $features ? $features : null;
+ }
+
+ private function parseMedia() {
+ if( $this->MatchReg('/\\G@media/') ){
+ $features = $this->parseMediaFeatures();
+ $rules = $this->parseBlock();
+
+ if( is_array($rules) ){
+ return $this->NewObj4('Less_Tree_Media',array( $rules, $features, $this->pos, $this->env->currentFileInfo));
+ }
+ }
+ }
+
+
+ //
+ // A CSS Directive
+ //
+ // @charset "utf-8";
+ //
+ private function parseDirective(){
+
+ if( !$this->PeekChar('@') ){
+ return;
+ }
+
+ $rules = null;
+ $index = $this->pos;
+ $hasBlock = true;
+ $hasIdentifier = false;
+ $hasExpression = false;
+ $hasUnknown = false;
+
+
+ $value = $this->MatchFuncs(array('parseImport','parseMedia'));
+ if( $value ){
+ return $value;
+ }
+
+ $this->save();
+
+ $name = $this->MatchReg('/\\G@[a-z-]+/');
+
+ if( !$name ) return;
+ $name = $name[0];
+
+
+ $nonVendorSpecificName = $name;
+ $pos = strpos($name,'-', 2);
+ if( $name[1] == '-' && $pos > 0 ){
+ $nonVendorSpecificName = "@" . substr($name, $pos + 1);
+ }
+
+
+ switch( $nonVendorSpecificName ){
+ /*
+ case "@font-face":
+ case "@viewport":
+ case "@top-left":
+ case "@top-left-corner":
+ case "@top-center":
+ case "@top-right":
+ case "@top-right-corner":
+ case "@bottom-left":
+ case "@bottom-left-corner":
+ case "@bottom-center":
+ case "@bottom-right":
+ case "@bottom-right-corner":
+ case "@left-top":
+ case "@left-middle":
+ case "@left-bottom":
+ case "@right-top":
+ case "@right-middle":
+ case "@right-bottom":
+ hasBlock = true;
+ break;
+ */
+ case "@charset":
+ $hasIdentifier = true;
+ $hasBlock = false;
+ break;
+ case "@namespace":
+ $hasExpression = true;
+ $hasBlock = false;
+ break;
+ case "@keyframes":
+ $hasIdentifier = true;
+ break;
+ case "@host":
+ case "@page":
+ case "@document":
+ case "@supports":
+ $hasUnknown = true;
+ break;
+ }
+
+ if( $hasIdentifier ){
+ $value = $this->parseEntity();
+ if( !$value ){
+ $this->error("expected " . $name . " identifier");
+ }
+ } else if( $hasExpression ){
+ $value = $this->parseExpression();
+ if( !$value ){
+ $this->error("expected " . $name. " expression");
+ }
+ } else if ($hasUnknown) {
+
+ $value = $this->MatchReg('/\\G[^{;]+/');
+ if( $value ){
+ $value = $this->NewObj1('Less_Tree_Anonymous',trim($value[0]));
+ }
+ }
+
+ if( $hasBlock ){
+ $rules = $this->parseBlockRuleset();
+ }
+
+ if( $rules || (!$hasBlock && $value && $this->MatchChar(';'))) {
+ $this->forget();
+ return $this->NewObj5('Less_Tree_Directive',array($name, $value, $rules, $index, $this->env->currentFileInfo));
+ }
+
+ $this->restore();
+ }
+
+
+ //
+ // A Value is a comma-delimited list of Expressions
+ //
+ // font-family: Baskerville, Georgia, serif;
+ //
+ // In a Rule, a Value represents everything after the `:`,
+ // and before the `;`.
+ //
+ private function parseValue(){
+ $expressions = array();
+
+ do{
+ $e = $this->parseExpression();
+ if( $e ){
+ $expressions[] = $e;
+ if (! $this->MatchChar(',')) {
+ break;
+ }
+ }
+ }while($e);
+
+ if( $expressions ){
+ return $this->NewObj1('Less_Tree_Value',$expressions);
+ }
+ }
+
+ private function parseImportant (){
+ if( $this->PeekChar('!') && $this->MatchReg('/\\G! *important/') ){
+ return ' !important';
+ }
+ }
+
+ private function parseSub (){
+
+ if( $this->MatchChar('(') ){
+ $a = $this->parseAddition();
+ if( $a ){
+ $this->expectChar(')');
+ return $this->NewObj2('Less_Tree_Expression',array( array($a), true) ); //instead of $e->parens = true so the value is cached
+ }
+ }
+ }
+
+
+ /**
+ * Parses multiplication operation
+ *
+ * @return Less_Tree_Operation|null
+ */
+ function parseMultiplication(){
+
+ $return = $m = $this->parseOperand();
+ if( $return ){
+ while( true ){
+
+ $isSpaced = $this->isWhitespace( -1 );
+
+ if( $this->PeekReg('/\\G\/[*\/]/') ){
+ break;
+ }
+
+ $op = $this->MatchChar('/');
+ if( !$op ){
+ $op = $this->MatchChar('*');
+ if( !$op ){
+ break;
+ }
+ }
+
+ $a = $this->parseOperand();
+
+ if(!$a) { break; }
+
+ $m->parensInOp = true;
+ $a->parensInOp = true;
+ $return = $this->NewObj3('Less_Tree_Operation',array( $op, array( $return, $a ), $isSpaced) );
+ }
+ }
+ return $return;
+
+ }
+
+
+ /**
+ * Parses an addition operation
+ *
+ * @return Less_Tree_Operation|null
+ */
+ private function parseAddition (){
+
+ $return = $m = $this->parseMultiplication();
+ if( $return ){
+ while( true ){
+
+ $isSpaced = $this->isWhitespace( -1 );
+
+ $op = $this->MatchReg('/\\G[-+]\s+/');
+ if( $op ){
+ $op = $op[0];
+ }else{
+ if( !$isSpaced ){
+ $op = $this->match(array('#+','#-'));
+ }
+ if( !$op ){
+ break;
+ }
+ }
+
+ $a = $this->parseMultiplication();
+ if( !$a ){
+ break;
+ }
+
+ $m->parensInOp = true;
+ $a->parensInOp = true;
+ $return = $this->NewObj3('Less_Tree_Operation',array($op, array($return, $a), $isSpaced));
+ }
+ }
+
+ return $return;
+ }
+
+
+ /**
+ * Parses the conditions
+ *
+ * @return Less_Tree_Condition|null
+ */
+ private function parseConditions() {
+ $index = $this->pos;
+ $return = $a = $this->parseCondition();
+ if( $a ){
+ while( true ){
+ if( !$this->PeekReg('/\\G,\s*(not\s*)?\(/') || !$this->MatchChar(',') ){
+ break;
+ }
+ $b = $this->parseCondition();
+ if( !$b ){
+ break;
+ }
+
+ $return = $this->NewObj4('Less_Tree_Condition',array('or', $return, $b, $index));
+ }
+ return $return;
+ }
+ }
+
+ private function parseCondition() {
+ $index = $this->pos;
+ $negate = false;
+ $c = null;
+
+ if ($this->MatchReg('/\\Gnot/')) $negate = true;
+ $this->expectChar('(');
+ $a = $this->MatchFuncs(array('parseAddition','parseEntitiesKeyword','parseEntitiesQuoted'));
+
+ if( $a ){
+ $op = $this->MatchReg('/\\G(?:>=|<=|=<|[<=>])/');
+ if( $op ){
+ $b = $this->MatchFuncs(array('parseAddition','parseEntitiesKeyword','parseEntitiesQuoted'));
+ if( $b ){
+ $c = $this->NewObj5('Less_Tree_Condition',array($op[0], $a, $b, $index, $negate));
+ } else {
+ $this->Error('Unexpected expression');
+ }
+ } else {
+ $k = $this->NewObj1('Less_Tree_Keyword','true');
+ $c = $this->NewObj5('Less_Tree_Condition',array('=', $a, $k, $index, $negate));
+ }
+ $this->expectChar(')');
+ return $this->MatchReg('/\\Gand/') ? $this->NewObj3('Less_Tree_Condition',array('and', $c, $this->parseCondition())) : $c;
+ }
+ }
+
+ /**
+ * An operand is anything that can be part of an operation,
+ * such as a Color, or a Variable
+ *
+ */
+ private function parseOperand (){
+
+ $negate = false;
+ $offset = $this->pos+1;
+ if( $offset >= $this->input_len ){
+ return;
+ }
+ $char = $this->input[$offset];
+ if( $char === '@' || $char === '(' ){
+ $negate = $this->MatchChar('-');
+ }
+
+ $o = $this->MatchFuncs(array('parseSub','parseEntitiesDimension','parseEntitiesColor','parseEntitiesVariable','parseEntitiesCall'));
+
+ if( $negate ){
+ $o->parensInOp = true;
+ $o = $this->NewObj1('Less_Tree_Negative',$o);
+ }
+
+ return $o;
+ }
+
+
+ /**
+ * Expressions either represent mathematical operations,
+ * or white-space delimited Entities.
+ *
+ * 1px solid black
+ * @var * 2
+ *
+ * @return Less_Tree_Expression|null
+ */
+ private function parseExpression (){
+ $entities = array();
+
+ do{
+ $e = $this->MatchFuncs(array('parseAddition','parseEntity'));
+ if( $e ){
+ $entities[] = $e;
+ // operations do not allow keyword "/" dimension (e.g. small/20px) so we support that here
+ if( !$this->PeekReg('/\\G\/[\/*]/') ){
+ $delim = $this->MatchChar('/');
+ if( $delim ){
+ $entities[] = $this->NewObj1('Less_Tree_Anonymous',$delim);
+ }
+ }
+ }
+ }while($e);
+
+ if( $entities ){
+ return $this->NewObj1('Less_Tree_Expression',$entities);
+ }
+ }
+
+
+ /**
+ * Parse a property
+ * eg: 'min-width', 'orientation', etc
+ *
+ * @return string
+ */
+ private function parseProperty (){
+ $name = $this->MatchReg('/\\G(\*?-?[_a-zA-Z0-9-]+)\s*:/');
+ if( $name ){
+ return $name[1];
+ }
+ }
+
+
+ /**
+ * Parse a rule property
+ * eg: 'color', 'width', 'height', etc
+ *
+ * @return string
+ */
+ private function parseRuleProperty(){
+ $offset = $this->pos;
+ $name = array();
+ $index = array();
+ $length = 0;
+
+
+ $this->rulePropertyMatch('/\\G(\*?)/', $offset, $length, $index, $name );
+ while( $this->rulePropertyMatch('/\\G((?:[\w-]+)|(?:@\{[\w-]+\}))/', $offset, $length, $index, $name )); // !
+
+ if( (count($name) > 1) && $this->rulePropertyMatch('/\\G\s*((?:\+_|\+)?)\s*:/', $offset, $length, $index, $name) ){
+ // at last, we have the complete match now. move forward,
+ // convert name particles to tree objects and return:
+ $this->skipWhitespace($length);
+
+ if( $name[0] === '' ){
+ array_shift($name);
+ array_shift($index);
+ }
+ foreach($name as $k => $s ){
+ if( !$s || $s[0] !== '@' ){
+ $name[$k] = $this->NewObj1('Less_Tree_Keyword',$s);
+ }else{
+ $name[$k] = $this->NewObj3('Less_Tree_Variable',array('@' . substr($s,2,-1), $index[$k], $this->env->currentFileInfo));
+ }
+ }
+ return $name;
+ }
+
+
+ }
+
+ private function rulePropertyMatch( $re, &$offset, &$length, &$index, &$name ){
+ preg_match($re, $this->input, $a, 0, $offset);
+ if( $a ){
+ $index[] = $this->pos + $length;
+ $length += strlen($a[0]);
+ $offset += strlen($a[0]);
+ $name[] = $a[1];
+ return true;
+ }
+ }
+
+ public static function serializeVars( $vars ){
+ $s = '';
+
+ foreach($vars as $name => $value){
+ $s .= (($name[0] === '@') ? '' : '@') . $name .': '. $value . ((substr($value,-1) === ';') ? '' : ';');
+ }
+
+ return $s;
+ }
+
+
+ /**
+ * Some versions of php have trouble with method_exists($a,$b) if $a is not an object
+ *
+ * @param string $b
+ */
+ public static function is_method($a,$b){
+ return is_object($a) && method_exists($a,$b);
+ }
+
+
+ /**
+ * Round numbers similarly to javascript
+ * eg: 1.499999 to 1 instead of 2
+ *
+ */
+ public static function round($i, $precision = 0){
+
+ $precision = pow(10,$precision);
+ $i = $i*$precision;
+
+ $ceil = ceil($i);
+ $floor = floor($i);
+ if( ($ceil - $i) <= ($i - $floor) ){
+ return $ceil/$precision;
+ }else{
+ return $floor/$precision;
+ }
+ }
+
+
+ /**
+ * Create Less_Tree_* objects and optionally generate a cache string
+ *
+ * @return mixed
+ */
+ public function NewObj0($class){
+ $obj = new $class();
+ if( $this->CacheEnabled() ){
+ $obj->cache_string = ' new '.$class.'()';
+ }
+ return $obj;
+ }
+
+ public function NewObj1($class, $arg){
+ $obj = new $class( $arg );
+ if( $this->CacheEnabled() ){
+ $obj->cache_string = ' new '.$class.'('.Less_Parser::ArgString($arg).')';
+ }
+ return $obj;
+ }
+
+ public function NewObj2($class, $args){
+ $obj = new $class( $args[0], $args[1] );
+ if( $this->CacheEnabled() ){
+ $this->ObjCache( $obj, $class, $args);
+ }
+ return $obj;
+ }
+
+ public function NewObj3($class, $args){
+ $obj = new $class( $args[0], $args[1], $args[2] );
+ if( $this->CacheEnabled() ){
+ $this->ObjCache( $obj, $class, $args);
+ }
+ return $obj;
+ }
+
+ public function NewObj4($class, $args){
+ $obj = new $class( $args[0], $args[1], $args[2], $args[3] );
+ if( $this->CacheEnabled() ){
+ $this->ObjCache( $obj, $class, $args);
+ }
+ return $obj;
+ }
+
+ public function NewObj5($class, $args){
+ $obj = new $class( $args[0], $args[1], $args[2], $args[3], $args[4] );
+ if( $this->CacheEnabled() ){
+ $this->ObjCache( $obj, $class, $args);
+ }
+ return $obj;
+ }
+
+ public function NewObj6($class, $args){
+ $obj = new $class( $args[0], $args[1], $args[2], $args[3], $args[4], $args[5] );
+ if( $this->CacheEnabled() ){
+ $this->ObjCache( $obj, $class, $args);
+ }
+ return $obj;
+ }
+
+ public function NewObj7($class, $args){
+ $obj = new $class( $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6] );
+ if( $this->CacheEnabled() ){
+ $this->ObjCache( $obj, $class, $args);
+ }
+ return $obj;
+ }
+
+ //caching
+ public function ObjCache($obj, $class, $args=array()){
+ $obj->cache_string = ' new '.$class.'('. self::ArgCache($args).')';
+ }
+
+ public function ArgCache($args){
+ return implode(',',array_map( array('Less_Parser','ArgString'),$args));
+ }
+
+
+ /**
+ * Convert an argument to a string for use in the parser cache
+ *
+ * @return string
+ */
+ public static function ArgString($arg){
+
+ $type = gettype($arg);
+
+ if( $type === 'object'){
+ $string = $arg->cache_string;
+ unset($arg->cache_string);
+ return $string;
+
+ }elseif( $type === 'array' ){
+ $string = ' Array(';
+ foreach($arg as $k => $a){
+ $string .= var_export($k,true).' => '.self::ArgString($a).',';
+ }
+ return $string . ')';
+ }
+
+ return var_export($arg,true);
+ }
+
+ public function Error($msg){
+ throw new Less_Exception_Parser($msg, null, $this->furthest, $this->env->currentFileInfo);
+ }
+
+ public static function WinPath($path){
+ return str_replace('\\', '/', $path);
+ }
+
+ public function CacheEnabled(){
+ return (Less_Parser::$options['cache_method'] && (Less_Cache::$cache_dir || (Less_Parser::$options['cache_method'] == 'callback')));
+ }
+
+}
+
+
+
+
+/**
+ * Utility for css colors
+ *
+ * @package Less
+ * @subpackage color
+ */
+class Less_Colors {
+
+ public static $colors = array(
+ 'aliceblue'=>'#f0f8ff',
+ 'antiquewhite'=>'#faebd7',
+ 'aqua'=>'#00ffff',
+ 'aquamarine'=>'#7fffd4',
+ 'azure'=>'#f0ffff',
+ 'beige'=>'#f5f5dc',
+ 'bisque'=>'#ffe4c4',
+ 'black'=>'#000000',
+ 'blanchedalmond'=>'#ffebcd',
+ 'blue'=>'#0000ff',
+ 'blueviolet'=>'#8a2be2',
+ 'brown'=>'#a52a2a',
+ 'burlywood'=>'#deb887',
+ 'cadetblue'=>'#5f9ea0',
+ 'chartreuse'=>'#7fff00',
+ 'chocolate'=>'#d2691e',
+ 'coral'=>'#ff7f50',
+ 'cornflowerblue'=>'#6495ed',
+ 'cornsilk'=>'#fff8dc',
+ 'crimson'=>'#dc143c',
+ 'cyan'=>'#00ffff',
+ 'darkblue'=>'#00008b',
+ 'darkcyan'=>'#008b8b',
+ 'darkgoldenrod'=>'#b8860b',
+ 'darkgray'=>'#a9a9a9',
+ 'darkgrey'=>'#a9a9a9',
+ 'darkgreen'=>'#006400',
+ 'darkkhaki'=>'#bdb76b',
+ 'darkmagenta'=>'#8b008b',
+ 'darkolivegreen'=>'#556b2f',
+ 'darkorange'=>'#ff8c00',
+ 'darkorchid'=>'#9932cc',
+ 'darkred'=>'#8b0000',
+ 'darksalmon'=>'#e9967a',
+ 'darkseagreen'=>'#8fbc8f',
+ 'darkslateblue'=>'#483d8b',
+ 'darkslategray'=>'#2f4f4f',
+ 'darkslategrey'=>'#2f4f4f',
+ 'darkturquoise'=>'#00ced1',
+ 'darkviolet'=>'#9400d3',
+ 'deeppink'=>'#ff1493',
+ 'deepskyblue'=>'#00bfff',
+ 'dimgray'=>'#696969',
+ 'dimgrey'=>'#696969',
+ 'dodgerblue'=>'#1e90ff',
+ 'firebrick'=>'#b22222',
+ 'floralwhite'=>'#fffaf0',
+ 'forestgreen'=>'#228b22',
+ 'fuchsia'=>'#ff00ff',
+ 'gainsboro'=>'#dcdcdc',
+ 'ghostwhite'=>'#f8f8ff',
+ 'gold'=>'#ffd700',
+ 'goldenrod'=>'#daa520',
+ 'gray'=>'#808080',
+ 'grey'=>'#808080',
+ 'green'=>'#008000',
+ 'greenyellow'=>'#adff2f',
+ 'honeydew'=>'#f0fff0',
+ 'hotpink'=>'#ff69b4',
+ 'indianred'=>'#cd5c5c',
+ 'indigo'=>'#4b0082',
+ 'ivory'=>'#fffff0',
+ 'khaki'=>'#f0e68c',
+ 'lavender'=>'#e6e6fa',
+ 'lavenderblush'=>'#fff0f5',
+ 'lawngreen'=>'#7cfc00',
+ 'lemonchiffon'=>'#fffacd',
+ 'lightblue'=>'#add8e6',
+ 'lightcoral'=>'#f08080',
+ 'lightcyan'=>'#e0ffff',
+ 'lightgoldenrodyellow'=>'#fafad2',
+ 'lightgray'=>'#d3d3d3',
+ 'lightgrey'=>'#d3d3d3',
+ 'lightgreen'=>'#90ee90',
+ 'lightpink'=>'#ffb6c1',
+ 'lightsalmon'=>'#ffa07a',
+ 'lightseagreen'=>'#20b2aa',
+ 'lightskyblue'=>'#87cefa',
+ 'lightslategray'=>'#778899',
+ 'lightslategrey'=>'#778899',
+ 'lightsteelblue'=>'#b0c4de',
+ 'lightyellow'=>'#ffffe0',
+ 'lime'=>'#00ff00',
+ 'limegreen'=>'#32cd32',
+ 'linen'=>'#faf0e6',
+ 'magenta'=>'#ff00ff',
+ 'maroon'=>'#800000',
+ 'mediumaquamarine'=>'#66cdaa',
+ 'mediumblue'=>'#0000cd',
+ 'mediumorchid'=>'#ba55d3',
+ 'mediumpurple'=>'#9370d8',
+ 'mediumseagreen'=>'#3cb371',
+ 'mediumslateblue'=>'#7b68ee',
+ 'mediumspringgreen'=>'#00fa9a',
+ 'mediumturquoise'=>'#48d1cc',
+ 'mediumvioletred'=>'#c71585',
+ 'midnightblue'=>'#191970',
+ 'mintcream'=>'#f5fffa',
+ 'mistyrose'=>'#ffe4e1',
+ 'moccasin'=>'#ffe4b5',
+ 'navajowhite'=>'#ffdead',
+ 'navy'=>'#000080',
+ 'oldlace'=>'#fdf5e6',
+ 'olive'=>'#808000',
+ 'olivedrab'=>'#6b8e23',
+ 'orange'=>'#ffa500',
+ 'orangered'=>'#ff4500',
+ 'orchid'=>'#da70d6',
+ 'palegoldenrod'=>'#eee8aa',
+ 'palegreen'=>'#98fb98',
+ 'paleturquoise'=>'#afeeee',
+ 'palevioletred'=>'#d87093',
+ 'papayawhip'=>'#ffefd5',
+ 'peachpuff'=>'#ffdab9',
+ 'peru'=>'#cd853f',
+ 'pink'=>'#ffc0cb',
+ 'plum'=>'#dda0dd',
+ 'powderblue'=>'#b0e0e6',
+ 'purple'=>'#800080',
+ 'red'=>'#ff0000',
+ 'rosybrown'=>'#bc8f8f',
+ 'royalblue'=>'#4169e1',
+ 'saddlebrown'=>'#8b4513',
+ 'salmon'=>'#fa8072',
+ 'sandybrown'=>'#f4a460',
+ 'seagreen'=>'#2e8b57',
+ 'seashell'=>'#fff5ee',
+ 'sienna'=>'#a0522d',
+ 'silver'=>'#c0c0c0',
+ 'skyblue'=>'#87ceeb',
+ 'slateblue'=>'#6a5acd',
+ 'slategray'=>'#708090',
+ 'slategrey'=>'#708090',
+ 'snow'=>'#fffafa',
+ 'springgreen'=>'#00ff7f',
+ 'steelblue'=>'#4682b4',
+ 'tan'=>'#d2b48c',
+ 'teal'=>'#008080',
+ 'thistle'=>'#d8bfd8',
+ 'tomato'=>'#ff6347',
+ 'turquoise'=>'#40e0d0',
+ 'violet'=>'#ee82ee',
+ 'wheat'=>'#f5deb3',
+ 'white'=>'#ffffff',
+ 'whitesmoke'=>'#f5f5f5',
+ 'yellow'=>'#ffff00',
+ 'yellowgreen'=>'#9acd32'
+ );
+
+ public static function hasOwnProperty($color) {
+ return isset(self::$colors[$color]);
+ }
+
+
+ public static function color($color) {
+ return self::$colors[$color];
+ }
+
+}
+
+
+
+/**
+ * Environment
+ *
+ * @package Less
+ * @subpackage environment
+ */
+class Less_Environment{
+
+ //public $paths = array(); // option - unmodified - paths to search for imports on
+ //public static $files = array(); // list of files that have been imported, used for import-once
+ //public $rootpath; // option - rootpath to append to URL's
+ //public static $strictImports = null; // option -
+ //public $insecure; // option - whether to allow imports from insecure ssl hosts
+ //public $processImports; // option - whether to process imports. if false then imports will not be imported
+ //public $javascriptEnabled; // option - whether JavaScript is enabled. if undefined, defaults to true
+ //public $useFileCache; // browser only - whether to use the per file session cache
+ public $currentFileInfo; // information about the current file - for error reporting and importing and making urls relative etc.
+
+ public $importMultiple = false; // whether we are currently importing multiple copies
+
+
+ /**
+ * @var array
+ */
+ public $frames = array();
+
+ /**
+ * @var array
+ */
+ public $mediaBlocks = array();
+
+ /**
+ * @var array
+ */
+ public $mediaPath = array();
+
+ public static $parensStack = 0;
+
+ public static $tabLevel = 0;
+
+ public static $lastRule = false;
+
+ public static $_outputMap;
+
+ public static $mixin_stack = 0;
+
+ /**
+ * @var array
+ */
+ public $functions = array();
+
+
+ public function Init(){
+
+ self::$parensStack = 0;
+ self::$tabLevel = 0;
+ self::$lastRule = false;
+ self::$mixin_stack = 0;
+
+ if( Less_Parser::$options['compress'] ){
+
+ Less_Environment::$_outputMap = array(
+ ',' => ',',
+ ': ' => ':',
+ '' => '',
+ ' ' => ' ',
+ ':' => ' :',
+ '+' => '+',
+ '~' => '~',
+ '>' => '>',
+ '|' => '|',
+ '^' => '^',
+ '^^' => '^^'
+ );
+
+ }else{
+
+ Less_Environment::$_outputMap = array(
+ ',' => ', ',
+ ': ' => ': ',
+ '' => '',
+ ' ' => ' ',
+ ':' => ' :',
+ '+' => ' + ',
+ '~' => ' ~ ',
+ '>' => ' > ',
+ '|' => '|',
+ '^' => ' ^ ',
+ '^^' => ' ^^ '
+ );
+
+ }
+ }
+
+
+ public function copyEvalEnv($frames = array() ){
+ $new_env = new Less_Environment();
+ $new_env->frames = $frames;
+ return $new_env;
+ }
+
+
+ public static function isMathOn(){
+ return !Less_Parser::$options['strictMath'] || Less_Environment::$parensStack;
+ }
+
+ public static function isPathRelative($path){
+ return !preg_match('/^(?:[a-z-]+:|\/)/',$path);
+ }
+
+
+ /**
+ * Canonicalize a path by resolving references to '/./', '/../'
+ * Does not remove leading "../"
+ * @param string path or url
+ * @return string Canonicalized path
+ *
+ */
+ public static function normalizePath($path){
+
+ $segments = explode('/',$path);
+ $segments = array_reverse($segments);
+
+ $path = array();
+ $path_len = 0;
+
+ while( $segments ){
+ $segment = array_pop($segments);
+ switch( $segment ) {
+
+ case '.':
+ break;
+
+ case '..':
+ if( !$path_len || ( $path[$path_len-1] === '..') ){
+ $path[] = $segment;
+ $path_len++;
+ }else{
+ array_pop($path);
+ $path_len--;
+ }
+ break;
+
+ default:
+ $path[] = $segment;
+ $path_len++;
+ break;
+ }
+ }
+
+ return implode('/',$path);
+ }
+
+
+ public function unshiftFrame($frame){
+ array_unshift($this->frames, $frame);
+ }
+
+ public function shiftFrame(){
+ return array_shift($this->frames);
+ }
+
+}
+
+
+/**
+ * Builtin functions
+ *
+ * @package Less
+ * @subpackage function
+ * @see http://lesscss.org/functions/
+ */
+class Less_Functions{
+
+ public $env;
+ public $currentFileInfo;
+
+ function __construct($env, $currentFileInfo = null ){
+ $this->env = $env;
+ $this->currentFileInfo = $currentFileInfo;
+ }
+
+ /**
+ * @param string $op
+ */
+ public static function operate( $op, $a, $b ){
+ switch ($op) {
+ case '+': return $a + $b;
+ case '-': return $a - $b;
+ case '*': return $a * $b;
+ case '/': return $a / $b;
+ }
+ }
+
+ public static function clamp($val, $max = 1){
+ return min( max($val, 0), $max);
+ }
+
+ public static function fround( $value ){
+
+ if( $value === 0 ){
+ return $value;
+ }
+
+ if( Less_Parser::$options['numPrecision'] ){
+ $p = pow(10, Less_Parser::$options['numPrecision']);
+ return round( $value * $p) / $p;
+ }
+ return $value;
+ }
+
+ public static function number($n){
+
+ if ($n instanceof Less_Tree_Dimension) {
+ return floatval( $n->unit->is('%') ? $n->value / 100 : $n->value);
+ } else if (is_numeric($n)) {
+ return $n;
+ } else {
+ throw new Less_Exception_Compiler("color functions take numbers as parameters");
+ }
+ }
+
+ public static function scaled($n, $size = 255 ){
+ if( $n instanceof Less_Tree_Dimension && $n->unit->is('%') ){
+ return (float)$n->value * $size / 100;
+ } else {
+ return Less_Functions::number($n);
+ }
+ }
+
+ public function rgb ($r = null, $g = null, $b = null){
+ if (is_null($r) || is_null($g) || is_null($b)) {
+ throw new Less_Exception_Compiler("rgb expects three parameters");
+ }
+ return $this->rgba($r, $g, $b, 1.0);
+ }
+
+ public function rgba($r = null, $g = null, $b = null, $a = null){
+ $rgb = array($r, $g, $b);
+ $rgb = array_map(array('Less_Functions','scaled'),$rgb);
+
+ $a = self::number($a);
+ return new Less_Tree_Color($rgb, $a);
+ }
+
+ public function hsl($h, $s, $l){
+ return $this->hsla($h, $s, $l, 1.0);
+ }
+
+ public function hsla($h, $s, $l, $a){
+
+ $h = fmod(self::number($h), 360) / 360; // Classic % operator will change float to int
+ $s = self::clamp(self::number($s));
+ $l = self::clamp(self::number($l));
+ $a = self::clamp(self::number($a));
+
+ $m2 = $l <= 0.5 ? $l * ($s + 1) : $l + $s - $l * $s;
+
+ $m1 = $l * 2 - $m2;
+
+ return $this->rgba( self::hsla_hue($h + 1/3, $m1, $m2) * 255,
+ self::hsla_hue($h, $m1, $m2) * 255,
+ self::hsla_hue($h - 1/3, $m1, $m2) * 255,
+ $a);
+ }
+
+ /**
+ * @param double $h
+ */
+ public function hsla_hue($h, $m1, $m2){
+ $h = $h < 0 ? $h + 1 : ($h > 1 ? $h - 1 : $h);
+ if ($h * 6 < 1) return $m1 + ($m2 - $m1) * $h * 6;
+ else if ($h * 2 < 1) return $m2;
+ else if ($h * 3 < 2) return $m1 + ($m2 - $m1) * (2/3 - $h) * 6;
+ else return $m1;
+ }
+
+ public function hsv($h, $s, $v) {
+ return $this->hsva($h, $s, $v, 1.0);
+ }
+
+ /**
+ * @param double $a
+ */
+ public function hsva($h, $s, $v, $a) {
+ $h = ((Less_Functions::number($h) % 360) / 360 ) * 360;
+ $s = Less_Functions::number($s);
+ $v = Less_Functions::number($v);
+ $a = Less_Functions::number($a);
+
+ $i = floor(($h / 60) % 6);
+ $f = ($h / 60) - $i;
+
+ $vs = array( $v,
+ $v * (1 - $s),
+ $v * (1 - $f * $s),
+ $v * (1 - (1 - $f) * $s));
+
+ $perm = array(array(0, 3, 1),
+ array(2, 0, 1),
+ array(1, 0, 3),
+ array(1, 2, 0),
+ array(3, 1, 0),
+ array(0, 1, 2));
+
+ return $this->rgba($vs[$perm[$i][0]] * 255,
+ $vs[$perm[$i][1]] * 255,
+ $vs[$perm[$i][2]] * 255,
+ $a);
+ }
+
+ public function hue($color = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to hue must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $c = $color->toHSL();
+ return new Less_Tree_Dimension(Less_Parser::round($c['h']));
+ }
+
+ public function saturation($color = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to saturation must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $c = $color->toHSL();
+ return new Less_Tree_Dimension(Less_Parser::round($c['s'] * 100), '%');
+ }
+
+ public function lightness($color = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to lightness must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $c = $color->toHSL();
+ return new Less_Tree_Dimension(Less_Parser::round($c['l'] * 100), '%');
+ }
+
+ public function hsvhue( $color = null ){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to hsvhue must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsv = $color->toHSV();
+ return new Less_Tree_Dimension( Less_Parser::round($hsv['h']) );
+ }
+
+
+ public function hsvsaturation( $color = null ){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to hsvsaturation must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsv = $color->toHSV();
+ return new Less_Tree_Dimension( Less_Parser::round($hsv['s'] * 100), '%' );
+ }
+
+ public function hsvvalue( $color = null ){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to hsvvalue must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsv = $color->toHSV();
+ return new Less_Tree_Dimension( Less_Parser::round($hsv['v'] * 100), '%' );
+ }
+
+ public function red($color = null) {
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to red must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return new Less_Tree_Dimension( $color->rgb[0] );
+ }
+
+ public function green($color = null) {
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to green must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return new Less_Tree_Dimension( $color->rgb[1] );
+ }
+
+ public function blue($color = null) {
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to blue must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return new Less_Tree_Dimension( $color->rgb[2] );
+ }
+
+ public function alpha($color = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to alpha must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $c = $color->toHSL();
+ return new Less_Tree_Dimension($c['a']);
+ }
+
+ public function luma ($color = null) {
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to luma must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return new Less_Tree_Dimension(Less_Parser::round( $color->luma() * $color->alpha * 100), '%');
+ }
+
+ public function luminance( $color = null ){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to luminance must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $luminance =
+ (0.2126 * $color->rgb[0] / 255)
+ + (0.7152 * $color->rgb[1] / 255)
+ + (0.0722 * $color->rgb[2] / 255);
+
+ return new Less_Tree_Dimension(Less_Parser::round( $luminance * $color->alpha * 100), '%');
+ }
+
+ public function saturate($color = null, $amount = null){
+ // filter: saturate(3.2);
+ // should be kept as is, so check for color
+ if ($color instanceof Less_Tree_Dimension) {
+ return null;
+ }
+
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to saturate must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$amount instanceof Less_Tree_Dimension) {
+ throw new Less_Exception_Compiler('The second argument to saturate must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsl = $color->toHSL();
+
+ $hsl['s'] += $amount->value / 100;
+ $hsl['s'] = self::clamp($hsl['s']);
+
+ return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']);
+ }
+
+ /**
+ * @param Less_Tree_Dimension $amount
+ */
+ public function desaturate($color = null, $amount = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to desaturate must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$amount instanceof Less_Tree_Dimension) {
+ throw new Less_Exception_Compiler('The second argument to desaturate must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsl = $color->toHSL();
+
+ $hsl['s'] -= $amount->value / 100;
+ $hsl['s'] = self::clamp($hsl['s']);
+
+ return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']);
+ }
+
+
+
+ public function lighten($color = null, $amount=null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to lighten must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$amount instanceof Less_Tree_Dimension) {
+ throw new Less_Exception_Compiler('The second argument to lighten must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsl = $color->toHSL();
+
+ $hsl['l'] += $amount->value / 100;
+ $hsl['l'] = self::clamp($hsl['l']);
+
+ return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']);
+ }
+
+ public function darken($color = null, $amount = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to darken must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$amount instanceof Less_Tree_Dimension) {
+ throw new Less_Exception_Compiler('The second argument to darken must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsl = $color->toHSL();
+ $hsl['l'] -= $amount->value / 100;
+ $hsl['l'] = self::clamp($hsl['l']);
+
+ return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']);
+ }
+
+ public function fadein($color = null, $amount = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to fadein must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$amount instanceof Less_Tree_Dimension) {
+ throw new Less_Exception_Compiler('The second argument to fadein must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsl = $color->toHSL();
+ $hsl['a'] += $amount->value / 100;
+ $hsl['a'] = self::clamp($hsl['a']);
+ return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']);
+ }
+
+ public function fadeout($color = null, $amount = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to fadeout must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$amount instanceof Less_Tree_Dimension) {
+ throw new Less_Exception_Compiler('The second argument to fadeout must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsl = $color->toHSL();
+ $hsl['a'] -= $amount->value / 100;
+ $hsl['a'] = self::clamp($hsl['a']);
+ return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']);
+ }
+
+ public function fade($color = null, $amount = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to fade must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$amount instanceof Less_Tree_Dimension) {
+ throw new Less_Exception_Compiler('The second argument to fade must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsl = $color->toHSL();
+
+ $hsl['a'] = $amount->value / 100;
+ $hsl['a'] = self::clamp($hsl['a']);
+ return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']);
+ }
+
+
+
+ public function spin($color = null, $amount = null){
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to spin must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$amount instanceof Less_Tree_Dimension) {
+ throw new Less_Exception_Compiler('The second argument to spin must be a number' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $hsl = $color->toHSL();
+ $hue = fmod($hsl['h'] + $amount->value, 360);
+
+ $hsl['h'] = $hue < 0 ? 360 + $hue : $hue;
+
+ return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']);
+ }
+
+ //
+ // Copyright (c) 2006-2009 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein
+ // http://sass-lang.com
+ //
+
+ /**
+ * @param Less_Tree_Color $color1
+ */
+ public function mix($color1 = null, $color2 = null, $weight = null){
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to mix must be a color' . ($color1 instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to mix must be a color' . ($color2 instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$weight) {
+ $weight = new Less_Tree_Dimension('50', '%');
+ }
+ if (!$weight instanceof Less_Tree_Dimension) {
+ throw new Less_Exception_Compiler('The third argument to contrast must be a percentage' . ($weight instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ $p = $weight->value / 100.0;
+ $w = $p * 2 - 1;
+ $hsl1 = $color1->toHSL();
+ $hsl2 = $color2->toHSL();
+ $a = $hsl1['a'] - $hsl2['a'];
+
+ $w1 = (((($w * $a) == -1) ? $w : ($w + $a) / (1 + $w * $a)) + 1) / 2;
+ $w2 = 1 - $w1;
+
+ $rgb = array($color1->rgb[0] * $w1 + $color2->rgb[0] * $w2,
+ $color1->rgb[1] * $w1 + $color2->rgb[1] * $w2,
+ $color1->rgb[2] * $w1 + $color2->rgb[2] * $w2);
+
+ $alpha = $color1->alpha * $p + $color2->alpha * (1 - $p);
+
+ return new Less_Tree_Color($rgb, $alpha);
+ }
+
+ public function greyscale($color){
+ return $this->desaturate($color, new Less_Tree_Dimension(100,'%'));
+ }
+
+
+ public function contrast( $color, $dark = null, $light = null, $threshold = null){
+ // filter: contrast(3.2);
+ // should be kept as is, so check for color
+ if (!$color instanceof Less_Tree_Color) {
+ return null;
+ }
+ if( !$light ){
+ $light = $this->rgba(255, 255, 255, 1.0);
+ }
+ if( !$dark ){
+ $dark = $this->rgba(0, 0, 0, 1.0);
+ }
+
+ if (!$dark instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to contrast must be a color' . ($dark instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$light instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The third argument to contrast must be a color' . ($light instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ //Figure out which is actually light and dark!
+ if( $dark->luma() > $light->luma() ){
+ $t = $light;
+ $light = $dark;
+ $dark = $t;
+ }
+ if( !$threshold ){
+ $threshold = 0.43;
+ } else {
+ $threshold = Less_Functions::number($threshold);
+ }
+
+ if( $color->luma() < $threshold ){
+ return $light;
+ } else {
+ return $dark;
+ }
+ }
+
+ public function e ($str){
+ if( is_string($str) ){
+ return new Less_Tree_Anonymous($str);
+ }
+ return new Less_Tree_Anonymous($str instanceof Less_Tree_JavaScript ? $str->expression : $str->value);
+ }
+
+ public function escape ($str){
+
+ $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'",'%3F'=>'?','%26'=>'&','%2C'=>',','%2F'=>'/','%40'=>'@','%2B'=>'+','%24'=>'$');
+
+ return new Less_Tree_Anonymous(strtr(rawurlencode($str->value), $revert));
+ }
+
+
+ /**
+ * todo: This function will need some additional work to make it work the same as less.js
+ *
+ */
+ public function replace( $string, $pattern, $replacement, $flags = null ){
+ $result = $string->value;
+
+ $expr = '/'.str_replace('/','\\/',$pattern->value).'/';
+ if( $flags && $flags->value){
+ $expr .= self::replace_flags($flags->value);
+ }
+
+ $result = preg_replace($expr,$replacement->value,$result);
+
+
+ if( property_exists($string,'quote') ){
+ return new Less_Tree_Quoted( $string->quote, $result, $string->escaped);
+ }
+ return new Less_Tree_Quoted( '', $result );
+ }
+
+ public static function replace_flags($flags){
+ $flags = str_split($flags,1);
+ $new_flags = '';
+
+ foreach($flags as $flag){
+ switch($flag){
+ case 'e':
+ case 'g':
+ break;
+
+ default:
+ $new_flags .= $flag;
+ break;
+ }
+ }
+
+ return $new_flags;
+ }
+
+ public function _percent(){
+ $string = func_get_arg(0);
+
+ $args = func_get_args();
+ array_shift($args);
+ $result = $string->value;
+
+ foreach($args as $arg){
+ if( preg_match('/%[sda]/i',$result, $token) ){
+ $token = $token[0];
+ $value = stristr($token, 's') ? $arg->value : $arg->toCSS();
+ $value = preg_match('/[A-Z]$/', $token) ? urlencode($value) : $value;
+ $result = preg_replace('/%[sda]/i',$value, $result, 1);
+ }
+ }
+ $result = str_replace('%%', '%', $result);
+
+ return new Less_Tree_Quoted( $string->quote , $result, $string->escaped);
+ }
+
+ public function unit( $val, $unit = null) {
+ if( !($val instanceof Less_Tree_Dimension) ){
+ throw new Less_Exception_Compiler('The first argument to unit must be a number' . ($val instanceof Less_Tree_Operation ? '. Have you forgotten parenthesis?' : '.') );
+ }
+
+ if( $unit ){
+ if( $unit instanceof Less_Tree_Keyword ){
+ $unit = $unit->value;
+ } else {
+ $unit = $unit->toCSS();
+ }
+ } else {
+ $unit = "";
+ }
+ return new Less_Tree_Dimension($val->value, $unit );
+ }
+
+ public function convert($val, $unit){
+ return $val->convertTo($unit->value);
+ }
+
+ public function round($n, $f = false) {
+
+ $fraction = 0;
+ if( $f !== false ){
+ $fraction = $f->value;
+ }
+
+ return $this->_math('Less_Parser::round',null, $n, $fraction);
+ }
+
+ public function pi(){
+ return new Less_Tree_Dimension(M_PI);
+ }
+
+ public function mod($a, $b) {
+ return new Less_Tree_Dimension( $a->value % $b->value, $a->unit);
+ }
+
+
+
+ public function pow($x, $y) {
+ if( is_numeric($x) && is_numeric($y) ){
+ $x = new Less_Tree_Dimension($x);
+ $y = new Less_Tree_Dimension($y);
+ }elseif( !($x instanceof Less_Tree_Dimension) || !($y instanceof Less_Tree_Dimension) ){
+ throw new Less_Exception_Compiler('Arguments must be numbers');
+ }
+
+ return new Less_Tree_Dimension( pow($x->value, $y->value), $x->unit );
+ }
+
+ // var mathFunctions = [{name:"ce ...
+ public function ceil( $n ){ return $this->_math('ceil', null, $n); }
+ public function floor( $n ){ return $this->_math('floor', null, $n); }
+ public function sqrt( $n ){ return $this->_math('sqrt', null, $n); }
+ public function abs( $n ){ return $this->_math('abs', null, $n); }
+
+ public function tan( $n ){ return $this->_math('tan', '', $n); }
+ public function sin( $n ){ return $this->_math('sin', '', $n); }
+ public function cos( $n ){ return $this->_math('cos', '', $n); }
+
+ public function atan( $n ){ return $this->_math('atan', 'rad', $n); }
+ public function asin( $n ){ return $this->_math('asin', 'rad', $n); }
+ public function acos( $n ){ return $this->_math('acos', 'rad', $n); }
+
+ private function _math() {
+ $args = func_get_args();
+ $fn = array_shift($args);
+ $unit = array_shift($args);
+
+ if ($args[0] instanceof Less_Tree_Dimension) {
+
+ if( $unit === null ){
+ $unit = $args[0]->unit;
+ }else{
+ $args[0] = $args[0]->unify();
+ }
+ $args[0] = (float)$args[0]->value;
+ return new Less_Tree_Dimension( call_user_func_array($fn, $args), $unit);
+ } else if (is_numeric($args[0])) {
+ return call_user_func_array($fn,$args);
+ } else {
+ throw new Less_Exception_Compiler("math functions take numbers as parameters");
+ }
+ }
+
+ /**
+ * @param boolean $isMin
+ */
+ private function _minmax( $isMin, $args ){
+
+ $arg_count = count($args);
+
+ if( $arg_count < 1 ){
+ throw new Less_Exception_Compiler( 'one or more arguments required');
+ }
+
+ $j = null;
+ $unitClone = null;
+ $unitStatic = null;
+
+
+ $order = array(); // elems only contains original argument values.
+ $values = array(); // key is the unit.toString() for unified tree.Dimension values,
+ // value is the index into the order array.
+
+
+ for( $i = 0; $i < $arg_count; $i++ ){
+ $current = $args[$i];
+ if( !($current instanceof Less_Tree_Dimension) ){
+ if( is_array($args[$i]->value) ){
+ $args[] = $args[$i]->value;
+ }
+ continue;
+ }
+
+ if( $current->unit->toString() === '' && !$unitClone ){
+ $temp = new Less_Tree_Dimension($current->value, $unitClone);
+ $currentUnified = $temp->unify();
+ }else{
+ $currentUnified = $current->unify();
+ }
+
+ if( $currentUnified->unit->toString() === "" && !$unitStatic ){
+ $unit = $unitStatic;
+ }else{
+ $unit = $currentUnified->unit->toString();
+ }
+
+ if( $unit !== '' && !$unitStatic || $unit !== '' && $order[0]->unify()->unit->toString() === "" ){
+ $unitStatic = $unit;
+ }
+
+ if( $unit != '' && !$unitClone ){
+ $unitClone = $current->unit->toString();
+ }
+
+ if( isset($values['']) && $unit !== '' && $unit === $unitStatic ){
+ $j = $values[''];
+ }elseif( isset($values[$unit]) ){
+ $j = $values[$unit];
+ }else{
+
+ if( $unitStatic && $unit !== $unitStatic ){
+ throw new Less_Exception_Compiler( 'incompatible types');
+ }
+ $values[$unit] = count($order);
+ $order[] = $current;
+ continue;
+ }
+
+
+ if( $order[$j]->unit->toString() === "" && $unitClone ){
+ $temp = new Less_Tree_Dimension( $order[$j]->value, $unitClone);
+ $referenceUnified = $temp->unify();
+ }else{
+ $referenceUnified = $order[$j]->unify();
+ }
+ if( ($isMin && $currentUnified->value < $referenceUnified->value) || (!$isMin && $currentUnified->value > $referenceUnified->value) ){
+ $order[$j] = $current;
+ }
+ }
+
+ if( count($order) == 1 ){
+ return $order[0];
+ }
+ $args = array();
+ foreach($order as $a){
+ $args[] = $a->toCSS($this->env);
+ }
+ return new Less_Tree_Anonymous( ($isMin?'min(':'max(') . implode(Less_Environment::$_outputMap[','],$args).')');
+ }
+
+ public function min(){
+ $args = func_get_args();
+ return $this->_minmax( true, $args );
+ }
+
+ public function max(){
+ $args = func_get_args();
+ return $this->_minmax( false, $args );
+ }
+
+ public function getunit($n){
+ return new Less_Tree_Anonymous($n->unit);
+ }
+
+ public function argb($color) {
+ if (!$color instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to argb must be a color' . ($dark instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return new Less_Tree_Anonymous($color->toARGB());
+ }
+
+ public function percentage($n) {
+ return new Less_Tree_Dimension($n->value * 100, '%');
+ }
+
+ public function color($n) {
+
+ if( $n instanceof Less_Tree_Quoted ){
+ $colorCandidate = $n->value;
+ $returnColor = Less_Tree_Color::fromKeyword($colorCandidate);
+ if( $returnColor ){
+ return $returnColor;
+ }
+ if( preg_match('/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/',$colorCandidate) ){
+ return new Less_Tree_Color(substr($colorCandidate, 1));
+ }
+ throw new Less_Exception_Compiler("argument must be a color keyword or 3/6 digit hex e.g. #FFF");
+ } else {
+ throw new Less_Exception_Compiler("argument must be a string");
+ }
+ }
+
+
+ public function iscolor($n) {
+ return $this->_isa($n, 'Less_Tree_Color');
+ }
+
+ public function isnumber($n) {
+ return $this->_isa($n, 'Less_Tree_Dimension');
+ }
+
+ public function isstring($n) {
+ return $this->_isa($n, 'Less_Tree_Quoted');
+ }
+
+ public function iskeyword($n) {
+ return $this->_isa($n, 'Less_Tree_Keyword');
+ }
+
+ public function isurl($n) {
+ return $this->_isa($n, 'Less_Tree_Url');
+ }
+
+ public function ispixel($n) {
+ return $this->isunit($n, 'px');
+ }
+
+ public function ispercentage($n) {
+ return $this->isunit($n, '%');
+ }
+
+ public function isem($n) {
+ return $this->isunit($n, 'em');
+ }
+
+ /**
+ * @param string $unit
+ */
+ public function isunit( $n, $unit ){
+ return ($n instanceof Less_Tree_Dimension) && $n->unit->is( ( property_exists($unit,'value') ? $unit->value : $unit) ) ? new Less_Tree_Keyword('true') : new Less_Tree_Keyword('false');
+ }
+
+ /**
+ * @param string $type
+ */
+ private function _isa($n, $type) {
+ return is_a($n, $type) ? new Less_Tree_Keyword('true') : new Less_Tree_Keyword('false');
+ }
+
+ public function tint($color, $amount) {
+ return $this->mix( $this->rgb(255,255,255), $color, $amount);
+ }
+
+ public function shade($color, $amount) {
+ return $this->mix($this->rgb(0, 0, 0), $color, $amount);
+ }
+
+ public function extract($values, $index ){
+ $index = (int)$index->value - 1; // (1-based index)
+ // handle non-array values as an array of length 1
+ // return 'undefined' if index is invalid
+ if( property_exists($values,'value') && is_array($values->value) ){
+ if( isset($values->value[$index]) ){
+ return $values->value[$index];
+ }
+ return null;
+
+ }elseif( (int)$index === 0 ){
+ return $values;
+ }
+
+ return null;
+ }
+
+ public function length($values){
+ $n = (property_exists($values,'value') && is_array($values->value)) ? count($values->value) : 1;
+ return new Less_Tree_Dimension($n);
+ }
+
+ public function datauri($mimetypeNode, $filePathNode = null ) {
+
+ $filePath = ( $filePathNode ? $filePathNode->value : null );
+ $mimetype = $mimetypeNode->value;
+
+ $args = 2;
+ if( !$filePath ){
+ $filePath = $mimetype;
+ $args = 1;
+ }
+
+ $filePath = str_replace('\\','/',$filePath);
+ if( Less_Environment::isPathRelative($filePath) ){
+
+ if( Less_Parser::$options['relativeUrls'] ){
+ $temp = $this->currentFileInfo['currentDirectory'];
+ } else {
+ $temp = $this->currentFileInfo['entryPath'];
+ }
+
+ if( !empty($temp) ){
+ $filePath = Less_Environment::normalizePath(rtrim($temp,'/').'/'.$filePath);
+ }
+
+ }
+
+
+ // detect the mimetype if not given
+ if( $args < 2 ){
+
+ /* incomplete
+ $mime = require('mime');
+ mimetype = mime.lookup(path);
+
+ // use base 64 unless it's an ASCII or UTF-8 format
+ var charset = mime.charsets.lookup(mimetype);
+ useBase64 = ['US-ASCII', 'UTF-8'].indexOf(charset) < 0;
+ if (useBase64) mimetype += ';base64';
+ */
+
+ $mimetype = Less_Mime::lookup($filePath);
+
+ $charset = Less_Mime::charsets_lookup($mimetype);
+ $useBase64 = !in_array($charset,array('US-ASCII', 'UTF-8'));
+ if( $useBase64 ){ $mimetype .= ';base64'; }
+
+ }else{
+ $useBase64 = preg_match('/;base64$/',$mimetype);
+ }
+
+
+ if( file_exists($filePath) ){
+ $buf = @file_get_contents($filePath);
+ }else{
+ $buf = false;
+ }
+
+
+ // IE8 cannot handle a data-uri larger than 32KB. If this is exceeded
+ // and the --ieCompat flag is enabled, return a normal url() instead.
+ $DATA_URI_MAX_KB = 32;
+ $fileSizeInKB = round( strlen($buf) / 1024 );
+ if( $fileSizeInKB >= $DATA_URI_MAX_KB ){
+ $url = new Less_Tree_Url( ($filePathNode ? $filePathNode : $mimetypeNode), $this->currentFileInfo);
+ return $url->compile($this);
+ }
+
+ if( $buf ){
+ $buf = $useBase64 ? base64_encode($buf) : rawurlencode($buf);
+ $filePath = '"data:' . $mimetype . ',' . $buf . '"';
+ }
+
+ return new Less_Tree_Url( new Less_Tree_Anonymous($filePath) );
+ }
+
+ //svg-gradient
+ public function svggradient( $direction ){
+
+ $throw_message = 'svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position]';
+ $arguments = func_get_args();
+
+ if( count($arguments) < 3 ){
+ throw new Less_Exception_Compiler( $throw_message );
+ }
+
+ $stops = array_slice($arguments,1);
+ $gradientType = 'linear';
+ $rectangleDimension = 'x="0" y="0" width="1" height="1"';
+ $useBase64 = true;
+ $directionValue = $direction->toCSS();
+
+
+ switch( $directionValue ){
+ case "to bottom":
+ $gradientDirectionSvg = 'x1="0%" y1="0%" x2="0%" y2="100%"';
+ break;
+ case "to right":
+ $gradientDirectionSvg = 'x1="0%" y1="0%" x2="100%" y2="0%"';
+ break;
+ case "to bottom right":
+ $gradientDirectionSvg = 'x1="0%" y1="0%" x2="100%" y2="100%"';
+ break;
+ case "to top right":
+ $gradientDirectionSvg = 'x1="0%" y1="100%" x2="100%" y2="0%"';
+ break;
+ case "ellipse":
+ case "ellipse at center":
+ $gradientType = "radial";
+ $gradientDirectionSvg = 'cx="50%" cy="50%" r="75%"';
+ $rectangleDimension = 'x="-50" y="-50" width="101" height="101"';
+ break;
+ default:
+ throw new Less_Exception_Compiler( "svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center'" );
+ }
+
+ $returner = '<?xml version="1.0" ?>' .
+ '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none">' .
+ '<' . $gradientType . 'Gradient id="gradient" gradientUnits="userSpaceOnUse" ' . $gradientDirectionSvg . '>';
+
+ for( $i = 0; $i < count($stops); $i++ ){
+ if( is_object($stops[$i]) && property_exists($stops[$i],'value') ){
+ $color = $stops[$i]->value[0];
+ $position = $stops[$i]->value[1];
+ }else{
+ $color = $stops[$i];
+ $position = null;
+ }
+
+ if( !($color instanceof Less_Tree_Color) || (!(($i === 0 || $i+1 === count($stops)) && $position === null) && !($position instanceof Less_Tree_Dimension)) ){
+ throw new Less_Exception_Compiler( $throw_message );
+ }
+ if( $position ){
+ $positionValue = $position->toCSS();
+ }elseif( $i === 0 ){
+ $positionValue = '0%';
+ }else{
+ $positionValue = '100%';
+ }
+ $alpha = $color->alpha;
+ $returner .= '<stop offset="' . $positionValue . '" stop-color="' . $color->toRGB() . '"' . ($alpha < 1 ? ' stop-opacity="' . $alpha . '"' : '') . '/>';
+ }
+
+ $returner .= '</' . $gradientType . 'Gradient><rect ' . $rectangleDimension . ' fill="url(#gradient)" /></svg>';
+
+
+ if( $useBase64 ){
+ $returner = "'data:image/svg+xml;base64,".base64_encode($returner)."'";
+ }else{
+ $returner = "'data:image/svg+xml,".$returner."'";
+ }
+
+ return new Less_Tree_URL( new Less_Tree_Anonymous( $returner ) );
+ }
+
+
+ /**
+ * Php version of javascript's `encodeURIComponent` function
+ *
+ * @param string $string The string to encode
+ * @return string The encoded string
+ */
+ public static function encodeURIComponent($string){
+ $revert = array('%21' => '!', '%2A' => '*', '%27' => "'", '%28' => '(', '%29' => ')');
+ return strtr(rawurlencode($string), $revert);
+ }
+
+
+ // Color Blending
+ // ref: http://www.w3.org/TR/compositing-1
+
+ public function colorBlend( $mode, $color1, $color2 ){
+ $ab = $color1->alpha; // backdrop
+ $as = $color2->alpha; // source
+ $r = array(); // result
+
+ $ar = $as + $ab * (1 - $as);
+ for( $i = 0; $i < 3; $i++ ){
+ $cb = $color1->rgb[$i] / 255;
+ $cs = $color2->rgb[$i] / 255;
+ $cr = call_user_func( $mode, $cb, $cs );
+ if( $ar ){
+ $cr = ($as * $cs + $ab * ($cb - $as * ($cb + $cs - $cr))) / $ar;
+ }
+ $r[$i] = $cr * 255;
+ }
+
+ return new Less_Tree_Color($r, $ar);
+ }
+
+ public function multiply($color1 = null, $color2 = null ){
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to multiply must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to multiply must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return $this->colorBlend( array($this,'colorBlendMultiply'), $color1, $color2 );
+ }
+
+ private function colorBlendMultiply($cb, $cs){
+ return $cb * $cs;
+ }
+
+ public function screen($color1 = null, $color2 = null ){
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to screen must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to screen must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return $this->colorBlend( array($this,'colorBlendScreen'), $color1, $color2 );
+ }
+
+ private function colorBlendScreen( $cb, $cs){
+ return $cb + $cs - $cb * $cs;
+ }
+
+ public function overlay($color1 = null, $color2 = null){
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to overlay must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to overlay must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return $this->colorBlend( array($this,'colorBlendOverlay'), $color1, $color2 );
+ }
+
+ private function colorBlendOverlay($cb, $cs ){
+ $cb *= 2;
+ return ($cb <= 1)
+ ? $this->colorBlendMultiply($cb, $cs)
+ : $this->colorBlendScreen($cb - 1, $cs);
+ }
+
+ public function softlight($color1 = null, $color2 = null){
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to softlight must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to softlight must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return $this->colorBlend( array($this,'colorBlendSoftlight'), $color1, $color2 );
+ }
+
+ private function colorBlendSoftlight($cb, $cs ){
+ $d = 1;
+ $e = $cb;
+ if( $cs > 0.5 ){
+ $e = 1;
+ $d = ($cb > 0.25) ? sqrt($cb)
+ : ((16 * $cb - 12) * $cb + 4) * $cb;
+ }
+ return $cb - (1 - 2 * $cs) * $e * ($d - $cb);
+ }
+
+ public function hardlight($color1 = null, $color2 = null){
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to hardlight must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to hardlight must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return $this->colorBlend( array($this,'colorBlendHardlight'), $color1, $color2 );
+ }
+
+ private function colorBlendHardlight( $cb, $cs ){
+ return $this->colorBlendOverlay($cs, $cb);
+ }
+
+ public function difference($color1 = null, $color2 = null) {
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to difference must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to difference must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return $this->colorBlend( array($this,'colorBlendDifference'), $color1, $color2 );
+ }
+
+ private function colorBlendDifference( $cb, $cs ){
+ return abs($cb - $cs);
+ }
+
+ public function exclusion( $color1 = null, $color2 = null ){
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to exclusion must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to exclusion must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return $this->colorBlend( array($this,'colorBlendExclusion'), $color1, $color2 );
+ }
+
+ private function colorBlendExclusion( $cb, $cs ){
+ return $cb + $cs - 2 * $cb * $cs;
+ }
+
+ public function average($color1 = null, $color2 = null){
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to average must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to average must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return $this->colorBlend( array($this,'colorBlendAverage'), $color1, $color2 );
+ }
+
+ // non-w3c functions:
+ public function colorBlendAverage($cb, $cs ){
+ return ($cb + $cs) / 2;
+ }
+
+ public function negation($color1 = null, $color2 = null ){
+ if (!$color1 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The first argument to negation must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+ if (!$color2 instanceof Less_Tree_Color) {
+ throw new Less_Exception_Compiler('The second argument to negation must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') );
+ }
+
+ return $this->colorBlend( array($this,'colorBlendNegation'), $color1, $color2 );
+ }
+
+ public function colorBlendNegation($cb, $cs){
+ return 1 - abs($cb + $cs - 1);
+ }
+
+ // ~ End of Color Blending
+
+}
+
+
+/**
+ * Mime lookup
+ *
+ * @package Less
+ * @subpackage node
+ */
+class Less_Mime{
+
+ // this map is intentionally incomplete
+ // if you want more, install 'mime' dep
+ static $_types = array(
+ '.htm' => 'text/html',
+ '.html'=> 'text/html',
+ '.gif' => 'image/gif',
+ '.jpg' => 'image/jpeg',
+ '.jpeg'=> 'image/jpeg',
+ '.png' => 'image/png',
+ '.ttf' => 'application/x-font-ttf',
+ '.otf' => 'application/x-font-otf',
+ '.eot' => 'application/vnd.ms-fontobject',
+ '.woff' => 'application/x-font-woff',
+ '.svg' => 'image/svg+xml',
+ );
+
+ public static function lookup( $filepath ){
+ $parts = explode('.',$filepath);
+ $ext = '.'.strtolower(array_pop($parts));
+
+ if( !isset(self::$_types[$ext]) ){
+ return null;
+ }
+ return self::$_types[$ext];
+ }
+
+ public static function charsets_lookup( $type = null ){
+ // assumes all text types are UTF-8
+ return $type && preg_match('/^text\//',$type) ? 'UTF-8' : '';
+ }
+}
+
+
+/**
+ * Tree
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree{
+
+ public $cache_string;
+
+ public function toCSS(){
+ $output = new Less_Output();
+ $this->genCSS($output);
+ return $output->toString();
+ }
+
+
+ /**
+ * Generate CSS by adding it to the output object
+ *
+ * @param Less_Output $output The output
+ * @return void
+ */
+ public function genCSS($output){}
+
+
+ /**
+ * @param Less_Tree_Ruleset[] $rules
+ */
+ public static function outputRuleset( $output, $rules ){
+
+ $ruleCnt = count($rules);
+ Less_Environment::$tabLevel++;
+
+
+ // Compressed
+ if( Less_Parser::$options['compress'] ){
+ $output->add('{');
+ for( $i = 0; $i < $ruleCnt; $i++ ){
+ $rules[$i]->genCSS( $output );
+ }
+
+ $output->add( '}' );
+ Less_Environment::$tabLevel--;
+ return;
+ }
+
+
+ // Non-compressed
+ $tabSetStr = "\n".str_repeat( ' ' , Less_Environment::$tabLevel-1 );
+ $tabRuleStr = $tabSetStr.' ';
+
+ $output->add( " {" );
+ for($i = 0; $i < $ruleCnt; $i++ ){
+ $output->add( $tabRuleStr );
+ $rules[$i]->genCSS( $output );
+ }
+ Less_Environment::$tabLevel--;
+ $output->add( $tabSetStr.'}' );
+
+ }
+
+ public function accept($visitor){}
+
+
+ public static function ReferencedArray($rules){
+ foreach($rules as $rule){
+ if( method_exists($rule, 'markReferenced') ){
+ $rule->markReferenced();
+ }
+ }
+ }
+
+
+ /**
+ * Requires php 5.3+
+ */
+ public static function __set_state($args){
+
+ $class = get_called_class();
+ $obj = new $class(null,null,null,null);
+ foreach($args as $key => $val){
+ $obj->$key = $val;
+ }
+ return $obj;
+ }
+
+}
+
+/**
+ * Parser output
+ *
+ * @package Less
+ * @subpackage output
+ */
+class Less_Output{
+
+ /**
+ * Output holder
+ *
+ * @var string
+ */
+ protected $strs = array();
+
+ /**
+ * Adds a chunk to the stack
+ *
+ * @param string $chunk The chunk to output
+ * @param Less_FileInfo $fileInfo The file information
+ * @param integer $index The index
+ * @param mixed $mapLines
+ */
+ public function add($chunk, $fileInfo = null, $index = 0, $mapLines = null){
+ $this->strs[] = $chunk;
+ }
+
+ /**
+ * Is the output empty?
+ *
+ * @return boolean
+ */
+ public function isEmpty(){
+ return count($this->strs) === 0;
+ }
+
+
+ /**
+ * Converts the output to string
+ *
+ * @return string
+ */
+ public function toString(){
+ return implode('',$this->strs);
+ }
+
+}
+
+/**
+ * Visitor
+ *
+ * @package Less
+ * @subpackage visitor
+ */
+class Less_Visitor{
+
+ protected $methods = array();
+ protected $_visitFnCache = array();
+
+ public function __construct(){
+ $this->_visitFnCache = get_class_methods(get_class($this));
+ $this->_visitFnCache = array_flip($this->_visitFnCache);
+ }
+
+ public function visitObj( $node ){
+
+ $funcName = 'visit'.$node->type;
+ if( isset($this->_visitFnCache[$funcName]) ){
+
+ $visitDeeper = true;
+ $this->$funcName( $node, $visitDeeper );
+
+ if( $visitDeeper ){
+ $node->accept($this);
+ }
+
+ $funcName = $funcName . "Out";
+ if( isset($this->_visitFnCache[$funcName]) ){
+ $this->$funcName( $node );
+ }
+
+ }else{
+ $node->accept($this);
+ }
+
+ return $node;
+ }
+
+ public function visitArray( $nodes ){
+
+ array_map( array($this,'visitObj'), $nodes);
+ return $nodes;
+ }
+}
+
+
+
+/**
+ * Replacing Visitor
+ *
+ * @package Less
+ * @subpackage visitor
+ */
+class Less_VisitorReplacing extends Less_Visitor{
+
+ public function visitObj( $node ){
+
+ $funcName = 'visit'.$node->type;
+ if( isset($this->_visitFnCache[$funcName]) ){
+
+ $visitDeeper = true;
+ $node = $this->$funcName( $node, $visitDeeper );
+
+ if( $node ){
+ if( $visitDeeper && is_object($node) ){
+ $node->accept($this);
+ }
+
+ $funcName = $funcName . "Out";
+ if( isset($this->_visitFnCache[$funcName]) ){
+ $this->$funcName( $node );
+ }
+ }
+
+ }else{
+ $node->accept($this);
+ }
+
+ return $node;
+ }
+
+ public function visitArray( $nodes ){
+
+ $newNodes = array();
+ foreach($nodes as $node){
+ $evald = $this->visitObj($node);
+ if( $evald ){
+ if( is_array($evald) ){
+ self::flatten($evald,$newNodes);
+ }else{
+ $newNodes[] = $evald;
+ }
+ }
+ }
+ return $newNodes;
+ }
+
+ public function flatten( $arr, &$out ){
+
+ foreach($arr as $item){
+ if( !is_array($item) ){
+ $out[] = $item;
+ continue;
+ }
+
+ foreach($item as $nestedItem){
+ if( is_array($nestedItem) ){
+ self::flatten( $nestedItem, $out);
+ }else{
+ $out[] = $nestedItem;
+ }
+ }
+ }
+
+ return $out;
+ }
+
+}
+
+
+
+
+/**
+ * Configurable
+ *
+ * @package Less
+ * @subpackage Core
+ */
+abstract class Less_Configurable {
+
+ /**
+ * Array of options
+ *
+ * @var array
+ */
+ protected $options = array();
+
+ /**
+ * Array of default options
+ *
+ * @var array
+ */
+ protected $defaultOptions = array();
+
+
+ /**
+ * Set options
+ *
+ * If $options is an object it will be converted into an array by called
+ * it's toArray method.
+ *
+ * @throws Exception
+ * @param array|object $options
+ *
+ */
+ public function setOptions($options){
+ $options = array_intersect_key($options,$this->defaultOptions);
+ $this->options = array_merge($this->defaultOptions, $this->options, $options);
+ }
+
+
+ /**
+ * Get an option value by name
+ *
+ * If the option is empty or not set a NULL value will be returned.
+ *
+ * @param string $name
+ * @param mixed $default Default value if confiuration of $name is not present
+ * @return mixed
+ */
+ public function getOption($name, $default = null){
+ if(isset($this->options[$name])){
+ return $this->options[$name];
+ }
+ return $default;
+ }
+
+
+ /**
+ * Set an option
+ *
+ * @param string $name
+ * @param mixed $value
+ */
+ public function setOption($name, $value){
+ $this->options[$name] = $value;
+ }
+
+}
+
+/**
+ * Alpha
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Alpha extends Less_Tree{
+ public $value;
+ public $type = 'Alpha';
+
+ public function __construct($val){
+ $this->value = $val;
+ }
+
+ //function accept( $visitor ){
+ // $this->value = $visitor->visit( $this->value );
+ //}
+
+ public function compile($env){
+
+ if( is_object($this->value) ){
+ $this->value = $this->value->compile($env);
+ }
+
+ return $this;
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+
+ $output->add( "alpha(opacity=" );
+
+ if( is_string($this->value) ){
+ $output->add( $this->value );
+ }else{
+ $this->value->genCSS( $output);
+ }
+
+ $output->add( ')' );
+ }
+
+ public function toCSS(){
+ return "alpha(opacity=" . (is_string($this->value) ? $this->value : $this->value->toCSS()) . ")";
+ }
+
+
+}
+
+/**
+ * Anonymous
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Anonymous extends Less_Tree{
+ public $value;
+ public $quote;
+ public $index;
+ public $mapLines;
+ public $currentFileInfo;
+ public $type = 'Anonymous';
+
+ /**
+ * @param integer $index
+ * @param boolean $mapLines
+ */
+ public function __construct($value, $index = null, $currentFileInfo = null, $mapLines = null ){
+ $this->value = $value;
+ $this->index = $index;
+ $this->mapLines = $mapLines;
+ $this->currentFileInfo = $currentFileInfo;
+ }
+
+ public function compile(){
+ return new Less_Tree_Anonymous($this->value, $this->index, $this->currentFileInfo, $this->mapLines);
+ }
+
+ public function compare($x){
+ if( !is_object($x) ){
+ return -1;
+ }
+
+ $left = $this->toCSS();
+ $right = $x->toCSS();
+
+ if( $left === $right ){
+ return 0;
+ }
+
+ return $left < $right ? -1 : 1;
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $output->add( $this->value, $this->currentFileInfo, $this->index, $this->mapLines );
+ }
+
+ public function toCSS(){
+ return $this->value;
+ }
+
+}
+
+
+/**
+ * Assignment
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Assignment extends Less_Tree{
+
+ public $key;
+ public $value;
+ public $type = 'Assignment';
+
+ public function __construct($key, $val) {
+ $this->key = $key;
+ $this->value = $val;
+ }
+
+ public function accept( $visitor ){
+ $this->value = $visitor->visitObj( $this->value );
+ }
+
+ public function compile($env) {
+ return new Less_Tree_Assignment( $this->key, $this->value->compile($env));
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $output->add( $this->key . '=' );
+ $this->value->genCSS( $output );
+ }
+
+ public function toCss(){
+ return $this->key . '=' . $this->value->toCSS();
+ }
+}
+
+
+/**
+ * Attribute
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Attribute extends Less_Tree{
+
+ public $key;
+ public $op;
+ public $value;
+ public $type = 'Attribute';
+
+ public function __construct($key, $op, $value){
+ $this->key = $key;
+ $this->op = $op;
+ $this->value = $value;
+ }
+
+ public function compile($env){
+
+ $key_obj = is_object($this->key);
+ $val_obj = is_object($this->value);
+
+ if( !$key_obj && !$val_obj ){
+ return $this;
+ }
+
+ return new Less_Tree_Attribute(
+ $key_obj ? $this->key->compile($env) : $this->key ,
+ $this->op,
+ $val_obj ? $this->value->compile($env) : $this->value);
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $output->add( $this->toCSS() );
+ }
+
+ public function toCSS(){
+ $value = $this->key;
+
+ if( $this->op ){
+ $value .= $this->op;
+ $value .= (is_object($this->value) ? $this->value->toCSS() : $this->value);
+ }
+
+ return '[' . $value . ']';
+ }
+}
+
+
+/**
+ * Call
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Call extends Less_Tree{
+ public $value;
+
+ protected $name;
+ protected $args;
+ protected $index;
+ protected $currentFileInfo;
+ public $type = 'Call';
+
+ public function __construct($name, $args, $index, $currentFileInfo = null ){
+ $this->name = $name;
+ $this->args = $args;
+ $this->index = $index;
+ $this->currentFileInfo = $currentFileInfo;
+ }
+
+ public function accept( $visitor ){
+ $this->args = $visitor->visitArray( $this->args );
+ }
+
+ //
+ // When evaluating a function call,
+ // we either find the function in `tree.functions` [1],
+ // in which case we call it, passing the evaluated arguments,
+ // or we simply print it out as it appeared originally [2].
+ //
+ // The *functions.js* file contains the built-in functions.
+ //
+ // The reason why we evaluate the arguments, is in the case where
+ // we try to pass a variable to a function, like: `saturate(@color)`.
+ // The function should receive the value, not the variable.
+ //
+ public function compile($env=null){
+ $args = array();
+ foreach($this->args as $a){
+ $args[] = $a->compile($env);
+ }
+
+ $nameLC = strtolower($this->name);
+ switch($nameLC){
+ case '%':
+ $nameLC = '_percent';
+ break;
+
+ case 'get-unit':
+ $nameLC = 'getunit';
+ break;
+
+ case 'data-uri':
+ $nameLC = 'datauri';
+ break;
+
+ case 'svg-gradient':
+ $nameLC = 'svggradient';
+ break;
+ }
+
+ $result = null;
+ if( $nameLC === 'default' ){
+ $result = Less_Tree_DefaultFunc::compile();
+
+ }else{
+
+ if( method_exists('Less_Functions',$nameLC) ){ // 1.
+ try {
+
+ $func = new Less_Functions($env, $this->currentFileInfo);
+ $result = call_user_func_array( array($func,$nameLC),$args);
+
+ } catch (Exception $e) {
+ throw new Less_Exception_Compiler('error evaluating function `' . $this->name . '` '.$e->getMessage().' index: '. $this->index);
+ }
+ } elseif( isset( $env->functions[$nameLC] ) && is_callable( $env->functions[$nameLC] ) ) {
+ try {
+ $result = call_user_func_array( $env->functions[$nameLC], $args );
+ } catch (Exception $e) {
+ throw new Less_Exception_Compiler('error evaluating function `' . $this->name . '` '.$e->getMessage().' index: '. $this->index);
+ }
+ }
+ }
+
+ if( $result !== null ){
+ return $result;
+ }
+
+
+ return new Less_Tree_Call( $this->name, $args, $this->index, $this->currentFileInfo );
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+
+ $output->add( $this->name . '(', $this->currentFileInfo, $this->index );
+ $args_len = count($this->args);
+ for($i = 0; $i < $args_len; $i++ ){
+ $this->args[$i]->genCSS( $output );
+ if( $i + 1 < $args_len ){
+ $output->add( ', ' );
+ }
+ }
+
+ $output->add( ')' );
+ }
+
+
+ //public function toCSS(){
+ // return $this->compile()->toCSS();
+ //}
+
+}
+
+
+/**
+ * Color
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Color extends Less_Tree{
+ public $rgb;
+ public $alpha;
+ public $isTransparentKeyword;
+ public $type = 'Color';
+
+ public function __construct($rgb, $a = 1, $isTransparentKeyword = null ){
+
+ if( $isTransparentKeyword ){
+ $this->rgb = $rgb;
+ $this->alpha = $a;
+ $this->isTransparentKeyword = true;
+ return;
+ }
+
+ $this->rgb = array();
+ if( is_array($rgb) ){
+ $this->rgb = $rgb;
+ }else if( strlen($rgb) == 6 ){
+ foreach(str_split($rgb, 2) as $c){
+ $this->rgb[] = hexdec($c);
+ }
+ }else{
+ foreach(str_split($rgb, 1) as $c){
+ $this->rgb[] = hexdec($c.$c);
+ }
+ }
+ $this->alpha = is_numeric($a) ? $a : 1;
+ }
+
+ public function compile(){
+ return $this;
+ }
+
+ public function luma(){
+ $r = $this->rgb[0] / 255;
+ $g = $this->rgb[1] / 255;
+ $b = $this->rgb[2] / 255;
+
+ $r = ($r <= 0.03928) ? $r / 12.92 : pow((($r + 0.055) / 1.055), 2.4);
+ $g = ($g <= 0.03928) ? $g / 12.92 : pow((($g + 0.055) / 1.055), 2.4);
+ $b = ($b <= 0.03928) ? $b / 12.92 : pow((($b + 0.055) / 1.055), 2.4);
+
+ return 0.2126 * $r + 0.7152 * $g + 0.0722 * $b;
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $output->add( $this->toCSS() );
+ }
+
+ public function toCSS( $doNotCompress = false ){
+ $compress = Less_Parser::$options['compress'] && !$doNotCompress;
+ $alpha = Less_Functions::fround( $this->alpha );
+
+
+ //
+ // If we have some transparency, the only way to represent it
+ // is via `rgba`. Otherwise, we use the hex representation,
+ // which has better compatibility with older browsers.
+ // Values are capped between `0` and `255`, rounded and zero-padded.
+ //
+ if( $alpha < 1 ){
+ if( ( $alpha === 0 || $alpha === 0.0 ) && isset($this->isTransparentKeyword) && $this->isTransparentKeyword ){
+ return 'transparent';
+ }
+
+ $values = array();
+ foreach($this->rgb as $c){
+ $values[] = Less_Functions::clamp( round($c), 255);
+ }
+ $values[] = $alpha;
+
+ $glue = ($compress ? ',' : ', ');
+ return "rgba(" . implode($glue, $values) . ")";
+ }else{
+
+ $color = $this->toRGB();
+
+ if( $compress ){
+
+ // Convert color to short format
+ if( $color[1] === $color[2] && $color[3] === $color[4] && $color[5] === $color[6]) {
+ $color = '#'.$color[1] . $color[3] . $color[5];
+ }
+ }
+
+ return $color;
+ }
+ }
+
+ //
+ // Operations have to be done per-channel, if not,
+ // channels will spill onto each other. Once we have
+ // our result, in the form of an integer triplet,
+ // we create a new Color node to hold the result.
+ //
+
+ /**
+ * @param string $op
+ */
+ public function operate( $op, $other) {
+ $rgb = array();
+ $alpha = $this->alpha * (1 - $other->alpha) + $other->alpha;
+ for ($c = 0; $c < 3; $c++) {
+ $rgb[$c] = Less_Functions::operate( $op, $this->rgb[$c], $other->rgb[$c]);
+ }
+ return new Less_Tree_Color($rgb, $alpha);
+ }
+
+ public function toRGB(){
+ return $this->toHex($this->rgb);
+ }
+
+ public function toHSL(){
+ $r = $this->rgb[0] / 255;
+ $g = $this->rgb[1] / 255;
+ $b = $this->rgb[2] / 255;
+ $a = $this->alpha;
+
+ $max = max($r, $g, $b);
+ $min = min($r, $g, $b);
+ $l = ($max + $min) / 2;
+ $d = $max - $min;
+
+ $h = $s = 0;
+ if( $max !== $min ){
+ $s = $l > 0.5 ? $d / (2 - $max - $min) : $d / ($max + $min);
+
+ switch ($max) {
+ case $r: $h = ($g - $b) / $d + ($g < $b ? 6 : 0); break;
+ case $g: $h = ($b - $r) / $d + 2; break;
+ case $b: $h = ($r - $g) / $d + 4; break;
+ }
+ $h /= 6;
+ }
+ return array('h' => $h * 360, 's' => $s, 'l' => $l, 'a' => $a );
+ }
+
+ //Adapted from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
+ public function toHSV() {
+ $r = $this->rgb[0] / 255;
+ $g = $this->rgb[1] / 255;
+ $b = $this->rgb[2] / 255;
+ $a = $this->alpha;
+
+ $max = max($r, $g, $b);
+ $min = min($r, $g, $b);
+
+ $v = $max;
+
+ $d = $max - $min;
+ if ($max === 0) {
+ $s = 0;
+ } else {
+ $s = $d / $max;
+ }
+
+ $h = 0;
+ if( $max !== $min ){
+ switch($max){
+ case $r: $h = ($g - $b) / $d + ($g < $b ? 6 : 0); break;
+ case $g: $h = ($b - $r) / $d + 2; break;
+ case $b: $h = ($r - $g) / $d + 4; break;
+ }
+ $h /= 6;
+ }
+ return array('h'=> $h * 360, 's'=> $s, 'v'=> $v, 'a' => $a );
+ }
+
+ public function toARGB(){
+ $argb = array_merge( (array) Less_Parser::round($this->alpha * 255), $this->rgb);
+ return $this->toHex( $argb );
+ }
+
+ public function compare($x){
+
+ if( !property_exists( $x, 'rgb' ) ){
+ return -1;
+ }
+
+
+ return ($x->rgb[0] === $this->rgb[0] &&
+ $x->rgb[1] === $this->rgb[1] &&
+ $x->rgb[2] === $this->rgb[2] &&
+ $x->alpha === $this->alpha) ? 0 : -1;
+ }
+
+ public function toHex( $v ){
+
+ $ret = '#';
+ foreach($v as $c){
+ $c = Less_Functions::clamp( Less_Parser::round($c), 255);
+ if( $c < 16 ){
+ $ret .= '0';
+ }
+ $ret .= dechex($c);
+ }
+
+ return $ret;
+ }
+
+
+ /**
+ * @param string $keyword
+ */
+ public static function fromKeyword( $keyword ){
+ $keyword = strtolower($keyword);
+
+ if( Less_Colors::hasOwnProperty($keyword) ){
+ // detect named color
+ return new Less_Tree_Color(substr(Less_Colors::color($keyword), 1));
+ }
+
+ if( $keyword === 'transparent' ){
+ return new Less_Tree_Color( array(0, 0, 0), 0, true);
+ }
+ }
+
+}
+
+
+/**
+ * Comment
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Comment extends Less_Tree{
+
+ public $value;
+ public $silent;
+ public $isReferenced;
+ public $currentFileInfo;
+ public $type = 'Comment';
+
+ public function __construct($value, $silent, $index = null, $currentFileInfo = null ){
+ $this->value = $value;
+ $this->silent = !! $silent;
+ $this->currentFileInfo = $currentFileInfo;
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ //if( $this->debugInfo ){
+ //$output->add( tree.debugInfo($env, $this), $this->currentFileInfo, $this->index);
+ //}
+ $output->add( trim($this->value) );//TODO shouldn't need to trim, we shouldn't grab the \n
+ }
+
+ public function toCSS(){
+ return Less_Parser::$options['compress'] ? '' : $this->value;
+ }
+
+ public function isSilent(){
+ $isReference = ($this->currentFileInfo && isset($this->currentFileInfo['reference']) && (!isset($this->isReferenced) || !$this->isReferenced) );
+ $isCompressed = Less_Parser::$options['compress'] && !preg_match('/^\/\*!/', $this->value);
+ return $this->silent || $isReference || $isCompressed;
+ }
+
+ public function compile(){
+ return $this;
+ }
+
+ public function markReferenced(){
+ $this->isReferenced = true;
+ }
+
+}
+
+
+/**
+ * Condition
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Condition extends Less_Tree{
+
+ public $op;
+ public $lvalue;
+ public $rvalue;
+ public $index;
+ public $negate;
+ public $type = 'Condition';
+
+ public function __construct($op, $l, $r, $i = 0, $negate = false) {
+ $this->op = trim($op);
+ $this->lvalue = $l;
+ $this->rvalue = $r;
+ $this->index = $i;
+ $this->negate = $negate;
+ }
+
+ public function accept($visitor){
+ $this->lvalue = $visitor->visitObj( $this->lvalue );
+ $this->rvalue = $visitor->visitObj( $this->rvalue );
+ }
+
+ public function compile($env) {
+ $a = $this->lvalue->compile($env);
+ $b = $this->rvalue->compile($env);
+
+ switch( $this->op ){
+ case 'and':
+ $result = $a && $b;
+ break;
+
+ case 'or':
+ $result = $a || $b;
+ break;
+
+ default:
+ if( Less_Parser::is_method($a, 'compare') ){
+ $result = $a->compare($b);
+ }elseif( Less_Parser::is_method($b, 'compare') ){
+ $result = $b->compare($a);
+ }else{
+ throw new Less_Exception_Compiler('Unable to perform comparison', null, $this->index);
+ }
+
+ switch ($result) {
+ case -1:
+ $result = $this->op === '<' || $this->op === '=<' || $this->op === '<=';
+ break;
+
+ case 0:
+ $result = $this->op === '=' || $this->op === '>=' || $this->op === '=<' || $this->op === '<=';
+ break;
+
+ case 1:
+ $result = $this->op === '>' || $this->op === '>=';
+ break;
+ }
+ break;
+ }
+
+ return $this->negate ? !$result : $result;
+ }
+
+}
+
+
+/**
+ * DefaultFunc
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_DefaultFunc{
+
+ static $error_;
+ static $value_;
+
+ public static function compile(){
+ if( self::$error_ ){
+ throw new Exception(self::$error_);
+ }
+ if( self::$value_ !== null ){
+ return self::$value_ ? new Less_Tree_Keyword('true') : new Less_Tree_Keyword('false');
+ }
+ }
+
+ public static function value( $v ){
+ self::$value_ = $v;
+ }
+
+ public static function error( $e ){
+ self::$error_ = $e;
+ }
+
+ public static function reset(){
+ self::$value_ = self::$error_ = null;
+ }
+}
+
+/**
+ * DetachedRuleset
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_DetachedRuleset extends Less_Tree{
+
+ public $ruleset;
+ public $frames;
+ public $type = 'DetachedRuleset';
+
+ public function __construct( $ruleset, $frames = null ){
+ $this->ruleset = $ruleset;
+ $this->frames = $frames;
+ }
+
+ public function accept($visitor) {
+ $this->ruleset = $visitor->visitObj($this->ruleset);
+ }
+
+ public function compile($env){
+ if( $this->frames ){
+ $frames = $this->frames;
+ }else{
+ $frames = $env->frames;
+ }
+ return new Less_Tree_DetachedRuleset($this->ruleset, $frames);
+ }
+
+ public function callEval($env) {
+ if( $this->frames ){
+ return $this->ruleset->compile( $env->copyEvalEnv( array_merge($this->frames,$env->frames) ) );
+ }
+ return $this->ruleset->compile( $env );
+ }
+}
+
+
+
+/**
+ * Dimension
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Dimension extends Less_Tree{
+
+ public $value;
+ public $unit;
+ public $type = 'Dimension';
+
+ public function __construct($value, $unit = null){
+ $this->value = floatval($value);
+
+ if( $unit && ($unit instanceof Less_Tree_Unit) ){
+ $this->unit = $unit;
+ }elseif( $unit ){
+ $this->unit = new Less_Tree_Unit( array($unit) );
+ }else{
+ $this->unit = new Less_Tree_Unit( );
+ }
+ }
+
+ public function accept( $visitor ){
+ $this->unit = $visitor->visitObj( $this->unit );
+ }
+
+ public function compile(){
+ return $this;
+ }
+
+ public function toColor() {
+ return new Less_Tree_Color(array($this->value, $this->value, $this->value));
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+
+ if( Less_Parser::$options['strictUnits'] && !$this->unit->isSingular() ){
+ throw new Less_Exception_Compiler("Multiple units in dimension. Correct the units or use the unit function. Bad unit: ".$this->unit->toString());
+ }
+
+ $value = Less_Functions::fround( $this->value );
+ $strValue = (string)$value;
+
+ if( $value !== 0 && $value < 0.000001 && $value > -0.000001 ){
+ // would be output 1e-6 etc.
+ $strValue = number_format($strValue,10);
+ $strValue = preg_replace('/\.?0+$/','', $strValue);
+ }
+
+ if( Less_Parser::$options['compress'] ){
+ // Zero values doesn't need a unit
+ if( $value === 0 && $this->unit->isLength() ){
+ $output->add( $strValue );
+ return $strValue;
+ }
+
+ // Float values doesn't need a leading zero
+ if( $value > 0 && $value < 1 && $strValue[0] === '0' ){
+ $strValue = substr($strValue,1);
+ }
+ }
+
+ $output->add( $strValue );
+ $this->unit->genCSS( $output );
+ }
+
+ public function __toString(){
+ return $this->toCSS();
+ }
+
+ // In an operation between two Dimensions,
+ // we default to the first Dimension's unit,
+ // so `1px + 2em` will yield `3px`.
+
+ /**
+ * @param string $op
+ */
+ public function operate( $op, $other){
+
+ $value = Less_Functions::operate( $op, $this->value, $other->value);
+ $unit = clone $this->unit;
+
+ if( $op === '+' || $op === '-' ){
+
+ if( !$unit->numerator && !$unit->denominator ){
+ $unit->numerator = $other->unit->numerator;
+ $unit->denominator = $other->unit->denominator;
+ }elseif( !$other->unit->numerator && !$other->unit->denominator ){
+ // do nothing
+ }else{
+ $other = $other->convertTo( $this->unit->usedUnits());
+
+ if( Less_Parser::$options['strictUnits'] && $other->unit->toString() !== $unit->toCSS() ){
+ throw new Less_Exception_Compiler("Incompatible units. Change the units or use the unit function. Bad units: '".$unit->toString() . "' and ".$other->unit->toString()+"'.");
+ }
+
+ $value = Less_Functions::operate( $op, $this->value, $other->value);
+ }
+ }elseif( $op === '*' ){
+ $unit->numerator = array_merge($unit->numerator, $other->unit->numerator);
+ $unit->denominator = array_merge($unit->denominator, $other->unit->denominator);
+ sort($unit->numerator);
+ sort($unit->denominator);
+ $unit->cancel();
+ }elseif( $op === '/' ){
+ $unit->numerator = array_merge($unit->numerator, $other->unit->denominator);
+ $unit->denominator = array_merge($unit->denominator, $other->unit->numerator);
+ sort($unit->numerator);
+ sort($unit->denominator);
+ $unit->cancel();
+ }
+ return new Less_Tree_Dimension( $value, $unit);
+ }
+
+ public function compare($other) {
+ if ($other instanceof Less_Tree_Dimension) {
+
+ if( $this->unit->isEmpty() || $other->unit->isEmpty() ){
+ $a = $this;
+ $b = $other;
+ } else {
+ $a = $this->unify();
+ $b = $other->unify();
+ if( $a->unit->compare($b->unit) !== 0 ){
+ return -1;
+ }
+ }
+ $aValue = $a->value;
+ $bValue = $b->value;
+
+ if ($bValue > $aValue) {
+ return -1;
+ } elseif ($bValue < $aValue) {
+ return 1;
+ } else {
+ return 0;
+ }
+ } else {
+ return -1;
+ }
+ }
+
+ public function unify() {
+ return $this->convertTo(array('length'=> 'px', 'duration'=> 's', 'angle' => 'rad' ));
+ }
+
+ public function convertTo($conversions) {
+ $value = $this->value;
+ $unit = clone $this->unit;
+
+ if( is_string($conversions) ){
+ $derivedConversions = array();
+ foreach( Less_Tree_UnitConversions::$groups as $i ){
+ if( isset(Less_Tree_UnitConversions::${$i}[$conversions]) ){
+ $derivedConversions = array( $i => $conversions);
+ }
+ }
+ $conversions = $derivedConversions;
+ }
+
+
+ foreach($conversions as $groupName => $targetUnit){
+ $group = Less_Tree_UnitConversions::${$groupName};
+
+ //numerator
+ foreach($unit->numerator as $i => $atomicUnit){
+ $atomicUnit = $unit->numerator[$i];
+ if( !isset($group[$atomicUnit]) ){
+ continue;
+ }
+
+ $value = $value * ($group[$atomicUnit] / $group[$targetUnit]);
+
+ $unit->numerator[$i] = $targetUnit;
+ }
+
+ //denominator
+ foreach($unit->denominator as $i => $atomicUnit){
+ $atomicUnit = $unit->denominator[$i];
+ if( !isset($group[$atomicUnit]) ){
+ continue;
+ }
+
+ $value = $value / ($group[$atomicUnit] / $group[$targetUnit]);
+
+ $unit->denominator[$i] = $targetUnit;
+ }
+ }
+
+ $unit->cancel();
+
+ return new Less_Tree_Dimension( $value, $unit);
+ }
+}
+
+
+/**
+ * Directive
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Directive extends Less_Tree{
+
+ public $name;
+ public $value;
+ public $rules;
+ public $index;
+ public $isReferenced;
+ public $currentFileInfo;
+ public $debugInfo;
+ public $type = 'Directive';
+
+ public function __construct($name, $value = null, $rules, $index = null, $currentFileInfo = null, $debugInfo = null ){
+ $this->name = $name;
+ $this->value = $value;
+ if( $rules ){
+ $this->rules = $rules;
+ $this->rules->allowImports = true;
+ }
+
+ $this->index = $index;
+ $this->currentFileInfo = $currentFileInfo;
+ $this->debugInfo = $debugInfo;
+ }
+
+
+ public function accept( $visitor ){
+ if( $this->rules ){
+ $this->rules = $visitor->visitObj( $this->rules );
+ }
+ if( $this->value ){
+ $this->value = $visitor->visitObj( $this->value );
+ }
+ }
+
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $value = $this->value;
+ $rules = $this->rules;
+ $output->add( $this->name, $this->currentFileInfo, $this->index );
+ if( $this->value ){
+ $output->add(' ');
+ $this->value->genCSS($output);
+ }
+ if( $this->rules ){
+ Less_Tree::outputRuleset( $output, array($this->rules));
+ } else {
+ $output->add(';');
+ }
+ }
+
+ public function compile($env){
+
+ $value = $this->value;
+ $rules = $this->rules;
+ if( $value ){
+ $value = $value->compile($env);
+ }
+
+ if( $rules ){
+ $rules = $rules->compile($env);
+ $rules->root = true;
+ }
+
+ return new Less_Tree_Directive( $this->name, $value, $rules, $this->index, $this->currentFileInfo, $this->debugInfo );
+ }
+
+
+ public function variable($name){
+ if( $this->rules ){
+ return $this->rules->variable($name);
+ }
+ }
+
+ public function find($selector){
+ if( $this->rules ){
+ return $this->rules->find($selector, $this);
+ }
+ }
+
+ //rulesets: function () { if (this.rules) return tree.Ruleset.prototype.rulesets.apply(this.rules); },
+
+ public function markReferenced(){
+ $this->isReferenced = true;
+ if( $this->rules ){
+ Less_Tree::ReferencedArray($this->rules->rules);
+ }
+ }
+
+}
+
+
+/**
+ * Element
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Element extends Less_Tree{
+
+ public $combinator = '';
+ public $value = '';
+ public $index;
+ public $currentFileInfo;
+ public $type = 'Element';
+
+ public $value_is_object = false;
+
+ public function __construct($combinator, $value, $index = null, $currentFileInfo = null ){
+
+ $this->value = $value;
+ $this->value_is_object = is_object($value);
+
+ if( $combinator ){
+ $this->combinator = $combinator;
+ }
+
+ $this->index = $index;
+ $this->currentFileInfo = $currentFileInfo;
+ }
+
+ public function accept( $visitor ){
+ if( $this->value_is_object ){ //object or string
+ $this->value = $visitor->visitObj( $this->value );
+ }
+ }
+
+ public function compile($env){
+
+ if( Less_Environment::$mixin_stack ){
+ return new Less_Tree_Element($this->combinator, ($this->value_is_object ? $this->value->compile($env) : $this->value), $this->index, $this->currentFileInfo );
+ }
+
+ if( $this->value_is_object ){
+ $this->value = $this->value->compile($env);
+ }
+
+ return $this;
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $output->add( $this->toCSS(), $this->currentFileInfo, $this->index );
+ }
+
+ public function toCSS(){
+
+ if( $this->value_is_object ){
+ $value = $this->value->toCSS();
+ }else{
+ $value = $this->value;
+ }
+
+
+ if( $value === '' && $this->combinator && $this->combinator === '&' ){
+ return '';
+ }
+
+
+ return Less_Environment::$_outputMap[$this->combinator] . $value;
+ }
+
+}
+
+
+/**
+ * Expression
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Expression extends Less_Tree{
+
+ public $value = array();
+ public $parens = false;
+ public $parensInOp = false;
+ public $type = 'Expression';
+
+ public function __construct( $value, $parens = null ){
+ $this->value = $value;
+ $this->parens = $parens;
+ }
+
+ public function accept( $visitor ){
+ $this->value = $visitor->visitArray( $this->value );
+ }
+
+ public function compile($env) {
+
+ $doubleParen = false;
+
+ if( $this->parens && !$this->parensInOp ){
+ Less_Environment::$parensStack++;
+ }
+
+ $returnValue = null;
+ if( $this->value ){
+
+ $count = count($this->value);
+
+ if( $count > 1 ){
+
+ $ret = array();
+ foreach($this->value as $e){
+ $ret[] = $e->compile($env);
+ }
+ $returnValue = new Less_Tree_Expression($ret);
+
+ }else{
+
+ if( ($this->value[0] instanceof Less_Tree_Expression) && $this->value[0]->parens && !$this->value[0]->parensInOp ){
+ $doubleParen = true;
+ }
+
+ $returnValue = $this->value[0]->compile($env);
+ }
+
+ } else {
+ $returnValue = $this;
+ }
+
+ if( $this->parens ){
+ if( !$this->parensInOp ){
+ Less_Environment::$parensStack--;
+
+ }elseif( !Less_Environment::isMathOn() && !$doubleParen ){
+ $returnValue = new Less_Tree_Paren($returnValue);
+
+ }
+ }
+ return $returnValue;
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $val_len = count($this->value);
+ for( $i = 0; $i < $val_len; $i++ ){
+ $this->value[$i]->genCSS( $output );
+ if( $i + 1 < $val_len ){
+ $output->add( ' ' );
+ }
+ }
+ }
+
+ public function throwAwayComments() {
+
+ if( is_array($this->value) ){
+ $new_value = array();
+ foreach($this->value as $v){
+ if( $v instanceof Less_Tree_Comment ){
+ continue;
+ }
+ $new_value[] = $v;
+ }
+ $this->value = $new_value;
+ }
+ }
+}
+
+
+/**
+ * Extend
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Extend extends Less_Tree{
+
+ public $selector;
+ public $option;
+ public $index;
+ public $selfSelectors = array();
+ public $allowBefore;
+ public $allowAfter;
+ public $firstExtendOnThisSelectorPath;
+ public $type = 'Extend';
+ public $ruleset;
+
+
+ public $object_id;
+ public $parent_ids = array();
+
+ /**
+ * @param integer $index
+ */
+ public function __construct($selector, $option, $index){
+ static $i = 0;
+ $this->selector = $selector;
+ $this->option = $option;
+ $this->index = $index;
+
+ switch($option){
+ case "all":
+ $this->allowBefore = true;
+ $this->allowAfter = true;
+ break;
+ default:
+ $this->allowBefore = false;
+ $this->allowAfter = false;
+ break;
+ }
+
+ $this->object_id = $i++;
+ $this->parent_ids = array($this->object_id);
+ }
+
+ public function accept( $visitor ){
+ $this->selector = $visitor->visitObj( $this->selector );
+ }
+
+ public function compile( $env ){
+ Less_Parser::$has_extends = true;
+ $this->selector = $this->selector->compile($env);
+ return $this;
+ //return new Less_Tree_Extend( $this->selector->compile($env), $this->option, $this->index);
+ }
+
+ public function findSelfSelectors( $selectors ){
+ $selfElements = array();
+
+
+ for( $i = 0, $selectors_len = count($selectors); $i < $selectors_len; $i++ ){
+ $selectorElements = $selectors[$i]->elements;
+ // duplicate the logic in genCSS function inside the selector node.
+ // future TODO - move both logics into the selector joiner visitor
+ if( $i && $selectorElements && $selectorElements[0]->combinator === "") {
+ $selectorElements[0]->combinator = ' ';
+ }
+ $selfElements = array_merge( $selfElements, $selectors[$i]->elements );
+ }
+
+ $this->selfSelectors = array(new Less_Tree_Selector($selfElements));
+ }
+
+}
+
+/**
+ * CSS @import node
+ *
+ * The general strategy here is that we don't want to wait
+ * for the parsing to be completed, before we start importing
+ * the file. That's because in the context of a browser,
+ * most of the time will be spent waiting for the server to respond.
+ *
+ * On creation, we push the import path to our import queue, though
+ * `import,push`, we also pass it a callback, which it'll call once
+ * the file has been fetched, and parsed.
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Import extends Less_Tree{
+
+ public $options;
+ public $index;
+ public $path;
+ public $features;
+ public $currentFileInfo;
+ public $css;
+ public $skip;
+ public $root;
+ public $type = 'Import';
+
+ public function __construct($path, $features, $options, $index, $currentFileInfo = null ){
+ $this->options = $options;
+ $this->index = $index;
+ $this->path = $path;
+ $this->features = $features;
+ $this->currentFileInfo = $currentFileInfo;
+
+ if( is_array($options) ){
+ $this->options += array('inline'=>false);
+
+ if( isset($this->options['less']) || $this->options['inline'] ){
+ $this->css = !isset($this->options['less']) || !$this->options['less'] || $this->options['inline'];
+ } else {
+ $pathValue = $this->getPath();
+ if( $pathValue && preg_match('/css([\?;].*)?$/',$pathValue) ){
+ $this->css = true;
+ }
+ }
+ }
+ }
+
+//
+// The actual import node doesn't return anything, when converted to CSS.
+// The reason is that it's used at the evaluation stage, so that the rules
+// it imports can be treated like any other rules.
+//
+// In `eval`, we make sure all Import nodes get evaluated, recursively, so
+// we end up with a flat structure, which can easily be imported in the parent
+// ruleset.
+//
+
+ public function accept($visitor){
+
+ if( $this->features ){
+ $this->features = $visitor->visitObj($this->features);
+ }
+ $this->path = $visitor->visitObj($this->path);
+
+ if( !$this->options['inline'] && $this->root ){
+ $this->root = $visitor->visit($this->root);
+ }
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ if( $this->css ){
+
+ $output->add( '@import ', $this->currentFileInfo, $this->index );
+
+ $this->path->genCSS( $output );
+ if( $this->features ){
+ $output->add( ' ' );
+ $this->features->genCSS( $output );
+ }
+ $output->add( ';' );
+ }
+ }
+
+ public function toCSS(){
+ $features = $this->features ? ' ' . $this->features->toCSS() : '';
+
+ if ($this->css) {
+ return "@import " . $this->path->toCSS() . $features . ";\n";
+ } else {
+ return "";
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getPath(){
+ if ($this->path instanceof Less_Tree_Quoted) {
+ $path = $this->path->value;
+ $path = ( isset($this->css) || preg_match('/(\.[a-z]*$)|([\?;].*)$/',$path)) ? $path : $path . '.less';
+ } else if ($this->path instanceof Less_Tree_URL) {
+ $path = $this->path->value->value;
+ }else{
+ return null;
+ }
+
+ //remove query string and fragment
+ return preg_replace('/[\?#][^\?]*$/','',$path);
+ }
+
+ public function compileForImport( $env ){
+ return new Less_Tree_Import( $this->path->compile($env), $this->features, $this->options, $this->index, $this->currentFileInfo);
+ }
+
+ public function compilePath($env) {
+ $path = $this->path->compile($env);
+ $rootpath = '';
+ if( $this->currentFileInfo && $this->currentFileInfo['rootpath'] ){
+ $rootpath = $this->currentFileInfo['rootpath'];
+ }
+
+
+ if( !($path instanceof Less_Tree_URL) ){
+ if( $rootpath ){
+ $pathValue = $path->value;
+ // Add the base path if the import is relative
+ if( $pathValue && Less_Environment::isPathRelative($pathValue) ){
+ $path->value = $this->currentFileInfo['uri_root'].$pathValue;
+ }
+ }
+ $path->value = Less_Environment::normalizePath($path->value);
+ }
+
+
+
+ return $path;
+ }
+
+ public function compile( $env ){
+
+ $evald = $this->compileForImport($env);
+
+ //get path & uri
+ $path_and_uri = null;
+ if( is_callable(Less_Parser::$options['import_callback']) ){
+ $path_and_uri = call_user_func(Less_Parser::$options['import_callback'],$evald);
+ }
+
+ if( !$path_and_uri ){
+ $path_and_uri = $evald->PathAndUri();
+ }
+
+ if( $path_and_uri ){
+ list($full_path, $uri) = $path_and_uri;
+ }else{
+ $full_path = $uri = $evald->getPath();
+ }
+
+
+ //import once
+ if( $evald->skip( $full_path, $env) ){
+ return array();
+ }
+
+ if( $this->options['inline'] ){
+ //todo needs to reference css file not import
+ //$contents = new Less_Tree_Anonymous($this->root, 0, array('filename'=>$this->importedFilename), true );
+
+ Less_Parser::AddParsedFile($full_path);
+ $contents = new Less_Tree_Anonymous( file_get_contents($full_path), 0, array(), true );
+
+ if( $this->features ){
+ return new Less_Tree_Media( array($contents), $this->features->value );
+ }
+
+ return array( $contents );
+ }
+
+
+ // css ?
+ if( $evald->css ){
+ $features = ( $evald->features ? $evald->features->compile($env) : null );
+ return new Less_Tree_Import( $this->compilePath( $env), $features, $this->options, $this->index);
+ }
+
+
+ return $this->ParseImport( $full_path, $uri, $env );
+ }
+
+
+ /**
+ * Using the import directories, get the full absolute path and uri of the import
+ *
+ * @param Less_Tree_Import $evald
+ */
+ public function PathAndUri(){
+
+ $evald_path = $this->getPath();
+
+ if( $evald_path ){
+
+ $import_dirs = array();
+
+ if( Less_Environment::isPathRelative($evald_path) ){
+ //if the path is relative, the file should be in the current directory
+ $import_dirs[ $this->currentFileInfo['currentDirectory'] ] = $this->currentFileInfo['uri_root'];
+
+ }else{
+ //otherwise, the file should be relative to the server root
+ $import_dirs[ $this->currentFileInfo['entryPath'] ] = $this->currentFileInfo['entryUri'];
+
+ //if the user supplied entryPath isn't the actual root
+ $import_dirs[ $_SERVER['DOCUMENT_ROOT'] ] = '';
+
+ }
+
+ // always look in user supplied import directories
+ $import_dirs = array_merge( $import_dirs, Less_Parser::$options['import_dirs'] );
+
+
+ foreach( $import_dirs as $rootpath => $rooturi){
+ if( is_callable($rooturi) ){
+ list($path, $uri) = call_user_func($rooturi, $evald_path);
+ if( is_string($path) ){
+ $full_path = $path;
+ return array( $full_path, $uri );
+ }
+ }elseif( !empty($rootpath) ){
+
+
+ if( $rooturi ){
+ if( strpos($evald_path,$rooturi) === 0 ){
+ $evald_path = substr( $evald_path, strlen($rooturi) );
+ }
+ }
+
+ $path = rtrim($rootpath,'/\\').'/'.ltrim($evald_path,'/\\');
+
+ if( file_exists($path) ){
+ $full_path = Less_Environment::normalizePath($path);
+ $uri = Less_Environment::normalizePath(dirname($rooturi.$evald_path));
+ return array( $full_path, $uri );
+ } elseif( file_exists($path.'.less') ){
+ $full_path = Less_Environment::normalizePath($path.'.less');
+ $uri = Less_Environment::normalizePath(dirname($rooturi.$evald_path.'.less'));
+ return array( $full_path, $uri );
+ }
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Parse the import url and return the rules
+ *
+ * @return Less_Tree_Media|array
+ */
+ public function ParseImport( $full_path, $uri, $env ){
+
+ $import_env = clone $env;
+ if( (isset($this->options['reference']) && $this->options['reference']) || isset($this->currentFileInfo['reference']) ){
+ $import_env->currentFileInfo['reference'] = true;
+ }
+
+ if( (isset($this->options['multiple']) && $this->options['multiple']) ){
+ $import_env->importMultiple = true;
+ }
+
+ $parser = new Less_Parser($import_env);
+ $root = $parser->parseFile($full_path, $uri, true);
+
+
+ $ruleset = new Less_Tree_Ruleset(array(), $root->rules );
+ $ruleset->evalImports($import_env);
+
+ return $this->features ? new Less_Tree_Media($ruleset->rules, $this->features->value) : $ruleset->rules;
+ }
+
+
+ /**
+ * Should the import be skipped?
+ *
+ * @return boolean|null
+ */
+ private function Skip($path, $env){
+
+ $path = Less_Parser::winPath(realpath($path));
+
+ if( $path && Less_Parser::FileParsed($path) ){
+
+ if( isset($this->currentFileInfo['reference']) ){
+ return true;
+ }
+
+ return !isset($this->options['multiple']) && !$env->importMultiple;
+ }
+
+ }
+}
+
+
+
+/**
+ * Javascript
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Javascript extends Less_Tree{
+
+ public $type = 'Javascript';
+ public $escaped;
+ public $expression;
+ public $index;
+
+ /**
+ * @param boolean $index
+ * @param boolean $escaped
+ */
+ public function __construct($string, $index, $escaped){
+ $this->escaped = $escaped;
+ $this->expression = $string;
+ $this->index = $index;
+ }
+
+ public function compile(){
+ return new Less_Tree_Anonymous('/* Sorry, can not do JavaScript evaluation in PHP... :( */');
+ }
+
+}
+
+
+/**
+ * Keyword
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Keyword extends Less_Tree{
+
+ public $value;
+ public $type = 'Keyword';
+
+ /**
+ * @param string $value
+ */
+ public function __construct($value){
+ $this->value = $value;
+ }
+
+ public function compile(){
+ return $this;
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+
+ if( $this->value === '%') {
+ throw new Less_Exception_Compiler("Invalid % without number");
+ }
+
+ $output->add( $this->value );
+ }
+
+ public function compare($other) {
+ if ($other instanceof Less_Tree_Keyword) {
+ return $other->value === $this->value ? 0 : 1;
+ } else {
+ return -1;
+ }
+ }
+}
+
+
+/**
+ * Media
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Media extends Less_Tree{
+
+ public $features;
+ public $rules;
+ public $index;
+ public $currentFileInfo;
+ public $isReferenced;
+ public $type = 'Media';
+
+ public function __construct($value = array(), $features = array(), $index = null, $currentFileInfo = null ){
+
+ $this->index = $index;
+ $this->currentFileInfo = $currentFileInfo;
+
+ $selectors = $this->emptySelectors();
+
+ $this->features = new Less_Tree_Value($features);
+
+ $this->rules = array(new Less_Tree_Ruleset($selectors, $value));
+ $this->rules[0]->allowImports = true;
+ }
+
+ public function accept( $visitor ){
+ $this->features = $visitor->visitObj($this->features);
+ $this->rules = $visitor->visitArray($this->rules);
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+
+ $output->add( '@media ', $this->currentFileInfo, $this->index );
+ $this->features->genCSS( $output );
+ Less_Tree::outputRuleset( $output, $this->rules);
+
+ }
+
+ public function compile($env) {
+
+ $media = new Less_Tree_Media(array(), array(), $this->index, $this->currentFileInfo );
+
+ $strictMathBypass = false;
+ if( Less_Parser::$options['strictMath'] === false) {
+ $strictMathBypass = true;
+ Less_Parser::$options['strictMath'] = true;
+ }
+
+ $media->features = $this->features->compile($env);
+
+ if( $strictMathBypass ){
+ Less_Parser::$options['strictMath'] = false;
+ }
+
+ $env->mediaPath[] = $media;
+ $env->mediaBlocks[] = $media;
+
+ array_unshift($env->frames, $this->rules[0]);
+ $media->rules = array($this->rules[0]->compile($env));
+ array_shift($env->frames);
+
+ array_pop($env->mediaPath);
+
+ return !$env->mediaPath ? $media->compileTop($env) : $media->compileNested($env);
+ }
+
+ public function variable($name) {
+ return $this->rules[0]->variable($name);
+ }
+
+ public function find($selector) {
+ return $this->rules[0]->find($selector, $this);
+ }
+
+ public function emptySelectors(){
+ $el = new Less_Tree_Element('','&', $this->index, $this->currentFileInfo );
+ $sels = array( new Less_Tree_Selector(array($el), array(), null, $this->index, $this->currentFileInfo) );
+ $sels[0]->mediaEmpty = true;
+ return $sels;
+ }
+
+ public function markReferenced(){
+ $this->rules[0]->markReferenced();
+ $this->isReferenced = true;
+ Less_Tree::ReferencedArray($this->rules[0]->rules);
+ }
+
+ // evaltop
+ public function compileTop($env) {
+ $result = $this;
+
+ if (count($env->mediaBlocks) > 1) {
+ $selectors = $this->emptySelectors();
+ $result = new Less_Tree_Ruleset($selectors, $env->mediaBlocks);
+ $result->multiMedia = true;
+ }
+
+ $env->mediaBlocks = array();
+ $env->mediaPath = array();
+
+ return $result;
+ }
+
+ public function compileNested($env) {
+ $path = array_merge($env->mediaPath, array($this));
+
+ // Extract the media-query conditions separated with `,` (OR).
+ foreach ($path as $key => $p) {
+ $value = $p->features instanceof Less_Tree_Value ? $p->features->value : $p->features;
+ $path[$key] = is_array($value) ? $value : array($value);
+ }
+
+ // Trace all permutations to generate the resulting media-query.
+ //
+ // (a, b and c) with nested (d, e) ->
+ // a and d
+ // a and e
+ // b and c and d
+ // b and c and e
+
+ $permuted = $this->permute($path);
+ $expressions = array();
+ foreach($permuted as $path){
+
+ for( $i=0, $len=count($path); $i < $len; $i++){
+ $path[$i] = Less_Parser::is_method($path[$i], 'toCSS') ? $path[$i] : new Less_Tree_Anonymous($path[$i]);
+ }
+
+ for( $i = count($path) - 1; $i > 0; $i-- ){
+ array_splice($path, $i, 0, array(new Less_Tree_Anonymous('and')));
+ }
+
+ $expressions[] = new Less_Tree_Expression($path);
+ }
+ $this->features = new Less_Tree_Value($expressions);
+
+
+
+ // Fake a tree-node that doesn't output anything.
+ return new Less_Tree_Ruleset(array(), array());
+ }
+
+ public function permute($arr) {
+ if (!$arr)
+ return array();
+
+ if (count($arr) == 1)
+ return $arr[0];
+
+ $result = array();
+ $rest = $this->permute(array_slice($arr, 1));
+ foreach ($rest as $r) {
+ foreach ($arr[0] as $a) {
+ $result[] = array_merge(
+ is_array($a) ? $a : array($a),
+ is_array($r) ? $r : array($r)
+ );
+ }
+ }
+
+ return $result;
+ }
+
+ public function bubbleSelectors($selectors) {
+
+ if( !$selectors) return;
+
+ $this->rules = array(new Less_Tree_Ruleset( $selectors, array($this->rules[0])));
+ }
+
+}
+
+
+/**
+ * A simple css name-value pair
+ * ex: width:100px;
+ *
+ * In bootstrap, there are about 600-1,000 simple name-value pairs (depending on how forgiving the match is) -vs- 6,020 dynamic rules (Less_Tree_Rule)
+ * Using the name-value object can speed up bootstrap compilation slightly, but it breaks color keyword interpretation: color:red -> color:#FF0000;
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_NameValue extends Less_Tree{
+
+ public $name;
+ public $value;
+ public $index;
+ public $currentFileInfo;
+ public $type = 'NameValue';
+
+ public function __construct($name, $value = null, $index = null, $currentFileInfo = null ){
+ $this->name = $name;
+ $this->value = $value;
+ $this->index = $index;
+ $this->currentFileInfo = $currentFileInfo;
+ }
+
+ public function genCSS( $output ){
+
+ $output->add(
+ $this->name
+ . Less_Environment::$_outputMap[': ']
+ . $this->value
+ . (((Less_Environment::$lastRule && Less_Parser::$options['compress'])) ? "" : ";")
+ , $this->currentFileInfo, $this->index);
+ }
+
+ public function compile ($env){
+ return $this;
+ }
+}
+
+
+/**
+ * Negative
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Negative extends Less_Tree{
+
+ public $value;
+ public $type = 'Negative';
+
+ public function __construct($node){
+ $this->value = $node;
+ }
+
+ //function accept($visitor) {
+ // $this->value = $visitor->visit($this->value);
+ //}
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $output->add( '-' );
+ $this->value->genCSS( $output );
+ }
+
+ public function compile($env) {
+ if( Less_Environment::isMathOn() ){
+ $ret = new Less_Tree_Operation('*', array( new Less_Tree_Dimension(-1), $this->value ) );
+ return $ret->compile($env);
+ }
+ return new Less_Tree_Negative( $this->value->compile($env) );
+ }
+}
+
+/**
+ * Operation
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Operation extends Less_Tree{
+
+ public $op;
+ public $operands;
+ public $isSpaced;
+ public $type = 'Operation';
+
+ /**
+ * @param string $op
+ */
+ public function __construct($op, $operands, $isSpaced = false){
+ $this->op = trim($op);
+ $this->operands = $operands;
+ $this->isSpaced = $isSpaced;
+ }
+
+ public function accept($visitor) {
+ $this->operands = $visitor->visitArray($this->operands);
+ }
+
+ public function compile($env){
+ $a = $this->operands[0]->compile($env);
+ $b = $this->operands[1]->compile($env);
+
+
+ if( Less_Environment::isMathOn() ){
+
+ if( $a instanceof Less_Tree_Dimension && $b instanceof Less_Tree_Color ){
+ $a = $a->toColor();
+
+ }elseif( $b instanceof Less_Tree_Dimension && $a instanceof Less_Tree_Color ){
+ $b = $b->toColor();
+
+ }
+
+ if( !method_exists($a,'operate') ){
+ throw new Less_Exception_Compiler("Operation on an invalid type");
+ }
+
+ return $a->operate( $this->op, $b);
+ }
+
+ return new Less_Tree_Operation($this->op, array($a, $b), $this->isSpaced );
+ }
+
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $this->operands[0]->genCSS( $output );
+ if( $this->isSpaced ){
+ $output->add( " " );
+ }
+ $output->add( $this->op );
+ if( $this->isSpaced ){
+ $output->add( ' ' );
+ }
+ $this->operands[1]->genCSS( $output );
+ }
+
+}
+
+
+/**
+ * Paren
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Paren extends Less_Tree{
+
+ public $value;
+ public $type = 'Paren';
+
+ public function __construct($value) {
+ $this->value = $value;
+ }
+
+ public function accept($visitor){
+ $this->value = $visitor->visitObj($this->value);
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $output->add( '(' );
+ $this->value->genCSS( $output );
+ $output->add( ')' );
+ }
+
+ public function compile($env) {
+ return new Less_Tree_Paren($this->value->compile($env));
+ }
+
+}
+
+
+/**
+ * Quoted
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Quoted extends Less_Tree{
+ public $escaped;
+ public $value;
+ public $quote;
+ public $index;
+ public $currentFileInfo;
+ public $type = 'Quoted';
+
+ /**
+ * @param string $str
+ */
+ public function __construct($str, $content = '', $escaped = false, $index = false, $currentFileInfo = null ){
+ $this->escaped = $escaped;
+ $this->value = $content;
+ if( $str ){
+ $this->quote = $str[0];
+ }
+ $this->index = $index;
+ $this->currentFileInfo = $currentFileInfo;
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ if( !$this->escaped ){
+ $output->add( $this->quote, $this->currentFileInfo, $this->index );
+ }
+ $output->add( $this->value );
+ if( !$this->escaped ){
+ $output->add( $this->quote );
+ }
+ }
+
+ public function compile($env){
+
+ $value = $this->value;
+ if( preg_match_all('/`([^`]+)`/', $this->value, $matches) ){
+ foreach($matches as $i => $match){
+ $js = new Less_Tree_JavaScript($matches[1], $this->index, true);
+ $js = $js->compile()->value;
+ $value = str_replace($matches[0][$i], $js, $value);
+ }
+ }
+
+ if( preg_match_all('/@\{([\w-]+)\}/',$value,$matches) ){
+ foreach($matches[1] as $i => $match){
+ $v = new Less_Tree_Variable('@' . $match, $this->index, $this->currentFileInfo );
+ $v = $v->compile($env);
+ $v = ($v instanceof Less_Tree_Quoted) ? $v->value : $v->toCSS();
+ $value = str_replace($matches[0][$i], $v, $value);
+ }
+ }
+
+ return new Less_Tree_Quoted($this->quote . $value . $this->quote, $value, $this->escaped, $this->index, $this->currentFileInfo);
+ }
+
+ public function compare($x) {
+
+ if( !Less_Parser::is_method($x, 'toCSS') ){
+ return -1;
+ }
+
+ $left = $this->toCSS();
+ $right = $x->toCSS();
+
+ if ($left === $right) {
+ return 0;
+ }
+
+ return $left < $right ? -1 : 1;
+ }
+}
+
+
+/**
+ * Rule
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Rule extends Less_Tree{
+
+ public $name;
+ public $value;
+ public $important;
+ public $merge;
+ public $index;
+ public $inline;
+ public $variable;
+ public $currentFileInfo;
+ public $type = 'Rule';
+
+ /**
+ * @param string $important
+ */
+ public function __construct($name, $value = null, $important = null, $merge = null, $index = null, $currentFileInfo = null, $inline = false){
+ $this->name = $name;
+ $this->value = ($value instanceof Less_Tree_Value || $value instanceof Less_Tree_Ruleset) ? $value : new Less_Tree_Value(array($value));
+ $this->important = $important ? ' ' . trim($important) : '';
+ $this->merge = $merge;
+ $this->index = $index;
+ $this->currentFileInfo = $currentFileInfo;
+ $this->inline = $inline;
+ $this->variable = ( is_string($name) && $name[0] === '@');
+ }
+
+ public function accept($visitor) {
+ $this->value = $visitor->visitObj( $this->value );
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+
+ $output->add( $this->name . Less_Environment::$_outputMap[': '], $this->currentFileInfo, $this->index);
+ try{
+ $this->value->genCSS( $output);
+
+ }catch( Less_Exception_Parser $e ){
+ $e->index = $this->index;
+ $e->currentFile = $this->currentFileInfo;
+ throw $e;
+ }
+ $output->add( $this->important . (($this->inline || (Less_Environment::$lastRule && Less_Parser::$options['compress'])) ? "" : ";"), $this->currentFileInfo, $this->index);
+ }
+
+ public function compile ($env){
+
+ $name = $this->name;
+ if( is_array($name) ){
+ // expand 'primitive' name directly to get
+ // things faster (~10% for benchmark.less):
+ if( count($name) === 1 && $name[0] instanceof Less_Tree_Keyword ){
+ $name = $name[0]->value;
+ }else{
+ $name = $this->CompileName($env,$name);
+ }
+ }
+
+ $strictMathBypass = Less_Parser::$options['strictMath'];
+ if( $name === "font" && !Less_Parser::$options['strictMath'] ){
+ Less_Parser::$options['strictMath'] = true;
+ }
+
+ try {
+ $evaldValue = $this->value->compile($env);
+
+ if( !$this->variable && $evaldValue->type === "DetachedRuleset") {
+ throw new Less_Exception_Compiler("Rulesets cannot be evaluated on a property.", null, $this->index, $this->currentFileInfo);
+ }
+
+ if( Less_Environment::$mixin_stack ){
+ $return = new Less_Tree_Rule($name, $evaldValue, $this->important, $this->merge, $this->index, $this->currentFileInfo, $this->inline);
+ }else{
+ $this->name = $name;
+ $this->value = $evaldValue;
+ $return = $this;
+ }
+
+ }catch( Less_Exception_Parser $e ){
+ if( !is_numeric($e->index) ){
+ $e->index = $this->index;
+ $e->currentFile = $this->currentFileInfo;
+ }
+ throw $e;
+ }
+
+ Less_Parser::$options['strictMath'] = $strictMathBypass;
+
+ return $return;
+ }
+
+
+ public function CompileName( $env, $name ){
+ $output = new Less_Output();
+ foreach($name as $n){
+ $n->compile($env)->genCSS($output);
+ }
+ return $output->toString();
+ }
+
+ public function makeImportant(){
+ return new Less_Tree_Rule($this->name, $this->value, '!important', $this->merge, $this->index, $this->currentFileInfo, $this->inline);
+ }
+
+}
+
+
+/**
+ * Ruleset
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Ruleset extends Less_Tree{
+
+ protected $lookups;
+ public $_variables;
+ public $_rulesets;
+
+ public $strictImports;
+
+ public $selectors;
+ public $rules;
+ public $root;
+ public $allowImports;
+ public $paths;
+ public $firstRoot;
+ public $type = 'Ruleset';
+ public $multiMedia;
+ public $allExtends;
+
+ public $ruleset_id;
+ public $originalRuleset;
+
+ public $first_oelements;
+
+ public function SetRulesetIndex(){
+ $this->ruleset_id = Less_Parser::$next_id++;
+ $this->originalRuleset = $this->ruleset_id;
+
+ if( $this->selectors ){
+ foreach($this->selectors as $sel){
+ if( $sel->_oelements ){
+ $this->first_oelements[$sel->_oelements[0]] = true;
+ }
+ }
+ }
+ }
+
+ public function __construct($selectors, $rules, $strictImports = null){
+ $this->selectors = $selectors;
+ $this->rules = $rules;
+ $this->lookups = array();
+ $this->strictImports = $strictImports;
+ $this->SetRulesetIndex();
+ }
+
+ public function accept( $visitor ){
+ if( $this->paths ){
+ $paths_len = count($this->paths);
+ for($i = 0,$paths_len; $i < $paths_len; $i++ ){
+ $this->paths[$i] = $visitor->visitArray($this->paths[$i]);
+ }
+ }elseif( $this->selectors ){
+ $this->selectors = $visitor->visitArray($this->selectors);
+ }
+
+ if( $this->rules ){
+ $this->rules = $visitor->visitArray($this->rules);
+ }
+ }
+
+ public function compile($env){
+
+ $ruleset = $this->PrepareRuleset($env);
+
+
+ // Store the frames around mixin definitions,
+ // so they can be evaluated like closures when the time comes.
+ $rsRuleCnt = count($ruleset->rules);
+ for( $i = 0; $i < $rsRuleCnt; $i++ ){
+ if( $ruleset->rules[$i] instanceof Less_Tree_Mixin_Definition || $ruleset->rules[$i] instanceof Less_Tree_DetachedRuleset ){
+ $ruleset->rules[$i] = $ruleset->rules[$i]->compile($env);
+ }
+ }
+
+ $mediaBlockCount = 0;
+ if( $env instanceof Less_Environment ){
+ $mediaBlockCount = count($env->mediaBlocks);
+ }
+
+ // Evaluate mixin calls.
+ $this->EvalMixinCalls( $ruleset, $env, $rsRuleCnt );
+
+
+ // Evaluate everything else
+ for( $i=0; $i<$rsRuleCnt; $i++ ){
+ if(! ($ruleset->rules[$i] instanceof Less_Tree_Mixin_Definition || $ruleset->rules[$i] instanceof Less_Tree_DetachedRuleset) ){
+ $ruleset->rules[$i] = $ruleset->rules[$i]->compile($env);
+ }
+ }
+
+ // Evaluate everything else
+ for( $i=0; $i<$rsRuleCnt; $i++ ){
+ $rule = $ruleset->rules[$i];
+
+ // for rulesets, check if it is a css guard and can be removed
+ if( $rule instanceof Less_Tree_Ruleset && $rule->selectors && count($rule->selectors) === 1 ){
+
+ // check if it can be folded in (e.g. & where)
+ if( $rule->selectors[0]->isJustParentSelector() ){
+ array_splice($ruleset->rules,$i--,1);
+ $rsRuleCnt--;
+
+ for($j = 0; $j < count($rule->rules); $j++ ){
+ $subRule = $rule->rules[$j];
+ if( !($subRule instanceof Less_Tree_Rule) || !$subRule->variable ){
+ array_splice($ruleset->rules, ++$i, 0, array($subRule));
+ $rsRuleCnt++;
+ }
+ }
+
+ }
+ }
+ }
+
+
+ // Pop the stack
+ $env->shiftFrame();
+
+ if ($mediaBlockCount) {
+ $len = count($env->mediaBlocks);
+ for($i = $mediaBlockCount; $i < $len; $i++ ){
+ $env->mediaBlocks[$i]->bubbleSelectors($ruleset->selectors);
+ }
+ }
+
+ return $ruleset;
+ }
+
+ /**
+ * Compile Less_Tree_Mixin_Call objects
+ *
+ * @param Less_Tree_Ruleset $ruleset
+ * @param integer $rsRuleCnt
+ */
+ private function EvalMixinCalls( $ruleset, $env, &$rsRuleCnt ){
+ for($i=0; $i < $rsRuleCnt; $i++){
+ $rule = $ruleset->rules[$i];
+
+ if( $rule instanceof Less_Tree_Mixin_Call ){
+ $rule = $rule->compile($env);
+
+ $temp = array();
+ foreach($rule as $r){
+ if( ($r instanceof Less_Tree_Rule) && $r->variable ){
+ // do not pollute the scope if the variable is
+ // already there. consider returning false here
+ // but we need a way to "return" variable from mixins
+ if( !$ruleset->variable($r->name) ){
+ $temp[] = $r;
+ }
+ }else{
+ $temp[] = $r;
+ }
+ }
+ $temp_count = count($temp)-1;
+ array_splice($ruleset->rules, $i, 1, $temp);
+ $rsRuleCnt += $temp_count;
+ $i += $temp_count;
+ $ruleset->resetCache();
+
+ }elseif( $rule instanceof Less_Tree_RulesetCall ){
+
+ $rule = $rule->compile($env);
+ $rules = array();
+ foreach($rule->rules as $r){
+ if( ($r instanceof Less_Tree_Rule) && $r->variable ){
+ continue;
+ }
+ $rules[] = $r;
+ }
+
+ array_splice($ruleset->rules, $i, 1, $rules);
+ $temp_count = count($rules);
+ $rsRuleCnt += $temp_count - 1;
+ $i += $temp_count-1;
+ $ruleset->resetCache();
+ }
+
+ }
+ }
+
+
+ /**
+ * Compile the selectors and create a new ruleset object for the compile() method
+ *
+ */
+ private function PrepareRuleset($env){
+
+ $hasOnePassingSelector = false;
+ $selectors = array();
+ if( $this->selectors ){
+ Less_Tree_DefaultFunc::error("it is currently only allowed in parametric mixin guards,");
+
+ foreach($this->selectors as $s){
+ $selector = $s->compile($env);
+ $selectors[] = $selector;
+ if( $selector->evaldCondition ){
+ $hasOnePassingSelector = true;
+ }
+ }
+
+ Less_Tree_DefaultFunc::reset();
+ } else {
+ $hasOnePassingSelector = true;
+ }
+
+ if( $this->rules && $hasOnePassingSelector ){
+ $rules = $this->rules;
+ }else{
+ $rules = array();
+ }
+
+ $ruleset = new Less_Tree_Ruleset($selectors, $rules, $this->strictImports);
+
+ $ruleset->originalRuleset = $this->ruleset_id;
+
+ $ruleset->root = $this->root;
+ $ruleset->firstRoot = $this->firstRoot;
+ $ruleset->allowImports = $this->allowImports;
+
+
+ // push the current ruleset to the frames stack
+ $env->unshiftFrame($ruleset);
+
+
+ // Evaluate imports
+ if( $ruleset->root || $ruleset->allowImports || !$ruleset->strictImports ){
+ $ruleset->evalImports($env);
+ }
+
+ return $ruleset;
+ }
+
+ function evalImports($env) {
+
+ $rules_len = count($this->rules);
+ for($i=0; $i < $rules_len; $i++){
+ $rule = $this->rules[$i];
+
+ if( $rule instanceof Less_Tree_Import ){
+ $rules = $rule->compile($env);
+ if( is_array($rules) ){
+ array_splice($this->rules, $i, 1, $rules);
+ $temp_count = count($rules)-1;
+ $i += $temp_count;
+ $rules_len += $temp_count;
+ }else{
+ array_splice($this->rules, $i, 1, array($rules));
+ }
+
+ $this->resetCache();
+ }
+ }
+ }
+
+ function makeImportant(){
+
+ $important_rules = array();
+ foreach($this->rules as $rule){
+ if( $rule instanceof Less_Tree_Rule || $rule instanceof Less_Tree_Ruleset ){
+ $important_rules[] = $rule->makeImportant();
+ }else{
+ $important_rules[] = $rule;
+ }
+ }
+
+ return new Less_Tree_Ruleset($this->selectors, $important_rules, $this->strictImports );
+ }
+
+ public function matchArgs($args){
+ return !$args;
+ }
+
+ // lets you call a css selector with a guard
+ public function matchCondition( $args, $env ){
+ $lastSelector = end($this->selectors);
+
+ if( !$lastSelector->evaldCondition ){
+ return false;
+ }
+ if( $lastSelector->condition && !$lastSelector->condition->compile( $env->copyEvalEnv( $env->frames ) ) ){
+ return false;
+ }
+ return true;
+ }
+
+ function resetCache(){
+ $this->_rulesets = null;
+ $this->_variables = null;
+ $this->lookups = array();
+ }
+
+ public function variables(){
+ $this->_variables = array();
+ foreach( $this->rules as $r){
+ if ($r instanceof Less_Tree_Rule && $r->variable === true) {
+ $this->_variables[$r->name] = $r;
+ }
+ }
+ }
+
+ public function variable($name){
+
+ if( is_null($this->_variables) ){
+ $this->variables();
+ }
+ return isset($this->_variables[$name]) ? $this->_variables[$name] : null;
+ }
+
+ public function find( $selector, $self = null ){
+
+ $key = implode(' ',$selector->_oelements);
+
+ if( !isset($this->lookups[$key]) ){
+
+ if( !$self ){
+ $self = $this->ruleset_id;
+ }
+
+ $this->lookups[$key] = array();
+
+ $first_oelement = $selector->_oelements[0];
+
+ foreach($this->rules as $rule){
+ if( $rule instanceof Less_Tree_Ruleset && $rule->ruleset_id != $self ){
+
+ if( isset($rule->first_oelements[$first_oelement]) ){
+
+ foreach( $rule->selectors as $ruleSelector ){
+ $match = $selector->match($ruleSelector);
+ if( $match ){
+ if( $selector->elements_len > $match ){
+ $this->lookups[$key] = array_merge($this->lookups[$key], $rule->find( new Less_Tree_Selector(array_slice($selector->elements, $match)), $self));
+ } else {
+ $this->lookups[$key][] = $rule;
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return $this->lookups[$key];
+ }
+
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+
+ if( !$this->root ){
+ Less_Environment::$tabLevel++;
+ }
+
+ $tabRuleStr = $tabSetStr = '';
+ if( !Less_Parser::$options['compress'] ){
+ if( Less_Environment::$tabLevel ){
+ $tabRuleStr = "\n".str_repeat( ' ' , Less_Environment::$tabLevel );
+ $tabSetStr = "\n".str_repeat( ' ' , Less_Environment::$tabLevel-1 );
+ }else{
+ $tabSetStr = $tabRuleStr = "\n";
+ }
+ }
+
+
+ $ruleNodes = array();
+ $rulesetNodes = array();
+ foreach($this->rules as $rule){
+
+ $class = get_class($rule);
+ if( ($class === 'Less_Tree_Media') || ($class === 'Less_Tree_Directive') || ($this->root && $class === 'Less_Tree_Comment') || ($class === 'Less_Tree_Ruleset' && $rule->rules) ){
+ $rulesetNodes[] = $rule;
+ }else{
+ $ruleNodes[] = $rule;
+ }
+ }
+
+ // If this is the root node, we don't render
+ // a selector, or {}.
+ if( !$this->root ){
+
+ /*
+ debugInfo = tree.debugInfo(env, this, tabSetStr);
+
+ if (debugInfo) {
+ output.add(debugInfo);
+ output.add(tabSetStr);
+ }
+ */
+
+ $paths_len = count($this->paths);
+ for( $i = 0; $i < $paths_len; $i++ ){
+ $path = $this->paths[$i];
+ $firstSelector = true;
+
+ foreach($path as $p){
+ $p->genCSS( $output, $firstSelector );
+ $firstSelector = false;
+ }
+
+ if( $i + 1 < $paths_len ){
+ $output->add( ',' . $tabSetStr );
+ }
+ }
+
+ $output->add( (Less_Parser::$options['compress'] ? '{' : " {") . $tabRuleStr );
+ }
+
+ // Compile rules and rulesets
+ $ruleNodes_len = count($ruleNodes);
+ $rulesetNodes_len = count($rulesetNodes);
+ for( $i = 0; $i < $ruleNodes_len; $i++ ){
+ $rule = $ruleNodes[$i];
+
+ // @page{ directive ends up with root elements inside it, a mix of rules and rulesets
+ // In this instance we do not know whether it is the last property
+ if( $i + 1 === $ruleNodes_len && (!$this->root || $rulesetNodes_len === 0 || $this->firstRoot ) ){
+ Less_Environment::$lastRule = true;
+ }
+
+ $rule->genCSS( $output );
+
+ if( !Less_Environment::$lastRule ){
+ $output->add( $tabRuleStr );
+ }else{
+ Less_Environment::$lastRule = false;
+ }
+ }
+
+ if( !$this->root ){
+ $output->add( $tabSetStr . '}' );
+ Less_Environment::$tabLevel--;
+ }
+
+ $firstRuleset = true;
+ $space = ($this->root ? $tabRuleStr : $tabSetStr);
+ for( $i = 0; $i < $rulesetNodes_len; $i++ ){
+
+ if( $ruleNodes_len && $firstRuleset ){
+ $output->add( $space );
+ }elseif( !$firstRuleset ){
+ $output->add( $space );
+ }
+ $firstRuleset = false;
+ $rulesetNodes[$i]->genCSS( $output);
+ }
+
+ if( !Less_Parser::$options['compress'] && $this->firstRoot ){
+ $output->add( "\n" );
+ }
+
+ }
+
+
+ function markReferenced(){
+ if( !$this->selectors ){
+ return;
+ }
+ foreach($this->selectors as $selector){
+ $selector->markReferenced();
+ }
+ }
+
+ public function joinSelectors( $context, $selectors ){
+ $paths = array();
+ if( is_array($selectors) ){
+ foreach($selectors as $selector) {
+ $this->joinSelector( $paths, $context, $selector);
+ }
+ }
+ return $paths;
+ }
+
+ public function joinSelector( &$paths, $context, $selector){
+
+ $hasParentSelector = false;
+
+ foreach($selector->elements as $el) {
+ if( $el->value === '&') {
+ $hasParentSelector = true;
+ }
+ }
+
+ if( !$hasParentSelector ){
+ if( $context ){
+ foreach($context as $context_el){
+ $paths[] = array_merge($context_el, array($selector) );
+ }
+ }else {
+ $paths[] = array($selector);
+ }
+ return;
+ }
+
+
+ // The paths are [[Selector]]
+ // The first list is a list of comma seperated selectors
+ // The inner list is a list of inheritance seperated selectors
+ // e.g.
+ // .a, .b {
+ // .c {
+ // }
+ // }
+ // == [[.a] [.c]] [[.b] [.c]]
+ //
+
+ // the elements from the current selector so far
+ $currentElements = array();
+ // the current list of new selectors to add to the path.
+ // We will build it up. We initiate it with one empty selector as we "multiply" the new selectors
+ // by the parents
+ $newSelectors = array(array());
+
+
+ foreach( $selector->elements as $el){
+
+ // non parent reference elements just get added
+ if( $el->value !== '&' ){
+ $currentElements[] = $el;
+ } else {
+ // the new list of selectors to add
+ $selectorsMultiplied = array();
+
+ // merge the current list of non parent selector elements
+ // on to the current list of selectors to add
+ if( $currentElements ){
+ $this->mergeElementsOnToSelectors( $currentElements, $newSelectors);
+ }
+
+ // loop through our current selectors
+ foreach($newSelectors as $sel){
+
+ // if we don't have any parent paths, the & might be in a mixin so that it can be used
+ // whether there are parents or not
+ if( !$context ){
+ // the combinator used on el should now be applied to the next element instead so that
+ // it is not lost
+ if( $sel ){
+ $sel[0]->elements = array_slice($sel[0]->elements,0);
+ $sel[0]->elements[] = new Less_Tree_Element($el->combinator, '', $el->index, $el->currentFileInfo );
+ }
+ $selectorsMultiplied[] = $sel;
+ }else {
+
+ // and the parent selectors
+ foreach($context as $parentSel){
+ // We need to put the current selectors
+ // then join the last selector's elements on to the parents selectors
+
+ // our new selector path
+ $newSelectorPath = array();
+ // selectors from the parent after the join
+ $afterParentJoin = array();
+ $newJoinedSelectorEmpty = true;
+
+ //construct the joined selector - if & is the first thing this will be empty,
+ // if not newJoinedSelector will be the last set of elements in the selector
+ if( $sel ){
+ $newSelectorPath = $sel;
+ $lastSelector = array_pop($newSelectorPath);
+ $newJoinedSelector = $selector->createDerived( array_slice($lastSelector->elements,0) );
+ $newJoinedSelectorEmpty = false;
+ }
+ else {
+ $newJoinedSelector = $selector->createDerived(array());
+ }
+
+ //put together the parent selectors after the join
+ if ( count($parentSel) > 1) {
+ $afterParentJoin = array_merge($afterParentJoin, array_slice($parentSel,1) );
+ }
+
+ if ( $parentSel ){
+ $newJoinedSelectorEmpty = false;
+
+ // join the elements so far with the first part of the parent
+ $newJoinedSelector->elements[] = new Less_Tree_Element( $el->combinator, $parentSel[0]->elements[0]->value, $el->index, $el->currentFileInfo);
+
+ $newJoinedSelector->elements = array_merge( $newJoinedSelector->elements, array_slice($parentSel[0]->elements, 1) );
+ }
+
+ if (!$newJoinedSelectorEmpty) {
+ // now add the joined selector
+ $newSelectorPath[] = $newJoinedSelector;
+ }
+
+ // and the rest of the parent
+ $newSelectorPath = array_merge($newSelectorPath, $afterParentJoin);
+
+ // add that to our new set of selectors
+ $selectorsMultiplied[] = $newSelectorPath;
+ }
+ }
+ }
+
+ // our new selectors has been multiplied, so reset the state
+ $newSelectors = $selectorsMultiplied;
+ $currentElements = array();
+ }
+ }
+
+ // if we have any elements left over (e.g. .a& .b == .b)
+ // add them on to all the current selectors
+ if( $currentElements ){
+ $this->mergeElementsOnToSelectors($currentElements, $newSelectors);
+ }
+ foreach( $newSelectors as $new_sel){
+ if( $new_sel ){
+ $paths[] = $new_sel;
+ }
+ }
+ }
+
+ function mergeElementsOnToSelectors( $elements, &$selectors){
+
+ if( !$selectors ){
+ $selectors[] = array( new Less_Tree_Selector($elements) );
+ return;
+ }
+
+
+ foreach( $selectors as &$sel){
+
+ // if the previous thing in sel is a parent this needs to join on to it
+ if( $sel ){
+ $last = count($sel)-1;
+ $sel[$last] = $sel[$last]->createDerived( array_merge($sel[$last]->elements, $elements) );
+ }else{
+ $sel[] = new Less_Tree_Selector( $elements );
+ }
+ }
+ }
+}
+
+
+/**
+ * RulesetCall
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_RulesetCall extends Less_Tree{
+
+ public $variable;
+ public $type = "RulesetCall";
+
+ public function __construct($variable){
+ $this->variable = $variable;
+ }
+
+ public function accept($visitor) {}
+
+ public function compile( $env ){
+ $variable = new Less_Tree_Variable($this->variable);
+ $detachedRuleset = $variable->compile($env);
+ return $detachedRuleset->callEval($env);
+ }
+}
+
+
+
+/**
+ * Selector
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Selector extends Less_Tree{
+
+ public $elements;
+ public $condition;
+ public $extendList = array();
+ public $_css;
+ public $index;
+ public $evaldCondition = false;
+ public $type = 'Selector';
+ public $currentFileInfo = array();
+ public $isReferenced;
+ public $mediaEmpty;
+
+ public $elements_len = 0;
+
+ public $_oelements;
+ public $_oelements_len;
+ public $cacheable = true;
+
+ /**
+ * @param boolean $isReferenced
+ */
+ public function __construct( $elements, $extendList = array() , $condition = null, $index=null, $currentFileInfo=null, $isReferenced=null ){
+
+ $this->elements = $elements;
+ $this->elements_len = count($elements);
+ $this->extendList = $extendList;
+ $this->condition = $condition;
+ if( $currentFileInfo ){
+ $this->currentFileInfo = $currentFileInfo;
+ }
+ $this->isReferenced = $isReferenced;
+ if( !$condition ){
+ $this->evaldCondition = true;
+ }
+
+ $this->CacheElements();
+ }
+
+ public function accept($visitor) {
+ $this->elements = $visitor->visitArray($this->elements);
+ $this->extendList = $visitor->visitArray($this->extendList);
+ if( $this->condition ){
+ $this->condition = $visitor->visitObj($this->condition);
+ }
+
+ if( $visitor instanceof Less_Visitor_extendFinder ){
+ $this->CacheElements();
+ }
+ }
+
+ public function createDerived( $elements, $extendList = null, $evaldCondition = null ){
+ $newSelector = new Less_Tree_Selector( $elements, ($extendList ? $extendList : $this->extendList), null, $this->index, $this->currentFileInfo, $this->isReferenced);
+ $newSelector->evaldCondition = $evaldCondition ? $evaldCondition : $this->evaldCondition;
+ return $newSelector;
+ }
+
+
+ public function match( $other ){
+
+ if( !$other->_oelements || ($this->elements_len < $other->_oelements_len) ){
+ return 0;
+ }
+
+ for( $i = 0; $i < $other->_oelements_len; $i++ ){
+ if( $this->elements[$i]->value !== $other->_oelements[$i]) {
+ return 0;
+ }
+ }
+
+ return $other->_oelements_len; // return number of matched elements
+ }
+
+
+ public function CacheElements(){
+
+ $this->_oelements = array();
+ $css = '';
+
+ foreach($this->elements as $v){
+
+ $css .= $v->combinator;
+ if( !$v->value_is_object ){
+ $css .= $v->value;
+ continue;
+ }
+
+ if( !property_exists($v->value,'value') || !is_string($v->value->value) ){
+ $this->cacheable = false;
+ return;
+ }
+ $css .= $v->value->value;
+ }
+
+ $this->_oelements_len = preg_match_all('/[,&#\.\w-](?:[\w-]|(?:\\\\.))*/', $css, $matches);
+ if( $this->_oelements_len ){
+ $this->_oelements = $matches[0];
+
+ if( $this->_oelements[0] === '&' ){
+ array_shift($this->_oelements);
+ $this->_oelements_len--;
+ }
+ }
+ }
+
+ public function isJustParentSelector(){
+ return !$this->mediaEmpty &&
+ count($this->elements) === 1 &&
+ $this->elements[0]->value === '&' &&
+ ($this->elements[0]->combinator === ' ' || $this->elements[0]->combinator === '');
+ }
+
+ public function compile($env) {
+
+ $elements = array();
+ foreach($this->elements as $el){
+ $elements[] = $el->compile($env);
+ }
+
+ $extendList = array();
+ foreach($this->extendList as $el){
+ $extendList[] = $el->compile($el);
+ }
+
+ $evaldCondition = false;
+ if( $this->condition ){
+ $evaldCondition = $this->condition->compile($env);
+ }
+
+ return $this->createDerived( $elements, $extendList, $evaldCondition );
+ }
+
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output, $firstSelector = true ){
+
+ if( !$firstSelector && $this->elements[0]->combinator === "" ){
+ $output->add(' ', $this->currentFileInfo, $this->index);
+ }
+
+ foreach($this->elements as $element){
+ $element->genCSS( $output );
+ }
+ }
+
+ public function markReferenced(){
+ $this->isReferenced = true;
+ }
+
+ public function getIsReferenced(){
+ return !isset($this->currentFileInfo['reference']) || !$this->currentFileInfo['reference'] || $this->isReferenced;
+ }
+
+ public function getIsOutput(){
+ return $this->evaldCondition;
+ }
+
+}
+
+
+/**
+ * UnicodeDescriptor
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_UnicodeDescriptor extends Less_Tree{
+
+ public $value;
+ public $type = 'UnicodeDescriptor';
+
+ public function __construct($value){
+ $this->value = $value;
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $output->add( $this->value );
+ }
+
+ public function compile(){
+ return $this;
+ }
+}
+
+
+
+/**
+ * Unit
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Unit extends Less_Tree{
+
+ var $numerator = array();
+ var $denominator = array();
+ public $backupUnit;
+ public $type = 'Unit';
+
+ public function __construct($numerator = array(), $denominator = array(), $backupUnit = null ){
+ $this->numerator = $numerator;
+ $this->denominator = $denominator;
+ $this->backupUnit = $backupUnit;
+ }
+
+ public function __clone(){
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+
+ if( $this->numerator ){
+ $output->add( $this->numerator[0] );
+ }elseif( $this->denominator ){
+ $output->add( $this->denominator[0] );
+ }elseif( !Less_Parser::$options['strictUnits'] && $this->backupUnit ){
+ $output->add( $this->backupUnit );
+ return ;
+ }
+ }
+
+ public function toString(){
+ $returnStr = implode('*',$this->numerator);
+ foreach($this->denominator as $d){
+ $returnStr .= '/'.$d;
+ }
+ return $returnStr;
+ }
+
+ public function __toString(){
+ return $this->toString();
+ }
+
+
+ /**
+ * @param Less_Tree_Unit $other
+ */
+ public function compare($other) {
+ return $this->is( $other->toString() ) ? 0 : -1;
+ }
+
+ public function is($unitString){
+ return $this->toString() === $unitString;
+ }
+
+ public function isLength(){
+ $css = $this->toCSS();
+ return !!preg_match('/px|em|%|in|cm|mm|pc|pt|ex/',$css);
+ }
+
+ public function isAngle() {
+ return isset( Less_Tree_UnitConversions::$angle[$this->toCSS()] );
+ }
+
+ public function isEmpty(){
+ return !$this->numerator && !$this->denominator;
+ }
+
+ public function isSingular() {
+ return count($this->numerator) <= 1 && !$this->denominator;
+ }
+
+
+ public function usedUnits(){
+ $result = array();
+
+ foreach(Less_Tree_UnitConversions::$groups as $groupName){
+ $group = Less_Tree_UnitConversions::${$groupName};
+
+ foreach($this->numerator as $atomicUnit){
+ if( isset($group[$atomicUnit]) && !isset($result[$groupName]) ){
+ $result[$groupName] = $atomicUnit;
+ }
+ }
+
+ foreach($this->denominator as $atomicUnit){
+ if( isset($group[$atomicUnit]) && !isset($result[$groupName]) ){
+ $result[$groupName] = $atomicUnit;
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ public function cancel(){
+ $counter = array();
+ $backup = null;
+
+ foreach($this->numerator as $atomicUnit){
+ if( !$backup ){
+ $backup = $atomicUnit;
+ }
+ $counter[$atomicUnit] = ( isset($counter[$atomicUnit]) ? $counter[$atomicUnit] : 0) + 1;
+ }
+
+ foreach($this->denominator as $atomicUnit){
+ if( !$backup ){
+ $backup = $atomicUnit;
+ }
+ $counter[$atomicUnit] = ( isset($counter[$atomicUnit]) ? $counter[$atomicUnit] : 0) - 1;
+ }
+
+ $this->numerator = array();
+ $this->denominator = array();
+
+ foreach($counter as $atomicUnit => $count){
+ if( $count > 0 ){
+ for( $i = 0; $i < $count; $i++ ){
+ $this->numerator[] = $atomicUnit;
+ }
+ }elseif( $count < 0 ){
+ for( $i = 0; $i < -$count; $i++ ){
+ $this->denominator[] = $atomicUnit;
+ }
+ }
+ }
+
+ if( !$this->numerator && !$this->denominator && $backup ){
+ $this->backupUnit = $backup;
+ }
+
+ sort($this->numerator);
+ sort($this->denominator);
+ }
+
+
+}
+
+
+
+/**
+ * UnitConversions
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_UnitConversions{
+
+ public static $groups = array('length','duration','angle');
+
+ public static $length = array(
+ 'm'=> 1,
+ 'cm'=> 0.01,
+ 'mm'=> 0.001,
+ 'in'=> 0.0254,
+ 'px'=> 0.000264583, // 0.0254 / 96,
+ 'pt'=> 0.000352778, // 0.0254 / 72,
+ 'pc'=> 0.004233333, // 0.0254 / 72 * 12
+ );
+
+ public static $duration = array(
+ 's'=> 1,
+ 'ms'=> 0.001
+ );
+
+ public static $angle = array(
+ 'rad' => 0.1591549430919, // 1/(2*M_PI),
+ 'deg' => 0.002777778, // 1/360,
+ 'grad'=> 0.0025, // 1/400,
+ 'turn'=> 1
+ );
+
+}
+
+/**
+ * Url
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Url extends Less_Tree{
+
+ public $attrs;
+ public $value;
+ public $currentFileInfo;
+ public $isEvald;
+ public $type = 'Url';
+
+ public function __construct($value, $currentFileInfo = null, $isEvald = null){
+ $this->value = $value;
+ $this->currentFileInfo = $currentFileInfo;
+ $this->isEvald = $isEvald;
+ }
+
+ public function accept( $visitor ){
+ $this->value = $visitor->visitObj($this->value);
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ public function genCSS( $output ){
+ $output->add( 'url(' );
+ $this->value->genCSS( $output );
+ $output->add( ')' );
+ }
+
+ /**
+ * @param Less_Functions $ctx
+ */
+ public function compile($ctx){
+ $val = $this->value->compile($ctx);
+
+ if( !$this->isEvald ){
+ // Add the base path if the URL is relative
+ if( Less_Parser::$options['relativeUrls']
+ && $this->currentFileInfo
+ && is_string($val->value)
+ && Less_Environment::isPathRelative($val->value)
+ ){
+ $rootpath = $this->currentFileInfo['uri_root'];
+ if ( !$val->quote ){
+ $rootpath = preg_replace('/[\(\)\'"\s]/', '\\$1', $rootpath );
+ }
+ $val->value = $rootpath . $val->value;
+ }
+
+ $val->value = Less_Environment::normalizePath( $val->value);
+ }
+
+ // Add cache buster if enabled
+ if( Less_Parser::$options['urlArgs'] ){
+ if( !preg_match('/^\s*data:/',$val->value) ){
+ $delimiter = strpos($val->value,'?') === false ? '?' : '&';
+ $urlArgs = $delimiter . Less_Parser::$options['urlArgs'];
+ $hash_pos = strpos($val->value,'#');
+ if( $hash_pos !== false ){
+ $val->value = substr_replace($val->value,$urlArgs, $hash_pos, 0);
+ } else {
+ $val->value .= $urlArgs;
+ }
+ }
+ }
+
+ return new Less_Tree_URL($val, $this->currentFileInfo, true);
+ }
+
+}
+
+
+/**
+ * Value
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Value extends Less_Tree{
+
+ public $type = 'Value';
+ public $value;
+
+ public function __construct($value){
+ $this->value = $value;
+ }
+
+ public function accept($visitor) {
+ $this->value = $visitor->visitArray($this->value);
+ }
+
+ public function compile($env){
+
+ $ret = array();
+ $i = 0;
+ foreach($this->value as $i => $v){
+ $ret[] = $v->compile($env);
+ }
+ if( $i > 0 ){
+ return new Less_Tree_Value($ret);
+ }
+ return $ret[0];
+ }
+
+ /**
+ * @see Less_Tree::genCSS
+ */
+ function genCSS( $output ){
+ $len = count($this->value);
+ for($i = 0; $i < $len; $i++ ){
+ $this->value[$i]->genCSS( $output );
+ if( $i+1 < $len ){
+ $output->add( Less_Environment::$_outputMap[','] );
+ }
+ }
+ }
+
+}
+
+
+/**
+ * Variable
+ *
+ * @package Less
+ * @subpackage tree
+ */
+class Less_Tree_Variable extends Less_Tree{
+
+ public $name;
+ public $index;
+ public $currentFileInfo;
+ public $evaluating = false;
+ public $type = 'Variable';
+
+ /**
+ * @param string $name
+ */
+ public function __construct($name, $index = null, $currentFileInfo = null) {
+ $this->name = $name;
+ $this->index = $index;
+ $this->currentFileInfo = $currentFileInfo;
+ }
+
+ public function compile($env) {
+
+ if( $this->name[1] === '@' ){
+ $v = new Less_Tree_Variable(substr($this->name, 1), $this->index + 1, $this->currentFileInfo);
+ $name = '@' . $v->compile($env)->value;
+ }else{
+ $name = $this->name;
+ }
+
+ if ($this->evaluating) {
+ throw new Less_Exception_Compiler("Recursive variable definition for " . $name, null, $this->index, $this->currentFileInfo);
+ }
+
+ $this->evaluating = true;
+
+ foreach($env->frames as $frame){
+ if( $v = $frame->variable($name) ){
+ $r = $v->value->compile($env);
+ $this->evaluating = false;
+ return $r;
+ }
+ }
+
+ throw new Less_Exception_Compiler("variable " . $name . " is undefined in file ".$this->currentFileInfo["filename"], null, $this->index, $this->currentFileInfo);
+ }
+
+}
+
+
+
+class Less_Tree_Mixin_Call extends Less_Tree{
+
+ public $selector;
+ public $arguments;
+ public $index;
+ public $currentFileInfo;
+
+ public $important;
+ public $type = 'MixinCall';
+
+ /**
+ * less.js: tree.mixin.Call
+ *
+ */
+ public function __construct($elements, $args, $index, $currentFileInfo, $important = false){
+ $this->selector = new Less_Tree_Selector($elements);
+ $this->arguments = $args;
+ $this->index = $index;
+ $this->currentFileInfo = $currentFileInfo;
+ $this->important = $important;
+ }
+
+ //function accept($visitor){
+ // $this->selector = $visitor->visit($this->selector);
+ // $this->arguments = $visitor->visit($this->arguments);
+ //}
+
+
+ public function compile($env){
+
+ $rules = array();
+ $match = false;
+ $isOneFound = false;
+ $candidates = array();
+ $defaultUsed = false;
+ $conditionResult = array();
+
+ $args = array();
+ foreach($this->arguments as $a){
+ $args[] = array('name'=> $a['name'], 'value' => $a['value']->compile($env) );
+ }
+
+ foreach($env->frames as $frame){
+
+ $mixins = $frame->find($this->selector);
+
+ if( !$mixins ){
+ continue;
+ }
+
+ $isOneFound = true;
+ $defNone = 0;
+ $defTrue = 1;
+ $defFalse = 2;
+
+ // To make `default()` function independent of definition order we have two "subpasses" here.
+ // At first we evaluate each guard *twice* (with `default() == true` and `default() == false`),
+ // and build candidate list with corresponding flags. Then, when we know all possible matches,
+ // we make a final decision.
+
+ $mixins_len = count($mixins);
+ for( $m = 0; $m < $mixins_len; $m++ ){
+ $mixin = $mixins[$m];
+
+ if( $this->IsRecursive( $env, $mixin ) ){
+ continue;
+ }
+
+ if( $mixin->matchArgs($args, $env) ){
+
+ $candidate = array('mixin' => $mixin, 'group' => $defNone);
+
+ if( $mixin instanceof Less_Tree_Ruleset ){
+
+ for( $f = 0; $f < 2; $f++ ){
+ Less_Tree_DefaultFunc::value($f);
+ $conditionResult[$f] = $mixin->matchCondition( $args, $env);
+ }
+ if( $conditionResult[0] || $conditionResult[1] ){
+ if( $conditionResult[0] != $conditionResult[1] ){
+ $candidate['group'] = $conditionResult[1] ? $defTrue : $defFalse;
+ }
+
+ $candidates[] = $candidate;
+ }
+ }else{
+ $candidates[] = $candidate;
+ }
+
+ $match = true;
+ }
+ }
+
+ Less_Tree_DefaultFunc::reset();
+
+
+ $count = array(0, 0, 0);
+ for( $m = 0; $m < count($candidates); $m++ ){
+ $count[ $candidates[$m]['group'] ]++;
+ }
+
+ if( $count[$defNone] > 0 ){
+ $defaultResult = $defFalse;
+ } else {
+ $defaultResult = $defTrue;
+ if( ($count[$defTrue] + $count[$defFalse]) > 1 ){
+ throw new Exception( 'Ambiguous use of `default()` found when matching for `'. $this->format($args) + '`' );
+ }
+ }
+
+
+ $candidates_length = count($candidates);
+ $length_1 = ($candidates_length == 1);
+
+ for( $m = 0; $m < $candidates_length; $m++){
+ $candidate = $candidates[$m]['group'];
+ if( ($candidate === $defNone) || ($candidate === $defaultResult) ){
+ try{
+ $mixin = $candidates[$m]['mixin'];
+ if( !($mixin instanceof Less_Tree_Mixin_Definition) ){
+ $mixin = new Less_Tree_Mixin_Definition('', array(), $mixin->rules, null, false);
+ $mixin->originalRuleset = $mixins[$m]->originalRuleset;
+ }
+ $rules = array_merge($rules, $mixin->evalCall($env, $args, $this->important)->rules);
+ } catch (Exception $e) {
+ //throw new Less_Exception_Compiler($e->getMessage(), $e->index, null, $this->currentFileInfo['filename']);
+ throw new Less_Exception_Compiler($e->getMessage(), null, null, $this->currentFileInfo);
+ }
+ }
+ }
+
+ if( $match ){
+ if( !$this->currentFileInfo || !isset($this->currentFileInfo['reference']) || !$this->currentFileInfo['reference'] ){
+ Less_Tree::ReferencedArray($rules);
+ }
+
+ return $rules;
+ }
+ }
+
+ if( $isOneFound ){
+ throw new Less_Exception_Compiler('No matching definition was found for `'.$this->Format( $args ).'`', null, $this->index, $this->currentFileInfo);
+
+ }else{
+ throw new Less_Exception_Compiler(trim($this->selector->toCSS()) . " is undefined in ".$this->currentFileInfo['filename'], null, $this->index);
+ }
+
+ }
+
+ /**
+ * Format the args for use in exception messages
+ *
+ */
+ private function Format($args){
+ $message = array();
+ if( $args ){
+ foreach($args as $a){
+ $argValue = '';
+ if( $a['name'] ){
+ $argValue += $a['name']+':';
+ }
+ if( is_object($a['value']) ){
+ $argValue += $a['value']->toCSS();
+ }else{
+ $argValue += '???';
+ }
+ $message[] = $argValue;
+ }
+ }
+ return implode(', ',$message);
+ }
+
+
+ /**
+ * Are we in a recursive mixin call?
+ *
+ * @return bool
+ */
+ private function IsRecursive( $env, $mixin ){
+
+ foreach($env->frames as $recur_frame){
+ if( !($mixin instanceof Less_Tree_Mixin_Definition) ){
+
+ if( $mixin === $recur_frame ){
+ return true;
+ }
+
+ if( isset($recur_frame->originalRuleset) && $mixin->ruleset_id === $recur_frame->originalRuleset ){
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+}
+
+
+
+
+class Less_Tree_Mixin_Definition extends Less_Tree_Ruleset{
+ public $name;
+ public $selectors;
+ public $params;
+ public $arity = 0;
+ public $rules;
+ public $lookups = array();
+ public $required = 0;
+ public $frames = array();
+ public $condition;
+ public $variadic;
+ public $type = 'MixinDefinition';
+
+
+ // less.js : /lib/less/tree/mixin.js : tree.mixin.Definition
+ public function __construct($name, $params, $rules, $condition, $variadic = false, $frames = array() ){
+ $this->name = $name;
+ $this->selectors = array(new Less_Tree_Selector(array( new Less_Tree_Element(null, $name))));
+
+ $this->params = $params;
+ $this->condition = $condition;
+ $this->variadic = $variadic;
+ $this->rules = $rules;
+
+ if( $params ){
+ $this->arity = count($params);
+ foreach( $params as $p ){
+ if (! isset($p['name']) || ($p['name'] && !isset($p['value']))) {
+ $this->required++;
+ }
+ }
+ }
+
+ $this->frames = $frames;
+ $this->SetRulesetIndex();
+ }
+
+
+
+ //function accept( $visitor ){
+ // $this->params = $visitor->visit($this->params);
+ // $this->rules = $visitor->visit($this->rules);
+ // $this->condition = $visitor->visit($this->condition);
+ //}
+
+
+ public function toCSS(){
+ return '';
+ }
+
+ // less.js : /lib/less/tree/mixin.js : tree.mixin.Definition.evalParams
+ public function compileParams($env, $mixinFrames, $args = array() , &$evaldArguments = array() ){
+ $frame = new Less_Tree_Ruleset(null, array());
+ $params = $this->params;
+ $mixinEnv = null;
+ $argsLength = 0;
+
+ if( $args ){
+ $argsLength = count($args);
+ for($i = 0; $i < $argsLength; $i++ ){
+ $arg = $args[$i];
+
+ if( $arg && $arg['name'] ){
+ $isNamedFound = false;
+
+ foreach($params as $j => $param){
+ if( !isset($evaldArguments[$j]) && $arg['name'] === $params[$j]['name']) {
+ $evaldArguments[$j] = $arg['value']->compile($env);
+ array_unshift($frame->rules, new Less_Tree_Rule( $arg['name'], $arg['value']->compile($env) ) );
+ $isNamedFound = true;
+ break;
+ }
+ }
+ if ($isNamedFound) {
+ array_splice($args, $i, 1);
+ $i--;
+ $argsLength--;
+ continue;
+ } else {
+ throw new Less_Exception_Compiler("Named argument for " . $this->name .' '.$args[$i]['name'] . ' not found');
+ }
+ }
+ }
+ }
+
+ $argIndex = 0;
+ foreach($params as $i => $param){
+
+ if ( isset($evaldArguments[$i]) ){ continue; }
+
+ $arg = null;
+ if( isset($args[$argIndex]) ){
+ $arg = $args[$argIndex];
+ }
+
+ if (isset($param['name']) && $param['name']) {
+
+ if( isset($param['variadic']) ){
+ $varargs = array();
+ for ($j = $argIndex; $j < $argsLength; $j++) {
+ $varargs[] = $args[$j]['value']->compile($env);
+ }
+ $expression = new Less_Tree_Expression($varargs);
+ array_unshift($frame->rules, new Less_Tree_Rule($param['name'], $expression->compile($env)));
+ }else{
+ $val = ($arg && $arg['value']) ? $arg['value'] : false;
+
+ if ($val) {
+ $val = $val->compile($env);
+ } else if ( isset($param['value']) ) {
+
+ if( !$mixinEnv ){
+ $mixinEnv = new Less_Environment();
+ $mixinEnv->frames = array_merge( array($frame), $mixinFrames);
+ }
+
+ $val = $param['value']->compile($mixinEnv);
+ $frame->resetCache();
+ } else {
+ throw new Less_Exception_Compiler("Wrong number of arguments for " . $this->name . " (" . $argsLength . ' for ' . $this->arity . ")");
+ }
+
+ array_unshift($frame->rules, new Less_Tree_Rule($param['name'], $val));
+ $evaldArguments[$i] = $val;
+ }
+ }
+
+ if ( isset($param['variadic']) && $args) {
+ for ($j = $argIndex; $j < $argsLength; $j++) {
+ $evaldArguments[$j] = $args[$j]['value']->compile($env);
+ }
+ }
+ $argIndex++;
+ }
+
+ ksort($evaldArguments);
+ $evaldArguments = array_values($evaldArguments);
+
+ return $frame;
+ }
+
+ public function compile($env) {
+ if( $this->frames ){
+ return new Less_Tree_Mixin_Definition($this->name, $this->params, $this->rules, $this->condition, $this->variadic, $this->frames );
+ }
+ return new Less_Tree_Mixin_Definition($this->name, $this->params, $this->rules, $this->condition, $this->variadic, $env->frames );
+ }
+
+ public function evalCall($env, $args = NULL, $important = NULL) {
+
+ Less_Environment::$mixin_stack++;
+
+ $_arguments = array();
+
+ if( $this->frames ){
+ $mixinFrames = array_merge($this->frames, $env->frames);
+ }else{
+ $mixinFrames = $env->frames;
+ }
+
+ $frame = $this->compileParams($env, $mixinFrames, $args, $_arguments);
+
+ $ex = new Less_Tree_Expression($_arguments);
+ array_unshift($frame->rules, new Less_Tree_Rule('@arguments', $ex->compile($env)));
+
+
+ $ruleset = new Less_Tree_Ruleset(null, $this->rules);
+ $ruleset->originalRuleset = $this->ruleset_id;
+
+
+ $ruleSetEnv = new Less_Environment();
+ $ruleSetEnv->frames = array_merge( array($this, $frame), $mixinFrames );
+ $ruleset = $ruleset->compile( $ruleSetEnv );
+
+ if( $important ){
+ $ruleset = $ruleset->makeImportant();
+ }
+
+ Less_Environment::$mixin_stack--;
+
+ return $ruleset;
+ }
+
+
+ public function matchCondition($args, $env) {
+
+ if( !$this->condition ){
+ return true;
+ }
+
+ // set array to prevent error on array_merge
+ if(!is_array($this->frames)) {
+ $this->frames = array();
+ }
+
+ $frame = $this->compileParams($env, array_merge($this->frames,$env->frames), $args );
+
+ $compile_env = new Less_Environment();
+ $compile_env->frames = array_merge(
+ array($frame) // the parameter variables
+ , $this->frames // the parent namespace/mixin frames
+ , $env->frames // the current environment frames
+ );
+
+ $compile_env->functions = $env->functions;
+
+ return (bool)$this->condition->compile($compile_env);
+ }
+
+ public function matchArgs($args, $env = NULL){
+ $argsLength = count($args);
+
+ if( !$this->variadic ){
+ if( $argsLength < $this->required ){
+ return false;
+ }
+ if( $argsLength > count($this->params) ){
+ return false;
+ }
+ }else{
+ if( $argsLength < ($this->required - 1)){
+ return false;
+ }
+ }
+
+ $len = min($argsLength, $this->arity);
+
+ for( $i = 0; $i < $len; $i++ ){
+ if( !isset($this->params[$i]['name']) && !isset($this->params[$i]['variadic']) ){
+ if( $args[$i]['value']->compile($env)->toCSS() != $this->params[$i]['value']->compile($env)->toCSS() ){
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+}
+
+
+/**
+ * Extend Finder Visitor
+ *
+ * @package Less
+ * @subpackage visitor
+ */
+class Less_Visitor_extendFinder extends Less_Visitor{
+
+ public $contexts = array();
+ public $allExtendsStack;
+ public $foundExtends;
+
+ public function __construct(){
+ $this->contexts = array();
+ $this->allExtendsStack = array(array());
+ parent::__construct();
+ }
+
+ /**
+ * @param Less_Tree_Ruleset $root
+ */
+ public function run($root){
+ $root = $this->visitObj($root);
+ $root->allExtends =& $this->allExtendsStack[0];
+ return $root;
+ }
+
+ public function visitRule($ruleNode, &$visitDeeper ){
+ $visitDeeper = false;
+ }
+
+ public function visitMixinDefinition( $mixinDefinitionNode, &$visitDeeper ){
+ $visitDeeper = false;
+ }
+
+ public function visitRuleset($rulesetNode){
+
+ if( $rulesetNode->root ){
+ return;
+ }
+
+ $allSelectorsExtendList = array();
+
+ // get &:extend(.a); rules which apply to all selectors in this ruleset
+ if( $rulesetNode->rules ){
+ foreach($rulesetNode->rules as $rule){
+ if( $rule instanceof Less_Tree_Extend ){
+ $allSelectorsExtendList[] = $rule;
+ $rulesetNode->extendOnEveryPath = true;
+ }
+ }
+ }
+
+
+ // now find every selector and apply the extends that apply to all extends
+ // and the ones which apply to an individual extend
+ foreach($rulesetNode->paths as $selectorPath){
+ $selector = end($selectorPath); //$selectorPath[ count($selectorPath)-1];
+
+ $j = 0;
+ foreach($selector->extendList as $extend){
+ $this->allExtendsStackPush($rulesetNode, $selectorPath, $extend, $j);
+ }
+ foreach($allSelectorsExtendList as $extend){
+ $this->allExtendsStackPush($rulesetNode, $selectorPath, $extend, $j);
+ }
+ }
+
+ $this->contexts[] = $rulesetNode->selectors;
+ }
+
+ public function allExtendsStackPush($rulesetNode, $selectorPath, $extend, &$j){
+ $this->foundExtends = true;
+ $extend = clone $extend;
+ $extend->findSelfSelectors( $selectorPath );
+ $extend->ruleset = $rulesetNode;
+ if( $j === 0 ){
+ $extend->firstExtendOnThisSelectorPath = true;
+ }
+
+ $end_key = count($this->allExtendsStack)-1;
+ $this->allExtendsStack[$end_key][] = $extend;
+ $j++;
+ }
+
+
+ public function visitRulesetOut( $rulesetNode ){
+ if( !is_object($rulesetNode) || !$rulesetNode->root ){
+ array_pop($this->contexts);
+ }
+ }
+
+ public function visitMedia( $mediaNode ){
+ $mediaNode->allExtends = array();
+ $this->allExtendsStack[] =& $mediaNode->allExtends;
+ }
+
+ public function visitMediaOut(){
+ array_pop($this->allExtendsStack);
+ }
+
+ public function visitDirective( $directiveNode ){
+ $directiveNode->allExtends = array();
+ $this->allExtendsStack[] =& $directiveNode->allExtends;
+ }
+
+ public function visitDirectiveOut(){
+ array_pop($this->allExtendsStack);
+ }
+}
+
+
+
+
+/*
+class Less_Visitor_import extends Less_VisitorReplacing{
+
+ public $_visitor;
+ public $_importer;
+ public $importCount;
+
+ function __construct( $evalEnv ){
+ $this->env = $evalEnv;
+ $this->importCount = 0;
+ parent::__construct();
+ }
+
+
+ function run( $root ){
+ $root = $this->visitObj($root);
+ $this->isFinished = true;
+
+ //if( $this->importCount === 0) {
+ // $this->_finish();
+ //}
+ }
+
+ function visitImport($importNode, &$visitDeeper ){
+ $importVisitor = $this;
+ $inlineCSS = $importNode->options['inline'];
+
+ if( !$importNode->css || $inlineCSS ){
+ $evaldImportNode = $importNode->compileForImport($this->env);
+
+ if( $evaldImportNode && (!$evaldImportNode->css || $inlineCSS) ){
+ $importNode = $evaldImportNode;
+ $this->importCount++;
+ $env = clone $this->env;
+
+ if( (isset($importNode->options['multiple']) && $importNode->options['multiple']) ){
+ $env->importMultiple = true;
+ }
+
+ //get path & uri
+ $path_and_uri = null;
+ if( is_callable(Less_Parser::$options['import_callback']) ){
+ $path_and_uri = call_user_func(Less_Parser::$options['import_callback'],$importNode);
+ }
+
+ if( !$path_and_uri ){
+ $path_and_uri = $importNode->PathAndUri();
+ }
+
+ if( $path_and_uri ){
+ list($full_path, $uri) = $path_and_uri;
+ }else{
+ $full_path = $uri = $importNode->getPath();
+ }
+
+
+ //import once
+ if( $importNode->skip( $full_path, $env) ){
+ return array();
+ }
+
+ if( $importNode->options['inline'] ){
+ //todo needs to reference css file not import
+ //$contents = new Less_Tree_Anonymous($importNode->root, 0, array('filename'=>$importNode->importedFilename), true );
+
+ Less_Parser::AddParsedFile($full_path);
+ $contents = new Less_Tree_Anonymous( file_get_contents($full_path), 0, array(), true );
+
+ if( $importNode->features ){
+ return new Less_Tree_Media( array($contents), $importNode->features->value );
+ }
+
+ return array( $contents );
+ }
+
+
+ // css ?
+ if( $importNode->css ){
+ $features = ( $importNode->features ? $importNode->features->compile($env) : null );
+ return new Less_Tree_Import( $importNode->compilePath( $env), $features, $importNode->options, $this->index);
+ }
+
+ return $importNode->ParseImport( $full_path, $uri, $env );
+ }
+
+ }
+
+ $visitDeeper = false;
+ return $importNode;
+ }
+
+
+ function visitRule( $ruleNode, &$visitDeeper ){
+ $visitDeeper = false;
+ return $ruleNode;
+ }
+
+ function visitDirective($directiveNode, $visitArgs){
+ array_unshift($this->env->frames,$directiveNode);
+ return $directiveNode;
+ }
+
+ function visitDirectiveOut($directiveNode) {
+ array_shift($this->env->frames);
+ }
+
+ function visitMixinDefinition($mixinDefinitionNode, $visitArgs) {
+ array_unshift($this->env->frames,$mixinDefinitionNode);
+ return $mixinDefinitionNode;
+ }
+
+ function visitMixinDefinitionOut($mixinDefinitionNode) {
+ array_shift($this->env->frames);
+ }
+
+ function visitRuleset($rulesetNode, $visitArgs) {
+ array_unshift($this->env->frames,$rulesetNode);
+ return $rulesetNode;
+ }
+
+ function visitRulesetOut($rulesetNode) {
+ array_shift($this->env->frames);
+ }
+
+ function visitMedia($mediaNode, $visitArgs) {
+ array_unshift($this->env->frames, $mediaNode->ruleset);
+ return $mediaNode;
+ }
+
+ function visitMediaOut($mediaNode) {
+ array_shift($this->env->frames);
+ }
+
+}
+*/
+
+
+
+
+/**
+ * Join Selector Visitor
+ *
+ * @package Less
+ * @subpackage visitor
+ */
+class Less_Visitor_joinSelector extends Less_Visitor{
+
+ public $contexts = array( array() );
+
+ /**
+ * @param Less_Tree_Ruleset $root
+ */
+ public function run( $root ){
+ return $this->visitObj($root);
+ }
+
+ public function visitRule( $ruleNode, &$visitDeeper ){
+ $visitDeeper = false;
+ }
+
+ public function visitMixinDefinition( $mixinDefinitionNode, &$visitDeeper ){
+ $visitDeeper = false;
+ }
+
+ public function visitRuleset( $rulesetNode ){
+
+ $paths = array();
+
+ if( !$rulesetNode->root ){
+ $selectors = array();
+
+ if( $rulesetNode->selectors && $rulesetNode->selectors ){
+ foreach($rulesetNode->selectors as $selector){
+ if( $selector->getIsOutput() ){
+ $selectors[] = $selector;
+ }
+ }
+ }
+
+ if( !$selectors ){
+ $rulesetNode->selectors = null;
+ $rulesetNode->rules = null;
+ }else{
+ $context = end($this->contexts); //$context = $this->contexts[ count($this->contexts) - 1];
+ $paths = $rulesetNode->joinSelectors( $context, $selectors);
+ }
+
+ $rulesetNode->paths = $paths;
+ }
+
+ $this->contexts[] = $paths; //different from less.js. Placed after joinSelectors() so that $this->contexts will get correct $paths
+ }
+
+ public function visitRulesetOut(){
+ array_pop($this->contexts);
+ }
+
+ public function visitMedia($mediaNode) {
+ $context = end($this->contexts); //$context = $this->contexts[ count($this->contexts) - 1];
+
+ if( !count($context) || (is_object($context[0]) && $context[0]->multiMedia) ){
+ $mediaNode->rules[0]->root = true;
+ }
+ }
+
+}
+
+
+
+/**
+ * Process Extends Visitor
+ *
+ * @package Less
+ * @subpackage visitor
+ */
+class Less_Visitor_processExtends extends Less_Visitor{
+
+ public $allExtendsStack;
+
+ /**
+ * @param Less_Tree_Ruleset $root
+ */
+ public function run( $root ){
+ $extendFinder = new Less_Visitor_extendFinder();
+ $extendFinder->run( $root );
+ if( !$extendFinder->foundExtends){
+ return $root;
+ }
+
+ $root->allExtends = $this->doExtendChaining( $root->allExtends, $root->allExtends);
+
+ $this->allExtendsStack = array();
+ $this->allExtendsStack[] = &$root->allExtends;
+
+ return $this->visitObj( $root );
+ }
+
+ private function doExtendChaining( $extendsList, $extendsListTarget, $iterationCount = 0){
+ //
+ // chaining is different from normal extension.. if we extend an extend then we are not just copying, altering and pasting
+ // the selector we would do normally, but we are also adding an extend with the same target selector
+ // this means this new extend can then go and alter other extends
+ //
+ // this method deals with all the chaining work - without it, extend is flat and doesn't work on other extend selectors
+ // this is also the most expensive.. and a match on one selector can cause an extension of a selector we had already processed if
+ // we look at each selector at a time, as is done in visitRuleset
+
+ $extendsToAdd = array();
+
+
+ //loop through comparing every extend with every target extend.
+ // a target extend is the one on the ruleset we are looking at copy/edit/pasting in place
+ // e.g. .a:extend(.b) {} and .b:extend(.c) {} then the first extend extends the second one
+ // and the second is the target.
+ // the seperation into two lists allows us to process a subset of chains with a bigger set, as is the
+ // case when processing media queries
+ for( $extendIndex = 0, $extendsList_len = count($extendsList); $extendIndex < $extendsList_len; $extendIndex++ ){
+ for( $targetExtendIndex = 0; $targetExtendIndex < count($extendsListTarget); $targetExtendIndex++ ){
+
+ $extend = $extendsList[$extendIndex];
+ $targetExtend = $extendsListTarget[$targetExtendIndex];
+
+ // look for circular references
+ if( in_array($targetExtend->object_id, $extend->parent_ids,true) ){
+ continue;
+ }
+
+ // find a match in the target extends self selector (the bit before :extend)
+ $selectorPath = array( $targetExtend->selfSelectors[0] );
+ $matches = $this->findMatch( $extend, $selectorPath);
+
+
+ if( $matches ){
+
+ // we found a match, so for each self selector..
+ foreach($extend->selfSelectors as $selfSelector ){
+
+
+ // process the extend as usual
+ $newSelector = $this->extendSelector( $matches, $selectorPath, $selfSelector);
+
+ // but now we create a new extend from it
+ $newExtend = new Less_Tree_Extend( $targetExtend->selector, $targetExtend->option, 0);
+ $newExtend->selfSelectors = $newSelector;
+
+ // add the extend onto the list of extends for that selector
+ end($newSelector)->extendList = array($newExtend);
+ //$newSelector[ count($newSelector)-1]->extendList = array($newExtend);
+
+ // record that we need to add it.
+ $extendsToAdd[] = $newExtend;
+ $newExtend->ruleset = $targetExtend->ruleset;
+
+ //remember its parents for circular references
+ $newExtend->parent_ids = array_merge($newExtend->parent_ids,$targetExtend->parent_ids,$extend->parent_ids);
+
+ // only process the selector once.. if we have :extend(.a,.b) then multiple
+ // extends will look at the same selector path, so when extending
+ // we know that any others will be duplicates in terms of what is added to the css
+ if( $targetExtend->firstExtendOnThisSelectorPath ){
+ $newExtend->firstExtendOnThisSelectorPath = true;
+ $targetExtend->ruleset->paths[] = $newSelector;
+ }
+ }
+ }
+ }
+ }
+
+ if( $extendsToAdd ){
+ // try to detect circular references to stop a stack overflow.
+ // may no longer be needed. $this->extendChainCount++;
+ if( $iterationCount > 100) {
+
+ try{
+ $selectorOne = $extendsToAdd[0]->selfSelectors[0]->toCSS();
+ $selectorTwo = $extendsToAdd[0]->selector->toCSS();
+ }catch(Exception $e){
+ $selectorOne = "{unable to calculate}";
+ $selectorTwo = "{unable to calculate}";
+ }
+
+ throw new Less_Exception_Parser("extend circular reference detected. One of the circular extends is currently:"+$selectorOne+":extend(" + $selectorTwo+")");
+ }
+
+ // now process the new extends on the existing rules so that we can handle a extending b extending c ectending d extending e...
+ $extendsToAdd = $this->doExtendChaining( $extendsToAdd, $extendsListTarget, $iterationCount+1);
+ }
+
+ return array_merge($extendsList, $extendsToAdd);
+ }
+
+
+ protected function visitRule( $ruleNode, &$visitDeeper ){
+ $visitDeeper = false;
+ }
+
+ protected function visitMixinDefinition( $mixinDefinitionNode, &$visitDeeper ){
+ $visitDeeper = false;
+ }
+
+ protected function visitSelector( $selectorNode, &$visitDeeper ){
+ $visitDeeper = false;
+ }
+
+ protected function visitRuleset($rulesetNode){
+
+
+ if( $rulesetNode->root ){
+ return;
+ }
+
+ $allExtends = end($this->allExtendsStack);
+ $paths_len = count($rulesetNode->paths);
+
+ // look at each selector path in the ruleset, find any extend matches and then copy, find and replace
+ foreach($allExtends as $allExtend){
+ for($pathIndex = 0; $pathIndex < $paths_len; $pathIndex++ ){
+
+ // extending extends happens initially, before the main pass
+ if( isset($rulesetNode->extendOnEveryPath) && $rulesetNode->extendOnEveryPath ){
+ continue;
+ }
+
+ $selectorPath = $rulesetNode->paths[$pathIndex];
+
+ if( end($selectorPath)->extendList ){
+ continue;
+ }
+
+ $this->ExtendMatch( $rulesetNode, $allExtend, $selectorPath);
+
+ }
+ }
+ }
+
+
+ private function ExtendMatch( $rulesetNode, $extend, $selectorPath ){
+ $matches = $this->findMatch($extend, $selectorPath);
+
+ if( $matches ){
+ foreach($extend->selfSelectors as $selfSelector ){
+ $rulesetNode->paths[] = $this->extendSelector($matches, $selectorPath, $selfSelector);
+ }
+ }
+ }
+
+
+
+ private function findMatch($extend, $haystackSelectorPath ){
+
+
+ if( !$this->HasMatches($extend, $haystackSelectorPath) ){
+ return false;
+ }
+
+
+ //
+ // look through the haystack selector path to try and find the needle - extend.selector
+ // returns an array of selector matches that can then be replaced
+ //
+ $needleElements = $extend->selector->elements;
+ $potentialMatches = array();
+ $potentialMatches_len = 0;
+ $potentialMatch = null;
+ $matches = array();
+
+
+
+ // loop through the haystack elements
+ $haystack_path_len = count($haystackSelectorPath);
+ for($haystackSelectorIndex = 0; $haystackSelectorIndex < $haystack_path_len; $haystackSelectorIndex++ ){
+ $hackstackSelector = $haystackSelectorPath[$haystackSelectorIndex];
+
+ $haystack_elements_len = count($hackstackSelector->elements);
+ for($hackstackElementIndex = 0; $hackstackElementIndex < $haystack_elements_len; $hackstackElementIndex++ ){
+
+ $haystackElement = $hackstackSelector->elements[$hackstackElementIndex];
+
+ // if we allow elements before our match we can add a potential match every time. otherwise only at the first element.
+ if( $extend->allowBefore || ($haystackSelectorIndex === 0 && $hackstackElementIndex === 0) ){
+ $potentialMatches[] = array('pathIndex'=> $haystackSelectorIndex, 'index'=> $hackstackElementIndex, 'matched'=> 0, 'initialCombinator'=> $haystackElement->combinator);
+ $potentialMatches_len++;
+ }
+
+ for($i = 0; $i < $potentialMatches_len; $i++ ){
+
+ $potentialMatch = &$potentialMatches[$i];
+ $potentialMatch = $this->PotentialMatch( $potentialMatch, $needleElements, $haystackElement, $hackstackElementIndex );
+
+
+ // if we are still valid and have finished, test whether we have elements after and whether these are allowed
+ if( $potentialMatch && $potentialMatch['matched'] === $extend->selector->elements_len ){
+ $potentialMatch['finished'] = true;
+
+ if( !$extend->allowAfter && ($hackstackElementIndex+1 < $haystack_elements_len || $haystackSelectorIndex+1 < $haystack_path_len) ){
+ $potentialMatch = null;
+ }
+ }
+
+ // if null we remove, if not, we are still valid, so either push as a valid match or continue
+ if( $potentialMatch ){
+ if( $potentialMatch['finished'] ){
+ $potentialMatch['length'] = $extend->selector->elements_len;
+ $potentialMatch['endPathIndex'] = $haystackSelectorIndex;
+ $potentialMatch['endPathElementIndex'] = $hackstackElementIndex + 1; // index after end of match
+ $potentialMatches = array(); // we don't allow matches to overlap, so start matching again
+ $potentialMatches_len = 0;
+ $matches[] = $potentialMatch;
+ }
+ continue;
+ }
+
+ array_splice($potentialMatches, $i, 1);
+ $potentialMatches_len--;
+ $i--;
+ }
+ }
+ }
+
+ return $matches;
+ }
+
+
+ // Before going through all the nested loops, lets check to see if a match is possible
+ // Reduces Bootstrap 3.1 compile time from ~6.5s to ~5.6s
+ private function HasMatches($extend, $haystackSelectorPath){
+
+ if( !$extend->selector->cacheable ){
+ return true;
+ }
+
+ $first_el = $extend->selector->_oelements[0];
+
+ foreach($haystackSelectorPath as $hackstackSelector){
+ if( !$hackstackSelector->cacheable ){
+ return true;
+ }
+
+ if( in_array($first_el, $hackstackSelector->_oelements) ){
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+
+ /**
+ * @param integer $hackstackElementIndex
+ */
+ private function PotentialMatch( $potentialMatch, $needleElements, $haystackElement, $hackstackElementIndex ){
+
+
+ if( $potentialMatch['matched'] > 0 ){
+
+ // selectors add " " onto the first element. When we use & it joins the selectors together, but if we don't
+ // then each selector in haystackSelectorPath has a space before it added in the toCSS phase. so we need to work out
+ // what the resulting combinator will be
+ $targetCombinator = $haystackElement->combinator;
+ if( $targetCombinator === '' && $hackstackElementIndex === 0 ){
+ $targetCombinator = ' ';
+ }
+
+ if( $needleElements[ $potentialMatch['matched'] ]->combinator !== $targetCombinator ){
+ return null;
+ }
+ }
+
+ // if we don't match, null our match to indicate failure
+ if( !$this->isElementValuesEqual( $needleElements[$potentialMatch['matched'] ]->value, $haystackElement->value) ){
+ return null;
+ }
+
+ $potentialMatch['finished'] = false;
+ $potentialMatch['matched']++;
+
+ return $potentialMatch;
+ }
+
+
+ private function isElementValuesEqual( $elementValue1, $elementValue2 ){
+
+ if( $elementValue1 === $elementValue2 ){
+ return true;
+ }
+
+ if( is_string($elementValue1) || is_string($elementValue2) ) {
+ return false;
+ }
+
+ if( $elementValue1 instanceof Less_Tree_Attribute ){
+ return $this->isAttributeValuesEqual( $elementValue1, $elementValue2 );
+ }
+
+ $elementValue1 = $elementValue1->value;
+ if( $elementValue1 instanceof Less_Tree_Selector ){
+ return $this->isSelectorValuesEqual( $elementValue1, $elementValue2 );
+ }
+
+ return false;
+ }
+
+
+ /**
+ * @param Less_Tree_Selector $elementValue1
+ */
+ private function isSelectorValuesEqual( $elementValue1, $elementValue2 ){
+
+ $elementValue2 = $elementValue2->value;
+ if( !($elementValue2 instanceof Less_Tree_Selector) || $elementValue1->elements_len !== $elementValue2->elements_len ){
+ return false;
+ }
+
+ for( $i = 0; $i < $elementValue1->elements_len; $i++ ){
+
+ if( $elementValue1->elements[$i]->combinator !== $elementValue2->elements[$i]->combinator ){
+ if( $i !== 0 || ($elementValue1->elements[$i]->combinator || ' ') !== ($elementValue2->elements[$i]->combinator || ' ') ){
+ return false;
+ }
+ }
+
+ if( !$this->isElementValuesEqual($elementValue1->elements[$i]->value, $elementValue2->elements[$i]->value) ){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+
+ /**
+ * @param Less_Tree_Attribute $elementValue1
+ */
+ private function isAttributeValuesEqual( $elementValue1, $elementValue2 ){
+
+ if( $elementValue1->op !== $elementValue2->op || $elementValue1->key !== $elementValue2->key ){
+ return false;
+ }
+
+ if( !$elementValue1->value || !$elementValue2->value ){
+ if( $elementValue1->value || $elementValue2->value ) {
+ return false;
+ }
+ return true;
+ }
+
+ $elementValue1 = ($elementValue1->value->value ? $elementValue1->value->value : $elementValue1->value );
+ $elementValue2 = ($elementValue2->value->value ? $elementValue2->value->value : $elementValue2->value );
+
+ return $elementValue1 === $elementValue2;
+ }
+
+
+ private function extendSelector($matches, $selectorPath, $replacementSelector){
+
+ //for a set of matches, replace each match with the replacement selector
+
+ $currentSelectorPathIndex = 0;
+ $currentSelectorPathElementIndex = 0;
+ $path = array();
+ $selectorPath_len = count($selectorPath);
+
+ for($matchIndex = 0, $matches_len = count($matches); $matchIndex < $matches_len; $matchIndex++ ){
+
+
+ $match = $matches[$matchIndex];
+ $selector = $selectorPath[ $match['pathIndex'] ];
+
+ $firstElement = new Less_Tree_Element(
+ $match['initialCombinator'],
+ $replacementSelector->elements[0]->value,
+ $replacementSelector->elements[0]->index,
+ $replacementSelector->elements[0]->currentFileInfo
+ );
+
+ if( $match['pathIndex'] > $currentSelectorPathIndex && $currentSelectorPathElementIndex > 0 ){
+ $last_path = end($path);
+ $last_path->elements = array_merge( $last_path->elements, array_slice( $selectorPath[$currentSelectorPathIndex]->elements, $currentSelectorPathElementIndex));
+ $currentSelectorPathElementIndex = 0;
+ $currentSelectorPathIndex++;
+ }
+
+ $newElements = array_merge(
+ array_slice($selector->elements, $currentSelectorPathElementIndex, ($match['index'] - $currentSelectorPathElementIndex) ) // last parameter of array_slice is different than the last parameter of javascript's slice
+ , array($firstElement)
+ , array_slice($replacementSelector->elements,1)
+ );
+
+ if( $currentSelectorPathIndex === $match['pathIndex'] && $matchIndex > 0 ){
+ $last_key = count($path)-1;
+ $path[$last_key]->elements = array_merge($path[$last_key]->elements,$newElements);
+ }else{
+ $path = array_merge( $path, array_slice( $selectorPath, $currentSelectorPathIndex, $match['pathIndex'] ));
+ $path[] = new Less_Tree_Selector( $newElements );
+ }
+
+ $currentSelectorPathIndex = $match['endPathIndex'];
+ $currentSelectorPathElementIndex = $match['endPathElementIndex'];
+ if( $currentSelectorPathElementIndex >= count($selectorPath[$currentSelectorPathIndex]->elements) ){
+ $currentSelectorPathElementIndex = 0;
+ $currentSelectorPathIndex++;
+ }
+ }
+
+ if( $currentSelectorPathIndex < $selectorPath_len && $currentSelectorPathElementIndex > 0 ){
+ $last_path = end($path);
+ $last_path->elements = array_merge( $last_path->elements, array_slice($selectorPath[$currentSelectorPathIndex]->elements, $currentSelectorPathElementIndex));
+ $currentSelectorPathIndex++;
+ }
+
+ $slice_len = $selectorPath_len - $currentSelectorPathIndex;
+ $path = array_merge($path, array_slice($selectorPath, $currentSelectorPathIndex, $slice_len));
+
+ return $path;
+ }
+
+
+ protected function visitMedia( $mediaNode ){
+ $newAllExtends = array_merge( $mediaNode->allExtends, end($this->allExtendsStack) );
+ $this->allExtendsStack[] = $this->doExtendChaining($newAllExtends, $mediaNode->allExtends);
+ }
+
+ protected function visitMediaOut(){
+ array_pop( $this->allExtendsStack );
+ }
+
+ protected function visitDirective( $directiveNode ){
+ $newAllExtends = array_merge( $directiveNode->allExtends, end($this->allExtendsStack) );
+ $this->allExtendsStack[] = $this->doExtendChaining($newAllExtends, $directiveNode->allExtends);
+ }
+
+ protected function visitDirectiveOut(){
+ array_pop($this->allExtendsStack);
+ }
+
+}
+
+/**
+ * toCSS Visitor
+ *
+ * @package Less
+ * @subpackage visitor
+ */
+class Less_Visitor_toCSS extends Less_VisitorReplacing{
+
+ private $charset;
+
+ public function __construct(){
+ parent::__construct();
+ }
+
+ /**
+ * @param Less_Tree_Ruleset $root
+ */
+ public function run( $root ){
+ return $this->visitObj($root);
+ }
+
+ public function visitRule( $ruleNode ){
+ if( $ruleNode->variable ){
+ return array();
+ }
+ return $ruleNode;
+ }
+
+ public function visitMixinDefinition($mixinNode){
+ // mixin definitions do not get eval'd - this means they keep state
+ // so we have to clear that state here so it isn't used if toCSS is called twice
+ $mixinNode->frames = array();
+ return array();
+ }
+
+ public function visitExtend(){
+ return array();
+ }
+
+ public function visitComment( $commentNode ){
+ if( $commentNode->isSilent() ){
+ return array();
+ }
+ return $commentNode;
+ }
+
+ public function visitMedia( $mediaNode, &$visitDeeper ){
+ $mediaNode->accept($this);
+ $visitDeeper = false;
+
+ if( !$mediaNode->rules ){
+ return array();
+ }
+ return $mediaNode;
+ }
+
+ public function visitDirective( $directiveNode ){
+ if( isset($directiveNode->currentFileInfo['reference']) && (!property_exists($directiveNode,'isReferenced') || !$directiveNode->isReferenced) ){
+ return array();
+ }
+ if( $directiveNode->name === '@charset' ){
+ // Only output the debug info together with subsequent @charset definitions
+ // a comment (or @media statement) before the actual @charset directive would
+ // be considered illegal css as it has to be on the first line
+ if( isset($this->charset) && $this->charset ){
+
+ //if( $directiveNode->debugInfo ){
+ // $comment = new Less_Tree_Comment('/* ' . str_replace("\n",'',$directiveNode->toCSS())." */\n");
+ // $comment->debugInfo = $directiveNode->debugInfo;
+ // return $this->visit($comment);
+ //}
+
+
+ return array();
+ }
+ $this->charset = true;
+ }
+ return $directiveNode;
+ }
+
+ public function checkPropertiesInRoot( $rulesetNode ){
+
+ if( !$rulesetNode->firstRoot ){
+ return;
+ }
+
+ foreach($rulesetNode->rules as $ruleNode){
+ if( $ruleNode instanceof Less_Tree_Rule && !$ruleNode->variable ){
+ $msg = "properties must be inside selector blocks, they cannot be in the root. Index ".$ruleNode->index.($ruleNode->currentFileInfo ? (' Filename: '.$ruleNode->currentFileInfo['filename']) : null);
+ throw new Less_Exception_Compiler($msg);
+ }
+ }
+ }
+
+
+ public function visitRuleset( $rulesetNode, &$visitDeeper ){
+
+ $visitDeeper = false;
+
+ $this->checkPropertiesInRoot( $rulesetNode );
+
+ if( $rulesetNode->root ){
+ return $this->visitRulesetRoot( $rulesetNode );
+ }
+
+ $rulesets = array();
+ $rulesetNode->paths = $this->visitRulesetPaths($rulesetNode);
+
+
+ // Compile rules and rulesets
+ $nodeRuleCnt = count($rulesetNode->rules);
+ for( $i = 0; $i < $nodeRuleCnt; ){
+ $rule = $rulesetNode->rules[$i];
+
+ if( property_exists($rule,'rules') ){
+ // visit because we are moving them out from being a child
+ $rulesets[] = $this->visitObj($rule);
+ array_splice($rulesetNode->rules,$i,1);
+ $nodeRuleCnt--;
+ continue;
+ }
+ $i++;
+ }
+
+
+ // accept the visitor to remove rules and refactor itself
+ // then we can decide now whether we want it or not
+ if( $nodeRuleCnt > 0 ){
+ $rulesetNode->accept($this);
+
+ if( $rulesetNode->rules ){
+
+ if( count($rulesetNode->rules) > 1 ){
+ $this->_mergeRules( $rulesetNode->rules );
+ $this->_removeDuplicateRules( $rulesetNode->rules );
+ }
+
+ // now decide whether we keep the ruleset
+ if( $rulesetNode->paths ){
+ //array_unshift($rulesets, $rulesetNode);
+ array_splice($rulesets,0,0,array($rulesetNode));
+ }
+ }
+
+ }
+
+
+ if( count($rulesets) === 1 ){
+ return $rulesets[0];
+ }
+ return $rulesets;
+ }
+
+
+ /**
+ * Helper function for visitiRuleset
+ *
+ * return array|Less_Tree_Ruleset
+ */
+ private function visitRulesetRoot( $rulesetNode ){
+ $rulesetNode->accept( $this );
+ if( $rulesetNode->firstRoot || $rulesetNode->rules ){
+ return $rulesetNode;
+ }
+ return array();
+ }
+
+
+ /**
+ * Helper function for visitRuleset()
+ *
+ * @return array
+ */
+ private function visitRulesetPaths($rulesetNode){
+
+ $paths = array();
+ foreach($rulesetNode->paths as $p){
+ if( $p[0]->elements[0]->combinator === ' ' ){
+ $p[0]->elements[0]->combinator = '';
+ }
+
+ foreach($p as $pi){
+ if( $pi->getIsReferenced() && $pi->getIsOutput() ){
+ $paths[] = $p;
+ break;
+ }
+ }
+ }
+
+ return $paths;
+ }
+
+ protected function _removeDuplicateRules( &$rules ){
+ // remove duplicates
+ $ruleCache = array();
+ for( $i = count($rules)-1; $i >= 0 ; $i-- ){
+ $rule = $rules[$i];
+ if( $rule instanceof Less_Tree_Rule || $rule instanceof Less_Tree_NameValue ){
+
+ if( !isset($ruleCache[$rule->name]) ){
+ $ruleCache[$rule->name] = $rule;
+ }else{
+ $ruleList =& $ruleCache[$rule->name];
+
+ if( $ruleList instanceof Less_Tree_Rule || $ruleList instanceof Less_Tree_NameValue ){
+ $ruleList = $ruleCache[$rule->name] = array( $ruleCache[$rule->name]->toCSS() );
+ }
+
+ $ruleCSS = $rule->toCSS();
+ if( array_search($ruleCSS,$ruleList) !== false ){
+ array_splice($rules,$i,1);
+ }else{
+ $ruleList[] = $ruleCSS;
+ }
+ }
+ }
+ }
+ }
+
+ protected function _mergeRules( &$rules ){
+ $groups = array();
+
+ //obj($rules);
+
+ $rules_len = count($rules);
+ for( $i = 0; $i < $rules_len; $i++ ){
+ $rule = $rules[$i];
+
+ if( ($rule instanceof Less_Tree_Rule) && $rule->merge ){
+
+ $key = $rule->name;
+ if( $rule->important ){
+ $key .= ',!';
+ }
+
+ if( !isset($groups[$key]) ){
+ $groups[$key] = array();
+ }else{
+ array_splice($rules, $i--, 1);
+ $rules_len--;
+ }
+
+ $groups[$key][] = $rule;
+ }
+ }
+
+
+ foreach($groups as $parts){
+
+ if( count($parts) > 1 ){
+ $rule = $parts[0];
+ $spacedGroups = array();
+ $lastSpacedGroup = array();
+ $parts_mapped = array();
+ foreach($parts as $p){
+ if( $p->merge === '+' ){
+ if( $lastSpacedGroup ){
+ $spacedGroups[] = self::toExpression($lastSpacedGroup);
+ }
+ $lastSpacedGroup = array();
+ }
+ $lastSpacedGroup[] = $p;
+ }
+
+ $spacedGroups[] = self::toExpression($lastSpacedGroup);
+ $rule->value = self::toValue($spacedGroups);
+ }
+ }
+
+ }
+
+ public static function toExpression($values){
+ $mapped = array();
+ foreach($values as $p){
+ $mapped[] = $p->value;
+ }
+ return new Less_Tree_Expression( $mapped );
+ }
+
+ public static function toValue($values){
+ //return new Less_Tree_Value($values); ??
+
+ $mapped = array();
+ foreach($values as $p){
+ $mapped[] = $p;
+ }
+ return new Less_Tree_Value($mapped);
+ }
+}
+
+
+
+/**
+ * Parser Exception
+ *
+ * @package Less
+ * @subpackage exception
+ */
+class Less_Exception_Parser extends Exception{
+
+ /**
+ * The current file
+ *
+ * @var Less_ImportedFile
+ */
+ public $currentFile;
+
+ /**
+ * The current parser index
+ *
+ * @var integer
+ */
+ public $index;
+
+ protected $input;
+
+ protected $details = array();
+
+
+ /**
+ * Constructor
+ *
+ * @param string $message
+ * @param Exception $previous Previous exception
+ * @param integer $index The current parser index
+ * @param Less_FileInfo|string $currentFile The file
+ * @param integer $code The exception code
+ */
+ public function __construct($message = null, Exception $previous = null, $index = null, $currentFile = null, $code = 0){
+
+ if (PHP_VERSION_ID < 50300) {
+ $this->previous = $previous;
+ parent::__construct($message, $code);
+ } else {
+ parent::__construct($message, $code, $previous);
+ }
+
+ $this->currentFile = $currentFile;
+ $this->index = $index;
+
+ $this->genMessage();
+ }
+
+
+ protected function getInput(){
+
+ if( !$this->input && $this->currentFile && $this->currentFile['filename'] && file_exists($this->currentFile['filename']) ){
+ $this->input = file_get_contents( $this->currentFile['filename'] );
+ }
+ }
+
+
+
+ /**
+ * Converts the exception to string
+ *
+ * @return string
+ */
+ public function genMessage(){
+
+ if( $this->currentFile && $this->currentFile['filename'] ){
+ $this->message .= ' in '.basename($this->currentFile['filename']);
+ }
+
+ if( $this->index !== null ){
+ $this->getInput();
+ if( $this->input ){
+ $line = self::getLineNumber();
+ $this->message .= ' on line '.$line.', column '.self::getColumn();
+
+ $lines = explode("\n",$this->input);
+
+ $count = count($lines);
+ $start_line = max(0, $line-3);
+ $last_line = min($count, $start_line+6);
+ $num_len = strlen($last_line);
+ for( $i = $start_line; $i < $last_line; $i++ ){
+ $this->message .= "\n".str_pad($i+1,$num_len,'0',STR_PAD_LEFT).'| '.$lines[$i];
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Returns the line number the error was encountered
+ *
+ * @return integer
+ */
+ public function getLineNumber(){
+ if( $this->index ){
+ // https://bugs.php.net/bug.php?id=49790
+ if (ini_get("mbstring.func_overload")) {
+ return substr_count(substr($this->input, 0, $this->index), "\n") + 1;
+ } else {
+ return substr_count($this->input, "\n", 0, $this->index) + 1;
+ }
+ }
+ return 1;
+ }
+
+
+ /**
+ * Returns the column the error was encountered
+ *
+ * @return integer
+ */
+ public function getColumn(){
+
+ $part = substr($this->input, 0, $this->index);
+ $pos = strrpos($part,"\n");
+ return $this->index - $pos;
+ }
+
+}
+
+
+/**
+ * Chunk Exception
+ *
+ * @package Less
+ * @subpackage exception
+ */
+class Less_Exception_Chunk extends Less_Exception_Parser{
+
+
+ protected $parserCurrentIndex = 0;
+
+ protected $emitFrom = 0;
+
+ protected $input_len;
+
+
+ /**
+ * Constructor
+ *
+ * @param string $input
+ * @param Exception $previous Previous exception
+ * @param integer $index The current parser index
+ * @param Less_FileInfo|string $currentFile The file
+ * @param integer $code The exception code
+ */
+ public function __construct($input, Exception $previous = null, $index = null, $currentFile = null, $code = 0){
+
+ $this->message = 'ParseError: Unexpected input'; //default message
+
+ $this->index = $index;
+
+ $this->currentFile = $currentFile;
+
+ $this->input = $input;
+ $this->input_len = strlen($input);
+
+ $this->Chunks();
+ $this->genMessage();
+ }
+
+
+ /**
+ * See less.js chunks()
+ * We don't actually need the chunks
+ *
+ */
+ protected function Chunks(){
+ $level = 0;
+ $parenLevel = 0;
+ $lastMultiCommentEndBrace = null;
+ $lastOpening = null;
+ $lastMultiComment = null;
+ $lastParen = null;
+
+ for( $this->parserCurrentIndex = 0; $this->parserCurrentIndex < $this->input_len; $this->parserCurrentIndex++ ){
+ $cc = $this->CharCode($this->parserCurrentIndex);
+ if ((($cc >= 97) && ($cc <= 122)) || ($cc < 34)) {
+ // a-z or whitespace
+ continue;
+ }
+
+ switch ($cc) {
+
+ // (
+ case 40:
+ $parenLevel++;
+ $lastParen = $this->parserCurrentIndex;
+ continue;
+
+ // )
+ case 41:
+ $parenLevel--;
+ if( $parenLevel < 0 ){
+ return $this->fail("missing opening `(`");
+ }
+ continue;
+
+ // ;
+ case 59:
+ //if (!$parenLevel) { $this->emitChunk(); }
+ continue;
+
+ // {
+ case 123:
+ $level++;
+ $lastOpening = $this->parserCurrentIndex;
+ continue;
+
+ // }
+ case 125:
+ $level--;
+ if( $level < 0 ){
+ return $this->fail("missing opening `{`");
+
+ }
+ //if (!$level && !$parenLevel) { $this->emitChunk(); }
+ continue;
+ // \
+ case 92:
+ if ($this->parserCurrentIndex < $this->input_len - 1) { $this->parserCurrentIndex++; continue; }
+ return $this->fail("unescaped `\\`");
+
+ // ", ' and `
+ case 34:
+ case 39:
+ case 96:
+ $matched = 0;
+ $currentChunkStartIndex = $this->parserCurrentIndex;
+ for ($this->parserCurrentIndex = $this->parserCurrentIndex + 1; $this->parserCurrentIndex < $this->input_len; $this->parserCurrentIndex++) {
+ $cc2 = $this->CharCode($this->parserCurrentIndex);
+ if ($cc2 > 96) { continue; }
+ if ($cc2 == $cc) { $matched = 1; break; }
+ if ($cc2 == 92) { // \
+ if ($this->parserCurrentIndex == $this->input_len - 1) {
+ return $this->fail("unescaped `\\`");
+ }
+ $this->parserCurrentIndex++;
+ }
+ }
+ if ($matched) { continue; }
+ return $this->fail("unmatched `" + chr($cc) + "`", $currentChunkStartIndex);
+
+ // /, check for comment
+ case 47:
+ if ($parenLevel || ($this->parserCurrentIndex == $this->input_len - 1)) { continue; }
+ $cc2 = $this->CharCode($this->parserCurrentIndex+1);
+ if ($cc2 == 47) {
+ // //, find lnfeed
+ for ($this->parserCurrentIndex = $this->parserCurrentIndex + 2; $this->parserCurrentIndex < $this->input_len; $this->parserCurrentIndex++) {
+ $cc2 = $this->CharCode($this->parserCurrentIndex);
+ if (($cc2 <= 13) && (($cc2 == 10) || ($cc2 == 13))) { break; }
+ }
+ } else if ($cc2 == 42) {
+ // /*, find */
+ $lastMultiComment = $currentChunkStartIndex = $this->parserCurrentIndex;
+ for ($this->parserCurrentIndex = $this->parserCurrentIndex + 2; $this->parserCurrentIndex < $this->input_len - 1; $this->parserCurrentIndex++) {
+ $cc2 = $this->CharCode($this->parserCurrentIndex);
+ if ($cc2 == 125) { $lastMultiCommentEndBrace = $this->parserCurrentIndex; }
+ if ($cc2 != 42) { continue; }
+ if ($this->CharCode($this->parserCurrentIndex+1) == 47) { break; }
+ }
+ if ($this->parserCurrentIndex == $this->input_len - 1) {
+ return $this->fail("missing closing `*/`", $currentChunkStartIndex);
+ }
+ }
+ continue;
+
+ // *, check for unmatched */
+ case 42:
+ if (($this->parserCurrentIndex < $this->input_len - 1) && ($this->CharCode($this->parserCurrentIndex+1) == 47)) {
+ return $this->fail("unmatched `/*`");
+ }
+ continue;
+ }
+ }
+
+ if( $level !== 0 ){
+ if( ($lastMultiComment > $lastOpening) && ($lastMultiCommentEndBrace > $lastMultiComment) ){
+ return $this->fail("missing closing `}` or `*/`", $lastOpening);
+ } else {
+ return $this->fail("missing closing `}`", $lastOpening);
+ }
+ } else if ( $parenLevel !== 0 ){
+ return $this->fail("missing closing `)`", $lastParen);
+ }
+
+
+ //chunk didn't fail
+
+
+ //$this->emitChunk(true);
+ }
+
+ public function CharCode($pos){
+ return ord($this->input[$pos]);
+ }
+
+
+ public function fail( $msg, $index = null ){
+
+ if( !$index ){
+ $this->index = $this->parserCurrentIndex;
+ }else{
+ $this->index = $index;
+ }
+ $this->message = 'ParseError: '.$msg;
+ }
+
+
+ /*
+ function emitChunk( $force = false ){
+ $len = $this->parserCurrentIndex - $this->emitFrom;
+ if ((($len < 512) && !$force) || !$len) {
+ return;
+ }
+ $chunks[] = substr($this->input, $this->emitFrom, $this->parserCurrentIndex + 1 - $this->emitFrom );
+ $this->emitFrom = $this->parserCurrentIndex + 1;
+ }
+ */
+
+}
+
+
+/**
+ * Compiler Exception
+ *
+ * @package Less
+ * @subpackage exception
+ */
+class Less_Exception_Compiler extends Less_Exception_Parser{
+
+}
+
+/**
+ * Parser output with source map
+ *
+ * @package Less
+ * @subpackage Output
+ */
+class Less_Output_Mapped extends Less_Output {
+
+ /**
+ * The source map generator
+ *
+ * @var Less_SourceMap_Generator
+ */
+ protected $generator;
+
+ /**
+ * Current line
+ *
+ * @var integer
+ */
+ protected $lineNumber = 0;
+
+ /**
+ * Current column
+ *
+ * @var integer
+ */
+ protected $column = 0;
+
+ /**
+ * Array of contents map (file and its content)
+ *
+ * @var array
+ */
+ protected $contentsMap = array();
+
+ /**
+ * Constructor
+ *
+ * @param array $contentsMap Array of filename to contents map
+ * @param Less_SourceMap_Generator $generator
+ */
+ public function __construct(array $contentsMap, $generator){
+ $this->contentsMap = $contentsMap;
+ $this->generator = $generator;
+ }
+
+ /**
+ * Adds a chunk to the stack
+ * The $index for less.php may be different from less.js since less.php does not chunkify inputs
+ *
+ * @param string $chunk
+ * @param string $fileInfo
+ * @param integer $index
+ * @param mixed $mapLines
+ */
+ public function add($chunk, $fileInfo = null, $index = 0, $mapLines = null){
+
+ //ignore adding empty strings
+ if( $chunk === '' ){
+ return;
+ }
+
+
+ $sourceLines = array();
+ $sourceColumns = ' ';
+
+
+ if( $fileInfo ){
+
+ $url = $fileInfo['currentUri'];
+
+ if( isset($this->contentsMap[$url]) ){
+ $inputSource = substr($this->contentsMap[$url], 0, $index);
+ $sourceLines = explode("\n", $inputSource);
+ $sourceColumns = end($sourceLines);
+ }else{
+ throw new Exception('Filename '.$url.' not in contentsMap');
+ }
+
+ }
+
+ $lines = explode("\n", $chunk);
+ $columns = end($lines);
+
+ if($fileInfo){
+
+ if(!$mapLines){
+ $this->generator->addMapping(
+ $this->lineNumber + 1, // generated_line
+ $this->column, // generated_column
+ count($sourceLines), // original_line
+ strlen($sourceColumns), // original_column
+ $fileInfo
+ );
+ }else{
+ for($i = 0, $count = count($lines); $i < $count; $i++){
+ $this->generator->addMapping(
+ $this->lineNumber + $i + 1, // generated_line
+ $i === 0 ? $this->column : 0, // generated_column
+ count($sourceLines) + $i, // original_line
+ $i === 0 ? strlen($sourceColumns) : 0, // original_column
+ $fileInfo
+ );
+ }
+ }
+ }
+
+ if(count($lines) === 1){
+ $this->column += strlen($columns);
+ }else{
+ $this->lineNumber += count($lines) - 1;
+ $this->column = strlen($columns);
+ }
+
+ // add only chunk
+ parent::add($chunk);
+ }
+
+}
+
+/**
+ * Encode / Decode Base64 VLQ.
+ *
+ * @package Less
+ * @subpackage SourceMap
+ */
+class Less_SourceMap_Base64VLQ {
+
+ /**
+ * Shift
+ *
+ * @var integer
+ */
+ private $shift = 5;
+
+ /**
+ * Mask
+ *
+ * @var integer
+ */
+ private $mask = 0x1F; // == (1 << shift) == 0b00011111
+
+ /**
+ * Continuation bit
+ *
+ * @var integer
+ */
+ private $continuationBit = 0x20; // == (mask - 1 ) == 0b00100000
+
+ /**
+ * Char to integer map
+ *
+ * @var array
+ */
+ private $charToIntMap = array(
+ 'A' => 0, 'B' => 1, 'C' => 2, 'D' => 3, 'E' => 4, 'F' => 5, 'G' => 6,
+ 'H' => 7,'I' => 8, 'J' => 9, 'K' => 10, 'L' => 11, 'M' => 12, 'N' => 13,
+ 'O' => 14, 'P' => 15, 'Q' => 16, 'R' => 17, 'S' => 18, 'T' => 19, 'U' => 20,
+ 'V' => 21, 'W' => 22, 'X' => 23, 'Y' => 24, 'Z' => 25, 'a' => 26, 'b' => 27,
+ 'c' => 28, 'd' => 29, 'e' => 30, 'f' => 31, 'g' => 32, 'h' => 33, 'i' => 34,
+ 'j' => 35, 'k' => 36, 'l' => 37, 'm' => 38, 'n' => 39, 'o' => 40, 'p' => 41,
+ 'q' => 42, 'r' => 43, 's' => 44, 't' => 45, 'u' => 46, 'v' => 47, 'w' => 48,
+ 'x' => 49, 'y' => 50, 'z' => 51, 0 => 52, 1 => 53, 2 => 54, 3 => 55, 4 => 56,
+ 5 => 57, 6 => 58, 7 => 59, 8 => 60, 9 => 61, '+' => 62, '/' => 63,
+ );
+
+ /**
+ * Integer to char map
+ *
+ * @var array
+ */
+ private $intToCharMap = array(
+ 0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D', 4 => 'E', 5 => 'F', 6 => 'G',
+ 7 => 'H', 8 => 'I', 9 => 'J', 10 => 'K', 11 => 'L', 12 => 'M', 13 => 'N',
+ 14 => 'O', 15 => 'P', 16 => 'Q', 17 => 'R', 18 => 'S', 19 => 'T', 20 => 'U',
+ 21 => 'V', 22 => 'W', 23 => 'X', 24 => 'Y', 25 => 'Z', 26 => 'a', 27 => 'b',
+ 28 => 'c', 29 => 'd', 30 => 'e', 31 => 'f', 32 => 'g', 33 => 'h', 34 => 'i',
+ 35 => 'j', 36 => 'k', 37 => 'l', 38 => 'm', 39 => 'n', 40 => 'o', 41 => 'p',
+ 42 => 'q', 43 => 'r', 44 => 's', 45 => 't', 46 => 'u', 47 => 'v', 48 => 'w',
+ 49 => 'x', 50 => 'y', 51 => 'z', 52 => '0', 53 => '1', 54 => '2', 55 => '3',
+ 56 => '4', 57 => '5', 58 => '6', 59 => '7', 60 => '8', 61 => '9', 62 => '+',
+ 63 => '/',
+ );
+
+ /**
+ * Constructor
+ */
+ public function __construct(){
+ // I leave it here for future reference
+ // foreach(str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/') as $i => $char)
+ // {
+ // $this->charToIntMap[$char] = $i;
+ // $this->intToCharMap[$i] = $char;
+ // }
+ }
+
+ /**
+ * Convert from a two-complement value to a value where the sign bit is
+ * is placed in the least significant bit. For example, as decimals:
+ * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ * We generate the value for 32 bit machines, hence -2147483648 becomes 1, not 4294967297,
+ * even on a 64 bit machine.
+ * @param string $aValue
+ */
+ public function toVLQSigned($aValue){
+ return 0xffffffff & ($aValue < 0 ? ((-$aValue) << 1) + 1 : ($aValue << 1) + 0);
+ }
+
+ /**
+ * Convert to a two-complement value from a value where the sign bit is
+ * is placed in the least significant bit. For example, as decimals:
+ * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ * We assume that the value was generated with a 32 bit machine in mind.
+ * Hence
+ * 1 becomes -2147483648
+ * even on a 64 bit machine.
+ * @param integer $aValue
+ */
+ public function fromVLQSigned($aValue){
+ return $aValue & 1 ? $this->zeroFill(~$aValue + 2, 1) | (-1 - 0x7fffffff) : $this->zeroFill($aValue, 1);
+ }
+
+ /**
+ * Return the base 64 VLQ encoded value.
+ *
+ * @param string $aValue The value to encode
+ * @return string The encoded value
+ */
+ public function encode($aValue){
+ $encoded = '';
+ $vlq = $this->toVLQSigned($aValue);
+ do
+ {
+ $digit = $vlq & $this->mask;
+ $vlq = $this->zeroFill($vlq, $this->shift);
+ if($vlq > 0){
+ $digit |= $this->continuationBit;
+ }
+ $encoded .= $this->base64Encode($digit);
+ } while($vlq > 0);
+
+ return $encoded;
+ }
+
+ /**
+ * Return the value decoded from base 64 VLQ.
+ *
+ * @param string $encoded The encoded value to decode
+ * @return integer The decoded value
+ */
+ public function decode($encoded){
+ $vlq = 0;
+ $i = 0;
+ do
+ {
+ $digit = $this->base64Decode($encoded[$i]);
+ $vlq |= ($digit & $this->mask) << ($i * $this->shift);
+ $i++;
+ } while($digit & $this->continuationBit);
+
+ return $this->fromVLQSigned($vlq);
+ }
+
+ /**
+ * Right shift with zero fill.
+ *
+ * @param integer $a number to shift
+ * @param integer $b number of bits to shift
+ * @return integer
+ */
+ public function zeroFill($a, $b){
+ return ($a >= 0) ? ($a >> $b) : ($a >> $b) & (PHP_INT_MAX >> ($b - 1));
+ }
+
+ /**
+ * Encode single 6-bit digit as base64.
+ *
+ * @param integer $number
+ * @return string
+ * @throws Exception If the number is invalid
+ */
+ public function base64Encode($number){
+ if($number < 0 || $number > 63){
+ throw new Exception(sprintf('Invalid number "%s" given. Must be between 0 and 63.', $number));
+ }
+ return $this->intToCharMap[$number];
+ }
+
+ /**
+ * Decode single 6-bit digit from base64
+ *
+ * @param string $char
+ * @return number
+ * @throws Exception If the number is invalid
+ */
+ public function base64Decode($char){
+ if(!array_key_exists($char, $this->charToIntMap)){
+ throw new Exception(sprintf('Invalid base 64 digit "%s" given.', $char));
+ }
+ return $this->charToIntMap[$char];
+ }
+
+}
+
+
+/**
+ * Source map generator
+ *
+ * @package Less
+ * @subpackage Output
+ */
+class Less_SourceMap_Generator extends Less_Configurable {
+
+ /**
+ * What version of source map does the generator generate?
+ */
+ const VERSION = 3;
+
+ /**
+ * Array of default options
+ *
+ * @var array
+ */
+ protected $defaultOptions = array(
+ // an optional source root, useful for relocating source files
+ // on a server or removing repeated values in the 'sources' entry.
+ // This value is prepended to the individual entries in the 'source' field.
+ 'sourceRoot' => '',
+
+ // an optional name of the generated code that this source map is associated with.
+ 'sourceMapFilename' => null,
+
+ // url of the map
+ 'sourceMapURL' => null,
+
+ // absolute path to a file to write the map to
+ 'sourceMapWriteTo' => null,
+
+ // output source contents?
+ 'outputSourceFiles' => false,
+
+ // base path for filename normalization
+ 'sourceMapRootpath' => '',
+
+ // base path for filename normalization
+ 'sourceMapBasepath' => ''
+ );
+
+ /**
+ * The base64 VLQ encoder
+ *
+ * @var Less_SourceMap_Base64VLQ
+ */
+ protected $encoder;
+
+ /**
+ * Array of mappings
+ *
+ * @var array
+ */
+ protected $mappings = array();
+
+ /**
+ * The root node
+ *
+ * @var Less_Tree_Ruleset
+ */
+ protected $root;
+
+ /**
+ * Array of contents map
+ *
+ * @var array
+ */
+ protected $contentsMap = array();
+
+ /**
+ * File to content map
+ *
+ * @var array
+ */
+ protected $sources = array();
+ protected $source_keys = array();
+
+ /**
+ * Constructor
+ *
+ * @param Less_Tree_Ruleset $root The root node
+ * @param array $options Array of options
+ */
+ public function __construct(Less_Tree_Ruleset $root, $contentsMap, $options = array()){
+ $this->root = $root;
+ $this->contentsMap = $contentsMap;
+ $this->encoder = new Less_SourceMap_Base64VLQ();
+
+ $this->SetOptions($options);
+
+ $this->options['sourceMapRootpath'] = $this->fixWindowsPath($this->options['sourceMapRootpath'], true);
+ $this->options['sourceMapBasepath'] = $this->fixWindowsPath($this->options['sourceMapBasepath'], true);
+ }
+
+ /**
+ * Generates the CSS
+ *
+ * @return string
+ */
+ public function generateCSS(){
+ $output = new Less_Output_Mapped($this->contentsMap, $this);
+
+ // catch the output
+ $this->root->genCSS($output);
+
+
+ $sourceMapUrl = $this->getOption('sourceMapURL');
+ $sourceMapFilename = $this->getOption('sourceMapFilename');
+ $sourceMapContent = $this->generateJson();
+ $sourceMapWriteTo = $this->getOption('sourceMapWriteTo');
+
+ if( !$sourceMapUrl && $sourceMapFilename ){
+ $sourceMapUrl = $this->normalizeFilename($sourceMapFilename);
+ }
+
+ // write map to a file
+ if( $sourceMapWriteTo ){
+ $this->saveMap($sourceMapWriteTo, $sourceMapContent);
+ }
+
+ // inline the map
+ if( !$sourceMapUrl ){
+ $sourceMapUrl = sprintf('data:application/json,%s', Less_Functions::encodeURIComponent($sourceMapContent));
+ }
+
+ if( $sourceMapUrl ){
+ $output->add( sprintf('/*# sourceMappingURL=%s */', $sourceMapUrl) );
+ }
+
+ return $output->toString();
+ }
+
+ /**
+ * Saves the source map to a file
+ *
+ * @param string $file The absolute path to a file
+ * @param string $content The content to write
+ * @throws Exception If the file could not be saved
+ */
+ protected function saveMap($file, $content){
+ $dir = dirname($file);
+ // directory does not exist
+ if( !is_dir($dir) ){
+ // FIXME: create the dir automatically?
+ throw new Exception(sprintf('The directory "%s" does not exist. Cannot save the source map.', $dir));
+ }
+ // FIXME: proper saving, with dir write check!
+ if(file_put_contents($file, $content) === false){
+ throw new Exception(sprintf('Cannot save the source map to "%s"', $file));
+ }
+ return true;
+ }
+
+ /**
+ * Normalizes the filename
+ *
+ * @param string $filename
+ * @return string
+ */
+ protected function normalizeFilename($filename){
+
+ $filename = $this->fixWindowsPath($filename);
+
+ $rootpath = $this->getOption('sourceMapRootpath');
+ $basePath = $this->getOption('sourceMapBasepath');
+
+ // "Trim" the 'sourceMapBasepath' from the output filename.
+ if (strpos($filename, $basePath) === 0) {
+ $filename = substr($filename, strlen($basePath));
+ }
+
+ // Remove extra leading path separators.
+ if(strpos($filename, '\\') === 0 || strpos($filename, '/') === 0){
+ $filename = substr($filename, 1);
+ }
+
+ return $rootpath . $filename;
+ }
+
+ /**
+ * Adds a mapping
+ *
+ * @param integer $generatedLine The line number in generated file
+ * @param integer $generatedColumn The column number in generated file
+ * @param integer $originalLine The line number in original file
+ * @param integer $originalColumn The column number in original file
+ * @param string $sourceFile The original source file
+ */
+ public function addMapping($generatedLine, $generatedColumn, $originalLine, $originalColumn, $fileInfo ){
+
+ $this->mappings[] = array(
+ 'generated_line' => $generatedLine,
+ 'generated_column' => $generatedColumn,
+ 'original_line' => $originalLine,
+ 'original_column' => $originalColumn,
+ 'source_file' => $fileInfo['currentUri']
+ );
+
+ $this->sources[$fileInfo['currentUri']] = $fileInfo['filename'];
+ }
+
+
+ /**
+ * Generates the JSON source map
+ *
+ * @return string
+ * @see https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#
+ */
+ protected function generateJson(){
+
+ $sourceMap = array();
+ $mappings = $this->generateMappings();
+
+ // File version (always the first entry in the object) and must be a positive integer.
+ $sourceMap['version'] = self::VERSION;
+
+
+ // An optional name of the generated code that this source map is associated with.
+ $file = $this->getOption('sourceMapFilename');
+ if( $file ){
+ $sourceMap['file'] = $file;
+ }
+
+
+ // An optional source root, useful for relocating source files on a server or removing repeated values in the 'sources' entry. This value is prepended to the individual entries in the 'source' field.
+ $root = $this->getOption('sourceRoot');
+ if( $root ){
+ $sourceMap['sourceRoot'] = $root;
+ }
+
+
+ // A list of original sources used by the 'mappings' entry.
+ $sourceMap['sources'] = array();
+ foreach($this->sources as $source_uri => $source_filename){
+ $sourceMap['sources'][] = $this->normalizeFilename($source_filename);
+ }
+
+
+ // A list of symbol names used by the 'mappings' entry.
+ $sourceMap['names'] = array();
+
+ // A string with the encoded mapping data.
+ $sourceMap['mappings'] = $mappings;
+
+ if( $this->getOption('outputSourceFiles') ){
+ // An optional list of source content, useful when the 'source' can't be hosted.
+ // The contents are listed in the same order as the sources above.
+ // 'null' may be used if some original sources should be retrieved by name.
+ $sourceMap['sourcesContent'] = $this->getSourcesContent();
+ }
+
+ // less.js compat fixes
+ if( count($sourceMap['sources']) && empty($sourceMap['sourceRoot']) ){
+ unset($sourceMap['sourceRoot']);
+ }
+
+ return json_encode($sourceMap);
+ }
+
+ /**
+ * Returns the sources contents
+ *
+ * @return array|null
+ */
+ protected function getSourcesContent(){
+ if(empty($this->sources)){
+ return;
+ }
+ $content = array();
+ foreach($this->sources as $sourceFile){
+ $content[] = file_get_contents($sourceFile);
+ }
+ return $content;
+ }
+
+ /**
+ * Generates the mappings string
+ *
+ * @return string
+ */
+ public function generateMappings(){
+
+ if( !count($this->mappings) ){
+ return '';
+ }
+
+ $this->source_keys = array_flip(array_keys($this->sources));
+
+
+ // group mappings by generated line number.
+ $groupedMap = $groupedMapEncoded = array();
+ foreach($this->mappings as $m){
+ $groupedMap[$m['generated_line']][] = $m;
+ }
+ ksort($groupedMap);
+
+ $lastGeneratedLine = $lastOriginalIndex = $lastOriginalLine = $lastOriginalColumn = 0;
+
+ foreach($groupedMap as $lineNumber => $line_map){
+ while(++$lastGeneratedLine < $lineNumber){
+ $groupedMapEncoded[] = ';';
+ }
+
+ $lineMapEncoded = array();
+ $lastGeneratedColumn = 0;
+
+ foreach($line_map as $m){
+ $mapEncoded = $this->encoder->encode($m['generated_column'] - $lastGeneratedColumn);
+ $lastGeneratedColumn = $m['generated_column'];
+
+ // find the index
+ if( $m['source_file'] ){
+ $index = $this->findFileIndex($m['source_file']);
+ if( $index !== false ){
+ $mapEncoded .= $this->encoder->encode($index - $lastOriginalIndex);
+ $lastOriginalIndex = $index;
+
+ // lines are stored 0-based in SourceMap spec version 3
+ $mapEncoded .= $this->encoder->encode($m['original_line'] - 1 - $lastOriginalLine);
+ $lastOriginalLine = $m['original_line'] - 1;
+
+ $mapEncoded .= $this->encoder->encode($m['original_column'] - $lastOriginalColumn);
+ $lastOriginalColumn = $m['original_column'];
+ }
+ }
+
+ $lineMapEncoded[] = $mapEncoded;
+ }
+
+ $groupedMapEncoded[] = implode(',', $lineMapEncoded) . ';';
+ }
+
+ return rtrim(implode($groupedMapEncoded), ';');
+ }
+
+ /**
+ * Finds the index for the filename
+ *
+ * @param string $filename
+ * @return integer|false
+ */
+ protected function findFileIndex($filename){
+ return $this->source_keys[$filename];
+ }
+
+ /**
+ * fix windows paths
+ * @param string $path
+ * @return string
+ */
+ public function fixWindowsPath($path, $addEndSlash = false){
+ $slash = ($addEndSlash) ? '/' : '';
+ if( !empty($path) ){
+ $path = str_replace('\\', '/', $path);
+ $path = rtrim($path,'/') . $slash;
+ }
+
+ return $path;
+ }
+
+} \ No newline at end of file
diff --git a/model/Feedback.php b/model/Feedback.php
index 16791eb..d2846ad 100644
--- a/model/Feedback.php
+++ b/model/Feedback.php
@@ -35,6 +35,8 @@ class Feedback
VALUES (:reported, :datetime, :net, :os, :player, :stream, :ipproto_v4, :ipproto_v6, :provider, :issues, :issuetext)
');
+ $issuetext = preg_replace('/\r?\n/', ' ', $info['issuetext']);
+
$stm->execute(array(
'reported' => time(),
'datetime' => strtotime($info['datetime']),
@@ -46,13 +48,12 @@ class Feedback
'ipproto_v6' => isset($info['ipproto']) && is_array($info['ipproto']) && in_array('v6', $info['ipproto']),
'provider' => $info['provider'],
'issues' => isset($info['issues']) && is_array($info['issues']) ? implode(',', $info['issues']) : '',
- 'issuetext' => $info['issuetext'],
+ 'issuetext' => $issuetext,
));
}
public function isLoggedIn()
{
- return true;
return
isset($_SERVER['PHP_AUTH_USER']) &&
$_SERVER['PHP_AUTH_USER'] == $this->getConference()->get('FEEDBACK.USERNAME') &&
@@ -76,6 +77,7 @@ class Feedback
SELECT *
FROM feedback
WHERE reported BETWEEN :from AND :to
+ ORDER BY reported DESC
');
$stm->setFetchMode(PDO::FETCH_ASSOC);
diff --git a/model/Room.php b/model/Room.php
index 21a05a9..cfc14c1 100644
--- a/model/Room.php
+++ b/model/Room.php
@@ -67,6 +67,16 @@ class Room
return $this->getConference()->get('ROOMS.'.$this->getSlug().'.DISPLAY', $this->getSlug());
}
+ public function getDisplayShort() {
+ $display_short = $this->getConference()->get('ROOMS.'.$this->getSlug().'.DISPLAY_SHORT', $this->getSlug());
+ if (empty($display_short)) {
+ return $this->getDisplay();
+ }
+ else {
+ return $display_short;
+ }
+ }
+
public function hasStereo() {
diff --git a/model/Schedule.php b/model/Schedule.php
index 4b5d25e..5ffbeda 100644
--- a/model/Schedule.php
+++ b/model/Schedule.php
@@ -39,6 +39,13 @@ class Schedule
return isset( $mapping[$scheduleRoom] );
}
+ public function isOptout($event) {
+ if (isset($event->recording)) {
+ return $event->recording->optout == 'true';
+ }
+ return false;
+ }
+
public function getMappedRoom($scheduleRoom) {
$mapping = $this->getScheduleToRoomSlugMapping();
return $this->getConference()->getRoomIfExists( @$mapping[$scheduleRoom] );
@@ -199,6 +206,7 @@ class Schedule
'end' => $end,
'duration' => $duration,
'room_known' => $this->isRoomMapped($name),
+ 'optout' => $this->isOptout($event),
);
$lastend = $end;
diff --git a/model/Stream.php b/model/Stream.php
index ef9e8d7..d577df6 100644
--- a/model/Stream.php
+++ b/model/Stream.php
@@ -42,9 +42,9 @@ class Stream
switch($this->getSelection())
{
case 'sd':
- case 'slides':
return array(1024, 576);
+ case 'slides':
case 'hd':
return array(1920, 1080);
@@ -101,7 +101,7 @@ class Stream
break;
case 'dash':
- $display .= 'Adaptive';
+ # no special attribution, this is the "normal" stream
break;
default:
@@ -264,4 +264,7 @@ class Stream
'opus' => 'Opus',
);
}
+ public function getPoster() {
+ return joinpath(['/', 'thumbs', rawurlencode($this->getRoom()->getStream()).'-poster.png']);
+ }
}
diff --git a/template/assemblies/feedback.phtml b/template/assemblies/feedback.phtml
index d50daf4..b0b8a20 100644
--- a/template/assemblies/feedback.phtml
+++ b/template/assemblies/feedback.phtml
@@ -1,16 +1,52 @@
<form action="<?=h($conference->getFeedbackURl())?>" target="feedback-target" method="post" role="form" class="feedback-form">
+
+ <div class="container-fluid">
+ <div class="row">
+
+ <div class="col-sm-6 col">
+ <div class="form-group">
+ <label for="issuetext">Message / Symptoms*</label>
+ <textarea rows="2" value="" name="issuetext" id="issuetext" class="form-control" style="resize: vertical;"
+ ></textarea>
+ </div>
+ </div>
+
+ <div class="col-sm-6 col">
+ <div class="form-group">
+ <label for="stream">Stream</label>
+ <select class="form-control" name="stream" id="stream">
+ <option></option>
+ <? foreach($conference->getRooms() as $roomiter): ?>
+ <? if(!$roomiter->hasFeedback()) continue ?>
+ <? foreach($roomiter->getSelections() as $selection): ?>
+ <option
+ <? if(
+ isset($room) && isset($stream) &&
+ $roomiter->getSlug() == $room->getSlug() &&
+ $selection->getSelection() == $stream->getSelection()
+ ): ?>selected<? endif ?>
+ value="<?=h($roomiter->getSlug().'-'.$selection->getSelection())?>"
+ >
+ <?=h($roomiter->getDisplay())?> – <?=h($selection->getDisplay())?>
+ </option>
+ <? endforeach ?>
+ <? endforeach ?>
+ </select>
+ </div>
+ </div>
+
+ </div>
+ <div class="row">
+
<div class="col-sm-4 col">
- <div class="form-group">
+ <label>&nbsp;</label>
+ <div class="form-group mt-1">
<label for="net">Network Connection</label>
<select class="form-control" name="net" id="net">
<option></option>
- <option>EDGE</option>
- <option>3G</option>
- <option>LTE</option>
- <option>DSL &lt;2000</option>
- <option>DSL 2000-6000</option>
- <option>DSL &gt;6000</option>
- <option>VDSL</option>
+ <option>Mobile</option>
+ <option>DSL Light</option>
+ <option>DSL/Cable</option>
<option>Public Hotspot</option>
<option>WiFi on site</option>
<option>Ethernet on site</option>
@@ -47,28 +83,6 @@
<option>Something else</option>
</select>
</div>
-
- <div class="form-group">
- <label for="stream">Stream</label>
- <select class="form-control" name="stream" id="stream">
- <option></option>
- <? foreach($conference->getRooms() as $roomiter): ?>
- <? if(!$roomiter->hasFeedback()) continue ?>
- <? foreach($roomiter->getSelections() as $selection): ?>
- <option
- <? if(
- isset($room) && isset($stream) &&
- $roomiter->getSlug() == $room->getSlug() &&
- $selection->getSelection() == $stream->getSelection()
- ): ?>selected<? endif ?>
- value="<?=h($roomiter->getSlug().'-'.$selection->getSelection())?>"
- >
- <?=h($roomiter->getDisplay())?> – <?=h($selection->getDisplay())?>
- </option>
- <? endforeach ?>
- <? endforeach ?>
- </select>
- </div>
</div>
<div class="col-sm-4 col">
@@ -107,7 +121,7 @@
</div>
<div class="checkbox">
<label>
- <input type="checkbox" name="issues[]" value="Hickups/Jerking" /> Hickups/Jerking
+ <input type="checkbox" name="issues[]" value="Hickups/Discontinously" /> Hickups/Discontinously
</label>
</div>
<div class="checkbox">
@@ -130,16 +144,26 @@
<input type="checkbox" name="issues[]" value="Artifacts" /> Artifacts
</label>
</div>
+ <div class="checkbox">
+ <label>
+ <input type="checkbox" name="issues[]" value="AV Async" /> Audio/Video async
+ </label>
+ </div>
</div>
- <div class="form-group">
- <label for="issuetext">Something else was good/bad</label>
- <input type="text" value="" name="issuetext" id="issuetext" class="form-control" />
- </div>
+ </div>
+</div>
+ <div class="row">
- <div class="form-group">
- <input class="btn btn-primary" type="submit" value="Submit" />
+ <div class="col col-sm-8">
+</div>
+ <div class="col col-sm-4">
+ <div class="form-group">
+ <input class="btn btn-primary" type="submit" value="Submit" />
+ </div>
</div>
+
+ </div>
</div>
</form>
diff --git a/template/assemblies/player/audio.phtml b/template/assemblies/player/audio.phtml
index 087b61c..c3594eb 100644
--- a/template/assemblies/player/audio.phtml
+++ b/template/assemblies/player/audio.phtml
@@ -1,8 +1,9 @@
-<audio
- autoplay="autoplay"
+<video
preload="auto"
- style="width: 300px;"
- class="mejs"
+ controls="controls"
+ autoplay="autoplay"
+ style="max-height: 400px; max-width:100vw; display: block; margin: auto;"
+ poster="<?=h($stream->getPoster())?>"
>
<source
src="<?=h($stream->getAudioUrl('mp3'))?>"
@@ -12,4 +13,4 @@
src="<?=h($stream->getAudioUrl('opus'))?>"
type="audio/opus"
/>
-</audio>
+</video>
diff --git a/template/assemblies/player/dash.phtml b/template/assemblies/player/dash.phtml
index 8e43864..7cc1e38 100644
--- a/template/assemblies/player/dash.phtml
+++ b/template/assemblies/player/dash.phtml
@@ -2,7 +2,8 @@
<script type="text/javascript" src="<?=h($assets)?>clapprio/level-selector.min.js"></script>
<script type="text/javascript" src="<?=h($assets)?>clapprio/audio-selector.min.js"></script>
-<div class="dashContainer">
+
+<div class="dashContainer" style="min-height: 100px" >
<div id="player"></div>
</div>
@@ -44,6 +45,7 @@
return new Clappr.Player({
sources: sources,
width: "100%",
+ poster: "<?=h($stream->getPoster())?>",
plugins: [DashShakaPlayback, LevelSelector, AudioSelector],
shakaConfiguration: {
abr: {
diff --git a/template/assemblies/player/video.phtml b/template/assemblies/player/video.phtml
index ff5039b..3eae170 100644
--- a/template/assemblies/player/video.phtml
+++ b/template/assemblies/player/video.phtml
@@ -10,6 +10,7 @@
preload="auto"
width="<?=h($stream->getVideoWidth())?>"
height="<?=h($stream->getVideoHeight())?>"
+ poster="<?=h($stream->getPoster())?>"
style="width: 100%; height: 100%;"
class="mejs"
>
diff --git a/template/assemblies/schedule.phtml b/template/assemblies/schedule.phtml
index 461353c..a519c23 100644
--- a/template/assemblies/schedule.phtml
+++ b/template/assemblies/schedule.phtml
@@ -8,7 +8,7 @@
<? $fromstart = 0; ?>
<? foreach($events as $event): ?>
<div
- class="block <?=h(@$event['special'] ?: 'event')?>"
+ class="block <?=h(@$event['special'] ?: 'event')?> <?=h((@$event['optout']) ? 'optout' : '')?>"
style="width: <?=h(round($event['duration'] / $schedule->getScale()))?>px; left: <?=h(round($fromstart / $schedule->getScale()))?>px"
data-start="<?=intval($event['start'])?>"
data-end="<?=intval($event['end'])?>"
@@ -30,7 +30,7 @@
<? if(@$event['special'] == 'daychange'): ?>
- <h3><?=h($event['title'])?></h3>
+ <h3><?=h($event['title'])?></h3>
<? elseif(@$event['special'] == 'gap'): ?>
@@ -46,12 +46,12 @@
&ndash;
<?=h(strftime('%H:%M', $event['end']))?>
&nbsp;in&nbsp;
- <?=h($scheduleRoom ? $scheduleRoom->getDisplay() : $roomname) ?>
+ <?=h($scheduleRoom ? $scheduleRoom->getDisplayShort() : $roomname) ?>
</h4>
<h3>
- <?=h($event['title'])?>
+ <?=h($event['title'])?><? if (@$event['optout']): ?><i> (no stream)</i><? endif ?>
</h3>
- <? if($event['speaker']): ?>
+ <? if(! empty(trim($event['speaker']))): ?>
<h5>by&nbsp;<?=h($event['speaker'])?></h5>
<? endif ?>
<? endif ?>
diff --git a/template/feedback-read.phtml b/template/feedback-read.phtml
index 8dc9cc7..15d491f 100644
--- a/template/feedback-read.phtml
+++ b/template/feedback-read.phtml
@@ -1,5 +1,5 @@
<div class="container">
- <h1><?=h($title)?></h1>
+<h1><?=h($title)?></h1> <span><i>on <?= $hostname ?></i></span>
<form action="<?=h($conference->getFeedbackReadUrl())?>" method="POST">
<div class="row">
diff --git a/template/overview.phtml b/template/overview.phtml
index e441112..d2f3c20 100644
--- a/template/overview.phtml
+++ b/template/overview.phtml
@@ -56,7 +56,8 @@
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">
- <?=h($room->getDisplay())?>
+ <span class="roomtitle regular"><?=h($room->getDisplay())?></span>
+ <span class="roomtitle short"><?=h($room->getDisplayShort())?></span>
</div>
</div>
@@ -72,7 +73,7 @@
<? else: ?>
- <h2><?=h($room->getDisplay())?></h2>
+ <h2><?=h($room->getDisplay())?></h2>
<? endif ?>
diff --git a/view/feedback-read.php b/view/feedback-read.php
index ba7a985..b0f3b33 100644
--- a/view/feedback-read.php
+++ b/view/feedback-read.php
@@ -7,9 +7,9 @@ if(!$feedback->isLoggedIn())
exit;
}
-$from = isset($_POST['from']) ? strtotime($_POST['from']) : strtotime('2000-01-01');
+$from = isset($_POST['from']) ? strtotime($_POST['from']) : time();
$to = isset($_POST['to']) ? strtotime($_POST['to']) : time() + 24*60*60;
-$cols = isset($_POST['col']) ? $_POST['col'] : array('reported', 'stream', 'player', 'issuetext');
+$cols = isset($_POST['col']) ? $_POST['col'] : array('reported', 'stream', 'os', 'player', 'issues', 'issuetext');
$allcols = array('reported', 'datetime', 'net', 'os', 'stream', 'player', 'ipproto_v4', 'ipproto_v6', 'provider', 'issues', 'issuetext');
@@ -23,4 +23,5 @@ echo $tpl->render(array(
'columns' => array_intersect($allcols, $cols),
'allcolumns' => $allcols,
+ 'hostname' => shell_exec('hostname -f'),
));
diff --git a/view/streams-json-v2.php b/view/streams-json-v2.php
index 5302e16..7f070dd 100644
--- a/view/streams-json-v2.php
+++ b/view/streams-json-v2.php
@@ -9,14 +9,17 @@ foreach (Conferences::getActiveConferences() as $conference)
$now = $conference->getSchedule()->getScheduleDisplayTime($basetime);
$overview = $conference->getOverview();
- $isInDayChange = false;
+ $isCurrentlyStreaming = false;
foreach($conference->getRooms() as $room) {
$currentTalk = $room->getCurrentTalk($now);
- if($currentTalk && isset($currentTalk['special']) && $currentTalk['special'] == 'daychange') {
- $isInDayChange = true;
- break;
+ if ($currentTalk) {
+ $isCurrentlyStreaming = true;
+ if (isset($currentTalk['special']) && $currentTalk['special'] == 'daychange') {
+ $isCurrentlyStreaming = true;
+ break;
+ }
}
}
@@ -126,7 +129,7 @@ foreach (Conferences::getActiveConferences() as $conference)
'schedule' => $conference->getSchedule()->getScheduleUrl(),
'startsAt' => $conference->startsAt() ? $conference->startsAt()->format(DateTime::ISO8601) : null,
'endsAt' => $conference->endsAt() ? $conference->endsAt()->format(DateTime::ISO8601) : null,
- 'isCurrentlyStreaming' => !$isInDayChange,
+ 'isCurrentlyStreaming' => $isCurrentlyStreaming,
'groups' => $groupstruct,
);
}