diff --git a/README-CN.md b/README-CN.md
index d1640d495..09c3deb3c 100644
--- a/README-CN.md
+++ b/README-CN.md
@@ -32,8 +32,9 @@
| [artplayer-plugin-danmuku](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-danmuku) | 弹幕库插件 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-danmuku.js&example=danmuku) |
| [artplayer-plugin-gif](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-gif) | GIF 生成插件 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-gif.js&example=gif) |
| [artplayer-plugin-backlight](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-backlight) | 背光插件 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-backlight.js&example=backlight) |
+| [artplayer-plugin-ass](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-ass) | ASS 增强插件 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-ass.js&example=ass) |
| [artplayer-tool-thumbnail](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-thumbnail) | 缩略图生成工具 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-thumbnail.js&example=thumbnail) |
-| [artplayer-tool-github](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-github) | Github 弹幕库工具 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-github.js%0A.%2Funcompiled%2Fartplayer-plugin-danmuku.js&example=github) | |
+| [artplayer-tool-github](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-github) | Github 弹幕库工具 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-github.js%0A.%2Funcompiled%2Fartplayer-plugin-danmuku.js&example=github) | |
| [artplayer-react](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-react) | React 组件 | [demo](https://codesandbox.io/s/n74859y9rl) |
| [artplayer-vue](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-vue) | Vue 组件 | [demo](https://codesandbox.io/s/6z76lm109n) |
diff --git a/README.md b/README.md
index 375ede0c0..dc7813be3 100644
--- a/README.md
+++ b/README.md
@@ -34,8 +34,9 @@
| [artplayer-plugin-danmuku](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-danmuku) | Danmuku plugin | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-danmuku.js&example=danmuku) |
| [artplayer-plugin-gif](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-gif) | Gif plugin | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-gif.js&example=gif) |
| [artplayer-plugin-backlight](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-backlight) | Backlight plugin | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-backlight.js&example=backlight) |
+| [artplayer-plugin-ass](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-ass) | ASS enhanced plugin | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-ass.js&example=ass) |
| [artplayer-tool-thumbnail](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-thumbnail) | Thumbnail tool | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-thumbnail.js&example=thumbnail) |
-| [artplayer-tool-github](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-github) | Github Danmuku tool | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-github.js%0A.%2Funcompiled%2Fartplayer-plugin-danmuku.js&example=github) | |
+| [artplayer-tool-github](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-github) | Github Danmuku tool | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-github.js%0A.%2Funcompiled%2Fartplayer-plugin-danmuku.js&example=github) | |
| [artplayer-react](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-react) | React Component | [demo](https://codesandbox.io/s/n74859y9rl) |
| [artplayer-vue](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-vue) | Vue Component | [demo](https://codesandbox.io/s/6z76lm109n) |
diff --git a/docs/assets/example/ass.js b/docs/assets/example/ass.js
new file mode 100644
index 000000000..a4141e16b
--- /dev/null
+++ b/docs/assets/example/ass.js
@@ -0,0 +1,6 @@
+var art = new Artplayer({
+ container: '.artplayer-app',
+ url: 'https://artplayer.org/assets/sample/video.mp4',
+ autoSize: true,
+ plugins: [artplayerPluginAss('/assets/sample/subtitle.ass')],
+});
diff --git a/docs/assets/sample/subtitle.ass b/docs/assets/sample/subtitle.ass
new file mode 100644
index 000000000..11fffa8c2
--- /dev/null
+++ b/docs/assets/sample/subtitle.ass
@@ -0,0 +1,97 @@
+[Script Info]
+; This is an Advanced Sub Station Alpha v4+ script.
+Title: phpNOQ5Gi
+ScriptType: v4.00+
+Collisions: Normal
+PlayDepth: 0
+
+[V4+ Styles]
+Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
+Style: Default,Arial,20,&H00FFFFFF,&H0300FFFF,&H00000000,&H02000000,0,0,0,0,100,100,0,0,1,2,1,2,10,10,10,1
+
+[Events]
+Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text
+Dialogue: 0,0:00:01.50,0:00:03.95,Default,,0,0,0,,歌名:One More Time,One More Chance\N〖愿往事重来〗
+Dialogue: 0,0:00:04.00,0:00:05.95,Default,,0,0,0,,【新海诚动画】『秒速5センチメートル』\N《秒速5厘米》主题曲
+Dialogue: 0,0:00:06.00,0:00:08.95,Default,,0,0,0,,编曲:森俊之
+Dialogue: 0,0:00:09.00,0:00:11.95,Default,,0,0,0,,作词|作曲|演唱:山崎まさよし <山崎将义>
+Dialogue: 0,0:00:12.00,0:00:15.95,Default,,0,0,0,,
+Dialogue: 0,0:00:16.00,0:00:20.25,Default,,0,0,0,,これ以上何をう失(し)なえば\N【还要再失去什么】
+Dialogue: 0,0:00:20.30,0:00:23.25,Default,,0,0,0,,心は许(ゆる)されるの\N【才能让心得到宽恕?】
+Dialogue: 0,0:00:23.30,0:00:27.25,Default,,0,0,0,,どれ程(ほど)の痛(いた)みならば\N【还要再怎样痛苦】
+Dialogue: 0,0:00:27.30,0:00:30.25,Default,,0,0,0,,もう一度君に会(あ)える\N【才能与你再次相见】
+Dialogue: 0,0:00:30.30,0:00:33.25,Default,,0,0,0,,One more time
+Dialogue: 0,0:00:33.30,0:00:37.95,Default,,0,0,0,,季节(きせつ)よ うつろわないで\N【不愿看到季节的变迁】
+Dialogue: 0,0:00:38.00,0:00:41.05,Default,,0,0,0,,One more time
+Dialogue: 0,0:00:41.10,0:00:45.25,Default,,0,0,0,,ふざけあった时间(じかん)よ\N【曾与你嬉闹的时光啊】
+Dialogue: 0,0:00:45.30,0:00:49.25,Default,,0,0,0,,くいちがうときはいつも\N【每次争执的时候】
+Dialogue: 0,0:00:49.30,0:00:53.10,Default,,0,0,0,,仆が先(さき)に折(お)れたね\N【总是我先让步】
+Dialogue: 0,0:00:53.15,0:00:56.25,Default,,0,0,0,,わがままな性格(せいかく)が\N【你那任性的性格】
+Dialogue: 0,0:00:56.30,0:00:59.25,Default,,0,0,0,,なおさら爱(いと)しくさせた\N【反而令你更加可爱】
+Dialogue: 0,0:00:59.30,0:01:02.95,Default,,0,0,0,,One more chance
+Dialogue: 0,0:01:03.00,0:01:07.25,Default,,0,0,0,,记忆(きおく)に足(あし)を取(と)られて\N【回忆绊住我的脚步】
+Dialogue: 0,0:01:07.30,0:01:10.25,Default,,0,0,0,,One more chance
+Dialogue: 0,0:01:10.30,0:01:14.95,Default,,0,0,0,,次(つぎ)の场所を选(えら)べない\N【无法选择下个地方】
+Dialogue: 0,0:01:15.00,0:01:18.25,Default,,0,0,0,,いつでも捜(さが)しているよ\N【总是在一直寻觅】
+Dialogue: 0,0:01:18.30,0:01:21.95,Default,,0,0,0,,どっかに君の姿(すがた)を\N【寻觅着你的身影】
+Dialogue: 0,0:01:22.00,0:01:23.95,Default,,0,0,0,,向(むか)いのホーム\N【对面的月台上】
+Dialogue: 0,0:01:24.00,0:01:25.95,Default,,0,0,0,,路地裏(ろじうら)の窓(まど)\N【在小巷的窗口里】
+Dialogue: 0,0:01:26.00,0:01:29.25,Default,,0,0,0,,こんなとこにいるはずもないのに\N【尽管明知道你不可能在那里】
+Dialogue: 0,0:01:29.30,0:01:33.25,Default,,0,0,0,,愿(ねが)いがもしも叶(かな)うなら\N【若愿望能够实现】
+Dialogue: 0,0:01:33.30,0:01:36.55,Default,,0,0,0,,いますぐ君のもとへ\N【好想马上去到你身边】
+Dialogue: 0,0:01:36.60,0:01:40.25,Default,,0,0,0,,できないことは もう何もない\N【如今我再也不会有丝毫退缩】
+Dialogue: 0,0:01:40.30,0:01:47.30,Default,,0,0,0,,すべてかけて抱きしめてみせるよ\N【我会不顾一切将你紧紧拥抱】
+Dialogue: 0,0:01:47.35,0:01:51.95,Default,,0,0,0,,
+Dialogue: 0,0:01:52.00,0:01:55.25,Default,,0,0,0,,
+Dialogue: 0,0:01:55.30,0:01:59.25,Default,,0,0,0,,寂(さび)しさ纷(まぎ)らすだけなら\N【如果只是为了排遣寂寞】
+Dialogue: 0,0:01:59.30,0:02:02.95,Default,,0,0,0,,谁でもいいはずなのに\N【其实不管是谁都无所谓】
+Dialogue: 0,0:02:03.00,0:02:07.25,Default,,0,0,0,,星が落(お)ちそうな夜(よる)だから\N【唯有在星辰仿佛要坠落的夜晚】
+Dialogue: 0,0:02:07.30,0:02:10.25,Default,,0,0,0,,自分(じぶん)をいつわれない\N【我无法欺骗自己】
+Dialogue: 0,0:02:10.30,0:02:13.25,Default,,0,0,0,,One more time
+Dialogue: 0,0:02:13.30,0:02:17.25,Default,,0,0,0,,季节(きせつ)よ うつろわないで\N【不愿看到季节的变迁】
+Dialogue: 0,0:02:17.30,0:02:20.25,Default,,0,0,0,,One more time
+Dialogue: 0,0:02:20.30,0:02:24.60,Default,,0,0,0,,ふざけあった时间(じかん)よ\N【曾与你嬉闹的时光啊】
+Dialogue: 0,0:02:24.65,0:02:25.25,Default,,0,0,0,,
+Dialogue: 0,0:02:25.30,0:02:29.05,Default,,0,0,0,,いつでも捜(さが)しているよ\N【总是在一直寻觅】
+Dialogue: 0,0:02:29.10,0:02:32.25,Default,,0,0,0,,どっかに君(きみ)の姿(すがた)を\N【寻觅着你的身影】
+Dialogue: 0,0:02:32.30,0:02:34.25,Default,,0,0,0,,交差点(こうさてん)でも\N【每个十字路口】
+Dialogue: 0,0:02:34.30,0:02:36.25,Default,,0,0,0,,梦の中でも 【每次梦境之中】
+Dialogue: 0,0:02:36.30,0:02:39.95,Default,,0,0,0,,こんなとこにいるはずもないのに\N【尽管明知道你不可能在那里】
+Dialogue: 0,0:02:40.00,0:02:43.25,Default,,0,0,0,,奇迹(きせき)がもしも起(お)こるなら\N【若奇迹将会发生】
+Dialogue: 0,0:02:43.30,0:02:46.95,Default,,0,0,0,,今すぐ君に见せたい\N【我希望马上就能见到你】
+Dialogue: 0,0:02:47.00,0:02:50.25,Default,,0,0,0,,新しい朝(あさ) これからの仆\N【无论崭新的清晨 还是今后的自己】
+Dialogue: 0,0:02:50.30,0:02:57.25,Default,,0,0,0,,言えなかった「好き」という言叶も\N【或是那句没能说出口的「喜欢你」】
+Dialogue: 0,0:02:57.30,0:03:04.45,Default,,0,0,0,,
+Dialogue: 0,0:03:04.50,0:03:05.95,Default,,0,0,0,,
+Dialogue: 0,0:03:06.00,0:03:13.95,Default,,0,0,0,,夏の想い出がまわる\N【夏日的回忆在脑海中回旋】
+Dialogue: 0,0:03:14.00,0:03:20.95,Default,,0,0,0,,ふいに消(き)えた鼓动(こどう)\N【刹那间消失的悸动】
+Dialogue: 0,0:03:21.00,0:03:24.95,Default,,0,0,0,,いつでも捜(さが)しているよ\N【总是在一直寻觅】
+Dialogue: 0,0:03:25.00,0:03:27.95,Default,,0,0,0,,どっかに君の姿(すがた)を\N【寻觅着你的身影】
+Dialogue: 0,0:03:28.00,0:03:29.95,Default,,0,0,0,,明(あ)け方(がた)の街(まち)\N【在拂晓的街头】
+Dialogue: 0,0:03:30.00,0:03:31.95,Default,,0,0,0,,桜木町(さくらぎちょう)で\N【在种满樱树的小镇】
+Dialogue: 0,0:03:32.00,0:03:35.95,Default,,0,0,0,,こんなとこに来(く)るはずもないのに\N【尽管明知道你不可能在那里】
+Dialogue: 0,0:03:36.00,0:03:39.25,Default,,0,0,0,,愿(ねが)いがもしも叶(かな)うなら\N【若愿望能够实现】
+Dialogue: 0,0:03:39.30,0:03:43.05,Default,,0,0,0,,今すぐ君のもとへ\N【现在马上去到你身边】
+Dialogue: 0,0:03:43.10,0:03:46.80,Default,,0,0,0,,できないことは もう何(なに)もない\N【如今我再也不会有丝毫退缩】
+Dialogue: 0,0:03:46.85,0:03:50.60,Default,,0,0,0,,すべてかけて抱きしめてみせるよ\N【我会不顾一切紧紧将你拥抱】
+Dialogue: 0,0:03:50.65,0:03:54.25,Default,,0,0,0,,いつでも捜(さが)しているよ\N【总是在一直寻觅】
+Dialogue: 0,0:03:54.30,0:03:57.70,Default,,0,0,0,,どっかに君のかけらを\N【寻觅着你的片断】
+Dialogue: 0,0:03:57.75,0:03:59.25,Default,,0,0,0,,旅先(たびさき)の店(みせ)\N【在旅途中的小店】
+Dialogue: 0,0:03:59.30,0:04:01.45,Default,,0,0,0,,新闻(しんぶん)の隅(すみ)\N【在报纸的角落】
+Dialogue: 0,0:04:01.50,0:04:04.95,Default,,0,0,0,,こんなとこにあるはずもないのに\N【尽管明知道你不可能在那里】
+Dialogue: 0,0:04:05.00,0:04:08.25,Default,,0,0,0,,奇迹(きせき)がもしも起(お)こるなら\N【若奇迹将会发生】
+Dialogue: 0,0:04:08.30,0:04:12.25,Default,,0,0,0,,今すぐ君に见せたい\N【我希望现在就能见到你】
+Dialogue: 0,0:04:12.30,0:04:16.05,Default,,0,0,0,,新しい朝(あさ) これからの仆\N【无论崭新的清晨 还是今后的自己】
+Dialogue: 0,0:04:16.10,0:04:19.40,Default,,0,0,0,,言えなかった「好き」という言叶も\N【或是那句没能说出口的「喜欢你」】
+Dialogue: 0,0:04:19.45,0:04:19.95,Default,,0,0,0,,
+Dialogue: 0,0:04:20.00,0:04:22.95,Default,,0,0,0,,いつでも捜(さが)してしまう\N【总是在一直寻觅】
+Dialogue: 0,0:04:23.00,0:04:26.95,Default,,0,0,0,,どっかに君の笑颜(えがお)を\N【寻觅着你的笑容】
+Dialogue: 0,0:04:27.00,0:04:30.25,Default,,0,0,0,,急行(きゅうこう)待ちの 踏切(ふみきり)あたり\N【哪怕在等待列车通过的铁路道口】
+Dialogue: 0,0:04:30.30,0:04:34.25,Default,,0,0,0,,こんなとこにいるはずもないのに\N【虽然明明知道你不可能在那里】
+Dialogue: 0,0:04:34.30,0:04:37.95,Default,,0,0,0,,命(いのち)が缲(く)り返(かえ)すならば\N【如果生命能够重来】
+Dialogue: 0,0:04:38.00,0:04:41.05,Default,,0,0,0,,何度(なんど)も君のもとへ\N【无论几次我都要去你身边】
+Dialogue: 0,0:04:41.10,0:04:45.15,Default,,0,0,0,,欲(ほ)しいものなど もう何もない\N【那时我一定别无所求】
+Dialogue: 0,0:04:45.20,0:04:52.75,Default,,0,0,0,,君のほかに大切なものなど\N【再也没有什么比你更加重要】
+Dialogue: 0,0:04:52.80,0:05:10.95,Default,,0,0,0,,
+Dialogue: 0,0:05:11.00,0:05:15.45,Default,,0,0,0,,
+Dialogue: 0,0:05:15.50,0:05:25.50,Default,,0,0,0,,--终わり--
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index 219939dba..3f3268563 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -36,6 +36,9 @@
artplayer-plugin-gif
+
+ artplayer-plugin-ass
+
- Tools
diff --git a/docs/uncompiled/artplayer-plugin-ass.js b/docs/uncompiled/artplayer-plugin-ass.js
new file mode 100644
index 000000000..88a615388
--- /dev/null
+++ b/docs/uncompiled/artplayer-plugin-ass.js
@@ -0,0 +1,2124 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.artplayerPluginAss = factory());
+}(this, (function () { 'use strict';
+
+ function parseEffect(text) {
+ var param = text
+ .toLowerCase()
+ .trim()
+ .split(/\s*;\s*/);
+ if (param[0] === 'banner') {
+ return {
+ name: param[0],
+ delay: param[1] * 1 || 0,
+ leftToRight: param[2] * 1 || 0,
+ fadeAwayWidth: param[3] * 1 || 0,
+ };
+ }
+ if (/^scroll\s/.test(param[0])) {
+ return {
+ name: param[0],
+ y1: Math.min(param[1] * 1, param[2] * 1),
+ y2: Math.max(param[1] * 1, param[2] * 1),
+ delay: param[3] * 1 || 0,
+ fadeAwayHeight: param[4] * 1 || 0,
+ };
+ }
+ return null;
+ }
+
+ function parseDrawing(text) {
+ return text
+ .toLowerCase()
+ // numbers
+ .replace(/([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)/g, ' $1 ')
+ // commands
+ .replace(/([mnlbspc])/g, ' $1 ')
+ .trim()
+ .replace(/\s+/g, ' ')
+ .split(/\s(?=[mnlbspc])/)
+ .map(function (cmd) { return (
+ cmd.split(' ')
+ .filter(function (x, i) { return !(i && Number.isNaN(x * 1)); })
+ ); });
+ }
+
+ var numTags = [
+ 'b', 'i', 'u', 's', 'fsp',
+ 'k', 'K', 'kf', 'ko', 'kt',
+ 'fe', 'q', 'p', 'pbo', 'a', 'an',
+ 'fscx', 'fscy', 'fax', 'fay', 'frx', 'fry', 'frz', 'fr',
+ 'be', 'blur', 'bord', 'xbord', 'ybord', 'shad', 'xshad', 'yshad' ];
+
+ var numRegexs = numTags.map(function (nt) { return ({ name: nt, regex: new RegExp(("^" + nt + "-?\\d")) }); });
+
+ function parseTag(text) {
+ var assign;
+
+ var tag = {};
+ for (var i = 0; i < numRegexs.length; i++) {
+ var ref = numRegexs[i];
+ var name = ref.name;
+ var regex = ref.regex;
+ if (regex.test(text)) {
+ tag[name] = text.slice(name.length) * 1;
+ return tag;
+ }
+ }
+ if (/^fn/.test(text)) {
+ tag.fn = text.slice(2);
+ } else if (/^r/.test(text)) {
+ tag.r = text.slice(1);
+ } else if (/^fs[\d+-]/.test(text)) {
+ tag.fs = text.slice(2);
+ } else if (/^\d?c&?H?[0-9a-f]+|^\d?c$/i.test(text)) {
+ var ref$1 = text.match(/^(\d?)c&?H?(\w*)/);
+ var num = ref$1[1];
+ var color = ref$1[2];
+ tag[("c" + (num || 1))] = color && ("000000" + color).slice(-6);
+ } else if (/^\da&?H?[0-9a-f]+/i.test(text)) {
+ var ref$2 = text.match(/^(\d)a&?H?(\w\w)/);
+ var num$1 = ref$2[1];
+ var alpha = ref$2[2];
+ tag[("a" + num$1)] = alpha;
+ } else if (/^alpha&?H?[0-9a-f]+/i.test(text)) {
+ (assign = text.match(/^alpha&?H?([0-9a-f]+)/i), tag.alpha = assign[1]);
+ tag.alpha = ("00" + (tag.alpha)).slice(-2);
+ } else if (/^(?:pos|org|move|fad|fade)\(/.test(text)) {
+ var ref$3 = text.match(/^(\w+)\((.*?)\)?$/);
+ var key = ref$3[1];
+ var value = ref$3[2];
+ tag[key] = value
+ .trim()
+ .split(/\s*,\s*/)
+ .map(Number);
+ } else if (/^i?clip/.test(text)) {
+ var p = text
+ .match(/^i?clip\((.*?)\)?$/)[1]
+ .trim()
+ .split(/\s*,\s*/);
+ tag.clip = {
+ inverse: /iclip/.test(text),
+ scale: 1,
+ drawing: null,
+ dots: null,
+ };
+ if (p.length === 1) {
+ tag.clip.drawing = parseDrawing(p[0]);
+ }
+ if (p.length === 2) {
+ tag.clip.scale = p[0] * 1;
+ tag.clip.drawing = parseDrawing(p[1]);
+ }
+ if (p.length === 4) {
+ tag.clip.dots = p.map(Number);
+ }
+ } else if (/^t\(/.test(text)) {
+ var p$1 = text
+ .match(/^t\((.*?)\)?$/)[1]
+ .trim()
+ .replace(/\\.*/, function (x) { return x.replace(/,/g, '\n'); })
+ .split(/\s*,\s*/);
+ if (!p$1[0]) { return tag; }
+ tag.t = {
+ t1: 0,
+ t2: 0,
+ accel: 1,
+ tags: p$1[p$1.length - 1]
+ .replace(/\n/g, ',')
+ .split('\\')
+ .slice(1)
+ .map(parseTag),
+ };
+ if (p$1.length === 2) {
+ tag.t.accel = p$1[0] * 1;
+ }
+ if (p$1.length === 3) {
+ tag.t.t1 = p$1[0] * 1;
+ tag.t.t2 = p$1[1] * 1;
+ }
+ if (p$1.length === 4) {
+ tag.t.t1 = p$1[0] * 1;
+ tag.t.t2 = p$1[1] * 1;
+ tag.t.accel = p$1[2] * 1;
+ }
+ }
+
+ return tag;
+ }
+
+ function parseTags(text) {
+ var tags = [];
+ var depth = 0;
+ var str = '';
+ for (var i = 0; i < text.length; i++) {
+ var x = text[i];
+ if (x === '(') { depth++; }
+ if (x === ')') { depth--; }
+ if (depth < 0) { depth = 0; }
+ if (!depth && x === '\\') {
+ if (str) {
+ tags.push(str);
+ }
+ str = '';
+ } else {
+ str += x;
+ }
+ }
+ tags.push(str);
+ return tags.map(parseTag);
+ }
+
+ function parseText(text) {
+ var pairs = text.split(/{([^{}]*?)}/);
+ var parsed = [];
+ if (pairs[0].length) {
+ parsed.push({ tags: [], text: pairs[0], drawing: [] });
+ }
+ for (var i = 1; i < pairs.length; i += 2) {
+ var tags = parseTags(pairs[i]);
+ var isDrawing = tags.reduce(function (v, tag) { return (tag.p === undefined ? v : !!tag.p); }, false);
+ parsed.push({
+ tags: tags,
+ text: isDrawing ? '' : pairs[i + 1],
+ drawing: isDrawing ? parseDrawing(pairs[i + 1]) : [],
+ });
+ }
+ return {
+ raw: text,
+ combined: parsed.map(function (frag) { return frag.text; }).join(''),
+ parsed: parsed,
+ };
+ }
+
+ function parseTime(time) {
+ var t = time.split(':');
+ return t[0] * 3600 + t[1] * 60 + t[2] * 1;
+ }
+
+ function parseDialogue(text, format) {
+ var fields = text.split(',');
+ if (fields.length > format.length) {
+ var textField = fields.slice(format.length - 1).join();
+ fields = fields.slice(0, format.length - 1);
+ fields.push(textField);
+ }
+
+ var dia = {};
+ for (var i = 0; i < fields.length; i++) {
+ var fmt = format[i];
+ var fld = fields[i].trim();
+ switch (fmt) {
+ case 'Layer':
+ case 'MarginL':
+ case 'MarginR':
+ case 'MarginV':
+ dia[fmt] = fld * 1;
+ break;
+ case 'Start':
+ case 'End':
+ dia[fmt] = parseTime(fld);
+ break;
+ case 'Effect':
+ dia[fmt] = parseEffect(fld);
+ break;
+ case 'Text':
+ dia[fmt] = parseText(fld);
+ break;
+ default:
+ dia[fmt] = fld;
+ }
+ }
+
+ return dia;
+ }
+
+ function parseFormat(text) {
+ return text.match(/Format\s*:\s*(.*)/i)[1].split(/\s*,\s*/);
+ }
+
+ function parseStyle(text) {
+ return text.match(/Style\s*:\s*(.*)/i)[1].split(/\s*,\s*/);
+ }
+
+ function parse(text) {
+ var tree = {
+ info: {},
+ styles: { format: [], style: [] },
+ events: { format: [], comment: [], dialogue: [] },
+ };
+ var lines = text.split(/\r?\n/);
+ var state = 0;
+ for (var i = 0; i < lines.length; i++) {
+ var line = lines[i].trim();
+ if (/^;/.test(line)) { continue; }
+
+ if (/^\[Script Info\]/i.test(line)) { state = 1; }
+ else if (/^\[V4\+? Styles\]/i.test(line)) { state = 2; }
+ else if (/^\[Events\]/i.test(line)) { state = 3; }
+ else if (/^\[.*\]/.test(line)) { state = 0; }
+
+ if (state === 0) { continue; }
+ if (state === 1) {
+ if (/:/.test(line)) {
+ var ref = line.match(/(.*?)\s*:\s*(.*)/);
+ var key = ref[1];
+ var value = ref[2];
+ tree.info[key] = value;
+ }
+ }
+ if (state === 2) {
+ if (/^Format\s*:/i.test(line)) {
+ tree.styles.format = parseFormat(line);
+ }
+ if (/^Style\s*:/i.test(line)) {
+ tree.styles.style.push(parseStyle(line));
+ }
+ }
+ if (state === 3) {
+ if (/^Format\s*:/i.test(line)) {
+ tree.events.format = parseFormat(line);
+ }
+ if (/^(?:Comment|Dialogue)\s*:/i.test(line)) {
+ var ref$1 = line.match(/^(\w+?)\s*:\s*(.*)/i);
+ var key$1 = ref$1[1];
+ var value$1 = ref$1[2];
+ tree.events[key$1.toLowerCase()].push(parseDialogue(value$1, tree.events.format));
+ }
+ }
+ }
+
+ return tree;
+ }
+
+ var assign = Object.assign || (
+ /* istanbul ignore next */
+ function assign(target) {
+ var sources = [], len = arguments.length - 1;
+ while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];
+
+ for (var i = 0; i < sources.length; i++) {
+ if (!sources[i]) { continue; }
+ var keys = Object.keys(sources[i]);
+ for (var j = 0; j < keys.length; j++) {
+ // eslint-disable-next-line no-param-reassign
+ target[keys[j]] = sources[i][keys[j]];
+ }
+ }
+ return target;
+ }
+ );
+
+ function createCommand(arr) {
+ var cmd = {
+ type: null,
+ prev: null,
+ next: null,
+ points: [],
+ };
+ if (/[mnlbs]/.test(arr[0])) {
+ cmd.type = arr[0]
+ .toUpperCase()
+ .replace('N', 'L')
+ .replace('B', 'C');
+ }
+ for (var len = arr.length - !(arr.length & 1), i = 1; i < len; i += 2) {
+ cmd.points.push({ x: arr[i] * 1, y: arr[i + 1] * 1 });
+ }
+ return cmd;
+ }
+
+ function isValid(cmd) {
+ if (!cmd.points.length || !cmd.type) {
+ return false;
+ }
+ if (/C|S/.test(cmd.type) && cmd.points.length < 3) {
+ return false;
+ }
+ return true;
+ }
+
+ function getViewBox(commands) {
+ var ref;
+
+ var minX = Infinity;
+ var minY = Infinity;
+ var maxX = -Infinity;
+ var maxY = -Infinity;
+ (ref = []).concat.apply(ref, commands.map(function (ref) {
+ var points = ref.points;
+
+ return points;
+ })).forEach(function (ref) {
+ var x = ref.x;
+ var y = ref.y;
+
+ minX = Math.min(minX, x);
+ minY = Math.min(minY, y);
+ maxX = Math.max(maxX, x);
+ maxY = Math.max(maxY, y);
+ });
+ return {
+ minX: minX,
+ minY: minY,
+ width: maxX - minX,
+ height: maxY - minY,
+ };
+ }
+
+ /**
+ * Convert S command to B command
+ * Reference from https://github.com/d3/d3/blob/v3.5.17/src/svg/line.js#L259
+ * @param {Array} points points
+ * @param {String} prev type of previous command
+ * @param {String} next type of next command
+ * @return {Array} converted commands
+ */
+ function s2b(points, prev, next) {
+ var results = [];
+ var bb1 = [0, 2 / 3, 1 / 3, 0];
+ var bb2 = [0, 1 / 3, 2 / 3, 0];
+ var bb3 = [0, 1 / 6, 2 / 3, 1 / 6];
+ var dot4 = function (a, b) { return (a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]); };
+ var px = [points[points.length - 1].x, points[0].x, points[1].x, points[2].x];
+ var py = [points[points.length - 1].y, points[0].y, points[1].y, points[2].y];
+ results.push({
+ type: prev === 'M' ? 'M' : 'L',
+ points: [{ x: dot4(bb3, px), y: dot4(bb3, py) }],
+ });
+ for (var i = 3; i < points.length; i++) {
+ px = [points[i - 3].x, points[i - 2].x, points[i - 1].x, points[i].x];
+ py = [points[i - 3].y, points[i - 2].y, points[i - 1].y, points[i].y];
+ results.push({
+ type: 'C',
+ points: [
+ { x: dot4(bb1, px), y: dot4(bb1, py) },
+ { x: dot4(bb2, px), y: dot4(bb2, py) },
+ { x: dot4(bb3, px), y: dot4(bb3, py) } ],
+ });
+ }
+ if (next === 'L' || next === 'C') {
+ var last = points[points.length - 1];
+ results.push({ type: 'L', points: [{ x: last.x, y: last.y }] });
+ }
+ return results;
+ }
+
+ function toSVGPath(instructions) {
+ return instructions.map(function (ref) {
+ var type = ref.type;
+ var points = ref.points;
+
+ return (
+ type + points.map(function (ref) {
+ var x = ref.x;
+ var y = ref.y;
+
+ return (x + "," + y);
+ }).join(',')
+ );
+ }).join('');
+ }
+
+ function compileDrawing(rawCommands) {
+ var ref$1;
+
+ var commands = [];
+ var i = 0;
+ while (i < rawCommands.length) {
+ var arr = rawCommands[i];
+ var cmd = createCommand(arr);
+ if (isValid(cmd)) {
+ if (cmd.type === 'S') {
+ var ref = (commands[i - 1] || { points: [{ x: 0, y: 0 }] }).points.slice(-1)[0];
+ var x = ref.x;
+ var y = ref.y;
+ cmd.points.unshift({ x: x, y: y });
+ }
+ if (i) {
+ cmd.prev = commands[i - 1].type;
+ commands[i - 1].next = cmd.type;
+ }
+ commands.push(cmd);
+ i++;
+ } else {
+ if (i && commands[i - 1].type === 'S') {
+ var additionPoints = {
+ p: cmd.points,
+ c: commands[i - 1].points.slice(0, 3),
+ };
+ commands[i - 1].points = commands[i - 1].points.concat(
+ (additionPoints[arr[0]] || []).map(function (ref) {
+ var x = ref.x;
+ var y = ref.y;
+
+ return ({ x: x, y: y });
+ })
+ );
+ }
+ rawCommands.splice(i, 1);
+ }
+ }
+ var instructions = (ref$1 = []).concat.apply(
+ ref$1, commands.map(function (ref) {
+ var type = ref.type;
+ var points = ref.points;
+ var prev = ref.prev;
+ var next = ref.next;
+
+ return (
+ type === 'S'
+ ? s2b(points, prev, next)
+ : { type: type, points: points }
+ );
+ })
+ );
+
+ return assign({ instructions: instructions, d: toSVGPath(instructions) }, getViewBox(commands));
+ }
+
+ var tTags = [
+ 'fs', 'clip',
+ 'c1', 'c2', 'c3', 'c4', 'a1', 'a2', 'a3', 'a4', 'alpha',
+ 'fscx', 'fscy', 'fax', 'fay', 'frx', 'fry', 'frz', 'fr',
+ 'be', 'blur', 'bord', 'xbord', 'ybord', 'shad', 'xshad', 'yshad' ];
+
+ function compileTag(tag, key, presets) {
+ var obj, obj$1, obj$2;
+
+ if ( presets === void 0 ) presets = {};
+ var value = tag[key];
+ if (value === undefined) {
+ return null;
+ }
+ if (key === 'pos' || key === 'org') {
+ return value.length === 2 ? ( obj = {}, obj[key] = { x: value[0], y: value[1] }, obj ) : null;
+ }
+ if (key === 'move') {
+ var x1 = value[0];
+ var y1 = value[1];
+ var x2 = value[2];
+ var y2 = value[3];
+ var t1 = value[4]; if ( t1 === void 0 ) t1 = 0;
+ var t2 = value[5]; if ( t2 === void 0 ) t2 = 0;
+ return value.length === 4 || value.length === 6
+ ? { move: { x1: x1, y1: y1, x2: x2, y2: y2, t1: t1, t2: t2 } }
+ : null;
+ }
+ if (key === 'fad' || key === 'fade') {
+ if (value.length === 2) {
+ var t1$1 = value[0];
+ var t2$1 = value[1];
+ return { fade: { type: 'fad', t1: t1$1, t2: t2$1 } };
+ }
+ if (value.length === 7) {
+ var a1 = value[0];
+ var a2 = value[1];
+ var a3 = value[2];
+ var t1$2 = value[3];
+ var t2$2 = value[4];
+ var t3 = value[5];
+ var t4 = value[6];
+ return { fade: { type: 'fade', a1: a1, a2: a2, a3: a3, t1: t1$2, t2: t2$2, t3: t3, t4: t4 } };
+ }
+ return null;
+ }
+ if (key === 'clip') {
+ var inverse = value.inverse;
+ var scale = value.scale;
+ var drawing = value.drawing;
+ var dots = value.dots;
+ if (drawing) {
+ return { clip: { inverse: inverse, scale: scale, drawing: compileDrawing(drawing), dots: dots } };
+ }
+ if (dots) {
+ var x1$1 = dots[0];
+ var y1$1 = dots[1];
+ var x2$1 = dots[2];
+ var y2$1 = dots[3];
+ return { clip: { inverse: inverse, scale: scale, drawing: drawing, dots: { x1: x1$1, y1: y1$1, x2: x2$1, y2: y2$1 } } };
+ }
+ return null;
+ }
+ if (/^[xy]?(bord|shad)$/.test(key)) {
+ value = Math.max(value, 0);
+ }
+ if (key === 'bord') {
+ return { xbord: value, ybord: value };
+ }
+ if (key === 'shad') {
+ return { xshad: value, yshad: value };
+ }
+ if (/^c\d$/.test(key)) {
+ return ( obj$1 = {}, obj$1[key] = value || presets[key], obj$1 );
+ }
+ if (key === 'alpha') {
+ return { a1: value, a2: value, a3: value, a4: value };
+ }
+ if (key === 'fr') {
+ return { frz: value };
+ }
+ if (key === 'fs') {
+ return {
+ fs: /^\+|-/.test(value)
+ ? (value * 1 > -10 ? (1 + value / 10) : 1) * presets.fs
+ : value * 1,
+ };
+ }
+ if (key === 't') {
+ var t1$3 = value.t1;
+ var accel = value.accel;
+ var tags = value.tags;
+ var t2$3 = value.t2 || (presets.end - presets.start) * 1e3;
+ var compiledTag = {};
+ tags.forEach(function (t) {
+ var k = Object.keys(t)[0];
+ if (~tTags.indexOf(k) && !(k === 'clip' && !t[k].dots)) {
+ assign(compiledTag, compileTag(t, k, presets));
+ }
+ });
+ return { t: { t1: t1$3, t2: t2$3, accel: accel, tag: compiledTag } };
+ }
+ return ( obj$2 = {}, obj$2[key] = value, obj$2 );
+ }
+
+ var a2an = [
+ null, 1, 2, 3,
+ null, 7, 8, 9,
+ null, 4, 5, 6 ];
+
+ var globalTags = ['r', 'a', 'an', 'pos', 'org', 'move', 'fade', 'fad', 'clip'];
+
+ function createSlice(name, styles) {
+ return {
+ name: name,
+ borderStyle: styles[name].style.BorderStyle,
+ tag: styles[name].tag,
+ fragments: [],
+ };
+ }
+
+ function compileText(ref) {
+ var styles = ref.styles;
+ var name = ref.name;
+ var parsed = ref.parsed;
+ var start = ref.start;
+ var end = ref.end;
+
+ var alignment;
+ var pos;
+ var org;
+ var move;
+ var fade;
+ var clip;
+ var slices = [];
+ var slice = createSlice(name, styles);
+ var prevTag = {};
+ for (var i = 0; i < parsed.length; i++) {
+ var ref$1 = parsed[i];
+ var tags = ref$1.tags;
+ var text = ref$1.text;
+ var drawing = ref$1.drawing;
+ var reset = (void 0);
+ for (var j = 0; j < tags.length; j++) {
+ var tag = tags[j];
+ reset = tag.r === undefined ? reset : tag.r;
+ }
+ var fragment = {
+ tag: reset === undefined ? JSON.parse(JSON.stringify(prevTag)) : {},
+ text: text,
+ drawing: drawing.length ? compileDrawing(drawing) : null,
+ };
+ for (var j$1 = 0; j$1 < tags.length; j$1++) {
+ var tag$1 = tags[j$1];
+ alignment = alignment || a2an[tag$1.a || 0] || tag$1.an;
+ pos = pos || compileTag(tag$1, 'pos');
+ org = org || compileTag(tag$1, 'org');
+ move = move || compileTag(tag$1, 'move');
+ fade = fade || compileTag(tag$1, 'fade') || compileTag(tag$1, 'fad');
+ clip = compileTag(tag$1, 'clip') || clip;
+ var key = Object.keys(tag$1)[0];
+ if (key && !~globalTags.indexOf(key)) {
+ var ref$2 = slice.tag;
+ var c1 = ref$2.c1;
+ var c2 = ref$2.c2;
+ var c3 = ref$2.c3;
+ var c4 = ref$2.c4;
+ var fs = prevTag.fs || slice.tag.fs;
+ var compiledTag = compileTag(tag$1, key, { start: start, end: end, c1: c1, c2: c2, c3: c3, c4: c4, fs: fs });
+ if (key === 't') {
+ fragment.tag.t = fragment.tag.t || [];
+ fragment.tag.t.push(compiledTag.t);
+ } else {
+ assign(fragment.tag, compiledTag);
+ }
+ }
+ }
+ prevTag = fragment.tag;
+ if (reset !== undefined) {
+ slices.push(slice);
+ slice = createSlice(styles[reset] ? reset : name, styles);
+ }
+ if (fragment.text || fragment.drawing) {
+ var prev = slice.fragments[slice.fragments.length - 1] || {};
+ if (prev.text && fragment.text && !Object.keys(fragment.tag).length) {
+ // merge fragment to previous if its tag is empty
+ prev.text += fragment.text;
+ } else {
+ slice.fragments.push(fragment);
+ }
+ }
+ }
+ slices.push(slice);
+
+ return assign({ alignment: alignment, slices: slices }, pos, org, move, fade, clip);
+ }
+
+ function compileDialogues(ref) {
+ var styles = ref.styles;
+ var dialogues = ref.dialogues;
+
+ var minLayer = Infinity;
+ var results = [];
+ for (var i = 0; i < dialogues.length; i++) {
+ var dia = dialogues[i];
+ if (dia.Start >= dia.End) {
+ continue;
+ }
+ if (!styles[dia.Style]) {
+ dia.Style = 'Default';
+ }
+ var stl = styles[dia.Style].style;
+ var compiledText = compileText({
+ styles: styles,
+ name: dia.Style,
+ parsed: dia.Text.parsed,
+ start: dia.Start,
+ end: dia.End,
+ });
+ var alignment = compiledText.alignment || stl.Alignment;
+ minLayer = Math.min(minLayer, dia.Layer);
+ results.push(assign({
+ layer: dia.Layer,
+ start: dia.Start,
+ end: dia.End,
+ // reset style by `\r` will not effect margin and alignment
+ margin: {
+ left: dia.MarginL || stl.MarginL,
+ right: dia.MarginR || stl.MarginR,
+ vertical: dia.MarginV || stl.MarginV,
+ },
+ effect: dia.Effect,
+ }, compiledText, { alignment: alignment }));
+ }
+ for (var i$1 = 0; i$1 < results.length; i$1++) {
+ results[i$1].layer -= minLayer;
+ }
+ return results.sort(function (a, b) { return a.start - b.start || a.end - b.end; });
+ }
+
+ // same as Aegisub
+ // https://github.com/Aegisub/Aegisub/blob/master/src/ass_style.h
+ var DEFAULT_STYLE = {
+ Name: 'Default',
+ Fontname: 'Arial',
+ Fontsize: '20',
+ PrimaryColour: '&H00FFFFFF&',
+ SecondaryColour: '&H000000FF&',
+ OutlineColour: '&H00000000&',
+ BackColour: '&H00000000&',
+ Bold: '0',
+ Italic: '0',
+ Underline: '0',
+ StrikeOut: '0',
+ ScaleX: '100',
+ ScaleY: '100',
+ Spacing: '0',
+ Angle: '0',
+ BorderStyle: '1',
+ Outline: '2',
+ Shadow: '2',
+ Alignment: '2',
+ MarginL: '10',
+ MarginR: '10',
+ MarginV: '10',
+ Encoding: '1',
+ };
+
+ /**
+ * @param {String} color
+ * @returns {Array} [AA, BBGGRR]
+ */
+ function parseStyleColor(color) {
+ if (/^(&|H|&H)[0-9a-f]{6,}/i.test(color)) {
+ var ref = color.match(/&?H?([0-9a-f]{2})?([0-9a-f]{6})/i);
+ var a = ref[1];
+ var c = ref[2];
+ return [a || '00', c];
+ }
+ var num = parseInt(color, 10);
+ if (!Number.isNaN(num)) {
+ var min = -2147483648;
+ var max = 2147483647;
+ if (num < min) {
+ return ['00', '000000'];
+ }
+ var aabbggrr = (min <= num && num <= max)
+ ? ("00000000" + ((num < 0 ? num + 4294967296 : num).toString(16))).slice(-8)
+ : String(num).slice(0, 8);
+ return [aabbggrr.slice(0, 2), aabbggrr.slice(2)];
+ }
+ return ['00', '000000'];
+ }
+
+ function compileStyles(ref) {
+ var info = ref.info;
+ var style = ref.style;
+ var format = ref.format;
+ var defaultStyle = ref.defaultStyle;
+
+ var result = {};
+ var styles = [
+ assign({}, DEFAULT_STYLE, defaultStyle, { Name: 'Default' }) ].concat( style.map(function (stl) {
+ var s = {};
+ for (var i = 0; i < format.length; i++) {
+ s[format[i]] = stl[i];
+ }
+ return s;
+ }) );
+ var loop = function ( i ) {
+ var s = styles[i];
+ // this behavior is same as Aegisub by black-box testing
+ if (/^(\*+)Default$/.test(s.Name)) {
+ s.Name = 'Default';
+ }
+ Object.keys(s).forEach(function (key) {
+ if (key !== 'Name' && key !== 'Fontname' && !/Colour/.test(key)) {
+ s[key] *= 1;
+ }
+ });
+ var ref$1 = parseStyleColor(s.PrimaryColour);
+ var a1 = ref$1[0];
+ var c1 = ref$1[1];
+ var ref$2 = parseStyleColor(s.SecondaryColour);
+ var a2 = ref$2[0];
+ var c2 = ref$2[1];
+ var ref$3 = parseStyleColor(s.OutlineColour);
+ var a3 = ref$3[0];
+ var c3 = ref$3[1];
+ var ref$4 = parseStyleColor(s.BackColour);
+ var a4 = ref$4[0];
+ var c4 = ref$4[1];
+ var tag = {
+ fn: s.Fontname,
+ fs: s.Fontsize,
+ c1: c1,
+ a1: a1,
+ c2: c2,
+ a2: a2,
+ c3: c3,
+ a3: a3,
+ c4: c4,
+ a4: a4,
+ b: Math.abs(s.Bold),
+ i: Math.abs(s.Italic),
+ u: Math.abs(s.Underline),
+ s: Math.abs(s.StrikeOut),
+ fscx: s.ScaleX,
+ fscy: s.ScaleY,
+ fsp: s.Spacing,
+ frz: s.Angle,
+ xbord: s.Outline,
+ ybord: s.Outline,
+ xshad: s.Shadow,
+ yshad: s.Shadow,
+ q: /^[0-3]$/.test(info.WrapStyle) ? info.WrapStyle * 1 : 2,
+ };
+ result[s.Name] = { style: s, tag: tag };
+ };
+
+ for (var i = 0; i < styles.length; i++) loop( i );
+ return result;
+ }
+
+ function compile(text, options) {
+ if ( options === void 0 ) options = {};
+
+ var tree = parse(text);
+ var styles = compileStyles({
+ info: tree.info,
+ style: tree.styles.style,
+ format: tree.styles.format,
+ defaultStyle: options.defaultStyle || {},
+ });
+ return {
+ info: tree.info,
+ width: tree.info.PlayResX * 1 || null,
+ height: tree.info.PlayResY * 1 || null,
+ collisions: tree.info.Collisions || 'Normal',
+ styles: styles,
+ dialogues: compileDialogues({
+ styles: styles,
+ dialogues: tree.events.dialogue,
+ }),
+ };
+ }
+
+ var raf = (
+ window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || (function (cb) { return setTimeout(cb, 50 / 3); })
+ );
+
+ var caf = (
+ window.cancelAnimationFrame
+ || window.mozCancelAnimationFrame
+ || window.webkitCancelAnimationFrame
+ || clearTimeout
+ );
+
+ function color2rgba(c) {
+ var t = c.match(/(\w\w)(\w\w)(\w\w)(\w\w)/);
+ var a = 1 - ("0x" + (t[1])) / 255;
+ var b = +("0x" + (t[2]));
+ var g = +("0x" + (t[3]));
+ var r = +("0x" + (t[4]));
+ return ("rgba(" + r + "," + g + "," + b + "," + a + ")");
+ }
+
+ function uuid() {
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+ var r = Math.random() * 16 | 0;
+ var v = c === 'x' ? r : (r & 0x3 | 0x8);
+ return v.toString(16);
+ });
+ }
+
+ function createSVGEl(name, attrs) {
+ if ( attrs === void 0 ) attrs = [];
+
+ var $el = document.createElementNS('http://www.w3.org/2000/svg', name);
+ for (var i = 0; i < attrs.length; i++) {
+ var attr = attrs[i];
+ $el.setAttributeNS(
+ attr[0] === 'xlink:href' ? 'http://www.w3.org/1999/xlink' : null,
+ attr[0],
+ attr[1]
+ );
+ }
+ return $el;
+ }
+
+ function getVendor(prop) {
+ var ref = document.body;
+ var style = ref.style;
+ var Prop = prop.replace(/^\w/, function (x) { return x.toUpperCase(); });
+ if (prop in style) { return ''; }
+ if (("webkit" + Prop) in style) { return '-webkit-'; }
+ if (("moz" + Prop) in style) { return '-moz-'; }
+ return '';
+ }
+
+ var vendor = {
+ transform: getVendor('transform'),
+ animation: getVendor('animation'),
+ clipPath: getVendor('clipPath'),
+ };
+
+ function getStyleRoot(container) {
+ var rootNode = container.getRootNode ? container.getRootNode() : document;
+ return rootNode === document ? rootNode.head : rootNode;
+ }
+
+ var strokeTags = ['c3', 'a3', 'c4', 'a4', 'xbord', 'ybord', 'xshad', 'yshad', 'blur', 'be'];
+ var transformTags = ['fscx', 'fscy', 'frx', 'fry', 'frz', 'fax', 'fay'];
+
+ function createClipPath(clip) {
+ var sw = this._.scriptRes.width;
+ var sh = this._.scriptRes.height;
+ var d = '';
+ if (clip.dots !== null) {
+ var ref = clip.dots;
+ var x1 = ref.x1;
+ var y1 = ref.y1;
+ var x2 = ref.x2;
+ var y2 = ref.y2;
+ x1 /= sw;
+ y1 /= sh;
+ x2 /= sw;
+ y2 /= sh;
+ d = "M" + x1 + "," + y1 + "L" + x1 + "," + y2 + "," + x2 + "," + y2 + "," + x2 + "," + y1 + "Z";
+ }
+ if (clip.drawing !== null) {
+ d = clip.drawing.instructions.map(function (ref) {
+ var type = ref.type;
+ var points = ref.points;
+
+ return (
+ type + points.map(function (ref) {
+ var x = ref.x;
+ var y = ref.y;
+
+ return ((x / sw) + "," + (y / sh));
+ }).join(',')
+ );
+ }).join('');
+ }
+ var scale = 1 / (1 << (clip.scale - 1));
+ if (clip.inverse) {
+ d += "M0,0L0," + scale + "," + scale + "," + scale + "," + scale + ",0,0,0Z";
+ }
+ var id = "ASS-" + (uuid());
+ var $clipPath = createSVGEl('clipPath', [
+ ['id', id],
+ ['clipPathUnits', 'objectBoundingBox'] ]);
+ $clipPath.appendChild(createSVGEl('path', [
+ ['d', d],
+ ['transform', ("scale(" + scale + ")")],
+ ['clip-rule', 'evenodd'] ]));
+ this._.$defs.appendChild($clipPath);
+ return {
+ $clipPath: $clipPath,
+ cssText: ((vendor.clipPath) + "clip-path:url(#" + id + ");"),
+ };
+ }
+
+ function setClipPath(dialogue) {
+ if (!dialogue.clip) {
+ return;
+ }
+ var $fobb = document.createElement('div');
+ this._.$stage.insertBefore($fobb, dialogue.$div);
+ $fobb.appendChild(dialogue.$div);
+ $fobb.className = 'ASS-fix-objectBoundingBox';
+ var ref = createClipPath.call(this, dialogue.clip);
+ var cssText = ref.cssText;
+ var $clipPath = ref.$clipPath;
+ this._.$defs.appendChild($clipPath);
+ $fobb.style.cssText = cssText;
+ assign(dialogue, { $div: $fobb, $clipPath: $clipPath });
+ }
+
+ var $fixFontSize = document.createElement('div');
+ $fixFontSize.className = 'ASS-fix-font-size';
+ $fixFontSize.textContent = 'M';
+
+ var cache = Object.create(null);
+
+ function getRealFontSize(fn, fs) {
+ var key = fn + "-" + fs;
+ if (!cache[key]) {
+ $fixFontSize.style.cssText = "line-height:normal;font-size:" + fs + "px;font-family:\"" + fn + "\",Arial;";
+ cache[key] = fs * fs / $fixFontSize.clientHeight;
+ }
+ return cache[key];
+ }
+
+ function createSVGStroke(tag, id, scale) {
+ var hasBorder = tag.xbord || tag.ybord;
+ var hasShadow = tag.xshad || tag.yshad;
+ var isOpaque = tag.a1 !== 'FF';
+ var blur = tag.blur || tag.be || 0;
+ var $filter = createSVGEl('filter', [['id', id]]);
+ $filter.appendChild(createSVGEl('feGaussianBlur', [
+ ['stdDeviation', hasBorder ? 0 : blur],
+ ['in', 'SourceGraphic'],
+ ['result', 'sg_b'] ]));
+ $filter.appendChild(createSVGEl('feFlood', [
+ ['flood-color', color2rgba(tag.a1 + tag.c1)],
+ ['result', 'c1'] ]));
+ $filter.appendChild(createSVGEl('feComposite', [
+ ['operator', 'in'],
+ ['in', 'c1'],
+ ['in2', 'sg_b'],
+ ['result', 'main'] ]));
+ if (hasBorder) {
+ $filter.appendChild(createSVGEl('feMorphology', [
+ ['radius', ((tag.xbord * scale) + " " + (tag.ybord * scale))],
+ ['operator', 'dilate'],
+ ['in', 'SourceGraphic'],
+ ['result', 'dil'] ]));
+ $filter.appendChild(createSVGEl('feGaussianBlur', [
+ ['stdDeviation', blur],
+ ['in', 'dil'],
+ ['result', 'dil_b'] ]));
+ $filter.appendChild(createSVGEl('feComposite', [
+ ['operator', 'out'],
+ ['in', 'dil_b'],
+ ['in2', 'SourceGraphic'],
+ ['result', 'dil_b_o'] ]));
+ $filter.appendChild(createSVGEl('feFlood', [
+ ['flood-color', color2rgba(tag.a3 + tag.c3)],
+ ['result', 'c3'] ]));
+ $filter.appendChild(createSVGEl('feComposite', [
+ ['operator', 'in'],
+ ['in', 'c3'],
+ ['in2', 'dil_b_o'],
+ ['result', 'border'] ]));
+ }
+ if (hasShadow && (hasBorder || isOpaque)) {
+ $filter.appendChild(createSVGEl('feOffset', [
+ ['dx', tag.xshad * scale],
+ ['dy', tag.yshad * scale],
+ ['in', hasBorder ? 'dil' : 'SourceGraphic'],
+ ['result', 'off'] ]));
+ $filter.appendChild(createSVGEl('feGaussianBlur', [
+ ['stdDeviation', blur],
+ ['in', 'off'],
+ ['result', 'off_b'] ]));
+ if (!isOpaque) {
+ $filter.appendChild(createSVGEl('feOffset', [
+ ['dx', tag.xshad * scale],
+ ['dy', tag.yshad * scale],
+ ['in', 'SourceGraphic'],
+ ['result', 'sg_off'] ]));
+ $filter.appendChild(createSVGEl('feComposite', [
+ ['operator', 'out'],
+ ['in', 'off_b'],
+ ['in2', 'sg_off'],
+ ['result', 'off_b_o'] ]));
+ }
+ $filter.appendChild(createSVGEl('feFlood', [
+ ['flood-color', color2rgba(tag.a4 + tag.c4)],
+ ['result', 'c4'] ]));
+ $filter.appendChild(createSVGEl('feComposite', [
+ ['operator', 'in'],
+ ['in', 'c4'],
+ ['in2', isOpaque ? 'off_b' : 'off_b_o'],
+ ['result', 'shadow'] ]));
+ }
+ var $merge = createSVGEl('feMerge', []);
+ if (hasShadow && (hasBorder || isOpaque)) {
+ $merge.appendChild(createSVGEl('feMergeNode', [['in', 'shadow']]));
+ }
+ if (hasBorder) {
+ $merge.appendChild(createSVGEl('feMergeNode', [['in', 'border']]));
+ }
+ $merge.appendChild(createSVGEl('feMergeNode', [['in', 'main']]));
+ $filter.appendChild($merge);
+ return $filter;
+ }
+
+ function createCSSStroke(tag, scale) {
+ var arr = [];
+ var oc = color2rgba(tag.a3 + tag.c3);
+ var ox = tag.xbord * scale;
+ var oy = tag.ybord * scale;
+ var sc = color2rgba(tag.a4 + tag.c4);
+ var sx = tag.xshad * scale;
+ var sy = tag.yshad * scale;
+ var blur = tag.blur || tag.be || 0;
+ if (!(ox + oy + sx + sy)) { return 'none'; }
+ if (ox || oy) {
+ for (var i = -1; i <= 1; i++) {
+ for (var j = -1; j <= 1; j++) {
+ for (var x = 1; x < ox; x++) {
+ for (var y = 1; y < oy; y++) {
+ if (i || j) {
+ arr.push((oc + " " + (i * x) + "px " + (j * y) + "px " + blur + "px"));
+ }
+ }
+ }
+ arr.push((oc + " " + (i * ox) + "px " + (j * oy) + "px " + blur + "px"));
+ }
+ }
+ }
+ if (sx || sy) {
+ var pnx = sx > 0 ? 1 : -1;
+ var pny = sy > 0 ? 1 : -1;
+ sx = Math.abs(sx);
+ sy = Math.abs(sy);
+ for (var x$1 = Math.max(ox, sx - ox); x$1 < sx + ox; x$1++) {
+ for (var y$1 = Math.max(oy, sy - oy); y$1 < sy + oy; y$1++) {
+ arr.push((sc + " " + (x$1 * pnx) + "px " + (y$1 * pny) + "px " + blur + "px"));
+ }
+ }
+ arr.push((sc + " " + ((sx + ox) * pnx) + "px " + ((sy + oy) * pny) + "px " + blur + "px"));
+ }
+ return arr.join();
+ }
+
+ function createTransform(tag) {
+ return [
+ // TODO: I don't know why perspective is 314, it just performances well.
+ 'perspective(314px)',
+ ("rotateY(" + (tag.fry || 0) + "deg)"),
+ ("rotateX(" + (tag.frx || 0) + "deg)"),
+ ("rotateZ(" + (-tag.frz || 0) + "deg)"),
+ ("scale(" + (tag.p ? 1 : (tag.fscx || 100) / 100) + "," + (tag.p ? 1 : (tag.fscy || 100) / 100) + ")"),
+ ("skew(" + (tag.fax || 0) + "rad," + (tag.fay || 0) + "rad)") ].join(' ');
+ }
+
+ function setTransformOrigin(dialogue) {
+ var alignment = dialogue.alignment;
+ var width = dialogue.width;
+ var height = dialogue.height;
+ var x = dialogue.x;
+ var y = dialogue.y;
+ var $div = dialogue.$div;
+ var org = dialogue.org;
+ if (!org) {
+ org = { x: 0, y: 0 };
+ if (alignment % 3 === 1) { org.x = x; }
+ if (alignment % 3 === 2) { org.x = x + width / 2; }
+ if (alignment % 3 === 0) { org.x = x + width; }
+ if (alignment <= 3) { org.y = y + height; }
+ if (alignment >= 4 && alignment <= 6) { org.y = y + height / 2; }
+ if (alignment >= 7) { org.y = y; }
+ }
+ for (var i = $div.childNodes.length - 1; i >= 0; i--) {
+ var node = $div.childNodes[i];
+ if (node.dataset.hasRotate === 'true') {
+ // It's not extremely precise for offsets are round the value to an integer.
+ var tox = org.x - x - node.offsetLeft;
+ var toy = org.y - y - node.offsetTop;
+ node.style.cssText += (vendor.transform) + "transform-origin:" + tox + "px " + toy + "px;";
+ }
+ }
+ }
+
+ function getKeyframeString(name, list) {
+ return ("@" + (vendor.animation) + "keyframes " + name + " {" + list + "}\n");
+ }
+
+ var KeyframeBlockList = function KeyframeBlockList() {
+ this.obj = {};
+ };
+
+ KeyframeBlockList.prototype.set = function set (keyText, prop, value) {
+ if (!this.obj[keyText]) { this.obj[keyText] = {}; }
+ this.obj[keyText][prop] = value;
+ };
+
+ KeyframeBlockList.prototype.setT = function setT (ref) {
+ var t1 = ref.t1;
+ var t2 = ref.t2;
+ var duration = ref.duration;
+ var prop = ref.prop;
+ var from = ref.from;
+ var to = ref.to;
+
+ this.set('0.000%', prop, from);
+ if (t1 < duration) {
+ this.set((((t1 / duration * 100).toFixed(3)) + "%"), prop, from);
+ }
+ if (t2 < duration) {
+ this.set((((t2 / duration * 100).toFixed(3)) + "%"), prop, to);
+ }
+ this.set('100.000%', prop, to);
+ };
+
+ KeyframeBlockList.prototype.toString = function toString () {
+ var this$1 = this;
+
+ return Object.keys(this.obj)
+ .map(function (keyText) { return (
+ (keyText + "{" + (Object.keys(this$1.obj[keyText])
+ .map(function (prop) { return ("" + (vendor[prop] || '') + prop + ":" + (this$1.obj[keyText][prop]) + ";"); })
+ .join('')) + "}")
+ ); })
+ .join('');
+ };
+
+ // TODO: multi \t can't be merged directly
+ function mergeT(ts) {
+ return ts.reduceRight(function (results, t) {
+ var merged = false;
+ return results
+ .map(function (r) {
+ merged = t.t1 === r.t1 && t.t2 === r.t2 && t.accel === r.accel;
+ return assign({}, r, merged ? { tag: assign({}, r.tag, t.tag) } : {});
+ })
+ .concat(merged ? [] : t);
+ }, []);
+ }
+
+ function getKeyframes() {
+ var this$1 = this;
+
+ var keyframes = '';
+ this.dialogues.forEach(function (dialogue) {
+ var start = dialogue.start;
+ var end = dialogue.end;
+ var effect = dialogue.effect;
+ var move = dialogue.move;
+ var fade = dialogue.fade;
+ var slices = dialogue.slices;
+ var duration = (end - start) * 1000;
+ var diaKbl = new KeyframeBlockList();
+ // TODO: when effect and move both exist, its behavior is weird, for now only move works.
+ if (effect && !move) {
+ var name = effect.name;
+ var delay = effect.delay;
+ var lefttoright = effect.lefttoright;
+ var y1 = effect.y1;
+ var y2 = effect.y2 || this$1._.resampledRes.height;
+ if (name === 'banner') {
+ var tx = this$1.scale * (duration / delay) * (lefttoright ? 1 : -1);
+ diaKbl.set('0.000%', 'transform', 'translateX(0)');
+ diaKbl.set('100.000%', 'transform', ("translateX(" + tx + "px)"));
+ }
+ if (/^scroll/.test(name)) {
+ var updown = /up/.test(name) ? -1 : 1;
+ var tFrom = "translateY(" + (this$1.scale * y1 * updown) + "px)";
+ var tTo = "translateY(" + (this$1.scale * y2 * updown) + "px)";
+ var dp = (y2 - y1) / (duration / delay) * 100;
+ diaKbl.set('0.000%', 'transform', tFrom);
+ if (dp < 100) {
+ diaKbl.set(((dp.toFixed(3)) + "%"), 'transform', tTo);
+ }
+ diaKbl.set('100.000%', 'transform', tTo);
+ }
+ }
+ if (move) {
+ var x1 = move.x1;
+ var y1$1 = move.y1;
+ var x2 = move.x2;
+ var y2$1 = move.y2;
+ var t1 = move.t1;
+ var t2 = move.t2 || duration;
+ var pos = dialogue.pos || { x: 0, y: 0 };
+ var values = [{ x: x1, y: y1$1 }, { x: x2, y: y2$1 }].map(function (ref) {
+ var x = ref.x;
+ var y = ref.y;
+
+ return (
+ ("translate(" + (this$1.scale * (x - pos.x)) + "px, " + (this$1.scale * (y - pos.y)) + "px)")
+ );
+ });
+ diaKbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'transform', from: values[0], to: values[1] });
+ }
+ if (fade) {
+ if (fade.type === 'fad') {
+ var t1$1 = fade.t1;
+ var t2$1 = fade.t2;
+ diaKbl.set('0.000%', 'opacity', 0);
+ if (t1$1 < duration) {
+ diaKbl.set((((t1$1 / duration * 100).toFixed(3)) + "%"), 'opacity', 1);
+ if (t1$1 + t2$1 < duration) {
+ diaKbl.set(((((duration - t2$1) / duration * 100).toFixed(3)) + "%"), 'opacity', 1);
+ }
+ diaKbl.set('100.000%', 'opacity', 0);
+ } else {
+ diaKbl.set('100.000%', 'opacity', duration / t1$1);
+ }
+ } else {
+ var a1 = fade.a1;
+ var a2 = fade.a2;
+ var a3 = fade.a3;
+ var t1$2 = fade.t1;
+ var t2$2 = fade.t2;
+ var t3 = fade.t3;
+ var t4 = fade.t4;
+ var keyTexts = [t1$2, t2$2, t3, t4].map(function (t) { return (((t / duration * 100).toFixed(3)) + "%"); });
+ var values$1 = [a1, a2, a3].map(function (a) { return 1 - a / 255; });
+ diaKbl.set('0.000%', 'opacity', values$1[0]);
+ if (t1$2 < duration) { diaKbl.set(keyTexts[0], 'opacity', values$1[0]); }
+ if (t2$2 < duration) { diaKbl.set(keyTexts[1], 'opacity', values$1[1]); }
+ if (t3 < duration) { diaKbl.set(keyTexts[2], 'opacity', values$1[1]); }
+ if (t4 < duration) { diaKbl.set(keyTexts[3], 'opacity', values$1[2]); }
+ diaKbl.set('100.000%', 'opacity', values$1[2]);
+ }
+ }
+ var diaList = diaKbl.toString();
+ if (diaList) {
+ assign(dialogue, { animationName: ("ASS-" + (uuid())) });
+ keyframes += getKeyframeString(dialogue.animationName, diaList);
+ }
+ slices.forEach(function (slice) {
+ slice.fragments.forEach(function (fragment) {
+ if (!fragment.tag.t || !fragment.tag.t.length) {
+ return;
+ }
+ var kbl = new KeyframeBlockList();
+ var fromTag = assign({}, slice.tag, fragment.tag);
+ // TODO: accel is not implemented yet
+ mergeT(fragment.tag.t).forEach(function (ref) {
+ var t1 = ref.t1;
+ var t2 = ref.t2;
+ var tag = ref.tag;
+
+ if (tag.fs) {
+ var from = (this$1.scale * getRealFontSize(fromTag.fn, fromTag.fs)) + "px";
+ var to = (this$1.scale * getRealFontSize(tag.fn, fromTag.fs)) + "px";
+ kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'font-size', from: from, to: to });
+ }
+ if (tag.fsp) {
+ var from$1 = (this$1.scale * fromTag.fsp) + "px";
+ var to$1 = (this$1.scale * tag.fsp) + "px";
+ kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'letter-spacing', from: from$1, to: to$1 });
+ }
+ var hasAlpha = (
+ tag.a1 !== undefined
+ && tag.a1 === tag.a2
+ && tag.a2 === tag.a3
+ && tag.a3 === tag.a4
+ );
+ if (tag.c1 || (tag.a1 && !hasAlpha)) {
+ var from$2 = color2rgba(fromTag.a1 + fromTag.c1);
+ var to$2 = color2rgba((tag.a1 || fromTag.a1) + (tag.c1 || fromTag.c1));
+ kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'color', from: from$2, to: to$2 });
+ }
+ if (hasAlpha) {
+ var from$3 = 1 - parseInt(fromTag.a1, 16) / 255;
+ var to$3 = 1 - parseInt(tag.a1, 16) / 255;
+ kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'opacity', from: from$3, to: to$3 });
+ }
+ var hasStroke = strokeTags.some(function (x) { return (
+ tag[x] !== undefined
+ && tag[x] !== (fragment.tag[x] || slice.tag[x])
+ ); });
+ if (hasStroke) {
+ var scale = /Yes/i.test(this$1.info.ScaledBorderAndShadow) ? this$1.scale : 1;
+ var from$4 = createCSSStroke(fromTag, scale);
+ var to$4 = createCSSStroke(assign({}, fromTag, tag), scale);
+ kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'text-shadow', from: from$4, to: to$4 });
+ }
+ var hasTransfrom = transformTags.some(function (x) { return (
+ tag[x] !== undefined
+ && tag[x] !== (fragment.tag[x] || slice.tag[x])
+ ); });
+ if (hasTransfrom) {
+ var toTag = assign({}, fromTag, tag);
+ if (fragment.drawing) {
+ // scales will be handled inside svg
+ assign(toTag, {
+ p: 0,
+ fscx: ((tag.fscx || fromTag.fscx) / fromTag.fscx) * 100,
+ fscy: ((tag.fscy || fromTag.fscy) / fromTag.fscy) * 100,
+ });
+ assign(fromTag, { fscx: 100, fscy: 100 });
+ }
+ var from$5 = createTransform(fromTag);
+ var to$5 = createTransform(toTag);
+ kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'transform', from: from$5, to: to$5 });
+ }
+ });
+ var list = kbl.toString();
+ assign(fragment, { animationName: ("ASS-" + (uuid())) });
+ keyframes += getKeyframeString(fragment.animationName, list);
+ });
+ });
+ });
+ return keyframes;
+ }
+
+ function createAnimation(name, duration, delay) {
+ var va = vendor.animation;
+ return (
+ va + "animation-name:" + name + ";"
+ + va + "animation-duration:" + duration + "s;"
+ + va + "animation-delay:" + delay + "s;"
+ + va + "animation-timing-function:linear;"
+ + va + "animation-iteration-count:1;"
+ + va + "animation-fill-mode:forwards;"
+ );
+ }
+
+ function createDrawing(fragment, styleTag) {
+ var tag = assign({}, styleTag, fragment.tag);
+ var ref = fragment.drawing;
+ var minX = ref.minX;
+ var minY = ref.minY;
+ var width = ref.width;
+ var height = ref.height;
+ var baseScale = this.scale / (1 << (tag.p - 1));
+ var scaleX = (tag.fscx ? tag.fscx / 100 : 1) * baseScale;
+ var scaleY = (tag.fscy ? tag.fscy / 100 : 1) * baseScale;
+ var blur = tag.blur || tag.be || 0;
+ var vbx = tag.xbord + (tag.xshad < 0 ? -tag.xshad : 0) + blur;
+ var vby = tag.ybord + (tag.yshad < 0 ? -tag.yshad : 0) + blur;
+ var vbw = width * scaleX + 2 * tag.xbord + Math.abs(tag.xshad) + 2 * blur;
+ var vbh = height * scaleY + 2 * tag.ybord + Math.abs(tag.yshad) + 2 * blur;
+ var $svg = createSVGEl('svg', [
+ ['width', vbw],
+ ['height', vbh],
+ ['viewBox', ((-vbx) + " " + (-vby) + " " + vbw + " " + vbh)] ]);
+ var strokeScale = /Yes/i.test(this.info.ScaledBorderAndShadow) ? this.scale : 1;
+ var filterId = "ASS-" + (uuid());
+ var $defs = createSVGEl('defs');
+ $defs.appendChild(createSVGStroke(tag, filterId, strokeScale));
+ $svg.appendChild($defs);
+ var symbolId = "ASS-" + (uuid());
+ var $symbol = createSVGEl('symbol', [
+ ['id', symbolId],
+ ['viewBox', (minX + " " + minY + " " + width + " " + height)] ]);
+ $symbol.appendChild(createSVGEl('path', [['d', fragment.drawing.d]]));
+ $svg.appendChild($symbol);
+ $svg.appendChild(createSVGEl('use', [
+ ['width', width * scaleX],
+ ['height', height * scaleY],
+ ['xlink:href', ("#" + symbolId)],
+ ['filter', ("url(#" + filterId + ")")] ]));
+ $svg.style.cssText = (
+ 'position:absolute;'
+ + "left:" + (minX * scaleX - vbx) + "px;"
+ + "top:" + (minY * scaleY - vby) + "px;"
+ );
+ return {
+ $svg: $svg,
+ cssText: ("position:relative;width:" + (width * scaleX) + "px;height:" + (height * scaleY) + "px;"),
+ };
+ }
+
+ function encodeText(text, q) {
+ return text
+ .replace(//g, '>')
+ .replace(/\s/g, ' ')
+ .replace(/\\h/g, ' ')
+ .replace(/\\N/g, '
')
+ .replace(/\\n/g, q === 2 ? '
' : ' ');
+ }
+
+ function createDialogue(dialogue) {
+ var this$1 = this;
+
+ var $div = document.createElement('div');
+ $div.className = 'ASS-dialogue';
+ var df = document.createDocumentFragment();
+ var slices = dialogue.slices;
+ var start = dialogue.start;
+ var end = dialogue.end;
+ slices.forEach(function (slice) {
+ var borderStyle = slice.borderStyle;
+ slice.fragments.forEach(function (fragment) {
+ var text = fragment.text;
+ var drawing = fragment.drawing;
+ var animationName = fragment.animationName;
+ var tag = assign({}, slice.tag, fragment.tag);
+ var cssText = 'display:inline-block;';
+ var vct = this$1.video.currentTime;
+ if (!drawing) {
+ cssText += "font-family:\"" + (tag.fn) + "\",Arial;";
+ cssText += "font-size:" + (this$1.scale * getRealFontSize(tag.fn, tag.fs)) + "px;";
+ cssText += "color:" + (color2rgba(tag.a1 + tag.c1)) + ";";
+ var scale = /Yes/i.test(this$1.info.ScaledBorderAndShadow) ? this$1.scale : 1;
+ if (borderStyle === 1) {
+ cssText += "text-shadow:" + (createCSSStroke(tag, scale)) + ";";
+ }
+ if (borderStyle === 3) {
+ cssText += (
+ "background-color:" + (color2rgba(tag.a3 + tag.c3)) + ";"
+ + "box-shadow:" + (createCSSStroke(tag, scale)) + ";"
+ );
+ }
+ cssText += tag.b ? ("font-weight:" + (tag.b === 1 ? 'bold' : tag.b) + ";") : '';
+ cssText += tag.i ? 'font-style:italic;' : '';
+ cssText += (tag.u || tag.s) ? ("text-decoration:" + (tag.u ? 'underline' : '') + " " + (tag.s ? 'line-through' : '') + ";") : '';
+ cssText += tag.fsp ? ("letter-spacing:" + (tag.fsp) + "px;") : '';
+ // TODO: (tag.q === 0) and (tag.q === 3) are not implemented yet,
+ // for now just handle it as (tag.q === 1)
+ if (tag.q === 1 || tag.q === 0 || tag.q === 3) {
+ cssText += 'word-break:break-all;white-space:normal;';
+ }
+ if (tag.q === 2) {
+ cssText += 'word-break:normal;white-space:nowrap;';
+ }
+ }
+ var hasTransfrom = transformTags.some(function (x) { return (
+ /^fsc[xy]$/.test(x) ? tag[x] !== 100 : !!tag[x]
+ ); });
+ if (hasTransfrom) {
+ cssText += (vendor.transform) + "transform:" + (createTransform(tag)) + ";";
+ if (!drawing) {
+ cssText += 'transform-style:preserve-3d;word-break:normal;white-space:nowrap;';
+ }
+ }
+ if (animationName) {
+ cssText += createAnimation(animationName, end - start, Math.min(0, start - vct));
+ }
+ if (drawing && tag.pbo) {
+ var pbo = this$1.scale * -tag.pbo * (tag.fscy || 100) / 100;
+ cssText += "vertical-align:" + pbo + "px;";
+ }
+
+ var hasRotate = /"fr[xyz]":[^0]/.test(JSON.stringify(tag));
+ encodeText(text, tag.q).split('
').forEach(function (html, idx) {
+ var $span = document.createElement('span');
+ $span.dataset.hasRotate = hasRotate;
+ if (drawing) {
+ var obj = createDrawing.call(this$1, fragment, slice.tag);
+ $span.style.cssText = obj.cssText;
+ $span.appendChild(obj.$svg);
+ } else {
+ if (idx) {
+ df.appendChild(document.createElement('br'));
+ }
+ if (!html) {
+ return;
+ }
+ $span.innerHTML = html;
+ }
+ // TODO: maybe it can be optimized
+ $span.style.cssText += cssText;
+ df.appendChild($span);
+ });
+ });
+ });
+ $div.appendChild(df);
+ return $div;
+ }
+
+ function allocate(dialogue) {
+ var layer = dialogue.layer;
+ var margin = dialogue.margin;
+ var width = dialogue.width;
+ var height = dialogue.height;
+ var alignment = dialogue.alignment;
+ var end = dialogue.end;
+ var stageWidth = this.width - (this.scale * (margin.left + margin.right) | 0);
+ var stageHeight = this.height;
+ var vertical = this.scale * margin.vertical | 0;
+ var vct = this.video.currentTime * 100;
+ this._.space[layer] = this._.space[layer] || {
+ left: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },
+ center: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },
+ right: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },
+ };
+ var channel = this._.space[layer];
+ var align = ['right', 'left', 'center'][alignment % 3];
+ var willCollide = function (y) {
+ var lw = channel.left.width[y];
+ var cw = channel.center.width[y];
+ var rw = channel.right.width[y];
+ var le = channel.left.end[y];
+ var ce = channel.center.end[y];
+ var re = channel.right.end[y];
+ return (
+ (align === 'left' && (
+ (le > vct && lw)
+ || (ce > vct && cw && 2 * width + cw > stageWidth)
+ || (re > vct && rw && width + rw > stageWidth)
+ ))
+ || (align === 'center' && (
+ (le > vct && lw && 2 * lw + width > stageWidth)
+ || (ce > vct && cw)
+ || (re > vct && rw && 2 * rw + width > stageWidth)
+ ))
+ || (align === 'right' && (
+ (le > vct && lw && lw + width > stageWidth)
+ || (ce > vct && cw && 2 * width + cw > stageWidth)
+ || (re > vct && rw)
+ ))
+ );
+ };
+ var count = 0;
+ var result = 0;
+ var find = function (y) {
+ count = willCollide(y) ? 0 : count + 1;
+ if (count >= height) {
+ result = y;
+ return true;
+ }
+ return false;
+ };
+ if (alignment <= 3) {
+ for (var i = stageHeight - vertical - 1; i > vertical; i--) {
+ if (find(i)) { break; }
+ }
+ } else if (alignment >= 7) {
+ for (var i$1 = vertical + 1; i$1 < stageHeight - vertical; i$1++) {
+ if (find(i$1)) { break; }
+ }
+ } else {
+ for (var i$2 = (stageHeight - height) >> 1; i$2 < stageHeight - vertical; i$2++) {
+ if (find(i$2)) { break; }
+ }
+ }
+ if (alignment > 3) {
+ result -= height - 1;
+ }
+ for (var i$3 = result; i$3 < result + height; i$3++) {
+ channel[align].width[i$3] = width;
+ channel[align].end[i$3] = end * 100;
+ }
+ return result;
+ }
+
+ function getPosition(dialogue) {
+ var effect = dialogue.effect;
+ var move = dialogue.move;
+ var alignment = dialogue.alignment;
+ var width = dialogue.width;
+ var height = dialogue.height;
+ var margin = dialogue.margin;
+ var slices = dialogue.slices;
+ var x = 0;
+ var y = 0;
+ if (effect) {
+ if (effect.name === 'banner') {
+ if (alignment <= 3) { y = this.height - height - margin.vertical; }
+ if (alignment >= 4 && alignment <= 6) { y = (this.height - height) / 2; }
+ if (alignment >= 7) { y = margin.vertical; }
+ x = effect.lefttoright ? -width : this.width;
+ }
+ } else if (dialogue.pos || move) {
+ var pos = dialogue.pos || { x: 0, y: 0 };
+ if (alignment % 3 === 1) { x = this.scale * pos.x; }
+ if (alignment % 3 === 2) { x = this.scale * pos.x - width / 2; }
+ if (alignment % 3 === 0) { x = this.scale * pos.x - width; }
+ if (alignment <= 3) { y = this.scale * pos.y - height; }
+ if (alignment >= 4 && alignment <= 6) { y = this.scale * pos.y - height / 2; }
+ if (alignment >= 7) { y = this.scale * pos.y; }
+ } else {
+ if (alignment % 3 === 1) { x = 0; }
+ if (alignment % 3 === 2) { x = (this.width - width) / 2; }
+ if (alignment % 3 === 0) { x = this.width - width - this.scale * margin.right; }
+ var hasT = slices.some(function (slice) { return (
+ slice.fragments.some(function (ref) {
+ var animationName = ref.animationName;
+
+ return animationName;
+ })
+ ); });
+ if (hasT) {
+ if (alignment <= 3) { y = this.height - height - margin.vertical; }
+ if (alignment >= 4 && alignment <= 6) { y = (this.height - height) / 2; }
+ if (alignment >= 7) { y = margin.vertical; }
+ } else {
+ y = allocate.call(this, dialogue);
+ }
+ }
+ return { x: x, y: y };
+ }
+
+ function createStyle(dialogue) {
+ var layer = dialogue.layer;
+ var start = dialogue.start;
+ var end = dialogue.end;
+ var alignment = dialogue.alignment;
+ var effect = dialogue.effect;
+ var pos = dialogue.pos;
+ var margin = dialogue.margin;
+ var animationName = dialogue.animationName;
+ var width = dialogue.width;
+ var height = dialogue.height;
+ var x = dialogue.x;
+ var y = dialogue.y;
+ var vct = this.video.currentTime;
+ var cssText = '';
+ if (layer) { cssText += "z-index:" + layer + ";"; }
+ if (animationName) {
+ cssText += createAnimation(animationName, end - start, Math.min(0, start - vct));
+ }
+ cssText += "text-align:" + (['right', 'left', 'center'][alignment % 3]) + ";";
+ if (!effect) {
+ var mw = this.width - this.scale * (margin.left + margin.right);
+ cssText += "max-width:" + mw + "px;";
+ if (!pos) {
+ if (alignment % 3 === 1) {
+ cssText += "margin-left:" + (this.scale * margin.left) + "px;";
+ }
+ if (alignment % 3 === 0) {
+ cssText += "margin-right:" + (this.scale * margin.right) + "px;";
+ }
+ if (width > this.width - this.scale * (margin.left + margin.right)) {
+ cssText += "margin-left:" + (this.scale * margin.left) + "px;";
+ cssText += "margin-right:" + (this.scale * margin.right) + "px;";
+ }
+ }
+ }
+ cssText += "width:" + width + "px;height:" + height + "px;left:" + x + "px;top:" + y + "px;";
+ return cssText;
+ }
+
+ function renderer(dialogue) {
+ var $div = createDialogue.call(this, dialogue);
+ assign(dialogue, { $div: $div });
+ this._.$stage.appendChild($div);
+ var ref = $div.getBoundingClientRect();
+ var width = ref.width;
+ var height = ref.height;
+ assign(dialogue, { width: width, height: height });
+ assign(dialogue, getPosition.call(this, dialogue));
+ $div.style.cssText = createStyle.call(this, dialogue);
+ setTransformOrigin(dialogue);
+ setClipPath.call(this, dialogue);
+ return dialogue;
+ }
+
+ function framing() {
+ var vct = this.video.currentTime;
+ for (var i = this._.stagings.length - 1; i >= 0; i--) {
+ var dia = this._.stagings[i];
+ var end = dia.end;
+ if (dia.effect && /scroll/.test(dia.effect.name)) {
+ var ref = dia.effect;
+ var y1 = ref.y1;
+ var y2 = ref.y2;
+ var delay = ref.delay;
+ var duration = ((y2 || this._.resampledRes.height) - y1) / (1000 / delay);
+ end = Math.min(end, dia.start + duration);
+ }
+ if (end < vct) {
+ this._.$stage.removeChild(dia.$div);
+ if (dia.$clipPath) {
+ this._.$defs.removeChild(dia.$clipPath);
+ }
+ this._.stagings.splice(i, 1);
+ }
+ }
+ var dias = this.dialogues;
+ while (
+ this._.index < dias.length
+ && vct >= dias[this._.index].start
+ ) {
+ if (vct < dias[this._.index].end) {
+ var dia$1 = renderer.call(this, dias[this._.index]);
+ this._.stagings.push(dia$1);
+ }
+ ++this._.index;
+ }
+ }
+
+ function play() {
+ var this$1 = this;
+
+ var frame = function () {
+ framing.call(this$1);
+ this$1._.requestId = raf(frame);
+ };
+ caf(this._.requestId);
+ this._.requestId = raf(frame);
+ this._.$stage.classList.remove('ASS-animation-paused');
+ return this;
+ }
+
+ function pause() {
+ caf(this._.requestId);
+ this._.requestId = 0;
+ this._.$stage.classList.add('ASS-animation-paused');
+ return this;
+ }
+
+ function clear() {
+ while (this._.$stage.lastChild) {
+ this._.$stage.removeChild(this._.$stage.lastChild);
+ }
+ while (this._.$defs.lastChild) {
+ this._.$defs.removeChild(this._.$defs.lastChild);
+ }
+ this._.stagings = [];
+ this._.space = [];
+ }
+
+ function seek() {
+ var vct = this.video.currentTime;
+ var dias = this.dialogues;
+ clear.call(this);
+ this._.index = (function () {
+ var from = 0;
+ var to = dias.length - 1;
+ while (from + 1 < to && vct > dias[(to + from) >> 1].end) {
+ from = (to + from) >> 1;
+ }
+ if (!from) { return 0; }
+ for (var i = from; i < to; i++) {
+ if (
+ dias[i].end > vct && vct >= dias[i].start
+ || (i && dias[i - 1].end < vct && vct < dias[i].start)
+ ) {
+ return i;
+ }
+ }
+ return to;
+ })();
+ framing.call(this);
+ }
+
+ function bindEvents() {
+ var l = this._.listener;
+ l.play = play.bind(this);
+ l.pause = pause.bind(this);
+ l.seeking = seek.bind(this);
+ this.video.addEventListener('play', l.play);
+ this.video.addEventListener('pause', l.pause);
+ this.video.addEventListener('seeking', l.seeking);
+ }
+
+ function unbindEvents() {
+ var l = this._.listener;
+ this.video.removeEventListener('play', l.play);
+ this.video.removeEventListener('pause', l.pause);
+ this.video.removeEventListener('seeking', l.seeking);
+ l.play = null;
+ l.pause = null;
+ l.seeking = null;
+ }
+
+ function resize() {
+ var cw = this.video.clientWidth;
+ var ch = this.video.clientHeight;
+ var vw = this.video.videoWidth || cw;
+ var vh = this.video.videoHeight || ch;
+ var sw = this._.scriptRes.width;
+ var sh = this._.scriptRes.height;
+ var rw = sw;
+ var rh = sh;
+ var videoScale = Math.min(cw / vw, ch / vh);
+ if (this.resampling === 'video_width') {
+ rh = sw / vw * vh;
+ }
+ if (this.resampling === 'video_height') {
+ rw = sh / vh * vw;
+ }
+ this.scale = Math.min(cw / rw, ch / rh);
+ if (this.resampling === 'script_width') {
+ this.scale = videoScale * (vw / rw);
+ }
+ if (this.resampling === 'script_height') {
+ this.scale = videoScale * (vh / rh);
+ }
+ this.width = this.scale * rw;
+ this.height = this.scale * rh;
+ this._.resampledRes = { width: rw, height: rh };
+
+ this.container.style.cssText = "width:" + cw + "px;height:" + ch + "px;";
+ var cssText = (
+ "width:" + (this.width) + "px;"
+ + "height:" + (this.height) + "px;"
+ + "top:" + ((ch - this.height) / 2) + "px;"
+ + "left:" + ((cw - this.width) / 2) + "px;"
+ );
+ this._.$stage.style.cssText = cssText;
+ this._.$svg.style.cssText = cssText;
+ this._.$svg.setAttributeNS(null, 'viewBox', ("0 0 " + sw + " " + sh));
+
+ this._.$animation.innerHTML = getKeyframes.call(this);
+ seek.call(this);
+
+ return this;
+ }
+
+ var GLOBAL_CSS = '.ASS-container,.ASS-stage{position:relative;overflow:hidden}.ASS-container video{position:absolute;top:0;left:0}.ASS-stage{pointer-events:none;position:absolute}.ASS-dialogue{font-size:0;position:absolute}.ASS-fix-font-size{position:absolute;visibility:hidden}.ASS-fix-objectBoundingBox{width:100%;height:100%;position:absolute;top:0;left:0}.ASS-animation-paused *{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}';
+
+ function init(source, video, options) {
+ if ( options === void 0 ) options = {};
+
+ this.scale = 1;
+
+ // private variables
+ this._ = {
+ index: 0,
+ stagings: [],
+ space: [],
+ listener: {},
+ $svg: createSVGEl('svg'),
+ $defs: createSVGEl('defs'),
+ $stage: document.createElement('div'),
+ $animation: document.createElement('style'),
+ };
+ this._.$svg.appendChild(this._.$defs);
+ this._.$stage.className = 'ASS-stage ASS-animation-paused';
+
+ this._.resampling = options.resampling || 'video_height';
+
+ this.container = options.container || document.createElement('div');
+ this.container.classList.add('ASS-container');
+ this.container.appendChild($fixFontSize);
+ this.container.appendChild(this._.$svg);
+ this._.hasInitContainer = !!options.container;
+
+ this.video = video;
+ bindEvents.call(this);
+ if (!this._.hasInitContainer) {
+ var isPlaying = !video.paused;
+ video.parentNode.insertBefore(this.container, video);
+ this.container.appendChild(video);
+ if (isPlaying && video.paused) {
+ video.play();
+ }
+ }
+ this.container.appendChild(this._.$stage);
+
+ var ref = compile(source);
+ var info = ref.info;
+ var width = ref.width;
+ var height = ref.height;
+ var dialogues = ref.dialogues;
+ this.info = info;
+ this._.scriptRes = {
+ width: width || video.videoWidth,
+ height: height || video.videoHeight,
+ };
+ this.dialogues = dialogues;
+
+ var styleRoot = getStyleRoot(this.container);
+ var $style = styleRoot.querySelector('#ASS-global-style');
+ if (!$style) {
+ $style = document.createElement('style');
+ $style.type = 'text/css';
+ $style.id = 'ASS-global-style';
+ $style.appendChild(document.createTextNode(GLOBAL_CSS));
+ styleRoot.appendChild($style);
+ }
+ this._.$animation.type = 'text/css';
+ this._.$animation.className = 'ASS-animation';
+ styleRoot.appendChild(this._.$animation);
+
+ resize.call(this);
+
+ if (!this.video.paused) {
+ seek.call(this);
+ play.call(this);
+ }
+
+ return this;
+ }
+
+ function show() {
+ this._.$stage.style.visibility = 'visible';
+ return this;
+ }
+
+ function hide() {
+ this._.$stage.style.visibility = 'hidden';
+ return this;
+ }
+
+ function destroy() {
+ pause.call(this);
+ clear.call(this);
+ unbindEvents.call(this, this._.listener);
+
+ var styleRoot = getStyleRoot(this.container);
+ if (!this._.hasInitContainer) {
+ var isPlay = !this.video.paused;
+ this.container.parentNode.insertBefore(this.video, this.container);
+ this.container.parentNode.removeChild(this.container);
+ if (isPlay && this.video.paused) {
+ this.video.play();
+ }
+ }
+ styleRoot.removeChild(this._.$animation);
+
+ // eslint-disable-next-line no-restricted-syntax
+ for (var key in this) {
+ if (Object.prototype.hasOwnProperty.call(this, key)) {
+ this[key] = null;
+ }
+ }
+
+ return this;
+ }
+
+ var regex = /^(video|script)_(width|height)$/;
+
+ function getter() {
+ return regex.test(this._.resampling) ? this._.resampling : 'video_height';
+ }
+
+ function setter(r) {
+ if (r === this._.resampling) { return r; }
+ if (regex.test(r)) {
+ this._.resampling = r;
+ this.resize();
+ }
+ return this._.resampling;
+ }
+
+ var ASS = function ASS(source, video, options) {
+ if (typeof source !== 'string') {
+ return this;
+ }
+ return init.call(this, source, video, options);
+ };
+
+ var prototypeAccessors = { resampling: { configurable: true } };
+
+ ASS.prototype.resize = function resize$1 () {
+ return resize.call(this);
+ };
+
+ ASS.prototype.show = function show$1 () {
+ return show.call(this);
+ };
+
+ ASS.prototype.hide = function hide$1 () {
+ return hide.call(this);
+ };
+
+ ASS.prototype.destroy = function destroy$1 () {
+ return destroy.call(this);
+ };
+
+ prototypeAccessors.resampling.get = function () {
+ return getter.call(this);
+ };
+
+ prototypeAccessors.resampling.set = function (r) {
+ return setter.call(this, r);
+ };
+
+ Object.defineProperties( ASS.prototype, prototypeAccessors );
+
+ function styleInject(css, ref) {
+ if ( ref === void 0 ) ref = {};
+ var insertAt = ref.insertAt;
+
+ if (!css || typeof document === 'undefined') { return; }
+
+ var head = document.head || document.getElementsByTagName('head')[0];
+ var style = document.createElement('style');
+ style.type = 'text/css';
+
+ if (insertAt === 'top') {
+ if (head.firstChild) {
+ head.insertBefore(style, head.firstChild);
+ } else {
+ head.appendChild(style);
+ }
+ } else {
+ head.appendChild(style);
+ }
+
+ if (style.styleSheet) {
+ style.styleSheet.cssText = css;
+ } else {
+ style.appendChild(document.createTextNode(css));
+ }
+ }
+
+ var css_248z = ".artplayer-plugin-ass{bottom:0!important}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQ0Usa0JBQXNCIiwiZmlsZSI6InN0eWxlLnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuYXJ0cGxheWVyLXBsdWdpbi1hc3Mge1xuICBib3R0b206IDAgIWltcG9ydGFudDsgfVxuIl19 */";
+ styleInject(css_248z);
+
+ function artplayerPluginAss(url) {
+ return function (art) {
+ var ass = null;
+ fetch(url).then(function (res) {
+ return res.text();
+ }).then(function (text) {
+ var _art$template = art.template,
+ $video = _art$template.$video,
+ $subtitle = _art$template.$subtitle;
+ $subtitle.classList.add('artplayer-plugin-ass');
+ art.once('ready', function () {
+ ass = new ASS(text, $video, {
+ container: $subtitle,
+ resampling: 'video_width'
+ });
+ ass.resize();
+ art.emit('artplayerPluginAss', ass);
+ art.on('resize', function () {
+ return ass.resize();
+ });
+ art.on('destroy', function () {
+ return ass.destroy();
+ });
+ });
+ });
+ return {
+ name: 'artplayerPluginAss',
+ ass: ass
+ };
+ };
+ }
+
+ return artplayerPluginAss;
+
+})));
+//# sourceMappingURL=artplayer-plugin-ass.js.map
diff --git a/docs/uncompiled/artplayer-plugin-ass.js.map b/docs/uncompiled/artplayer-plugin-ass.js.map
new file mode 100644
index 000000000..864c4aac5
--- /dev/null
+++ b/docs/uncompiled/artplayer-plugin-ass.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"artplayer-plugin-ass.js","sources":["../../packages/artplayer-plugin-ass/node_modules/_assjs@0.0.11@assjs/dist/ass.esm.js","../../node_modules/_style-inject@0.3.0@style-inject/dist/style-inject.es.js","../../packages/artplayer-plugin-ass/src/index.js"],"sourcesContent":["function parseEffect(text) {\n var param = text\n .toLowerCase()\n .trim()\n .split(/\\s*;\\s*/);\n if (param[0] === 'banner') {\n return {\n name: param[0],\n delay: param[1] * 1 || 0,\n leftToRight: param[2] * 1 || 0,\n fadeAwayWidth: param[3] * 1 || 0,\n };\n }\n if (/^scroll\\s/.test(param[0])) {\n return {\n name: param[0],\n y1: Math.min(param[1] * 1, param[2] * 1),\n y2: Math.max(param[1] * 1, param[2] * 1),\n delay: param[3] * 1 || 0,\n fadeAwayHeight: param[4] * 1 || 0,\n };\n }\n return null;\n}\n\nfunction parseDrawing(text) {\n return text\n .toLowerCase()\n // numbers\n .replace(/([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)/g, ' $1 ')\n // commands\n .replace(/([mnlbspc])/g, ' $1 ')\n .trim()\n .replace(/\\s+/g, ' ')\n .split(/\\s(?=[mnlbspc])/)\n .map(function (cmd) { return (\n cmd.split(' ')\n .filter(function (x, i) { return !(i && Number.isNaN(x * 1)); })\n ); });\n}\n\nvar numTags = [\n 'b', 'i', 'u', 's', 'fsp',\n 'k', 'K', 'kf', 'ko', 'kt',\n 'fe', 'q', 'p', 'pbo', 'a', 'an',\n 'fscx', 'fscy', 'fax', 'fay', 'frx', 'fry', 'frz', 'fr',\n 'be', 'blur', 'bord', 'xbord', 'ybord', 'shad', 'xshad', 'yshad' ];\n\nvar numRegexs = numTags.map(function (nt) { return ({ name: nt, regex: new RegExp((\"^\" + nt + \"-?\\\\d\")) }); });\n\nfunction parseTag(text) {\n var assign;\n\n var tag = {};\n for (var i = 0; i < numRegexs.length; i++) {\n var ref = numRegexs[i];\n var name = ref.name;\n var regex = ref.regex;\n if (regex.test(text)) {\n tag[name] = text.slice(name.length) * 1;\n return tag;\n }\n }\n if (/^fn/.test(text)) {\n tag.fn = text.slice(2);\n } else if (/^r/.test(text)) {\n tag.r = text.slice(1);\n } else if (/^fs[\\d+-]/.test(text)) {\n tag.fs = text.slice(2);\n } else if (/^\\d?c&?H?[0-9a-f]+|^\\d?c$/i.test(text)) {\n var ref$1 = text.match(/^(\\d?)c&?H?(\\w*)/);\n var num = ref$1[1];\n var color = ref$1[2];\n tag[(\"c\" + (num || 1))] = color && (\"000000\" + color).slice(-6);\n } else if (/^\\da&?H?[0-9a-f]+/i.test(text)) {\n var ref$2 = text.match(/^(\\d)a&?H?(\\w\\w)/);\n var num$1 = ref$2[1];\n var alpha = ref$2[2];\n tag[(\"a\" + num$1)] = alpha;\n } else if (/^alpha&?H?[0-9a-f]+/i.test(text)) {\n (assign = text.match(/^alpha&?H?([0-9a-f]+)/i), tag.alpha = assign[1]);\n tag.alpha = (\"00\" + (tag.alpha)).slice(-2);\n } else if (/^(?:pos|org|move|fad|fade)\\(/.test(text)) {\n var ref$3 = text.match(/^(\\w+)\\((.*?)\\)?$/);\n var key = ref$3[1];\n var value = ref$3[2];\n tag[key] = value\n .trim()\n .split(/\\s*,\\s*/)\n .map(Number);\n } else if (/^i?clip/.test(text)) {\n var p = text\n .match(/^i?clip\\((.*?)\\)?$/)[1]\n .trim()\n .split(/\\s*,\\s*/);\n tag.clip = {\n inverse: /iclip/.test(text),\n scale: 1,\n drawing: null,\n dots: null,\n };\n if (p.length === 1) {\n tag.clip.drawing = parseDrawing(p[0]);\n }\n if (p.length === 2) {\n tag.clip.scale = p[0] * 1;\n tag.clip.drawing = parseDrawing(p[1]);\n }\n if (p.length === 4) {\n tag.clip.dots = p.map(Number);\n }\n } else if (/^t\\(/.test(text)) {\n var p$1 = text\n .match(/^t\\((.*?)\\)?$/)[1]\n .trim()\n .replace(/\\\\.*/, function (x) { return x.replace(/,/g, '\\n'); })\n .split(/\\s*,\\s*/);\n if (!p$1[0]) { return tag; }\n tag.t = {\n t1: 0,\n t2: 0,\n accel: 1,\n tags: p$1[p$1.length - 1]\n .replace(/\\n/g, ',')\n .split('\\\\')\n .slice(1)\n .map(parseTag),\n };\n if (p$1.length === 2) {\n tag.t.accel = p$1[0] * 1;\n }\n if (p$1.length === 3) {\n tag.t.t1 = p$1[0] * 1;\n tag.t.t2 = p$1[1] * 1;\n }\n if (p$1.length === 4) {\n tag.t.t1 = p$1[0] * 1;\n tag.t.t2 = p$1[1] * 1;\n tag.t.accel = p$1[2] * 1;\n }\n }\n\n return tag;\n}\n\nfunction parseTags(text) {\n var tags = [];\n var depth = 0;\n var str = '';\n for (var i = 0; i < text.length; i++) {\n var x = text[i];\n if (x === '(') { depth++; }\n if (x === ')') { depth--; }\n if (depth < 0) { depth = 0; }\n if (!depth && x === '\\\\') {\n if (str) {\n tags.push(str);\n }\n str = '';\n } else {\n str += x;\n }\n }\n tags.push(str);\n return tags.map(parseTag);\n}\n\nfunction parseText(text) {\n var pairs = text.split(/{([^{}]*?)}/);\n var parsed = [];\n if (pairs[0].length) {\n parsed.push({ tags: [], text: pairs[0], drawing: [] });\n }\n for (var i = 1; i < pairs.length; i += 2) {\n var tags = parseTags(pairs[i]);\n var isDrawing = tags.reduce(function (v, tag) { return (tag.p === undefined ? v : !!tag.p); }, false);\n parsed.push({\n tags: tags,\n text: isDrawing ? '' : pairs[i + 1],\n drawing: isDrawing ? parseDrawing(pairs[i + 1]) : [],\n });\n }\n return {\n raw: text,\n combined: parsed.map(function (frag) { return frag.text; }).join(''),\n parsed: parsed,\n };\n}\n\nfunction parseTime(time) {\n var t = time.split(':');\n return t[0] * 3600 + t[1] * 60 + t[2] * 1;\n}\n\nfunction parseDialogue(text, format) {\n var fields = text.split(',');\n if (fields.length > format.length) {\n var textField = fields.slice(format.length - 1).join();\n fields = fields.slice(0, format.length - 1);\n fields.push(textField);\n }\n\n var dia = {};\n for (var i = 0; i < fields.length; i++) {\n var fmt = format[i];\n var fld = fields[i].trim();\n switch (fmt) {\n case 'Layer':\n case 'MarginL':\n case 'MarginR':\n case 'MarginV':\n dia[fmt] = fld * 1;\n break;\n case 'Start':\n case 'End':\n dia[fmt] = parseTime(fld);\n break;\n case 'Effect':\n dia[fmt] = parseEffect(fld);\n break;\n case 'Text':\n dia[fmt] = parseText(fld);\n break;\n default:\n dia[fmt] = fld;\n }\n }\n\n return dia;\n}\n\nfunction parseFormat(text) {\n return text.match(/Format\\s*:\\s*(.*)/i)[1].split(/\\s*,\\s*/);\n}\n\nfunction parseStyle(text) {\n return text.match(/Style\\s*:\\s*(.*)/i)[1].split(/\\s*,\\s*/);\n}\n\nfunction parse(text) {\n var tree = {\n info: {},\n styles: { format: [], style: [] },\n events: { format: [], comment: [], dialogue: [] },\n };\n var lines = text.split(/\\r?\\n/);\n var state = 0;\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i].trim();\n if (/^;/.test(line)) { continue; }\n\n if (/^\\[Script Info\\]/i.test(line)) { state = 1; }\n else if (/^\\[V4\\+? Styles\\]/i.test(line)) { state = 2; }\n else if (/^\\[Events\\]/i.test(line)) { state = 3; }\n else if (/^\\[.*\\]/.test(line)) { state = 0; }\n\n if (state === 0) { continue; }\n if (state === 1) {\n if (/:/.test(line)) {\n var ref = line.match(/(.*?)\\s*:\\s*(.*)/);\n var key = ref[1];\n var value = ref[2];\n tree.info[key] = value;\n }\n }\n if (state === 2) {\n if (/^Format\\s*:/i.test(line)) {\n tree.styles.format = parseFormat(line);\n }\n if (/^Style\\s*:/i.test(line)) {\n tree.styles.style.push(parseStyle(line));\n }\n }\n if (state === 3) {\n if (/^Format\\s*:/i.test(line)) {\n tree.events.format = parseFormat(line);\n }\n if (/^(?:Comment|Dialogue)\\s*:/i.test(line)) {\n var ref$1 = line.match(/^(\\w+?)\\s*:\\s*(.*)/i);\n var key$1 = ref$1[1];\n var value$1 = ref$1[2];\n tree.events[key$1.toLowerCase()].push(parseDialogue(value$1, tree.events.format));\n }\n }\n }\n\n return tree;\n}\n\nvar assign = Object.assign || (\n /* istanbul ignore next */\n function assign(target) {\n var sources = [], len = arguments.length - 1;\n while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];\n\n for (var i = 0; i < sources.length; i++) {\n if (!sources[i]) { continue; }\n var keys = Object.keys(sources[i]);\n for (var j = 0; j < keys.length; j++) {\n // eslint-disable-next-line no-param-reassign\n target[keys[j]] = sources[i][keys[j]];\n }\n }\n return target;\n }\n);\n\nfunction createCommand(arr) {\n var cmd = {\n type: null,\n prev: null,\n next: null,\n points: [],\n };\n if (/[mnlbs]/.test(arr[0])) {\n cmd.type = arr[0]\n .toUpperCase()\n .replace('N', 'L')\n .replace('B', 'C');\n }\n for (var len = arr.length - !(arr.length & 1), i = 1; i < len; i += 2) {\n cmd.points.push({ x: arr[i] * 1, y: arr[i + 1] * 1 });\n }\n return cmd;\n}\n\nfunction isValid(cmd) {\n if (!cmd.points.length || !cmd.type) {\n return false;\n }\n if (/C|S/.test(cmd.type) && cmd.points.length < 3) {\n return false;\n }\n return true;\n}\n\nfunction getViewBox(commands) {\n var ref;\n\n var minX = Infinity;\n var minY = Infinity;\n var maxX = -Infinity;\n var maxY = -Infinity;\n (ref = []).concat.apply(ref, commands.map(function (ref) {\n var points = ref.points;\n\n return points;\n })).forEach(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n });\n return {\n minX: minX,\n minY: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\n\n/**\n * Convert S command to B command\n * Reference from https://github.com/d3/d3/blob/v3.5.17/src/svg/line.js#L259\n * @param {Array} points points\n * @param {String} prev type of previous command\n * @param {String} next type of next command\n * @return {Array} converted commands\n */\nfunction s2b(points, prev, next) {\n var results = [];\n var bb1 = [0, 2 / 3, 1 / 3, 0];\n var bb2 = [0, 1 / 3, 2 / 3, 0];\n var bb3 = [0, 1 / 6, 2 / 3, 1 / 6];\n var dot4 = function (a, b) { return (a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]); };\n var px = [points[points.length - 1].x, points[0].x, points[1].x, points[2].x];\n var py = [points[points.length - 1].y, points[0].y, points[1].y, points[2].y];\n results.push({\n type: prev === 'M' ? 'M' : 'L',\n points: [{ x: dot4(bb3, px), y: dot4(bb3, py) }],\n });\n for (var i = 3; i < points.length; i++) {\n px = [points[i - 3].x, points[i - 2].x, points[i - 1].x, points[i].x];\n py = [points[i - 3].y, points[i - 2].y, points[i - 1].y, points[i].y];\n results.push({\n type: 'C',\n points: [\n { x: dot4(bb1, px), y: dot4(bb1, py) },\n { x: dot4(bb2, px), y: dot4(bb2, py) },\n { x: dot4(bb3, px), y: dot4(bb3, py) } ],\n });\n }\n if (next === 'L' || next === 'C') {\n var last = points[points.length - 1];\n results.push({ type: 'L', points: [{ x: last.x, y: last.y }] });\n }\n return results;\n}\n\nfunction toSVGPath(instructions) {\n return instructions.map(function (ref) {\n var type = ref.type;\n var points = ref.points;\n\n return (\n type + points.map(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n return (x + \",\" + y);\n }).join(',')\n );\n }).join('');\n}\n\nfunction compileDrawing(rawCommands) {\n var ref$1;\n\n var commands = [];\n var i = 0;\n while (i < rawCommands.length) {\n var arr = rawCommands[i];\n var cmd = createCommand(arr);\n if (isValid(cmd)) {\n if (cmd.type === 'S') {\n var ref = (commands[i - 1] || { points: [{ x: 0, y: 0 }] }).points.slice(-1)[0];\n var x = ref.x;\n var y = ref.y;\n cmd.points.unshift({ x: x, y: y });\n }\n if (i) {\n cmd.prev = commands[i - 1].type;\n commands[i - 1].next = cmd.type;\n }\n commands.push(cmd);\n i++;\n } else {\n if (i && commands[i - 1].type === 'S') {\n var additionPoints = {\n p: cmd.points,\n c: commands[i - 1].points.slice(0, 3),\n };\n commands[i - 1].points = commands[i - 1].points.concat(\n (additionPoints[arr[0]] || []).map(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n return ({ x: x, y: y });\n })\n );\n }\n rawCommands.splice(i, 1);\n }\n }\n var instructions = (ref$1 = []).concat.apply(\n ref$1, commands.map(function (ref) {\n var type = ref.type;\n var points = ref.points;\n var prev = ref.prev;\n var next = ref.next;\n\n return (\n type === 'S'\n ? s2b(points, prev, next)\n : { type: type, points: points }\n );\n })\n );\n\n return assign({ instructions: instructions, d: toSVGPath(instructions) }, getViewBox(commands));\n}\n\nvar tTags = [\n 'fs', 'clip',\n 'c1', 'c2', 'c3', 'c4', 'a1', 'a2', 'a3', 'a4', 'alpha',\n 'fscx', 'fscy', 'fax', 'fay', 'frx', 'fry', 'frz', 'fr',\n 'be', 'blur', 'bord', 'xbord', 'ybord', 'shad', 'xshad', 'yshad' ];\n\nfunction compileTag(tag, key, presets) {\n var obj, obj$1, obj$2;\n\n if ( presets === void 0 ) presets = {};\n var value = tag[key];\n if (value === undefined) {\n return null;\n }\n if (key === 'pos' || key === 'org') {\n return value.length === 2 ? ( obj = {}, obj[key] = { x: value[0], y: value[1] }, obj ) : null;\n }\n if (key === 'move') {\n var x1 = value[0];\n var y1 = value[1];\n var x2 = value[2];\n var y2 = value[3];\n var t1 = value[4]; if ( t1 === void 0 ) t1 = 0;\n var t2 = value[5]; if ( t2 === void 0 ) t2 = 0;\n return value.length === 4 || value.length === 6\n ? { move: { x1: x1, y1: y1, x2: x2, y2: y2, t1: t1, t2: t2 } }\n : null;\n }\n if (key === 'fad' || key === 'fade') {\n if (value.length === 2) {\n var t1$1 = value[0];\n var t2$1 = value[1];\n return { fade: { type: 'fad', t1: t1$1, t2: t2$1 } };\n }\n if (value.length === 7) {\n var a1 = value[0];\n var a2 = value[1];\n var a3 = value[2];\n var t1$2 = value[3];\n var t2$2 = value[4];\n var t3 = value[5];\n var t4 = value[6];\n return { fade: { type: 'fade', a1: a1, a2: a2, a3: a3, t1: t1$2, t2: t2$2, t3: t3, t4: t4 } };\n }\n return null;\n }\n if (key === 'clip') {\n var inverse = value.inverse;\n var scale = value.scale;\n var drawing = value.drawing;\n var dots = value.dots;\n if (drawing) {\n return { clip: { inverse: inverse, scale: scale, drawing: compileDrawing(drawing), dots: dots } };\n }\n if (dots) {\n var x1$1 = dots[0];\n var y1$1 = dots[1];\n var x2$1 = dots[2];\n var y2$1 = dots[3];\n return { clip: { inverse: inverse, scale: scale, drawing: drawing, dots: { x1: x1$1, y1: y1$1, x2: x2$1, y2: y2$1 } } };\n }\n return null;\n }\n if (/^[xy]?(bord|shad)$/.test(key)) {\n value = Math.max(value, 0);\n }\n if (key === 'bord') {\n return { xbord: value, ybord: value };\n }\n if (key === 'shad') {\n return { xshad: value, yshad: value };\n }\n if (/^c\\d$/.test(key)) {\n return ( obj$1 = {}, obj$1[key] = value || presets[key], obj$1 );\n }\n if (key === 'alpha') {\n return { a1: value, a2: value, a3: value, a4: value };\n }\n if (key === 'fr') {\n return { frz: value };\n }\n if (key === 'fs') {\n return {\n fs: /^\\+|-/.test(value)\n ? (value * 1 > -10 ? (1 + value / 10) : 1) * presets.fs\n : value * 1,\n };\n }\n if (key === 't') {\n var t1$3 = value.t1;\n var accel = value.accel;\n var tags = value.tags;\n var t2$3 = value.t2 || (presets.end - presets.start) * 1e3;\n var compiledTag = {};\n tags.forEach(function (t) {\n var k = Object.keys(t)[0];\n if (~tTags.indexOf(k) && !(k === 'clip' && !t[k].dots)) {\n assign(compiledTag, compileTag(t, k, presets));\n }\n });\n return { t: { t1: t1$3, t2: t2$3, accel: accel, tag: compiledTag } };\n }\n return ( obj$2 = {}, obj$2[key] = value, obj$2 );\n}\n\nvar a2an = [\n null, 1, 2, 3,\n null, 7, 8, 9,\n null, 4, 5, 6 ];\n\nvar globalTags = ['r', 'a', 'an', 'pos', 'org', 'move', 'fade', 'fad', 'clip'];\n\nfunction createSlice(name, styles) {\n return {\n name: name,\n borderStyle: styles[name].style.BorderStyle,\n tag: styles[name].tag,\n fragments: [],\n };\n}\n\nfunction compileText(ref) {\n var styles = ref.styles;\n var name = ref.name;\n var parsed = ref.parsed;\n var start = ref.start;\n var end = ref.end;\n\n var alignment;\n var pos;\n var org;\n var move;\n var fade;\n var clip;\n var slices = [];\n var slice = createSlice(name, styles);\n var prevTag = {};\n for (var i = 0; i < parsed.length; i++) {\n var ref$1 = parsed[i];\n var tags = ref$1.tags;\n var text = ref$1.text;\n var drawing = ref$1.drawing;\n var reset = (void 0);\n for (var j = 0; j < tags.length; j++) {\n var tag = tags[j];\n reset = tag.r === undefined ? reset : tag.r;\n }\n var fragment = {\n tag: reset === undefined ? JSON.parse(JSON.stringify(prevTag)) : {},\n text: text,\n drawing: drawing.length ? compileDrawing(drawing) : null,\n };\n for (var j$1 = 0; j$1 < tags.length; j$1++) {\n var tag$1 = tags[j$1];\n alignment = alignment || a2an[tag$1.a || 0] || tag$1.an;\n pos = pos || compileTag(tag$1, 'pos');\n org = org || compileTag(tag$1, 'org');\n move = move || compileTag(tag$1, 'move');\n fade = fade || compileTag(tag$1, 'fade') || compileTag(tag$1, 'fad');\n clip = compileTag(tag$1, 'clip') || clip;\n var key = Object.keys(tag$1)[0];\n if (key && !~globalTags.indexOf(key)) {\n var ref$2 = slice.tag;\n var c1 = ref$2.c1;\n var c2 = ref$2.c2;\n var c3 = ref$2.c3;\n var c4 = ref$2.c4;\n var fs = prevTag.fs || slice.tag.fs;\n var compiledTag = compileTag(tag$1, key, { start: start, end: end, c1: c1, c2: c2, c3: c3, c4: c4, fs: fs });\n if (key === 't') {\n fragment.tag.t = fragment.tag.t || [];\n fragment.tag.t.push(compiledTag.t);\n } else {\n assign(fragment.tag, compiledTag);\n }\n }\n }\n prevTag = fragment.tag;\n if (reset !== undefined) {\n slices.push(slice);\n slice = createSlice(styles[reset] ? reset : name, styles);\n }\n if (fragment.text || fragment.drawing) {\n var prev = slice.fragments[slice.fragments.length - 1] || {};\n if (prev.text && fragment.text && !Object.keys(fragment.tag).length) {\n // merge fragment to previous if its tag is empty\n prev.text += fragment.text;\n } else {\n slice.fragments.push(fragment);\n }\n }\n }\n slices.push(slice);\n\n return assign({ alignment: alignment, slices: slices }, pos, org, move, fade, clip);\n}\n\nfunction compileDialogues(ref) {\n var styles = ref.styles;\n var dialogues = ref.dialogues;\n\n var minLayer = Infinity;\n var results = [];\n for (var i = 0; i < dialogues.length; i++) {\n var dia = dialogues[i];\n if (dia.Start >= dia.End) {\n continue;\n }\n if (!styles[dia.Style]) {\n dia.Style = 'Default';\n }\n var stl = styles[dia.Style].style;\n var compiledText = compileText({\n styles: styles,\n name: dia.Style,\n parsed: dia.Text.parsed,\n start: dia.Start,\n end: dia.End,\n });\n var alignment = compiledText.alignment || stl.Alignment;\n minLayer = Math.min(minLayer, dia.Layer);\n results.push(assign({\n layer: dia.Layer,\n start: dia.Start,\n end: dia.End,\n // reset style by `\\r` will not effect margin and alignment\n margin: {\n left: dia.MarginL || stl.MarginL,\n right: dia.MarginR || stl.MarginR,\n vertical: dia.MarginV || stl.MarginV,\n },\n effect: dia.Effect,\n }, compiledText, { alignment: alignment }));\n }\n for (var i$1 = 0; i$1 < results.length; i$1++) {\n results[i$1].layer -= minLayer;\n }\n return results.sort(function (a, b) { return a.start - b.start || a.end - b.end; });\n}\n\n// same as Aegisub\n// https://github.com/Aegisub/Aegisub/blob/master/src/ass_style.h\nvar DEFAULT_STYLE = {\n Name: 'Default',\n Fontname: 'Arial',\n Fontsize: '20',\n PrimaryColour: '&H00FFFFFF&',\n SecondaryColour: '&H000000FF&',\n OutlineColour: '&H00000000&',\n BackColour: '&H00000000&',\n Bold: '0',\n Italic: '0',\n Underline: '0',\n StrikeOut: '0',\n ScaleX: '100',\n ScaleY: '100',\n Spacing: '0',\n Angle: '0',\n BorderStyle: '1',\n Outline: '2',\n Shadow: '2',\n Alignment: '2',\n MarginL: '10',\n MarginR: '10',\n MarginV: '10',\n Encoding: '1',\n};\n\n/**\n * @param {String} color\n * @returns {Array} [AA, BBGGRR]\n */\nfunction parseStyleColor(color) {\n if (/^(&|H|&H)[0-9a-f]{6,}/i.test(color)) {\n var ref = color.match(/&?H?([0-9a-f]{2})?([0-9a-f]{6})/i);\n var a = ref[1];\n var c = ref[2];\n return [a || '00', c];\n }\n var num = parseInt(color, 10);\n if (!Number.isNaN(num)) {\n var min = -2147483648;\n var max = 2147483647;\n if (num < min) {\n return ['00', '000000'];\n }\n var aabbggrr = (min <= num && num <= max)\n ? (\"00000000\" + ((num < 0 ? num + 4294967296 : num).toString(16))).slice(-8)\n : String(num).slice(0, 8);\n return [aabbggrr.slice(0, 2), aabbggrr.slice(2)];\n }\n return ['00', '000000'];\n}\n\nfunction compileStyles(ref) {\n var info = ref.info;\n var style = ref.style;\n var format = ref.format;\n var defaultStyle = ref.defaultStyle;\n\n var result = {};\n var styles = [\n assign({}, DEFAULT_STYLE, defaultStyle, { Name: 'Default' }) ].concat( style.map(function (stl) {\n var s = {};\n for (var i = 0; i < format.length; i++) {\n s[format[i]] = stl[i];\n }\n return s;\n }) );\n var loop = function ( i ) {\n var s = styles[i];\n // this behavior is same as Aegisub by black-box testing\n if (/^(\\*+)Default$/.test(s.Name)) {\n s.Name = 'Default';\n }\n Object.keys(s).forEach(function (key) {\n if (key !== 'Name' && key !== 'Fontname' && !/Colour/.test(key)) {\n s[key] *= 1;\n }\n });\n var ref$1 = parseStyleColor(s.PrimaryColour);\n var a1 = ref$1[0];\n var c1 = ref$1[1];\n var ref$2 = parseStyleColor(s.SecondaryColour);\n var a2 = ref$2[0];\n var c2 = ref$2[1];\n var ref$3 = parseStyleColor(s.OutlineColour);\n var a3 = ref$3[0];\n var c3 = ref$3[1];\n var ref$4 = parseStyleColor(s.BackColour);\n var a4 = ref$4[0];\n var c4 = ref$4[1];\n var tag = {\n fn: s.Fontname,\n fs: s.Fontsize,\n c1: c1,\n a1: a1,\n c2: c2,\n a2: a2,\n c3: c3,\n a3: a3,\n c4: c4,\n a4: a4,\n b: Math.abs(s.Bold),\n i: Math.abs(s.Italic),\n u: Math.abs(s.Underline),\n s: Math.abs(s.StrikeOut),\n fscx: s.ScaleX,\n fscy: s.ScaleY,\n fsp: s.Spacing,\n frz: s.Angle,\n xbord: s.Outline,\n ybord: s.Outline,\n xshad: s.Shadow,\n yshad: s.Shadow,\n q: /^[0-3]$/.test(info.WrapStyle) ? info.WrapStyle * 1 : 2,\n };\n result[s.Name] = { style: s, tag: tag };\n };\n\n for (var i = 0; i < styles.length; i++) loop( i );\n return result;\n}\n\nfunction compile(text, options) {\n if ( options === void 0 ) options = {};\n\n var tree = parse(text);\n var styles = compileStyles({\n info: tree.info,\n style: tree.styles.style,\n format: tree.styles.format,\n defaultStyle: options.defaultStyle || {},\n });\n return {\n info: tree.info,\n width: tree.info.PlayResX * 1 || null,\n height: tree.info.PlayResY * 1 || null,\n collisions: tree.info.Collisions || 'Normal',\n styles: styles,\n dialogues: compileDialogues({\n styles: styles,\n dialogues: tree.events.dialogue,\n }),\n };\n}\n\nvar raf = (\n window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || (function (cb) { return setTimeout(cb, 50 / 3); })\n);\n\nvar caf = (\n window.cancelAnimationFrame\n || window.mozCancelAnimationFrame\n || window.webkitCancelAnimationFrame\n || clearTimeout\n);\n\nfunction color2rgba(c) {\n var t = c.match(/(\\w\\w)(\\w\\w)(\\w\\w)(\\w\\w)/);\n var a = 1 - (\"0x\" + (t[1])) / 255;\n var b = +(\"0x\" + (t[2]));\n var g = +(\"0x\" + (t[3]));\n var r = +(\"0x\" + (t[4]));\n return (\"rgba(\" + r + \",\" + g + \",\" + b + \",\" + a + \")\");\n}\n\nfunction uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\nfunction createSVGEl(name, attrs) {\n if ( attrs === void 0 ) attrs = [];\n\n var $el = document.createElementNS('http://www.w3.org/2000/svg', name);\n for (var i = 0; i < attrs.length; i++) {\n var attr = attrs[i];\n $el.setAttributeNS(\n attr[0] === 'xlink:href' ? 'http://www.w3.org/1999/xlink' : null,\n attr[0],\n attr[1]\n );\n }\n return $el;\n}\n\nfunction getVendor(prop) {\n var ref = document.body;\n var style = ref.style;\n var Prop = prop.replace(/^\\w/, function (x) { return x.toUpperCase(); });\n if (prop in style) { return ''; }\n if ((\"webkit\" + Prop) in style) { return '-webkit-'; }\n if ((\"moz\" + Prop) in style) { return '-moz-'; }\n return '';\n}\n\nvar vendor = {\n transform: getVendor('transform'),\n animation: getVendor('animation'),\n clipPath: getVendor('clipPath'),\n};\n\nfunction getStyleRoot(container) {\n var rootNode = container.getRootNode ? container.getRootNode() : document;\n return rootNode === document ? rootNode.head : rootNode;\n}\n\nvar strokeTags = ['c3', 'a3', 'c4', 'a4', 'xbord', 'ybord', 'xshad', 'yshad', 'blur', 'be'];\nvar transformTags = ['fscx', 'fscy', 'frx', 'fry', 'frz', 'fax', 'fay'];\n\nfunction createClipPath(clip) {\n var sw = this._.scriptRes.width;\n var sh = this._.scriptRes.height;\n var d = '';\n if (clip.dots !== null) {\n var ref = clip.dots;\n var x1 = ref.x1;\n var y1 = ref.y1;\n var x2 = ref.x2;\n var y2 = ref.y2;\n x1 /= sw;\n y1 /= sh;\n x2 /= sw;\n y2 /= sh;\n d = \"M\" + x1 + \",\" + y1 + \"L\" + x1 + \",\" + y2 + \",\" + x2 + \",\" + y2 + \",\" + x2 + \",\" + y1 + \"Z\";\n }\n if (clip.drawing !== null) {\n d = clip.drawing.instructions.map(function (ref) {\n var type = ref.type;\n var points = ref.points;\n\n return (\n type + points.map(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n return ((x / sw) + \",\" + (y / sh));\n }).join(',')\n );\n }).join('');\n }\n var scale = 1 / (1 << (clip.scale - 1));\n if (clip.inverse) {\n d += \"M0,0L0,\" + scale + \",\" + scale + \",\" + scale + \",\" + scale + \",0,0,0Z\";\n }\n var id = \"ASS-\" + (uuid());\n var $clipPath = createSVGEl('clipPath', [\n ['id', id],\n ['clipPathUnits', 'objectBoundingBox'] ]);\n $clipPath.appendChild(createSVGEl('path', [\n ['d', d],\n ['transform', (\"scale(\" + scale + \")\")],\n ['clip-rule', 'evenodd'] ]));\n this._.$defs.appendChild($clipPath);\n return {\n $clipPath: $clipPath,\n cssText: ((vendor.clipPath) + \"clip-path:url(#\" + id + \");\"),\n };\n}\n\nfunction setClipPath(dialogue) {\n if (!dialogue.clip) {\n return;\n }\n var $fobb = document.createElement('div');\n this._.$stage.insertBefore($fobb, dialogue.$div);\n $fobb.appendChild(dialogue.$div);\n $fobb.className = 'ASS-fix-objectBoundingBox';\n var ref = createClipPath.call(this, dialogue.clip);\n var cssText = ref.cssText;\n var $clipPath = ref.$clipPath;\n this._.$defs.appendChild($clipPath);\n $fobb.style.cssText = cssText;\n assign(dialogue, { $div: $fobb, $clipPath: $clipPath });\n}\n\nvar $fixFontSize = document.createElement('div');\n$fixFontSize.className = 'ASS-fix-font-size';\n$fixFontSize.textContent = 'M';\n\nvar cache = Object.create(null);\n\nfunction getRealFontSize(fn, fs) {\n var key = fn + \"-\" + fs;\n if (!cache[key]) {\n $fixFontSize.style.cssText = \"line-height:normal;font-size:\" + fs + \"px;font-family:\\\"\" + fn + \"\\\",Arial;\";\n cache[key] = fs * fs / $fixFontSize.clientHeight;\n }\n return cache[key];\n}\n\nfunction createSVGStroke(tag, id, scale) {\n var hasBorder = tag.xbord || tag.ybord;\n var hasShadow = tag.xshad || tag.yshad;\n var isOpaque = tag.a1 !== 'FF';\n var blur = tag.blur || tag.be || 0;\n var $filter = createSVGEl('filter', [['id', id]]);\n $filter.appendChild(createSVGEl('feGaussianBlur', [\n ['stdDeviation', hasBorder ? 0 : blur],\n ['in', 'SourceGraphic'],\n ['result', 'sg_b'] ]));\n $filter.appendChild(createSVGEl('feFlood', [\n ['flood-color', color2rgba(tag.a1 + tag.c1)],\n ['result', 'c1'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'in'],\n ['in', 'c1'],\n ['in2', 'sg_b'],\n ['result', 'main'] ]));\n if (hasBorder) {\n $filter.appendChild(createSVGEl('feMorphology', [\n ['radius', ((tag.xbord * scale) + \" \" + (tag.ybord * scale))],\n ['operator', 'dilate'],\n ['in', 'SourceGraphic'],\n ['result', 'dil'] ]));\n $filter.appendChild(createSVGEl('feGaussianBlur', [\n ['stdDeviation', blur],\n ['in', 'dil'],\n ['result', 'dil_b'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'out'],\n ['in', 'dil_b'],\n ['in2', 'SourceGraphic'],\n ['result', 'dil_b_o'] ]));\n $filter.appendChild(createSVGEl('feFlood', [\n ['flood-color', color2rgba(tag.a3 + tag.c3)],\n ['result', 'c3'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'in'],\n ['in', 'c3'],\n ['in2', 'dil_b_o'],\n ['result', 'border'] ]));\n }\n if (hasShadow && (hasBorder || isOpaque)) {\n $filter.appendChild(createSVGEl('feOffset', [\n ['dx', tag.xshad * scale],\n ['dy', tag.yshad * scale],\n ['in', hasBorder ? 'dil' : 'SourceGraphic'],\n ['result', 'off'] ]));\n $filter.appendChild(createSVGEl('feGaussianBlur', [\n ['stdDeviation', blur],\n ['in', 'off'],\n ['result', 'off_b'] ]));\n if (!isOpaque) {\n $filter.appendChild(createSVGEl('feOffset', [\n ['dx', tag.xshad * scale],\n ['dy', tag.yshad * scale],\n ['in', 'SourceGraphic'],\n ['result', 'sg_off'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'out'],\n ['in', 'off_b'],\n ['in2', 'sg_off'],\n ['result', 'off_b_o'] ]));\n }\n $filter.appendChild(createSVGEl('feFlood', [\n ['flood-color', color2rgba(tag.a4 + tag.c4)],\n ['result', 'c4'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'in'],\n ['in', 'c4'],\n ['in2', isOpaque ? 'off_b' : 'off_b_o'],\n ['result', 'shadow'] ]));\n }\n var $merge = createSVGEl('feMerge', []);\n if (hasShadow && (hasBorder || isOpaque)) {\n $merge.appendChild(createSVGEl('feMergeNode', [['in', 'shadow']]));\n }\n if (hasBorder) {\n $merge.appendChild(createSVGEl('feMergeNode', [['in', 'border']]));\n }\n $merge.appendChild(createSVGEl('feMergeNode', [['in', 'main']]));\n $filter.appendChild($merge);\n return $filter;\n}\n\nfunction createCSSStroke(tag, scale) {\n var arr = [];\n var oc = color2rgba(tag.a3 + tag.c3);\n var ox = tag.xbord * scale;\n var oy = tag.ybord * scale;\n var sc = color2rgba(tag.a4 + tag.c4);\n var sx = tag.xshad * scale;\n var sy = tag.yshad * scale;\n var blur = tag.blur || tag.be || 0;\n if (!(ox + oy + sx + sy)) { return 'none'; }\n if (ox || oy) {\n for (var i = -1; i <= 1; i++) {\n for (var j = -1; j <= 1; j++) {\n for (var x = 1; x < ox; x++) {\n for (var y = 1; y < oy; y++) {\n if (i || j) {\n arr.push((oc + \" \" + (i * x) + \"px \" + (j * y) + \"px \" + blur + \"px\"));\n }\n }\n }\n arr.push((oc + \" \" + (i * ox) + \"px \" + (j * oy) + \"px \" + blur + \"px\"));\n }\n }\n }\n if (sx || sy) {\n var pnx = sx > 0 ? 1 : -1;\n var pny = sy > 0 ? 1 : -1;\n sx = Math.abs(sx);\n sy = Math.abs(sy);\n for (var x$1 = Math.max(ox, sx - ox); x$1 < sx + ox; x$1++) {\n for (var y$1 = Math.max(oy, sy - oy); y$1 < sy + oy; y$1++) {\n arr.push((sc + \" \" + (x$1 * pnx) + \"px \" + (y$1 * pny) + \"px \" + blur + \"px\"));\n }\n }\n arr.push((sc + \" \" + ((sx + ox) * pnx) + \"px \" + ((sy + oy) * pny) + \"px \" + blur + \"px\"));\n }\n return arr.join();\n}\n\nfunction createTransform(tag) {\n return [\n // TODO: I don't know why perspective is 314, it just performances well.\n 'perspective(314px)',\n (\"rotateY(\" + (tag.fry || 0) + \"deg)\"),\n (\"rotateX(\" + (tag.frx || 0) + \"deg)\"),\n (\"rotateZ(\" + (-tag.frz || 0) + \"deg)\"),\n (\"scale(\" + (tag.p ? 1 : (tag.fscx || 100) / 100) + \",\" + (tag.p ? 1 : (tag.fscy || 100) / 100) + \")\"),\n (\"skew(\" + (tag.fax || 0) + \"rad,\" + (tag.fay || 0) + \"rad)\") ].join(' ');\n}\n\nfunction setTransformOrigin(dialogue) {\n var alignment = dialogue.alignment;\n var width = dialogue.width;\n var height = dialogue.height;\n var x = dialogue.x;\n var y = dialogue.y;\n var $div = dialogue.$div;\n var org = dialogue.org;\n if (!org) {\n org = { x: 0, y: 0 };\n if (alignment % 3 === 1) { org.x = x; }\n if (alignment % 3 === 2) { org.x = x + width / 2; }\n if (alignment % 3 === 0) { org.x = x + width; }\n if (alignment <= 3) { org.y = y + height; }\n if (alignment >= 4 && alignment <= 6) { org.y = y + height / 2; }\n if (alignment >= 7) { org.y = y; }\n }\n for (var i = $div.childNodes.length - 1; i >= 0; i--) {\n var node = $div.childNodes[i];\n if (node.dataset.hasRotate === 'true') {\n // It's not extremely precise for offsets are round the value to an integer.\n var tox = org.x - x - node.offsetLeft;\n var toy = org.y - y - node.offsetTop;\n node.style.cssText += (vendor.transform) + \"transform-origin:\" + tox + \"px \" + toy + \"px;\";\n }\n }\n}\n\nfunction getKeyframeString(name, list) {\n return (\"@\" + (vendor.animation) + \"keyframes \" + name + \" {\" + list + \"}\\n\");\n}\n\nvar KeyframeBlockList = function KeyframeBlockList() {\n this.obj = {};\n};\n\nKeyframeBlockList.prototype.set = function set (keyText, prop, value) {\n if (!this.obj[keyText]) { this.obj[keyText] = {}; }\n this.obj[keyText][prop] = value;\n};\n\nKeyframeBlockList.prototype.setT = function setT (ref) {\n var t1 = ref.t1;\n var t2 = ref.t2;\n var duration = ref.duration;\n var prop = ref.prop;\n var from = ref.from;\n var to = ref.to;\n\n this.set('0.000%', prop, from);\n if (t1 < duration) {\n this.set((((t1 / duration * 100).toFixed(3)) + \"%\"), prop, from);\n }\n if (t2 < duration) {\n this.set((((t2 / duration * 100).toFixed(3)) + \"%\"), prop, to);\n }\n this.set('100.000%', prop, to);\n};\n\nKeyframeBlockList.prototype.toString = function toString () {\n var this$1 = this;\n\n return Object.keys(this.obj)\n .map(function (keyText) { return (\n (keyText + \"{\" + (Object.keys(this$1.obj[keyText])\n .map(function (prop) { return (\"\" + (vendor[prop] || '') + prop + \":\" + (this$1.obj[keyText][prop]) + \";\"); })\n .join('')) + \"}\")\n ); })\n .join('');\n};\n\n// TODO: multi \\t can't be merged directly\nfunction mergeT(ts) {\n return ts.reduceRight(function (results, t) {\n var merged = false;\n return results\n .map(function (r) {\n merged = t.t1 === r.t1 && t.t2 === r.t2 && t.accel === r.accel;\n return assign({}, r, merged ? { tag: assign({}, r.tag, t.tag) } : {});\n })\n .concat(merged ? [] : t);\n }, []);\n}\n\nfunction getKeyframes() {\n var this$1 = this;\n\n var keyframes = '';\n this.dialogues.forEach(function (dialogue) {\n var start = dialogue.start;\n var end = dialogue.end;\n var effect = dialogue.effect;\n var move = dialogue.move;\n var fade = dialogue.fade;\n var slices = dialogue.slices;\n var duration = (end - start) * 1000;\n var diaKbl = new KeyframeBlockList();\n // TODO: when effect and move both exist, its behavior is weird, for now only move works.\n if (effect && !move) {\n var name = effect.name;\n var delay = effect.delay;\n var lefttoright = effect.lefttoright;\n var y1 = effect.y1;\n var y2 = effect.y2 || this$1._.resampledRes.height;\n if (name === 'banner') {\n var tx = this$1.scale * (duration / delay) * (lefttoright ? 1 : -1);\n diaKbl.set('0.000%', 'transform', 'translateX(0)');\n diaKbl.set('100.000%', 'transform', (\"translateX(\" + tx + \"px)\"));\n }\n if (/^scroll/.test(name)) {\n var updown = /up/.test(name) ? -1 : 1;\n var tFrom = \"translateY(\" + (this$1.scale * y1 * updown) + \"px)\";\n var tTo = \"translateY(\" + (this$1.scale * y2 * updown) + \"px)\";\n var dp = (y2 - y1) / (duration / delay) * 100;\n diaKbl.set('0.000%', 'transform', tFrom);\n if (dp < 100) {\n diaKbl.set(((dp.toFixed(3)) + \"%\"), 'transform', tTo);\n }\n diaKbl.set('100.000%', 'transform', tTo);\n }\n }\n if (move) {\n var x1 = move.x1;\n var y1$1 = move.y1;\n var x2 = move.x2;\n var y2$1 = move.y2;\n var t1 = move.t1;\n var t2 = move.t2 || duration;\n var pos = dialogue.pos || { x: 0, y: 0 };\n var values = [{ x: x1, y: y1$1 }, { x: x2, y: y2$1 }].map(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n return (\n (\"translate(\" + (this$1.scale * (x - pos.x)) + \"px, \" + (this$1.scale * (y - pos.y)) + \"px)\")\n );\n });\n diaKbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'transform', from: values[0], to: values[1] });\n }\n if (fade) {\n if (fade.type === 'fad') {\n var t1$1 = fade.t1;\n var t2$1 = fade.t2;\n diaKbl.set('0.000%', 'opacity', 0);\n if (t1$1 < duration) {\n diaKbl.set((((t1$1 / duration * 100).toFixed(3)) + \"%\"), 'opacity', 1);\n if (t1$1 + t2$1 < duration) {\n diaKbl.set(((((duration - t2$1) / duration * 100).toFixed(3)) + \"%\"), 'opacity', 1);\n }\n diaKbl.set('100.000%', 'opacity', 0);\n } else {\n diaKbl.set('100.000%', 'opacity', duration / t1$1);\n }\n } else {\n var a1 = fade.a1;\n var a2 = fade.a2;\n var a3 = fade.a3;\n var t1$2 = fade.t1;\n var t2$2 = fade.t2;\n var t3 = fade.t3;\n var t4 = fade.t4;\n var keyTexts = [t1$2, t2$2, t3, t4].map(function (t) { return (((t / duration * 100).toFixed(3)) + \"%\"); });\n var values$1 = [a1, a2, a3].map(function (a) { return 1 - a / 255; });\n diaKbl.set('0.000%', 'opacity', values$1[0]);\n if (t1$2 < duration) { diaKbl.set(keyTexts[0], 'opacity', values$1[0]); }\n if (t2$2 < duration) { diaKbl.set(keyTexts[1], 'opacity', values$1[1]); }\n if (t3 < duration) { diaKbl.set(keyTexts[2], 'opacity', values$1[1]); }\n if (t4 < duration) { diaKbl.set(keyTexts[3], 'opacity', values$1[2]); }\n diaKbl.set('100.000%', 'opacity', values$1[2]);\n }\n }\n var diaList = diaKbl.toString();\n if (diaList) {\n assign(dialogue, { animationName: (\"ASS-\" + (uuid())) });\n keyframes += getKeyframeString(dialogue.animationName, diaList);\n }\n slices.forEach(function (slice) {\n slice.fragments.forEach(function (fragment) {\n if (!fragment.tag.t || !fragment.tag.t.length) {\n return;\n }\n var kbl = new KeyframeBlockList();\n var fromTag = assign({}, slice.tag, fragment.tag);\n // TODO: accel is not implemented yet\n mergeT(fragment.tag.t).forEach(function (ref) {\n var t1 = ref.t1;\n var t2 = ref.t2;\n var tag = ref.tag;\n\n if (tag.fs) {\n var from = (this$1.scale * getRealFontSize(fromTag.fn, fromTag.fs)) + \"px\";\n var to = (this$1.scale * getRealFontSize(tag.fn, fromTag.fs)) + \"px\";\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'font-size', from: from, to: to });\n }\n if (tag.fsp) {\n var from$1 = (this$1.scale * fromTag.fsp) + \"px\";\n var to$1 = (this$1.scale * tag.fsp) + \"px\";\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'letter-spacing', from: from$1, to: to$1 });\n }\n var hasAlpha = (\n tag.a1 !== undefined\n && tag.a1 === tag.a2\n && tag.a2 === tag.a3\n && tag.a3 === tag.a4\n );\n if (tag.c1 || (tag.a1 && !hasAlpha)) {\n var from$2 = color2rgba(fromTag.a1 + fromTag.c1);\n var to$2 = color2rgba((tag.a1 || fromTag.a1) + (tag.c1 || fromTag.c1));\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'color', from: from$2, to: to$2 });\n }\n if (hasAlpha) {\n var from$3 = 1 - parseInt(fromTag.a1, 16) / 255;\n var to$3 = 1 - parseInt(tag.a1, 16) / 255;\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'opacity', from: from$3, to: to$3 });\n }\n var hasStroke = strokeTags.some(function (x) { return (\n tag[x] !== undefined\n && tag[x] !== (fragment.tag[x] || slice.tag[x])\n ); });\n if (hasStroke) {\n var scale = /Yes/i.test(this$1.info.ScaledBorderAndShadow) ? this$1.scale : 1;\n var from$4 = createCSSStroke(fromTag, scale);\n var to$4 = createCSSStroke(assign({}, fromTag, tag), scale);\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'text-shadow', from: from$4, to: to$4 });\n }\n var hasTransfrom = transformTags.some(function (x) { return (\n tag[x] !== undefined\n && tag[x] !== (fragment.tag[x] || slice.tag[x])\n ); });\n if (hasTransfrom) {\n var toTag = assign({}, fromTag, tag);\n if (fragment.drawing) {\n // scales will be handled inside svg\n assign(toTag, {\n p: 0,\n fscx: ((tag.fscx || fromTag.fscx) / fromTag.fscx) * 100,\n fscy: ((tag.fscy || fromTag.fscy) / fromTag.fscy) * 100,\n });\n assign(fromTag, { fscx: 100, fscy: 100 });\n }\n var from$5 = createTransform(fromTag);\n var to$5 = createTransform(toTag);\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'transform', from: from$5, to: to$5 });\n }\n });\n var list = kbl.toString();\n assign(fragment, { animationName: (\"ASS-\" + (uuid())) });\n keyframes += getKeyframeString(fragment.animationName, list);\n });\n });\n });\n return keyframes;\n}\n\nfunction createAnimation(name, duration, delay) {\n var va = vendor.animation;\n return (\n va + \"animation-name:\" + name + \";\"\n + va + \"animation-duration:\" + duration + \"s;\"\n + va + \"animation-delay:\" + delay + \"s;\"\n + va + \"animation-timing-function:linear;\"\n + va + \"animation-iteration-count:1;\"\n + va + \"animation-fill-mode:forwards;\"\n );\n}\n\nfunction createDrawing(fragment, styleTag) {\n var tag = assign({}, styleTag, fragment.tag);\n var ref = fragment.drawing;\n var minX = ref.minX;\n var minY = ref.minY;\n var width = ref.width;\n var height = ref.height;\n var baseScale = this.scale / (1 << (tag.p - 1));\n var scaleX = (tag.fscx ? tag.fscx / 100 : 1) * baseScale;\n var scaleY = (tag.fscy ? tag.fscy / 100 : 1) * baseScale;\n var blur = tag.blur || tag.be || 0;\n var vbx = tag.xbord + (tag.xshad < 0 ? -tag.xshad : 0) + blur;\n var vby = tag.ybord + (tag.yshad < 0 ? -tag.yshad : 0) + blur;\n var vbw = width * scaleX + 2 * tag.xbord + Math.abs(tag.xshad) + 2 * blur;\n var vbh = height * scaleY + 2 * tag.ybord + Math.abs(tag.yshad) + 2 * blur;\n var $svg = createSVGEl('svg', [\n ['width', vbw],\n ['height', vbh],\n ['viewBox', ((-vbx) + \" \" + (-vby) + \" \" + vbw + \" \" + vbh)] ]);\n var strokeScale = /Yes/i.test(this.info.ScaledBorderAndShadow) ? this.scale : 1;\n var filterId = \"ASS-\" + (uuid());\n var $defs = createSVGEl('defs');\n $defs.appendChild(createSVGStroke(tag, filterId, strokeScale));\n $svg.appendChild($defs);\n var symbolId = \"ASS-\" + (uuid());\n var $symbol = createSVGEl('symbol', [\n ['id', symbolId],\n ['viewBox', (minX + \" \" + minY + \" \" + width + \" \" + height)] ]);\n $symbol.appendChild(createSVGEl('path', [['d', fragment.drawing.d]]));\n $svg.appendChild($symbol);\n $svg.appendChild(createSVGEl('use', [\n ['width', width * scaleX],\n ['height', height * scaleY],\n ['xlink:href', (\"#\" + symbolId)],\n ['filter', (\"url(#\" + filterId + \")\")] ]));\n $svg.style.cssText = (\n 'position:absolute;'\n + \"left:\" + (minX * scaleX - vbx) + \"px;\"\n + \"top:\" + (minY * scaleY - vby) + \"px;\"\n );\n return {\n $svg: $svg,\n cssText: (\"position:relative;width:\" + (width * scaleX) + \"px;height:\" + (height * scaleY) + \"px;\"),\n };\n}\n\nfunction encodeText(text, q) {\n return text\n .replace(//g, '>')\n .replace(/\\s/g, ' ')\n .replace(/\\\\h/g, ' ')\n .replace(/\\\\N/g, '
')\n .replace(/\\\\n/g, q === 2 ? '
' : ' ');\n}\n\nfunction createDialogue(dialogue) {\n var this$1 = this;\n\n var $div = document.createElement('div');\n $div.className = 'ASS-dialogue';\n var df = document.createDocumentFragment();\n var slices = dialogue.slices;\n var start = dialogue.start;\n var end = dialogue.end;\n slices.forEach(function (slice) {\n var borderStyle = slice.borderStyle;\n slice.fragments.forEach(function (fragment) {\n var text = fragment.text;\n var drawing = fragment.drawing;\n var animationName = fragment.animationName;\n var tag = assign({}, slice.tag, fragment.tag);\n var cssText = 'display:inline-block;';\n var vct = this$1.video.currentTime;\n if (!drawing) {\n cssText += \"font-family:\\\"\" + (tag.fn) + \"\\\",Arial;\";\n cssText += \"font-size:\" + (this$1.scale * getRealFontSize(tag.fn, tag.fs)) + \"px;\";\n cssText += \"color:\" + (color2rgba(tag.a1 + tag.c1)) + \";\";\n var scale = /Yes/i.test(this$1.info.ScaledBorderAndShadow) ? this$1.scale : 1;\n if (borderStyle === 1) {\n cssText += \"text-shadow:\" + (createCSSStroke(tag, scale)) + \";\";\n }\n if (borderStyle === 3) {\n cssText += (\n \"background-color:\" + (color2rgba(tag.a3 + tag.c3)) + \";\"\n + \"box-shadow:\" + (createCSSStroke(tag, scale)) + \";\"\n );\n }\n cssText += tag.b ? (\"font-weight:\" + (tag.b === 1 ? 'bold' : tag.b) + \";\") : '';\n cssText += tag.i ? 'font-style:italic;' : '';\n cssText += (tag.u || tag.s) ? (\"text-decoration:\" + (tag.u ? 'underline' : '') + \" \" + (tag.s ? 'line-through' : '') + \";\") : '';\n cssText += tag.fsp ? (\"letter-spacing:\" + (tag.fsp) + \"px;\") : '';\n // TODO: (tag.q === 0) and (tag.q === 3) are not implemented yet,\n // for now just handle it as (tag.q === 1)\n if (tag.q === 1 || tag.q === 0 || tag.q === 3) {\n cssText += 'word-break:break-all;white-space:normal;';\n }\n if (tag.q === 2) {\n cssText += 'word-break:normal;white-space:nowrap;';\n }\n }\n var hasTransfrom = transformTags.some(function (x) { return (\n /^fsc[xy]$/.test(x) ? tag[x] !== 100 : !!tag[x]\n ); });\n if (hasTransfrom) {\n cssText += (vendor.transform) + \"transform:\" + (createTransform(tag)) + \";\";\n if (!drawing) {\n cssText += 'transform-style:preserve-3d;word-break:normal;white-space:nowrap;';\n }\n }\n if (animationName) {\n cssText += createAnimation(animationName, end - start, Math.min(0, start - vct));\n }\n if (drawing && tag.pbo) {\n var pbo = this$1.scale * -tag.pbo * (tag.fscy || 100) / 100;\n cssText += \"vertical-align:\" + pbo + \"px;\";\n }\n\n var hasRotate = /\"fr[xyz]\":[^0]/.test(JSON.stringify(tag));\n encodeText(text, tag.q).split('
').forEach(function (html, idx) {\n var $span = document.createElement('span');\n $span.dataset.hasRotate = hasRotate;\n if (drawing) {\n var obj = createDrawing.call(this$1, fragment, slice.tag);\n $span.style.cssText = obj.cssText;\n $span.appendChild(obj.$svg);\n } else {\n if (idx) {\n df.appendChild(document.createElement('br'));\n }\n if (!html) {\n return;\n }\n $span.innerHTML = html;\n }\n // TODO: maybe it can be optimized\n $span.style.cssText += cssText;\n df.appendChild($span);\n });\n });\n });\n $div.appendChild(df);\n return $div;\n}\n\nfunction allocate(dialogue) {\n var layer = dialogue.layer;\n var margin = dialogue.margin;\n var width = dialogue.width;\n var height = dialogue.height;\n var alignment = dialogue.alignment;\n var end = dialogue.end;\n var stageWidth = this.width - (this.scale * (margin.left + margin.right) | 0);\n var stageHeight = this.height;\n var vertical = this.scale * margin.vertical | 0;\n var vct = this.video.currentTime * 100;\n this._.space[layer] = this._.space[layer] || {\n left: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },\n center: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },\n right: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },\n };\n var channel = this._.space[layer];\n var align = ['right', 'left', 'center'][alignment % 3];\n var willCollide = function (y) {\n var lw = channel.left.width[y];\n var cw = channel.center.width[y];\n var rw = channel.right.width[y];\n var le = channel.left.end[y];\n var ce = channel.center.end[y];\n var re = channel.right.end[y];\n return (\n (align === 'left' && (\n (le > vct && lw)\n || (ce > vct && cw && 2 * width + cw > stageWidth)\n || (re > vct && rw && width + rw > stageWidth)\n ))\n || (align === 'center' && (\n (le > vct && lw && 2 * lw + width > stageWidth)\n || (ce > vct && cw)\n || (re > vct && rw && 2 * rw + width > stageWidth)\n ))\n || (align === 'right' && (\n (le > vct && lw && lw + width > stageWidth)\n || (ce > vct && cw && 2 * width + cw > stageWidth)\n || (re > vct && rw)\n ))\n );\n };\n var count = 0;\n var result = 0;\n var find = function (y) {\n count = willCollide(y) ? 0 : count + 1;\n if (count >= height) {\n result = y;\n return true;\n }\n return false;\n };\n if (alignment <= 3) {\n for (var i = stageHeight - vertical - 1; i > vertical; i--) {\n if (find(i)) { break; }\n }\n } else if (alignment >= 7) {\n for (var i$1 = vertical + 1; i$1 < stageHeight - vertical; i$1++) {\n if (find(i$1)) { break; }\n }\n } else {\n for (var i$2 = (stageHeight - height) >> 1; i$2 < stageHeight - vertical; i$2++) {\n if (find(i$2)) { break; }\n }\n }\n if (alignment > 3) {\n result -= height - 1;\n }\n for (var i$3 = result; i$3 < result + height; i$3++) {\n channel[align].width[i$3] = width;\n channel[align].end[i$3] = end * 100;\n }\n return result;\n}\n\nfunction getPosition(dialogue) {\n var effect = dialogue.effect;\n var move = dialogue.move;\n var alignment = dialogue.alignment;\n var width = dialogue.width;\n var height = dialogue.height;\n var margin = dialogue.margin;\n var slices = dialogue.slices;\n var x = 0;\n var y = 0;\n if (effect) {\n if (effect.name === 'banner') {\n if (alignment <= 3) { y = this.height - height - margin.vertical; }\n if (alignment >= 4 && alignment <= 6) { y = (this.height - height) / 2; }\n if (alignment >= 7) { y = margin.vertical; }\n x = effect.lefttoright ? -width : this.width;\n }\n } else if (dialogue.pos || move) {\n var pos = dialogue.pos || { x: 0, y: 0 };\n if (alignment % 3 === 1) { x = this.scale * pos.x; }\n if (alignment % 3 === 2) { x = this.scale * pos.x - width / 2; }\n if (alignment % 3 === 0) { x = this.scale * pos.x - width; }\n if (alignment <= 3) { y = this.scale * pos.y - height; }\n if (alignment >= 4 && alignment <= 6) { y = this.scale * pos.y - height / 2; }\n if (alignment >= 7) { y = this.scale * pos.y; }\n } else {\n if (alignment % 3 === 1) { x = 0; }\n if (alignment % 3 === 2) { x = (this.width - width) / 2; }\n if (alignment % 3 === 0) { x = this.width - width - this.scale * margin.right; }\n var hasT = slices.some(function (slice) { return (\n slice.fragments.some(function (ref) {\n var animationName = ref.animationName;\n\n return animationName;\n })\n ); });\n if (hasT) {\n if (alignment <= 3) { y = this.height - height - margin.vertical; }\n if (alignment >= 4 && alignment <= 6) { y = (this.height - height) / 2; }\n if (alignment >= 7) { y = margin.vertical; }\n } else {\n y = allocate.call(this, dialogue);\n }\n }\n return { x: x, y: y };\n}\n\nfunction createStyle(dialogue) {\n var layer = dialogue.layer;\n var start = dialogue.start;\n var end = dialogue.end;\n var alignment = dialogue.alignment;\n var effect = dialogue.effect;\n var pos = dialogue.pos;\n var margin = dialogue.margin;\n var animationName = dialogue.animationName;\n var width = dialogue.width;\n var height = dialogue.height;\n var x = dialogue.x;\n var y = dialogue.y;\n var vct = this.video.currentTime;\n var cssText = '';\n if (layer) { cssText += \"z-index:\" + layer + \";\"; }\n if (animationName) {\n cssText += createAnimation(animationName, end - start, Math.min(0, start - vct));\n }\n cssText += \"text-align:\" + (['right', 'left', 'center'][alignment % 3]) + \";\";\n if (!effect) {\n var mw = this.width - this.scale * (margin.left + margin.right);\n cssText += \"max-width:\" + mw + \"px;\";\n if (!pos) {\n if (alignment % 3 === 1) {\n cssText += \"margin-left:\" + (this.scale * margin.left) + \"px;\";\n }\n if (alignment % 3 === 0) {\n cssText += \"margin-right:\" + (this.scale * margin.right) + \"px;\";\n }\n if (width > this.width - this.scale * (margin.left + margin.right)) {\n cssText += \"margin-left:\" + (this.scale * margin.left) + \"px;\";\n cssText += \"margin-right:\" + (this.scale * margin.right) + \"px;\";\n }\n }\n }\n cssText += \"width:\" + width + \"px;height:\" + height + \"px;left:\" + x + \"px;top:\" + y + \"px;\";\n return cssText;\n}\n\nfunction renderer(dialogue) {\n var $div = createDialogue.call(this, dialogue);\n assign(dialogue, { $div: $div });\n this._.$stage.appendChild($div);\n var ref = $div.getBoundingClientRect();\n var width = ref.width;\n var height = ref.height;\n assign(dialogue, { width: width, height: height });\n assign(dialogue, getPosition.call(this, dialogue));\n $div.style.cssText = createStyle.call(this, dialogue);\n setTransformOrigin(dialogue);\n setClipPath.call(this, dialogue);\n return dialogue;\n}\n\nfunction framing() {\n var vct = this.video.currentTime;\n for (var i = this._.stagings.length - 1; i >= 0; i--) {\n var dia = this._.stagings[i];\n var end = dia.end;\n if (dia.effect && /scroll/.test(dia.effect.name)) {\n var ref = dia.effect;\n var y1 = ref.y1;\n var y2 = ref.y2;\n var delay = ref.delay;\n var duration = ((y2 || this._.resampledRes.height) - y1) / (1000 / delay);\n end = Math.min(end, dia.start + duration);\n }\n if (end < vct) {\n this._.$stage.removeChild(dia.$div);\n if (dia.$clipPath) {\n this._.$defs.removeChild(dia.$clipPath);\n }\n this._.stagings.splice(i, 1);\n }\n }\n var dias = this.dialogues;\n while (\n this._.index < dias.length\n && vct >= dias[this._.index].start\n ) {\n if (vct < dias[this._.index].end) {\n var dia$1 = renderer.call(this, dias[this._.index]);\n this._.stagings.push(dia$1);\n }\n ++this._.index;\n }\n}\n\nfunction play() {\n var this$1 = this;\n\n var frame = function () {\n framing.call(this$1);\n this$1._.requestId = raf(frame);\n };\n caf(this._.requestId);\n this._.requestId = raf(frame);\n this._.$stage.classList.remove('ASS-animation-paused');\n return this;\n}\n\nfunction pause() {\n caf(this._.requestId);\n this._.requestId = 0;\n this._.$stage.classList.add('ASS-animation-paused');\n return this;\n}\n\nfunction clear() {\n while (this._.$stage.lastChild) {\n this._.$stage.removeChild(this._.$stage.lastChild);\n }\n while (this._.$defs.lastChild) {\n this._.$defs.removeChild(this._.$defs.lastChild);\n }\n this._.stagings = [];\n this._.space = [];\n}\n\nfunction seek() {\n var vct = this.video.currentTime;\n var dias = this.dialogues;\n clear.call(this);\n this._.index = (function () {\n var from = 0;\n var to = dias.length - 1;\n while (from + 1 < to && vct > dias[(to + from) >> 1].end) {\n from = (to + from) >> 1;\n }\n if (!from) { return 0; }\n for (var i = from; i < to; i++) {\n if (\n dias[i].end > vct && vct >= dias[i].start\n || (i && dias[i - 1].end < vct && vct < dias[i].start)\n ) {\n return i;\n }\n }\n return to;\n })();\n framing.call(this);\n}\n\nfunction bindEvents() {\n var l = this._.listener;\n l.play = play.bind(this);\n l.pause = pause.bind(this);\n l.seeking = seek.bind(this);\n this.video.addEventListener('play', l.play);\n this.video.addEventListener('pause', l.pause);\n this.video.addEventListener('seeking', l.seeking);\n}\n\nfunction unbindEvents() {\n var l = this._.listener;\n this.video.removeEventListener('play', l.play);\n this.video.removeEventListener('pause', l.pause);\n this.video.removeEventListener('seeking', l.seeking);\n l.play = null;\n l.pause = null;\n l.seeking = null;\n}\n\nfunction resize() {\n var cw = this.video.clientWidth;\n var ch = this.video.clientHeight;\n var vw = this.video.videoWidth || cw;\n var vh = this.video.videoHeight || ch;\n var sw = this._.scriptRes.width;\n var sh = this._.scriptRes.height;\n var rw = sw;\n var rh = sh;\n var videoScale = Math.min(cw / vw, ch / vh);\n if (this.resampling === 'video_width') {\n rh = sw / vw * vh;\n }\n if (this.resampling === 'video_height') {\n rw = sh / vh * vw;\n }\n this.scale = Math.min(cw / rw, ch / rh);\n if (this.resampling === 'script_width') {\n this.scale = videoScale * (vw / rw);\n }\n if (this.resampling === 'script_height') {\n this.scale = videoScale * (vh / rh);\n }\n this.width = this.scale * rw;\n this.height = this.scale * rh;\n this._.resampledRes = { width: rw, height: rh };\n\n this.container.style.cssText = \"width:\" + cw + \"px;height:\" + ch + \"px;\";\n var cssText = (\n \"width:\" + (this.width) + \"px;\"\n + \"height:\" + (this.height) + \"px;\"\n + \"top:\" + ((ch - this.height) / 2) + \"px;\"\n + \"left:\" + ((cw - this.width) / 2) + \"px;\"\n );\n this._.$stage.style.cssText = cssText;\n this._.$svg.style.cssText = cssText;\n this._.$svg.setAttributeNS(null, 'viewBox', (\"0 0 \" + sw + \" \" + sh));\n\n this._.$animation.innerHTML = getKeyframes.call(this);\n seek.call(this);\n\n return this;\n}\n\nvar GLOBAL_CSS = '.ASS-container,.ASS-stage{position:relative;overflow:hidden}.ASS-container video{position:absolute;top:0;left:0}.ASS-stage{pointer-events:none;position:absolute}.ASS-dialogue{font-size:0;position:absolute}.ASS-fix-font-size{position:absolute;visibility:hidden}.ASS-fix-objectBoundingBox{width:100%;height:100%;position:absolute;top:0;left:0}.ASS-animation-paused *{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}';\n\nfunction init(source, video, options) {\n if ( options === void 0 ) options = {};\n\n this.scale = 1;\n\n // private variables\n this._ = {\n index: 0,\n stagings: [],\n space: [],\n listener: {},\n $svg: createSVGEl('svg'),\n $defs: createSVGEl('defs'),\n $stage: document.createElement('div'),\n $animation: document.createElement('style'),\n };\n this._.$svg.appendChild(this._.$defs);\n this._.$stage.className = 'ASS-stage ASS-animation-paused';\n\n this._.resampling = options.resampling || 'video_height';\n\n this.container = options.container || document.createElement('div');\n this.container.classList.add('ASS-container');\n this.container.appendChild($fixFontSize);\n this.container.appendChild(this._.$svg);\n this._.hasInitContainer = !!options.container;\n\n this.video = video;\n bindEvents.call(this);\n if (!this._.hasInitContainer) {\n var isPlaying = !video.paused;\n video.parentNode.insertBefore(this.container, video);\n this.container.appendChild(video);\n if (isPlaying && video.paused) {\n video.play();\n }\n }\n this.container.appendChild(this._.$stage);\n\n var ref = compile(source);\n var info = ref.info;\n var width = ref.width;\n var height = ref.height;\n var dialogues = ref.dialogues;\n this.info = info;\n this._.scriptRes = {\n width: width || video.videoWidth,\n height: height || video.videoHeight,\n };\n this.dialogues = dialogues;\n\n var styleRoot = getStyleRoot(this.container);\n var $style = styleRoot.querySelector('#ASS-global-style');\n if (!$style) {\n $style = document.createElement('style');\n $style.type = 'text/css';\n $style.id = 'ASS-global-style';\n $style.appendChild(document.createTextNode(GLOBAL_CSS));\n styleRoot.appendChild($style);\n }\n this._.$animation.type = 'text/css';\n this._.$animation.className = 'ASS-animation';\n styleRoot.appendChild(this._.$animation);\n\n resize.call(this);\n\n if (!this.video.paused) {\n seek.call(this);\n play.call(this);\n }\n\n return this;\n}\n\nfunction show() {\n this._.$stage.style.visibility = 'visible';\n return this;\n}\n\nfunction hide() {\n this._.$stage.style.visibility = 'hidden';\n return this;\n}\n\nfunction destroy() {\n pause.call(this);\n clear.call(this);\n unbindEvents.call(this, this._.listener);\n\n var styleRoot = getStyleRoot(this.container);\n if (!this._.hasInitContainer) {\n var isPlay = !this.video.paused;\n this.container.parentNode.insertBefore(this.video, this.container);\n this.container.parentNode.removeChild(this.container);\n if (isPlay && this.video.paused) {\n this.video.play();\n }\n }\n styleRoot.removeChild(this._.$animation);\n\n // eslint-disable-next-line no-restricted-syntax\n for (var key in this) {\n if (Object.prototype.hasOwnProperty.call(this, key)) {\n this[key] = null;\n }\n }\n\n return this;\n}\n\nvar regex = /^(video|script)_(width|height)$/;\n\nfunction getter() {\n return regex.test(this._.resampling) ? this._.resampling : 'video_height';\n}\n\nfunction setter(r) {\n if (r === this._.resampling) { return r; }\n if (regex.test(r)) {\n this._.resampling = r;\n this.resize();\n }\n return this._.resampling;\n}\n\nvar ASS = function ASS(source, video, options) {\n if (typeof source !== 'string') {\n return this;\n }\n return init.call(this, source, video, options);\n};\n\nvar prototypeAccessors = { resampling: { configurable: true } };\n\nASS.prototype.resize = function resize$1 () {\n return resize.call(this);\n};\n\nASS.prototype.show = function show$1 () {\n return show.call(this);\n};\n\nASS.prototype.hide = function hide$1 () {\n return hide.call(this);\n};\n\nASS.prototype.destroy = function destroy$1 () {\n return destroy.call(this);\n};\n\nprototypeAccessors.resampling.get = function () {\n return getter.call(this);\n};\n\nprototypeAccessors.resampling.set = function (r) {\n return setter.call(this, r);\n};\n\nObject.defineProperties( ASS.prototype, prototypeAccessors );\n\nexport default ASS;\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import ASS from 'assjs';\nimport './style.scss';\n\nfunction artplayerPluginAss(url) {\n return (art) => {\n let ass = null;\n fetch(url)\n .then((res) => res.text())\n .then((text) => {\n const { $video, $subtitle } = art.template;\n $subtitle.classList.add('artplayer-plugin-ass');\n\n art.once('ready', () => {\n ass = new ASS(text, $video, {\n container: $subtitle,\n resampling: 'video_width',\n });\n\n ass.resize();\n art.emit('artplayerPluginAss', ass);\n art.on('resize', () => ass.resize());\n art.on('destroy', () => ass.destroy());\n });\n });\n return {\n name: 'artplayerPluginAss',\n ass,\n };\n };\n}\n\nexport default artplayerPluginAss;\n"],"names":["artplayerPluginAss","url","art","ass","fetch","then","res","text","template","$video","$subtitle","classList","add","once","ASS","container","resampling","resize","emit","on","destroy","name"],"mappings":";;;;;;EAAA,SAAS,WAAW,CAAC,IAAI,EAAE;EAC3B,EAAE,IAAI,KAAK,GAAG,IAAI;EAClB,KAAK,WAAW,EAAE;EAClB,KAAK,IAAI,EAAE;EACX,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;EACtB,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;EAC7B,IAAI,OAAO;EACX,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;EACpB,MAAM,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EAC9B,MAAM,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EACpC,MAAM,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EACtC,KAAK,CAAC;EACN,GAAG;EACH,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;EAClC,IAAI,OAAO;EACX,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;EACpB,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC9C,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC9C,MAAM,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EAC9B,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EACvC,KAAK,CAAC;EACN,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,YAAY,CAAC,IAAI,EAAE;EAC5B,EAAE,OAAO,IAAI;EACb,KAAK,WAAW,EAAE;EAClB;EACA,KAAK,OAAO,CAAC,+CAA+C,EAAE,MAAM,CAAC;EACrE;EACA,KAAK,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;EACpC,KAAK,IAAI,EAAE;EACX,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;EACzB,KAAK,KAAK,CAAC,iBAAiB,CAAC;EAC7B,KAAK,GAAG,CAAC,UAAU,GAAG,EAAE,EAAE;EAC1B,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;EACpB,SAAS,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;EACxE,MAAM,EAAE,CAAC,CAAC;EACV,CAAC;AACD;EACA,IAAI,OAAO,GAAG;EACd,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;EAC3B,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;EAC5B,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI;EAClC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;EACzD,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACrE;EACA,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/G;EACA,SAAS,QAAQ,CAAC,IAAI,EAAE;EACxB,EAAE,IAAI,MAAM,CAAC;AACb;EACA,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;EACf,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EAC1B,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAC1B,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAC9C,MAAM,OAAO,GAAG,CAAC;EACjB,KAAK;EACL,GAAG;EACH,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACxB,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC3B,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAC9B,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,GAAG,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACrC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC3B,GAAG,MAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACtD,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;EAC/C,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACvB,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACzB,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACpE,GAAG,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAC9C,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;EAC/C,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACzB,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACzB,IAAI,GAAG,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;EAC/B,GAAG,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;EAC3E,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EAC/C,GAAG,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACxD,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;EAChD,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACvB,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACzB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;EACpB,OAAO,IAAI,EAAE;EACb,OAAO,KAAK,CAAC,SAAS,CAAC;EACvB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;EACnB,GAAG,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,IAAI,IAAI,CAAC,GAAG,IAAI;EAChB,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;EACrC,OAAO,IAAI,EAAE;EACb,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;EACxB,IAAI,GAAG,CAAC,IAAI,GAAG;EACf,MAAM,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;EACjC,MAAM,KAAK,EAAE,CAAC;EACd,MAAM,OAAO,EAAE,IAAI;EACnB,MAAM,IAAI,EAAE,IAAI;EAChB,KAAK,CAAC;EACN,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;EACxB,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC5C,KAAK;EACL,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;EACxB,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAChC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC5C,KAAK;EACL,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;EACxB,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EACpC,KAAK;EACL,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAChC,IAAI,IAAI,GAAG,GAAG,IAAI;EAClB,OAAO,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;EAChC,OAAO,IAAI,EAAE;EACb,OAAO,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;EACtE,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;EACxB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE;EAChC,IAAI,GAAG,CAAC,CAAC,GAAG;EACZ,MAAM,EAAE,EAAE,CAAC;EACX,MAAM,EAAE,EAAE,CAAC;EACX,MAAM,KAAK,EAAE,CAAC;EACd,MAAM,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;EAC/B,SAAS,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;EAC5B,SAAS,KAAK,CAAC,IAAI,CAAC;EACpB,SAAS,KAAK,CAAC,CAAC,CAAC;EACjB,SAAS,GAAG,CAAC,QAAQ,CAAC;EACtB,KAAK,CAAC;EACN,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;EAC1B,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC/B,KAAK;EACL,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;EAC1B,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,KAAK;EACL,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;EAC1B,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC/B,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;EAChB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;EACf,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACxC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACpB,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;EAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;EAC/B,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EACjC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,EAAE;EAC9B,MAAM,IAAI,GAAG,EAAE;EACf,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACvB,OAAO;EACP,MAAM,GAAG,GAAG,EAAE,CAAC;EACf,KAAK,MAAM;EACX,MAAM,GAAG,IAAI,CAAC,CAAC;EACf,KAAK;EACL,GAAG;EACH,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACjB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;EAC5B,CAAC;AACD;EACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;EACxC,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;EACvB,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;EAC3D,GAAG;EACH,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;EAC5C,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;EAC1G,IAAI,MAAM,CAAC,IAAI,CAAC;EAChB,MAAM,IAAI,EAAE,IAAI;EAChB,MAAM,IAAI,EAAE,SAAS,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;EACzC,MAAM,OAAO,EAAE,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;EAC1D,KAAK,CAAC,CAAC;EACP,GAAG;EACH,EAAE,OAAO;EACT,IAAI,GAAG,EAAE,IAAI;EACb,IAAI,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;EACxE,IAAI,MAAM,EAAE,MAAM;EAClB,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EAC1B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5C,CAAC;AACD;EACA,SAAS,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;EACrC,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EAC/B,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;EACrC,IAAI,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAC3D,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EAChD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;EACf,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAC/B,IAAI,QAAQ,GAAG;EACf,MAAM,KAAK,OAAO,CAAC;EACnB,MAAM,KAAK,SAAS,CAAC;EACrB,MAAM,KAAK,SAAS,CAAC;EACrB,MAAM,KAAK,SAAS;EACpB,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;EAC3B,QAAQ,MAAM;EACd,MAAM,KAAK,OAAO,CAAC;EACnB,MAAM,KAAK,KAAK;EAChB,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;EAClC,QAAQ,MAAM;EACd,MAAM,KAAK,QAAQ;EACnB,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;EACpC,QAAQ,MAAM;EACd,MAAM,KAAK,MAAM;EACjB,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;EAClC,QAAQ,MAAM;EACd,MAAM;EACN,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,WAAW,CAAC,IAAI,EAAE;EAC3B,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC9D,CAAC;AACD;EACA,SAAS,UAAU,CAAC,IAAI,EAAE;EAC1B,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC7D,CAAC;AACD;EACA,SAAS,KAAK,CAAC,IAAI,EAAE;EACrB,EAAE,IAAI,IAAI,GAAG;EACb,IAAI,IAAI,EAAE,EAAE;EACZ,IAAI,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;EACrC,IAAI,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;EACrD,GAAG,CAAC;EACJ,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;EAClC,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACzC,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAC/B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE;AACtC;EACA,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EACtD,SAAS,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EAC5D,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EACtD,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;AACjD;EACA,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE;EAClC,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;EACrB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAC1B,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;EACjD,QAAQ,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EACzB,QAAQ,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3B,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EAC/B,OAAO;EACP,KAAK;EACL,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;EACrB,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACrC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;EAC/C,OAAO;EACP,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACpC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;EACjD,OAAO;EACP,KAAK;EACL,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;EACrB,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACrC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;EAC/C,OAAO;EACP,MAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACnD,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;EACtD,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7B,QAAQ,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC/B,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;EAC1F,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;EAC1B;EACA,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE;EAC1B,IAAI,IAAI,OAAO,GAAG,EAAE,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;EACjD,IAAI,QAAQ,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AAC9D;EACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE;EACpC,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;EACzC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC5C;EACA,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9C,OAAO;EACP,KAAK;EACL,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG;EACH,CAAC,CAAC;AACF;EACA,SAAS,aAAa,CAAC,GAAG,EAAE;EAC5B,EAAE,IAAI,GAAG,GAAG;EACZ,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,MAAM,EAAE,EAAE;EACd,GAAG,CAAC;EACJ,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;EAC9B,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;EACrB,OAAO,WAAW,EAAE;EACpB,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;EACxB,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EACzB,GAAG;EACH,EAAE,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;EACzE,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EAC1D,GAAG;EACH,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,OAAO,CAAC,GAAG,EAAE;EACtB,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;EACvC,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;EACrD,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,UAAU,CAAC,QAAQ,EAAE;EAC9B,EAAE,IAAI,GAAG,CAAC;AACV;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC;EACtB,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC;EACtB,EAAE,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;EACvB,EAAE,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;EACvB,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EAC3D,IAAI,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AAC5B;EACA,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC7B,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAClB,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAClB;EACA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC7B,GAAG,CAAC,CAAC;EACL,EAAE,OAAO;EACT,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,KAAK,EAAE,IAAI,GAAG,IAAI;EACtB,IAAI,MAAM,EAAE,IAAI,GAAG,IAAI;EACvB,GAAG,CAAC;EACJ,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;EACjC,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACrC,EAAE,IAAI,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACjG,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,EAAE,OAAO,CAAC,IAAI,CAAC;EACf,IAAI,IAAI,EAAE,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG;EAClC,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,GAAG,CAAC,CAAC;EACL,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC1E,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC1E,IAAI,OAAO,CAAC,IAAI,CAAC;EACjB,MAAM,IAAI,EAAE,GAAG;EACf,MAAM,MAAM,EAAE;EACd,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;EAC9C,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;EAC9C,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;EAChD,KAAK,CAAC,CAAC;EACP,GAAG;EACH,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;EACpC,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EACzC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACpE,GAAG;EACH,EAAE,OAAO,OAAO,CAAC;EACjB,CAAC;AACD;EACA,SAAS,SAAS,CAAC,YAAY,EAAE;EACjC,EAAE,OAAO,YAAY,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACzC,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AAC5B;EACA,IAAI;EACJ,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACrC,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACpB,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB;EACA,MAAM,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE;EAC3B,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EAChB,IAAI;EACJ,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACd,CAAC;AACD;EACA,SAAS,cAAc,CAAC,WAAW,EAAE;EACrC,EAAE,IAAI,KAAK,CAAC;AACZ;EACA,EAAE,IAAI,QAAQ,GAAG,EAAE,CAAC;EACpB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;EACZ,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE;EACjC,IAAI,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;EAC7B,IAAI,IAAI,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;EACjC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;EACtB,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;EAC5B,QAAQ,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACxF,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAC3C,OAAO;EACP,MAAM,IAAI,CAAC,EAAE;EACb,QAAQ,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;EACxC,QAAQ,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxC,OAAO;EACP,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACzB,MAAM,CAAC,EAAE,CAAC;EACV,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,EAAE;EAC7C,QAAQ,IAAI,cAAc,GAAG;EAC7B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM;EACvB,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/C,SAAS,CAAC;EACV,QAAQ,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;EAC9D,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,UAAU,GAAG,EAAE;EAC5D,YAAY,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC1B,YAAY,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1B;EACA,YAAY,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;EACpC,SAAS,CAAC;EACV,SAAS,CAAC;EACV,OAAO;EACP,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/B,KAAK;EACL,GAAG;EACH,EAAE,IAAI,YAAY,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK;EAC9C,IAAI,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACvC,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EAC1B,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC9B,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EAC1B,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AAC1B;EACA,MAAM;EACN,MAAM,IAAI,KAAK,GAAG;EAClB,UAAU,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;EACjC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;EACxC,MAAM;EACN,GAAG,CAAC;EACJ,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;EAClG,CAAC;AACD;EACA,IAAI,KAAK,GAAG;EACZ,EAAE,IAAI,EAAE,MAAM;EACd,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO;EACzD,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;EACzD,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACrE;EACA,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;EACvC,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC;AACxB;EACA,EAAE,KAAK,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;EACzC,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;EACvB,EAAE,IAAI,KAAK,KAAK,SAAS,EAAE;EAC3B,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE;EACtC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;EAClG,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,MAAM,EAAE;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EACnD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EACnD,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;EACnD,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EACpE,QAAQ,IAAI,CAAC;EACb,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE;EACvC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;EAC5B,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;EAC3D,KAAK;EACL,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;EAC5B,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACpG,KAAK;EACL,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,MAAM,EAAE;EACtB,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;EAChC,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EAC5B,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;EAChC,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1B,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;EACxG,KAAK;EACL,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACzB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACzB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACzB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACzB,MAAM,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;EAC9H,KAAK;EACL,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;EACtC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;EAC/B,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,MAAM,EAAE;EACtB,IAAI,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;EAC1C,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,MAAM,EAAE;EACtB,IAAI,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;EAC1C,GAAG;EACH,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;EACzB,IAAI,SAAS,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE;EACrE,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,OAAO,EAAE;EACvB,IAAI,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;EAC1D,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,IAAI,EAAE;EACpB,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;EAC1B,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,IAAI,EAAE;EACpB,IAAI,OAAO;EACX,MAAM,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;EAC7B,UAAU,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE;EAC/D,UAAU,KAAK,GAAG,CAAC;EACnB,KAAK,CAAC;EACN,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,GAAG,EAAE;EACnB,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;EACxB,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EAC5B,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1B,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;EAC/D,IAAI,IAAI,WAAW,GAAG,EAAE,CAAC;EACzB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC9B,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;EAC9D,QAAQ,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;EACvD,OAAO;EACP,KAAK,CAAC,CAAC;EACP,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;EACzE,GAAG;EACH,EAAE,SAAS,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE;EACnD,CAAC;AACD;EACA,IAAI,IAAI,GAAG;EACX,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACf,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACf,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClB;EACA,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/E;EACA,SAAS,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE;EACnC,EAAE,OAAO;EACT,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW;EAC/C,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG;EACzB,IAAI,SAAS,EAAE,EAAE;EACjB,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAS,WAAW,CAAC,GAAG,EAAE;EAC1B,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AACpB;EACA,EAAE,IAAI,SAAS,CAAC;EAChB,EAAE,IAAI,GAAG,CAAC;EACV,EAAE,IAAI,GAAG,CAAC;EACV,EAAE,IAAI,IAAI,CAAC;EACX,EAAE,IAAI,IAAI,CAAC;EACX,EAAE,IAAI,IAAI,CAAC;EACX,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;EACxC,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1B,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1B,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;EAChC,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;EACzB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EAClD,KAAK;EACL,IAAI,IAAI,QAAQ,GAAG;EACnB,MAAM,GAAG,EAAE,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;EACzE,MAAM,IAAI,EAAE,IAAI;EAChB,MAAM,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI;EAC9D,KAAK,CAAC;EACN,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;EAChD,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;EAC9D,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;EAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;EAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;EAC/C,MAAM,IAAI,GAAG,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;EAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;EAC/C,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACtC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;EAC5C,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;EAC9B,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;EAC5C,QAAQ,IAAI,WAAW,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EACrH,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE;EACzB,UAAU,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;EAChD,UAAU,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;EAC7C,SAAS,MAAM;EACf,UAAU,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;EAC5C,SAAS;EACT,OAAO;EACP,KAAK;EACL,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;EAC3B,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;EAC7B,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACzB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;EAChE,KAAK;EACL,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE;EAC3C,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;EACnE,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;EAC3E;EACA,QAAQ,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;EACnC,OAAO,MAAM;EACb,QAAQ,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;EACvC,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB;EACA,EAAE,OAAO,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EACtF,CAAC;AACD;EACA,SAAS,gBAAgB,CAAC,GAAG,EAAE;EAC/B,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;AAChC;EACA,EAAE,IAAI,QAAQ,GAAG,QAAQ,CAAC;EAC1B,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE;EAC9B,MAAM,SAAS;EACf,KAAK;EACL,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;EAC5B,MAAM,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;EAC5B,KAAK;EACL,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;EACtC,IAAI,IAAI,YAAY,GAAG,WAAW,CAAC;EACnC,MAAM,MAAM,EAAE,MAAM;EACpB,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK;EACrB,MAAM,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM;EAC7B,MAAM,KAAK,EAAE,GAAG,CAAC,KAAK;EACtB,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG;EAClB,KAAK,CAAC,CAAC;EACP,IAAI,IAAI,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC;EAC5D,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;EAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;EACxB,MAAM,KAAK,EAAE,GAAG,CAAC,KAAK;EACtB,MAAM,KAAK,EAAE,GAAG,CAAC,KAAK;EACtB,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG;EAClB;EACA,MAAM,MAAM,EAAE;EACd,QAAQ,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;EACxC,QAAQ,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;EACzC,QAAQ,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;EAC5C,OAAO;EACP,MAAM,MAAM,EAAE,GAAG,CAAC,MAAM;EACxB,KAAK,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;EAChD,GAAG;EACH,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;EACjD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC;EACnC,GAAG;EACH,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EACtF,CAAC;AACD;EACA;EACA;EACA,IAAI,aAAa,GAAG;EACpB,EAAE,IAAI,EAAE,SAAS;EACjB,EAAE,QAAQ,EAAE,OAAO;EACnB,EAAE,QAAQ,EAAE,IAAI;EAChB,EAAE,aAAa,EAAE,aAAa;EAC9B,EAAE,eAAe,EAAE,aAAa;EAChC,EAAE,aAAa,EAAE,aAAa;EAC9B,EAAE,UAAU,EAAE,aAAa;EAC3B,EAAE,IAAI,EAAE,GAAG;EACX,EAAE,MAAM,EAAE,GAAG;EACb,EAAE,SAAS,EAAE,GAAG;EAChB,EAAE,SAAS,EAAE,GAAG;EAChB,EAAE,MAAM,EAAE,KAAK;EACf,EAAE,MAAM,EAAE,KAAK;EACf,EAAE,OAAO,EAAE,GAAG;EACd,EAAE,KAAK,EAAE,GAAG;EACZ,EAAE,WAAW,EAAE,GAAG;EAClB,EAAE,OAAO,EAAE,GAAG;EACd,EAAE,MAAM,EAAE,GAAG;EACb,EAAE,SAAS,EAAE,GAAG;EAChB,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,QAAQ,EAAE,GAAG;EACf,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA,SAAS,eAAe,CAAC,KAAK,EAAE;EAChC,EAAE,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;EAC5C,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;EAC9D,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EACnB,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EACnB,IAAI,OAAO,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;EAC1B,GAAG;EACH,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;EAChC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;EAC1B,IAAI,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC;EAC1B,IAAI,IAAI,GAAG,GAAG,UAAU,CAAC;EACzB,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE;EACnB,MAAM,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EAC9B,KAAK;EACL,IAAI,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;EAC5C,QAAQ,CAAC,UAAU,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;EAClF,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACrD,GAAG;EACH,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EAC1B,CAAC;AACD;EACA,SAAS,aAAa,CAAC,GAAG,EAAE;EAC5B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;AACtC;EACA,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,MAAM,GAAG;EACf,IAAI,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACpG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;EACjB,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC9C,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EAC9B,OAAO;EACP,MAAM,OAAO,CAAC,CAAC;EACf,KAAK,CAAC,EAAE,CAAC;EACT,EAAE,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG;EAC5B,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACtB;EACA,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;EACvC,MAAM,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;EACzB,KAAK;EACL,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC1C,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;EACvE,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EACpB,OAAO;EACP,KAAK,CAAC,CAAC;EACP,IAAI,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;EACjD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;EACnD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;EACjD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;EAC9C,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,GAAG,GAAG;EACd,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ;EACpB,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ;EACpB,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;EACzB,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;EAC3B,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;EAC9B,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;EAC9B,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM;EACpB,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM;EACpB,MAAM,GAAG,EAAE,CAAC,CAAC,OAAO;EACpB,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK;EAClB,MAAM,KAAK,EAAE,CAAC,CAAC,OAAO;EACtB,MAAM,KAAK,EAAE,CAAC,CAAC,OAAO;EACtB,MAAM,KAAK,EAAE,CAAC,CAAC,MAAM;EACrB,MAAM,KAAK,EAAE,CAAC,CAAC,MAAM;EACrB,MAAM,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC;EAChE,KAAK,CAAC;EACN,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;EAC5C,GAAG,CAAC;AACJ;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAAS,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE;EAChC,EAAE,KAAK,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AACzC;EACA,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;EACzB,EAAE,IAAI,MAAM,GAAG,aAAa,CAAC;EAC7B,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI;EACnB,IAAI,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;EAC5B,IAAI,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;EAC9B,IAAI,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;EAC5C,GAAG,CAAC,CAAC;EACL,EAAE,OAAO;EACT,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI;EACnB,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI;EACzC,IAAI,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI;EAC1C,IAAI,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ;EAChD,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,SAAS,EAAE,gBAAgB,CAAC;EAChC,MAAM,MAAM,EAAE,MAAM;EACpB,MAAM,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;EACrC,KAAK,CAAC;EACN,GAAG,CAAC;EACJ,CAAC;AACD;EACA,IAAI,GAAG;EACP,EAAE,MAAM,CAAC,qBAAqB;EAC9B,KAAK,MAAM,CAAC,wBAAwB;EACpC,KAAK,MAAM,CAAC,2BAA2B;EACvC,MAAM,UAAU,EAAE,EAAE,EAAE,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;EACvD,CAAC,CAAC;AACF;EACA,IAAI,GAAG;EACP,EAAE,MAAM,CAAC,oBAAoB;EAC7B,KAAK,MAAM,CAAC,uBAAuB;EACnC,KAAK,MAAM,CAAC,0BAA0B;EACtC,KAAK,YAAY;EACjB,CAAC,CAAC;AACF;EACA,SAAS,UAAU,CAAC,CAAC,EAAE;EACvB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;EAC9C,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;EACpC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,QAAQ,OAAO,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE;EAC3D,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;EAC9E,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;EACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;EAC5C,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC1B,GAAG,CAAC,CAAC;EACL,CAAC;AACD;EACA,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;EAClC,EAAE,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;AACrC;EACA,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;EACzE,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACzC,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,IAAI,GAAG,CAAC,cAAc;EACtB,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,8BAA8B,GAAG,IAAI;EACtE,MAAM,IAAI,CAAC,CAAC,CAAC;EACb,MAAM,IAAI,CAAC,CAAC,CAAC;EACb,KAAK,CAAC;EACN,GAAG;EACH,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC1B,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;EAC3E,EAAE,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;EACnC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,KAAK,EAAE,EAAE,OAAO,UAAU,CAAC,EAAE;EACxD,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,KAAK,EAAE,EAAE,OAAO,OAAO,CAAC,EAAE;EAClD,EAAE,OAAO,EAAE,CAAC;EACZ,CAAC;AACD;EACA,IAAI,MAAM,GAAG;EACb,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC;EACnC,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC;EACnC,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC;EACjC,CAAC,CAAC;AACF;EACA,SAAS,YAAY,CAAC,SAAS,EAAE;EACjC,EAAE,IAAI,QAAQ,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC;EAC5E,EAAE,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC;EAC1D,CAAC;AACD;EACA,IAAI,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;EAC5F,IAAI,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACxE;EACA,SAAS,cAAc,CAAC,IAAI,EAAE;EAC9B,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;EAClC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;EACnC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;EACb,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;EAC1B,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,EAAE,IAAI,EAAE,CAAC;EACb,IAAI,EAAE,IAAI,EAAE,CAAC;EACb,IAAI,EAAE,IAAI,EAAE,CAAC;EACb,IAAI,EAAE,IAAI,EAAE,CAAC;EACb,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;EACpG,GAAG;EACH,EAAE,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;EAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACrD,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EAC1B,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AAC9B;EACA,MAAM;EACN,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACvC,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACtB;EACA,QAAQ,QAAQ,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;EAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EAClB,MAAM;EACN,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EAChB,GAAG;EACH,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;EAC1C,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;EACpB,IAAI,CAAC,IAAI,SAAS,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC;EACjF,GAAG;EACH,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;EAC7B,EAAE,IAAI,SAAS,GAAG,WAAW,CAAC,UAAU,EAAE;EAC1C,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;EACd,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;EAC9C,EAAE,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE;EAC5C,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;EACZ,IAAI,CAAC,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,GAAG,EAAE;EAC3C,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;EACtC,EAAE,OAAO;EACT,IAAI,SAAS,EAAE,SAAS;EACxB,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;EAChE,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAS,WAAW,CAAC,QAAQ,EAAE;EAC/B,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;EACtB,IAAI,OAAO;EACX,GAAG;EACH,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EAC5C,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;EACnD,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EACnC,EAAE,KAAK,CAAC,SAAS,GAAG,2BAA2B,CAAC;EAChD,EAAE,IAAI,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;EACrD,EAAE,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;EAC5B,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;EAChC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;EACtC,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;EAChC,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;EAC1D,CAAC;AACD;EACA,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EACjD,YAAY,CAAC,SAAS,GAAG,mBAAmB,CAAC;EAC7C,YAAY,CAAC,WAAW,GAAG,GAAG,CAAC;AAC/B;EACA,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChC;EACA,SAAS,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE;EACjC,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;EAC1B,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;EACnB,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,+BAA+B,GAAG,EAAE,GAAG,mBAAmB,GAAG,EAAE,GAAG,WAAW,CAAC;EAC/G,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,YAAY,CAAC;EACrD,GAAG;EACH,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;EACpB,CAAC;AACD;EACA,SAAS,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE;EACzC,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;EACzC,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;EACzC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC;EACjC,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;EACrC,EAAE,IAAI,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;EACpD,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,gBAAgB,EAAE;EACpD,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC;EAC1C,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;EAC3B,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3B,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE;EAC7C,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EAChD,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;EACzB,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACjD,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;EACtB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;EAChB,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;EACnB,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3B,EAAE,IAAI,SAAS,EAAE;EACjB,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,EAAE;EACpD,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE;EACnE,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC;EAC5B,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC;EAC7B,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;EAC5B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,gBAAgB,EAAE;EACtD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC;EAC5B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;EACnB,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;EAC9B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACnD,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;EACzB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;EACrB,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC;EAC9B,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EAChC,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE;EAC/C,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EAClD,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACnD,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;EACxB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;EAClB,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;EACxB,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/B,GAAG;EACH,EAAE,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE;EAC5C,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE;EAChD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC/B,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC/B,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,eAAe,CAAC;EACjD,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;EAC5B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,gBAAgB,EAAE;EACtD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC;EAC5B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;EACnB,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;EAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE;EACnB,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE;EAClD,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EACjC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EACjC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;EAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACrD,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;EAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;EACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;EACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EAClC,KAAK;EACL,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE;EAC/C,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EAClD,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACnD,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;EACxB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;EAClB,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;EAC7C,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/B,GAAG;EACH,EAAE,IAAI,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;EAC1C,EAAE,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE;EAC5C,IAAI,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,GAAG;EACH,EAAE,IAAI,SAAS,EAAE;EACjB,IAAI,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,GAAG;EACH,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EACnE,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EAC9B,EAAE,OAAO,OAAO,CAAC;EACjB,CAAC;AACD;EACA,SAAS,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE;EACrC,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;EACf,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EACvC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC7B,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC7B,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EACvC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC7B,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC7B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;EACrC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,MAAM,CAAC,EAAE;EAC9C,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;EAChB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EAClC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EACpC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;EACrC,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;EACvC,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE;EACxB,cAAc,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;EACrF,aAAa;EACb,WAAW;EACX,SAAS;EACT,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;EACjF,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;EAChB,IAAI,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EAC9B,IAAI,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EAC9B,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EACtB,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EACtB,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;EAChE,MAAM,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;EAClE,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;EACvF,OAAO;EACP,KAAK;EACL,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;EAC/F,GAAG;EACH,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;EACpB,CAAC;AACD;EACA,SAAS,eAAe,CAAC,GAAG,EAAE;EAC9B,EAAE,OAAO;EACT;EACA,IAAI,oBAAoB;EACxB,KAAK,UAAU,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM;EACzC,KAAK,UAAU,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM;EACzC,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM;EAC1C,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG;EACzG,KAAK,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC9E,CAAC;AACD;EACA,SAAS,kBAAkB,CAAC,QAAQ,EAAE;EACtC,EAAE,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;EACrC,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC3B,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,IAAI,CAAC,GAAG,EAAE;EACZ,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACzB,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;EAC3C,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE;EACvD,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE;EACnD,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE;EAC/C,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE;EACrE,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;EACtC,GAAG;EACH,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EACxD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAClC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM,EAAE;EAC3C;EACA,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;EAC5C,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;EAC3C,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,mBAAmB,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;EACjG,KAAK;EACL,GAAG;EACH,CAAC;AACD;EACA,SAAS,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE;EACvC,EAAE,QAAQ,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE;EAChF,CAAC;AACD;EACA,IAAI,iBAAiB,GAAG,SAAS,iBAAiB,GAAG;EACrD,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;EAChB,CAAC,CAAC;AACF;EACA,iBAAiB,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;EACtE,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;EACrD,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;EAClC,CAAC,CAAC;AACF;EACA,iBAAiB,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE;EACvD,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;EAChC,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AACpB;EACA,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EACjC,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE;EACrB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;EACrE,GAAG;EACH,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE;EACrB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;EACnE,GAAG;EACH,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;EACjC,CAAC,CAAC;AACF;EACA,iBAAiB,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,IAAI;EAC5D,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC;AACtB;EACA,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;EAC9B,KAAK,GAAG,CAAC,UAAU,OAAO,EAAE,EAAE;EAC9B,OAAO,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;EACxD,WAAW,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC;EACxH,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;EAC1B,MAAM,EAAE,CAAC;EACT,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;EACd,CAAC,CAAC;AACF;EACA;EACA,SAAS,MAAM,CAAC,EAAE,EAAE;EACpB,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,UAAU,OAAO,EAAE,CAAC,EAAE;EAC9C,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC;EACvB,IAAI,OAAO,OAAO;EAClB,OAAO,GAAG,CAAC,UAAU,CAAC,EAAE;EACxB,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;EACvE,QAAQ,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;EAC9E,OAAO,CAAC;EACR,OAAO,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;EAC/B,GAAG,EAAE,EAAE,CAAC,CAAC;EACT,CAAC;AACD;EACA,SAAS,YAAY,GAAG;EACxB,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC;AACpB;EACA,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC;EACrB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EAC7C,IAAI,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC/B,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EAC3B,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EACjC,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC7B,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC7B,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EACjC,IAAI,IAAI,QAAQ,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC;EACxC,IAAI,IAAI,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;EACzC;EACA,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE;EACzB,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;EAC7B,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;EAC/B,MAAM,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;EAC3C,MAAM,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;EACzB,MAAM,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;EACzD,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;EAC7B,QAAQ,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC5E,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;EAC3D,QAAQ,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,aAAa,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;EAC1E,OAAO;EACP,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAChC,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EAC9C,QAAQ,IAAI,KAAK,GAAG,aAAa,IAAI,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;EACzE,QAAQ,IAAI,GAAG,GAAG,aAAa,IAAI,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;EACvE,QAAQ,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;EACtD,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;EACjD,QAAQ,IAAI,EAAE,GAAG,GAAG,EAAE;EACtB,UAAU,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC;EAChE,SAAS;EACT,QAAQ,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;EACjD,OAAO;EACP,KAAK;EACL,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACvB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACvB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACvB,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAC;EACnC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAC/C,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EAC/E,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACtB;EACA,QAAQ;EACR,SAAS,YAAY,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;EACpG,QAAQ;EACR,OAAO,CAAC,CAAC;EACT,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC7G,KAAK;EACL,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;EAC/B,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EAC3B,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EAC3B,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;EAC3C,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE;EAC7B,UAAU,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;EACjF,UAAU,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,EAAE;EACtC,YAAY,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,IAAI,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;EAChG,WAAW;EACX,UAAU,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;EAC/C,SAAS,MAAM;EACf,UAAU,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC;EAC7D,SAAS;EACT,OAAO,MAAM;EACb,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EAC3B,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EAC3B,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;EACpH,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EAC9E,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACrD,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;EACjF,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;EACjF,QAAQ,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;EAC/E,QAAQ,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;EAC/E,QAAQ,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACvD,OAAO;EACP,KAAK;EACL,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;EACpC,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/D,MAAM,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;EACtE,KAAK;EACL,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;EACpC,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EAClD,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;EACvD,UAAU,OAAO;EACjB,SAAS;EACT,QAAQ,IAAI,GAAG,GAAG,IAAI,iBAAiB,EAAE,CAAC;EAC1C,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;EAC1D;EACA,QAAQ,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EACtD,UAAU,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EAC1B,UAAU,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EAC1B,UAAU,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAC5B;EACA,UAAU,IAAI,GAAG,CAAC,EAAE,EAAE;EACtB,YAAY,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;EACvF,YAAY,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;EACjF,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EACpG,WAAW;EACX,UAAU,IAAI,GAAG,CAAC,GAAG,EAAE;EACvB,YAAY,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;EAC7D,YAAY,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC;EACvD,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EAC7G,WAAW;EACX,UAAU,IAAI,QAAQ;EACtB,YAAY,GAAG,CAAC,EAAE,KAAK,SAAS;EAChC,eAAe,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE;EAChC,eAAe,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE;EAChC,eAAe,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE;EAChC,WAAW,CAAC;EACZ,UAAU,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;EAC/C,YAAY,IAAI,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;EAC7D,YAAY,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;EACnF,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EACpG,WAAW;EACX,UAAU,IAAI,QAAQ,EAAE;EACxB,YAAY,IAAI,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EAC5D,YAAY,IAAI,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EACtD,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EACtG,WAAW;EACX,UAAU,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;EACzD,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS;EAChC,eAAe,GAAG,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3D,YAAY,EAAE,CAAC,CAAC;EAChB,UAAU,IAAI,SAAS,EAAE;EACzB,YAAY,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;EAC1F,YAAY,IAAI,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACzD,YAAY,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;EACxE,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EAC1G,WAAW;EACX,UAAU,IAAI,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;EAC/D,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS;EAChC,eAAe,GAAG,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3D,YAAY,EAAE,CAAC,CAAC;EAChB,UAAU,IAAI,YAAY,EAAE;EAC5B,YAAY,IAAI,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;EACjD,YAAY,IAAI,QAAQ,CAAC,OAAO,EAAE;EAClC;EACA,cAAc,MAAM,CAAC,KAAK,EAAE;EAC5B,gBAAgB,CAAC,EAAE,CAAC;EACpB,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,GAAG;EACvE,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,GAAG;EACvE,eAAe,CAAC,CAAC;EACjB,cAAc,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EACxD,aAAa;EACb,YAAY,IAAI,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;EAClD,YAAY,IAAI,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;EAC9C,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EACxG,WAAW;EACX,SAAS,CAAC,CAAC;EACX,QAAQ,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;EAClC,QAAQ,MAAM,CAAC,QAAQ,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EACjE,QAAQ,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;EACrE,OAAO,CAAC,CAAC;EACT,KAAK,CAAC,CAAC;EACP,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,SAAS,CAAC;EACnB,CAAC;AACD;EACA,SAAS,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;EAChD,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;EAC5B,EAAE;EACF,IAAI,EAAE,GAAG,iBAAiB,GAAG,IAAI,GAAG,GAAG;EACvC,MAAM,EAAE,GAAG,qBAAqB,GAAG,QAAQ,GAAG,IAAI;EAClD,MAAM,EAAE,GAAG,kBAAkB,GAAG,KAAK,GAAG,IAAI;EAC5C,MAAM,EAAE,GAAG,mCAAmC;EAC9C,MAAM,EAAE,GAAG,8BAA8B;EACzC,MAAM,EAAE,GAAG,+BAA+B;EAC1C,IAAI;EACJ,CAAC;AACD;EACA,SAAS,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE;EAC3C,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;EAC/C,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;EAC7B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAClD,EAAE,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC;EAC3D,EAAE,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC;EAC3D,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;EACrC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;EAChE,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;EAChE,EAAE,IAAI,GAAG,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;EAC5E,EAAE,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;EAC7E,EAAE,IAAI,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE;EAChC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;EAClB,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;EACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;EACpE,EAAE,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;EAClF,EAAE,IAAI,QAAQ,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;EACnC,EAAE,IAAI,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;EAClC,EAAE,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;EACjE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC1B,EAAE,IAAI,QAAQ,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;EACnC,EAAE,IAAI,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE;EACtC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;EACpB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;EACrE,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACxE,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;EAC5B,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE;EACtC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;EAC7B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;EAC/B,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,QAAQ,EAAE;EACpC,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;EAC/C,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;EACpB,IAAI,oBAAoB;EACxB,MAAM,OAAO,IAAI,IAAI,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK;EAC7C,MAAM,MAAM,IAAI,IAAI,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK;EAC5C,GAAG,CAAC;EACJ,EAAE,OAAO;EACT,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,OAAO,GAAG,0BAA0B,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,YAAY,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;EACvG,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAS,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE;EAC7B,EAAE,OAAO,IAAI;EACb,KAAK,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;EAC1B,KAAK,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;EAC1B,KAAK,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;EAC7B,KAAK,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;EAC9B,KAAK,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;EAC5B,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;EAClD,CAAC;AACD;EACA,SAAS,cAAc,CAAC,QAAQ,EAAE;EAClC,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC;AACpB;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;EAClC,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;EAC7C,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;EAClC,IAAI,IAAI,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;EACxC,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EAChD,MAAM,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC/B,MAAM,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;EACrC,MAAM,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;EACjD,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;EACpD,MAAM,IAAI,OAAO,GAAG,uBAAuB,CAAC;EAC5C,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;EACzC,MAAM,IAAI,CAAC,OAAO,EAAE;EACpB,QAAQ,OAAO,IAAI,gBAAgB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC7D,QAAQ,OAAO,IAAI,YAAY,IAAI,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;EAC3F,QAAQ,OAAO,IAAI,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;EAClE,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;EACtF,QAAQ,IAAI,WAAW,KAAK,CAAC,EAAE;EAC/B,UAAU,OAAO,IAAI,cAAc,IAAI,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1E,SAAS;EACT,QAAQ,IAAI,WAAW,KAAK,CAAC,EAAE;EAC/B,UAAU,OAAO;EACjB,YAAY,mBAAmB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;EACrE,cAAc,aAAa,IAAI,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG;EACjE,WAAW,CAAC;EACZ,SAAS;EACT,QAAQ,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,cAAc,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;EACxF,QAAQ,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,oBAAoB,GAAG,EAAE,CAAC;EACrD,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,kBAAkB,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;EACzI,QAAQ,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,iBAAiB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;EAC1E;EACA;EACA,QAAQ,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;EACvD,UAAU,OAAO,IAAI,0CAA0C,CAAC;EAChE,SAAS;EACT,QAAQ,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;EACzB,UAAU,OAAO,IAAI,uCAAuC,CAAC;EAC7D,SAAS;EACT,OAAO;EACP,MAAM,IAAI,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;EAC3D,QAAQ,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EACvD,QAAQ,EAAE,CAAC,CAAC;EACZ,MAAM,IAAI,YAAY,EAAE;EACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,YAAY,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;EACpF,QAAQ,IAAI,CAAC,OAAO,EAAE;EACtB,UAAU,OAAO,IAAI,mEAAmE,CAAC;EACzF,SAAS;EACT,OAAO;EACP,MAAM,IAAI,aAAa,EAAE;EACzB,QAAQ,OAAO,IAAI,eAAe,CAAC,aAAa,EAAE,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EACzF,OAAO;EACP,MAAM,IAAI,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE;EAC9B,QAAQ,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;EACpE,QAAQ,OAAO,IAAI,iBAAiB,GAAG,GAAG,GAAG,KAAK,CAAC;EACnD,OAAO;AACP;EACA,MAAM,IAAI,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;EACjE,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG,EAAE;EACzE,QAAQ,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;EACnD,QAAQ,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;EAC5C,QAAQ,IAAI,OAAO,EAAE;EACrB,UAAU,IAAI,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;EACpE,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;EAC5C,UAAU,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EACtC,SAAS,MAAM;EACf,UAAU,IAAI,GAAG,EAAE;EACnB,YAAY,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;EACzD,WAAW;EACX,UAAU,IAAI,CAAC,IAAI,EAAE;EACrB,YAAY,OAAO;EACnB,WAAW;EACX,UAAU,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;EACjC,SAAS;EACT;EACA,QAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC;EACvC,QAAQ,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC9B,OAAO,CAAC,CAAC;EACT,KAAK,CAAC,CAAC;EACP,GAAG,CAAC,CAAC;EACL,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;EACvB,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,QAAQ,CAAC,QAAQ,EAAE;EAC5B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;EACrC,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;EAChF,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;EAChC,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;EAClD,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;EACzC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;EAC/C,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;EAC5F,IAAI,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;EAC9F,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;EAC7F,GAAG,CAAC;EACJ,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACpC,EAAE,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;EACzD,EAAE,IAAI,WAAW,GAAG,UAAU,CAAC,EAAE;EACjC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACrC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAClC,IAAI;EACJ,MAAM,CAAC,KAAK,KAAK,MAAM;EACvB,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE;EACvB,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,UAAU,CAAC;EAC1D,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,GAAG,UAAU,CAAC;EACtD,OAAO;EACP,UAAU,KAAK,KAAK,QAAQ;EAC5B,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,UAAU;EACtD,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC;EAC3B,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,UAAU,CAAC;EAC1D,OAAO,CAAC;EACR,UAAU,KAAK,KAAK,OAAO;EAC3B,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,UAAU;EAClD,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,UAAU,CAAC;EAC1D,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC;EAC3B,OAAO,CAAC;EACR,MAAM;EACN,GAAG,CAAC;EACJ,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;EACjB,EAAE,IAAI,IAAI,GAAG,UAAU,CAAC,EAAE;EAC1B,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;EAC3C,IAAI,IAAI,KAAK,IAAI,MAAM,EAAE;EACzB,MAAM,MAAM,GAAG,CAAC,CAAC;EACjB,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG,CAAC;EACJ,EAAE,IAAI,SAAS,IAAI,CAAC,EAAE;EACtB,IAAI,KAAK,IAAI,CAAC,GAAG,WAAW,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;EAChE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE;EAC7B,KAAK;EACL,GAAG,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE;EAC7B,IAAI,KAAK,IAAI,GAAG,GAAG,QAAQ,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE;EACtE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE;EAC/B,KAAK;EACL,GAAG,MAAM;EACT,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,WAAW,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,GAAG,WAAW,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE;EACrF,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE;EAC/B,KAAK;EACL,GAAG;EACH,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE;EACrB,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC;EACzB,GAAG;EACH,EAAE,KAAK,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE;EACvD,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EACtC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;EACxC,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAAS,WAAW,CAAC,QAAQ,EAAE;EAC/B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC3B,EAAE,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;EACrC,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;EACZ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;EACZ,EAAE,IAAI,MAAM,EAAE;EACd,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;EAClC,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;EACzE,MAAM,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE;EAC/E,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;EAClD,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;EACnD,KAAK;EACL,GAAG,MAAM,IAAI,QAAQ,CAAC,GAAG,IAAI,IAAI,EAAE;EACnC,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAC7C,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;EACxD,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE;EACpE,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE;EAChE,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE;EAC5D,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE;EAClF,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;EACnD,GAAG,MAAM;EACT,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;EACvC,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE;EAC9D,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE;EACpF,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;EAC9C,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE;EAC1C,QAAQ,IAAI,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;AAC9C;EACA,QAAQ,OAAO,aAAa,CAAC;EAC7B,OAAO,CAAC;EACR,MAAM,EAAE,CAAC,CAAC;EACV,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;EACzE,MAAM,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE;EAC/E,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;EAClD,KAAK,MAAM;EACX,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EACxC,KAAK;EACL,GAAG;EACH,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACxB,CAAC;AACD;EACA,SAAS,WAAW,CAAC,QAAQ,EAAE;EAC/B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;EACrC,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;EAC7C,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;EACnC,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,IAAI,KAAK,EAAE,EAAE,OAAO,IAAI,UAAU,GAAG,KAAK,GAAG,GAAG,CAAC,EAAE;EACrD,EAAE,IAAI,aAAa,EAAE;EACrB,IAAI,OAAO,IAAI,eAAe,CAAC,aAAa,EAAE,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EACrF,GAAG;EACH,EAAE,OAAO,IAAI,aAAa,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAChF,EAAE,IAAI,CAAC,MAAM,EAAE;EACf,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;EACpE,IAAI,OAAO,IAAI,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC;EACzC,IAAI,IAAI,CAAC,GAAG,EAAE;EACd,MAAM,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE;EAC/B,QAAQ,OAAO,IAAI,cAAc,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;EACvE,OAAO;EACP,MAAM,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE;EAC/B,QAAQ,OAAO,IAAI,eAAe,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;EACzE,OAAO;EACP,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE;EAC1E,QAAQ,OAAO,IAAI,cAAc,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;EACvE,QAAQ,OAAO,IAAI,eAAe,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;EACzE,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,OAAO,IAAI,QAAQ,GAAG,KAAK,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC;EAC/F,EAAE,OAAO,OAAO,CAAC;EACjB,CAAC;AACD;EACA,SAAS,QAAQ,CAAC,QAAQ,EAAE;EAC5B,EAAE,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EACjD,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;EACnC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EAClC,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;EACzC,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;EACrD,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;EACrD,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EACxD,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;EAC/B,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EACnC,EAAE,OAAO,QAAQ,CAAC;EAClB,CAAC;AACD;EACA,SAAS,OAAO,GAAG;EACnB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;EACnC,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EACxD,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;EACtB,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;EACtD,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;EAC3B,MAAM,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACtB,MAAM,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACtB,MAAM,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EAC5B,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC;EAChF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;EAChD,KAAK;EACL,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE;EACnB,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EAC1C,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE;EACzB,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EAChD,OAAO;EACP,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACnC,KAAK;EACL,GAAG;EACH,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;EAC5B,EAAE;EACF,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;EAC9B,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK;EACtC,IAAI;EACJ,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;EACtC,MAAM,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;EAC1D,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAClC,KAAK;EACL,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;EACnB,GAAG;EACH,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC;AACpB;EACA,EAAE,IAAI,KAAK,GAAG,YAAY;EAC1B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACzB,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;EACpC,GAAG,CAAC;EACJ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;EACxB,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;EAChC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;EACzD,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,KAAK,GAAG;EACjB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;EACxB,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;EACvB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;EACtD,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,KAAK,GAAG;EACjB,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE;EAClC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EACvD,GAAG;EACH,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE;EACjC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EACrD,GAAG;EACH,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC;EACvB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;EACpB,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;EACnC,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;EAC5B,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACnB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,YAAY;EAC9B,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;EACjB,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7B,IAAI,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;EAC9D,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;EAC9B,KAAK;EACL,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE;EAC5B,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;EACpC,MAAM;EACN,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;EACjD,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;EAC9D,QAAQ;EACR,QAAQ,OAAO,CAAC,CAAC;EACjB,OAAO;EACP,KAAK;EACL,IAAI,OAAO,EAAE,CAAC;EACd,GAAG,GAAG,CAAC;EACP,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACrB,CAAC;AACD;EACA,SAAS,UAAU,GAAG;EACtB,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;EAC1B,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC3B,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC7B,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC9B,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;EAC9C,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;EAChD,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;EACpD,CAAC;AACD;EACA,SAAS,YAAY,GAAG;EACxB,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;EAC1B,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;EACjD,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;EACnD,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;EACvD,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;EAChB,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;EACjB,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;EACnB,CAAC;AACD;EACA,SAAS,MAAM,GAAG;EAClB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;EAClC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;EACnC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;EACvC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;EACxC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;EAClC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;EACnC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;EACd,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;EACd,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;EAC9C,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,EAAE;EACzC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;EACtB,GAAG;EACH,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,EAAE;EAC1C,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;EACtB,GAAG;EACH,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;EAC1C,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,EAAE;EAC1C,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EACxC,GAAG;EACH,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,eAAe,EAAE;EAC3C,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EACxC,GAAG;EACH,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;EAC/B,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;EAChC,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAClD;EACA,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC;EAC3E,EAAE,IAAI,OAAO;EACb,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK;EACnC,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK;EACvC,MAAM,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK;EAC/C,MAAM,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK;EAC/C,GAAG,CAAC;EACJ,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;EACxC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;EACtC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;AACxE;EACA,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACxD,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,IAAI,UAAU,GAAG,mcAAmc,CAAC;AACrd;EACA,SAAS,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;EACtC,EAAE,KAAK,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AACzC;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB;EACA;EACA,EAAE,IAAI,CAAC,CAAC,GAAG;EACX,IAAI,KAAK,EAAE,CAAC;EACZ,IAAI,QAAQ,EAAE,EAAE;EAChB,IAAI,KAAK,EAAE,EAAE;EACb,IAAI,QAAQ,EAAE,EAAE;EAChB,IAAI,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;EAC5B,IAAI,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;EAC9B,IAAI,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACzC,IAAI,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;EAC/C,GAAG,CAAC;EACJ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;EACxC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,gCAAgC,CAAC;AAC7D;EACA,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,cAAc,CAAC;AAC3D;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EACtE,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;EAChD,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAC1C,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAChD;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EACrB,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACxB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE;EAChC,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;EAClC,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;EACzD,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EACtC,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE;EACnC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;EACnB,KAAK;EACL,GAAG;EACH,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5C;EACA,EAAE,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;EAC5B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;EAChC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACnB,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG;EACrB,IAAI,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,UAAU;EACpC,IAAI,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,WAAW;EACvC,GAAG,CAAC;EACJ,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B;EACA,EAAE,IAAI,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC/C,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;EAC5D,EAAE,IAAI,CAAC,MAAM,EAAE;EACf,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EAC7C,IAAI,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;EAC7B,IAAI,MAAM,CAAC,EAAE,GAAG,kBAAkB,CAAC;EACnC,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;EAC5D,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EAClC,GAAG;EACH,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC;EACtC,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,GAAG,eAAe,CAAC;EAChD,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAC3C;EACA,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;EAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACpB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACpB,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;EAC7C,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;EAC5C,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,OAAO,GAAG;EACnB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACnB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACnB,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3C;EACA,EAAE,IAAI,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC/C,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE;EAChC,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;EACpC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;EACvE,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC1D,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;EACrC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;EACxB,KAAK;EACL,GAAG;EACH,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAC3C;EACA;EACA,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;EACxB,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;EACzD,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,IAAI,KAAK,GAAG,iCAAiC,CAAC;AAC9C;EACA,SAAS,MAAM,GAAG;EAClB,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,cAAc,CAAC;EAC5E,CAAC;AACD;EACA,SAAS,MAAM,CAAC,CAAC,EAAE;EACnB,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE;EAC5C,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;EACrB,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;EAC1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;EAClB,GAAG;EACH,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;EAC3B,CAAC;AACD;EACA,IAAI,GAAG,GAAG,SAAS,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;EAC/C,EAAE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;EAClC,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;EACjD,CAAC,CAAC;AACF;EACA,IAAI,kBAAkB,GAAG,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;AAChE;EACA,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,QAAQ,IAAI;EAC5C,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC3B,CAAC,CAAC;AACF;EACA,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,MAAM,IAAI;EACxC,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACzB,CAAC,CAAC;AACF;EACA,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,MAAM,IAAI;EACxC,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACzB,CAAC,CAAC;AACF;EACA,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,SAAS,IAAI;EAC9C,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC5B,CAAC,CAAC;AACF;EACA,kBAAkB,CAAC,UAAU,CAAC,GAAG,GAAG,YAAY;EAChD,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC3B,CAAC,CAAC;AACF;EACA,kBAAkB,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,EAAE;EACjD,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC9B,CAAC,CAAC;AACF;EACA,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE;;EClgE5D,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;EAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;EACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;EACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;EAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;EACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;EAChD,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC9B,KAAK;EACL,GAAG,MAAM;EACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC5B,GAAG;AACH;EACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;EACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;EACnC,GAAG,MAAM;EACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;EACpD,GAAG;EACH;;;;;ECtBA,SAASA,kBAAT,CAA4BC,GAA5B,EAAiC;EAC7B,SAAO,UAACC,GAAD,EAAS;EACZ,QAAIC,GAAG,GAAG,IAAV;EACAC,IAAAA,KAAK,CAACH,GAAD,CAAL,CACKI,IADL,CACU,UAACC,GAAD;EAAA,aAASA,GAAG,CAACC,IAAJ,EAAT;EAAA,KADV,EAEKF,IAFL,CAEU,UAACE,IAAD,EAAU;EAAA,0BACkBL,GAAG,CAACM,QADtB;EAAA,UACJC,MADI,iBACJA,MADI;EAAA,UACIC,SADJ,iBACIA,SADJ;EAEZA,MAAAA,SAAS,CAACC,SAAV,CAAoBC,GAApB,CAAwB,sBAAxB;EAEAV,MAAAA,GAAG,CAACW,IAAJ,CAAS,OAAT,EAAkB,YAAM;EACpBV,QAAAA,GAAG,GAAG,IAAIW,GAAJ,CAAQP,IAAR,EAAcE,MAAd,EAAsB;EACxBM,UAAAA,SAAS,EAAEL,SADa;EAExBM,UAAAA,UAAU,EAAE;EAFY,SAAtB,CAAN;EAKAb,QAAAA,GAAG,CAACc,MAAJ;EACAf,QAAAA,GAAG,CAACgB,IAAJ,CAAS,oBAAT,EAA+Bf,GAA/B;EACAD,QAAAA,GAAG,CAACiB,EAAJ,CAAO,QAAP,EAAiB;EAAA,iBAAMhB,GAAG,CAACc,MAAJ,EAAN;EAAA,SAAjB;EACAf,QAAAA,GAAG,CAACiB,EAAJ,CAAO,SAAP,EAAkB;EAAA,iBAAMhB,GAAG,CAACiB,OAAJ,EAAN;EAAA,SAAlB;EACH,OAVD;EAWH,KAjBL;EAkBA,WAAO;EACHC,MAAAA,IAAI,EAAE,oBADH;EAEHlB,MAAAA,GAAG,EAAHA;EAFG,KAAP;EAIH,GAxBD;EAyBH;;;;;;;;"}
\ No newline at end of file
diff --git a/packages/artplayer-plugin-ass/.npmignore b/packages/artplayer-plugin-ass/.npmignore
new file mode 100644
index 000000000..429145126
--- /dev/null
+++ b/packages/artplayer-plugin-ass/.npmignore
@@ -0,0 +1,9 @@
+node_modules
+.DS_Store
+yarn.lock
+package-lock.json
+test
+coverage
+.nyc_output
+.cache
+docs
\ No newline at end of file
diff --git a/packages/artplayer-plugin-ass/.npmrc b/packages/artplayer-plugin-ass/.npmrc
new file mode 100644
index 000000000..9cf949503
--- /dev/null
+++ b/packages/artplayer-plugin-ass/.npmrc
@@ -0,0 +1 @@
+package-lock=false
\ No newline at end of file
diff --git a/packages/artplayer-plugin-ass/README.md b/packages/artplayer-plugin-ass/README.md
new file mode 100644
index 000000000..dc650a34e
--- /dev/null
+++ b/packages/artplayer-plugin-ass/README.md
@@ -0,0 +1,47 @@
+# artplayer-plugin-ass
+
+Ass plugin for ArtPlayer, use [weizhenye/ASS](https://github.com/weizhenye/ASS) as a dependency
+
+## Demo
+
+[Checkout the demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-ass.js&example=ass) from Github Pages
+
+## Install
+
+Install with `npm`
+
+```bash
+$ npm install artplayer-plugin-ass
+```
+
+Or install with `yarn`
+
+```bash
+$ yarn add artplayer-plugin-ass
+```
+
+```js
+import artplayerPluginAss from 'artplayer-plugin-ass';
+```
+
+Or umd builds are also available
+
+```html
+
+```
+
+Will expose the global variable to `window.artplayerPluginAss`.
+
+## Usage
+
+```js
+var art = new Artplayer({
+ container: '.artplayer-app',
+ url: 'path/to/video.mp4',
+ plugins: [artplayerPluginAss('path/to/subtitle.ass')],
+});
+```
+
+## License
+
+MIT © [Harvey Zack](https://sleepy.im/)
diff --git a/packages/artplayer-plugin-ass/package.json b/packages/artplayer-plugin-ass/package.json
new file mode 100644
index 000000000..5344a54a3
--- /dev/null
+++ b/packages/artplayer-plugin-ass/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "artplayer-plugin-ass",
+ "version": "3.5.24",
+ "expose": "artplayerPluginAss",
+ "description": "Ass plugin for ArtPlayer",
+ "main": "dist/artplayer-plugin-ass.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/zhw2590582/ArtPlayer.git"
+ },
+ "keywords": [
+ "video",
+ "player"
+ ],
+ "author": "Harvey Zack ",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/zhw2590582/ArtPlayer/issues"
+ },
+ "homepage": "https://github.com/zhw2590582/ArtPlayer#readme",
+ "gitHead": "0a3a20568e37f99972eefb01d4b1dcf4036a46db",
+ "dependencies": {
+ "assjs": "^0.0.11"
+ }
+}
diff --git a/packages/artplayer-plugin-ass/src/index.js b/packages/artplayer-plugin-ass/src/index.js
new file mode 100644
index 000000000..ad08f809b
--- /dev/null
+++ b/packages/artplayer-plugin-ass/src/index.js
@@ -0,0 +1,32 @@
+import ASS from 'assjs';
+import './style.scss';
+
+function artplayerPluginAss(url) {
+ return (art) => {
+ let ass = null;
+ fetch(url)
+ .then((res) => res.text())
+ .then((text) => {
+ const { $video, $subtitle } = art.template;
+ $subtitle.classList.add('artplayer-plugin-ass');
+
+ art.once('ready', () => {
+ ass = new ASS(text, $video, {
+ container: $subtitle,
+ resampling: 'video_width',
+ });
+
+ ass.resize();
+ art.emit('artplayerPluginAss', ass);
+ art.on('resize', () => ass.resize());
+ art.on('destroy', () => ass.destroy());
+ });
+ });
+ return {
+ name: 'artplayerPluginAss',
+ ass,
+ };
+ };
+}
+
+export default artplayerPluginAss;
diff --git a/packages/artplayer-plugin-ass/src/style.scss b/packages/artplayer-plugin-ass/src/style.scss
new file mode 100644
index 000000000..4e536f370
--- /dev/null
+++ b/packages/artplayer-plugin-ass/src/style.scss
@@ -0,0 +1,3 @@
+.artplayer-plugin-ass {
+ bottom: 0 !important;
+}
\ No newline at end of file