diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/lexer/PHP5ColoringLexer.java b/php/php.editor/src/org/netbeans/modules/php/editor/lexer/PHP5ColoringLexer.java index b9bb77661ae8..56b02612f704 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/lexer/PHP5ColoringLexer.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/lexer/PHP5ColoringLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 17/07/11 14:07 */ +/* The following code was generated by JFlex 1.4.3 on 18/09/19 21:14 */ /* * Licensed to the Apache Software Foundation (ASF) under one @@ -30,8 +30,8 @@ /** * This class is a scanner generated by * JFlex 1.4.3 - * on 17/07/11 14:07 from the specification file - * /home/junichi11/hg/web-main/php.editor/tools/Php5ColoringScanner.flex + * on 18/09/19 21:14 from the specification file + * /home/junichi11/NetBeansProjects/incubator-netbeans/php/php.editor/tools/Php5ColoringScanner.flex */ public class PHP5ColoringLexer { @@ -186,47 +186,47 @@ public class PHP5ColoringLexer { "\1\14\14\6\1\4\23\5\1\2\1\4\1\15\2\5"+ "\1\4\2\5\1\16\1\17\1\20\1\21\1\22\2\21"+ "\1\20\3\21\3\23\1\24\1\23\4\21\1\2\1\21"+ - "\2\25\3\2\1\0\1\2\2\26\1\2\1\27\1\30"+ - "\1\27\1\31\2\32\1\3\1\33\1\3\1\34\1\33"+ - "\1\35\4\0\4\36\2\37\1\40\1\41\1\42\1\0"+ - "\1\43\1\44\1\0\1\3\2\0\6\5\1\45\2\0"+ - "\4\5\1\0\1\5\1\0\1\46\2\0\1\21\2\0"+ - "\2\6\1\0\1\47\1\50\1\51\1\52\4\5\1\53"+ - "\4\5\1\54\1\5\1\55\33\5\13\0\2\5\1\56"+ - "\1\5\3\0\2\57\2\60\1\61\1\62\1\60\3\0"+ - "\1\57\2\60\1\63\1\64\3\0\1\21\2\0\1\65"+ - "\2\0\1\66\7\0\1\67\2\0\1\70\1\0\1\71"+ - "\2\0\1\72\1\57\1\0\1\73\1\0\1\74\1\75"+ - "\1\36\1\76\1\77\3\0\7\5\2\3\1\100\3\5"+ - "\1\0\1\5\3\0\4\5\1\101\4\5\1\102\3\5"+ - "\1\103\5\5\1\104\13\5\1\105\14\5\1\106\12\0"+ - "\12\5\3\107\1\110\1\0\1\111\1\0\1\112\1\21"+ - "\1\0\1\113\1\0\1\113\1\0\1\114\1\115\1\36"+ - "\2\0\1\116\6\5\1\117\1\120\1\121\6\5\4\0"+ - "\1\122\5\5\1\123\11\5\1\124\2\5\1\125\1\5"+ - "\1\126\3\5\1\127\1\5\1\130\1\131\4\5\1\132"+ - "\10\5\12\0\13\5\1\110\1\0\1\36\1\133\1\0"+ - "\3\5\1\134\3\5\1\135\1\5\1\136\1\137\1\5"+ - "\1\140\2\141\3\0\3\5\1\142\10\5\1\143\1\5"+ - "\1\144\1\145\1\146\6\5\1\147\1\150\1\5\1\151"+ - "\1\152\1\5\1\153\3\5\1\154\10\0\1\155\1\0"+ - "\1\156\1\157\11\5\1\36\1\0\1\5\1\160\3\5"+ - "\1\161\3\5\3\0\1\162\13\5\1\163\1\164\1\165"+ - "\1\166\1\167\4\5\1\170\1\171\5\0\11\5\1\36"+ - "\1\1\1\172\4\5\1\173\1\174\1\5\2\175\1\0"+ - "\1\176\2\5\1\177\1\200\3\5\1\201\5\5\1\202"+ - "\3\0\3\5\1\203\5\5\1\36\1\0\3\5\1\204"+ - "\1\205\1\0\1\5\1\206\5\5\1\207\1\5\1\210"+ - "\1\211\1\5\1\0\1\212\3\5\1\213\3\5\1\36"+ - "\1\0\2\5\1\214\1\42\1\5\1\215\1\216\1\217"+ - "\3\5\1\220\1\0\2\5\1\221\1\222\2\5\1\36"+ - "\1\0\1\223\1\224\1\5\1\225\1\5\1\226\1\227"+ - "\3\5\1\230\1\36\1\0\5\5\1\0\1\231\1\232"+ - "\1\233\2\5\1\0\1\234\1\5\1\0\1\5\1\0"+ - "\1\235\14\0\1\236\1\0"; + "\1\25\1\26\1\25\1\27\1\2\1\30\1\2\2\30"+ + "\3\31\1\32\1\0\2\2\1\33\1\34\1\33\1\35"+ + "\2\36\1\3\1\37\1\3\1\40\1\37\1\41\4\0"+ + "\4\42\2\43\1\44\1\45\1\46\1\0\1\47\1\50"+ + "\1\0\1\3\2\0\6\5\1\51\2\0\4\5\1\0"+ + "\1\5\1\0\1\52\2\0\1\21\2\0\2\6\1\0"+ + "\1\53\1\54\1\55\1\56\4\5\1\57\4\5\1\60"+ + "\1\5\1\61\33\5\13\0\2\5\1\62\1\5\3\0"+ + "\2\63\2\64\1\65\1\66\1\64\3\0\1\63\2\64"+ + "\1\67\1\70\3\0\1\71\1\0\1\26\1\0\1\27"+ + "\3\0\1\72\1\0\1\30\2\73\1\0\1\32\1\0"+ + "\1\74\2\0\1\75\1\63\1\0\1\76\1\0\1\77"+ + "\1\100\1\42\1\101\1\102\3\0\7\5\2\3\1\103"+ + "\3\5\1\0\1\5\3\0\4\5\1\104\4\5\1\105"+ + "\3\5\1\106\5\5\1\107\13\5\1\110\14\5\1\111"+ + "\12\0\12\5\3\112\1\113\1\0\1\114\1\0\1\71"+ + "\1\72\1\115\1\116\1\42\2\0\1\117\6\5\1\120"+ + "\1\121\1\122\6\5\4\0\1\123\5\5\1\124\11\5"+ + "\1\125\2\5\1\126\1\5\1\127\3\5\1\130\1\5"+ + "\1\131\1\132\4\5\1\133\10\5\12\0\13\5\1\113"+ + "\1\42\1\134\1\0\3\5\1\135\3\5\1\136\1\5"+ + "\1\137\1\140\1\5\1\141\2\142\3\0\3\5\1\143"+ + "\10\5\1\144\1\5\1\145\1\146\1\147\6\5\1\150"+ + "\1\151\1\5\1\152\1\153\1\5\1\154\3\5\1\155"+ + "\10\0\1\156\1\0\1\157\1\160\11\5\1\42\1\0"+ + "\1\5\1\161\3\5\1\162\3\5\3\0\1\163\13\5"+ + "\1\164\1\165\1\166\1\167\1\170\4\5\1\171\1\172"+ + "\5\0\11\5\1\42\1\1\1\173\4\5\1\174\1\175"+ + "\1\5\2\176\1\0\1\177\2\5\1\200\1\201\3\5"+ + "\1\202\5\5\1\203\3\0\3\5\1\204\5\5\1\42"+ + "\1\0\3\5\1\205\1\206\1\0\1\5\1\207\5\5"+ + "\1\210\1\5\1\211\1\212\1\5\1\0\1\213\3\5"+ + "\1\214\3\5\1\42\1\0\2\5\1\215\1\46\1\5"+ + "\1\216\1\217\1\220\3\5\1\221\1\0\2\5\1\222"+ + "\1\223\2\5\1\42\1\0\1\224\1\225\1\5\1\226"+ + "\1\5\1\227\1\230\3\5\1\231\1\42\1\0\5\5"+ + "\1\0\1\232\1\233\1\234\2\5\1\0\1\235\1\5"+ + "\1\0\1\5\1\0\1\236\14\0\1\237\1\0"; private static int [] zzUnpackAction() { - int [] result = new int[735]; + int [] result = new int[732]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -264,88 +264,88 @@ private static int zzUnpackAction(String packed, int offset, int [] result) { "\0\u17ab\0\u0775\0\u0775\0\u17fe\0\u1851\0\u0775\0\u18a4\0\u18f7"+ "\0\u194a\0\u199d\0\u19f0\0\u1a43\0\u0775\0\u1a96\0\u1ae9\0\u1b3c"+ "\0\u1b8f\0\u1be2\0\u1c35\0\u1c88\0\u1cdb\0\u1d2e\0\u1ae9\0\u0775"+ - "\0\u1d81\0\u1dd4\0\u1e27\0\u1e7a\0\u1ecd\0\u1ecd\0\u0775\0\u1f20"+ - "\0\u1f73\0\u0775\0\u1fc6\0\u2019\0\u0775\0\u0775\0\u206c\0\u20bf"+ - "\0\u0775\0\u2112\0\u0775\0\u2165\0\u0775\0\u21b8\0\u220b\0\u225e"+ - "\0\u22b1\0\u2304\0\u0775\0\u2357\0\u23aa\0\u23fd\0\u2450\0\u0775"+ - "\0\u24a3\0\u067c\0\u24f6\0\u2549\0\u259c\0\u25ef\0\u2642\0\u2695"+ - "\0\u26e8\0\u273b\0\u278e\0\u27e1\0\u2834\0\u2887\0\u28da\0\u0775"+ - "\0\u292d\0\u2980\0\u29d3\0\u2a26\0\u2a79\0\u2acc\0\u2b1f\0\u2b72"+ - "\0\u15b9\0\u2bc5\0\u0b59\0\u2c18\0\u0775\0\u2c6b\0\u2cbe\0\u2d11"+ - "\0\u2d64\0\u2db7\0\u2e0a\0\u2e5d\0\u2eb0\0\u0a60\0\u2f03\0\u2f56"+ - "\0\u2fa9\0\u2ffc\0\u0a60\0\u304f\0\u30a2\0\u30f5\0\u3148\0\u0a60"+ - "\0\u319b\0\u0a60\0\u31ee\0\u3241\0\u3294\0\u32e7\0\u333a\0\u338d"+ + "\0\u1d81\0\u1dd4\0\u1e27\0\u1e7a\0\u1ecd\0\u1f20\0\u1f73\0\u1fc6"+ + "\0\u0775\0\u2019\0\u206c\0\u20bf\0\u2112\0\u2165\0\u2112\0\u0775"+ + "\0\u21b8\0\u220b\0\u0775\0\u0775\0\u225e\0\u22b1\0\u0775\0\u2304"+ + "\0\u0775\0\u2357\0\u0775\0\u23aa\0\u23fd\0\u2450\0\u24a3\0\u24f6"+ + "\0\u0775\0\u2549\0\u259c\0\u25ef\0\u2642\0\u0775\0\u2695\0\u067c"+ + "\0\u26e8\0\u273b\0\u278e\0\u27e1\0\u2834\0\u2887\0\u28da\0\u292d"+ + "\0\u2980\0\u29d3\0\u2a26\0\u2a79\0\u2acc\0\u0775\0\u2b1f\0\u2b72"+ + "\0\u2bc5\0\u2c18\0\u2c6b\0\u2cbe\0\u2d11\0\u2d64\0\u15b9\0\u2db7"+ + "\0\u0b59\0\u2e0a\0\u0775\0\u2e5d\0\u2eb0\0\u2f03\0\u2f56\0\u2fa9"+ + "\0\u2ffc\0\u304f\0\u30a2\0\u0a60\0\u30f5\0\u3148\0\u319b\0\u31ee"+ + "\0\u0a60\0\u3241\0\u3294\0\u32e7\0\u333a\0\u0a60\0\u338d\0\u0a60"+ "\0\u33e0\0\u3433\0\u3486\0\u34d9\0\u352c\0\u357f\0\u35d2\0\u3625"+ "\0\u3678\0\u36cb\0\u371e\0\u3771\0\u37c4\0\u3817\0\u386a\0\u38bd"+ "\0\u3910\0\u3963\0\u39b6\0\u3a09\0\u3a5c\0\u3aaf\0\u3b02\0\u3b55"+ - "\0\u160c\0\u3ba8\0\u3bfb\0\u3c4e\0\u3ca1\0\u3cf4\0\u3d47\0\u3d9a"+ - "\0\u3ded\0\u3e40\0\u0775\0\u3e93\0\u3ee6\0\u18a4\0\u3f39\0\u3f8c"+ - "\0\u3fdf\0\u3ee6\0\u0775\0\u0775\0\u0775\0\u3f39\0\u4032\0\u19f0"+ - "\0\u4085\0\u40d8\0\u4032\0\u4085\0\u0775\0\u0775\0\u412b\0\u417e"+ - "\0\u41d1\0\u4224\0\u4277\0\u1d81\0\u0775\0\u42ca\0\u1dd4\0\u0775"+ - "\0\u431d\0\u1e27\0\u1e7a\0\u4370\0\u43c3\0\u4416\0\u1f20\0\u0775"+ - "\0\u4469\0\u1f73\0\u0775\0\u44bc\0\u0775\0\u206c\0\u450f\0\u0775"+ - "\0\u4562\0\u45b5\0\u0775\0\u4608\0\u0775\0\u0775\0\u465b\0\u46ae"+ - "\0\u0775\0\u4701\0\u4754\0\u20bf\0\u47a7\0\u47fa\0\u484d\0\u48a0"+ - "\0\u48f3\0\u4946\0\u4999\0\u292d\0\u2980\0\u49ec\0\u4a3f\0\u4a92"+ - "\0\u4ae5\0\u4b38\0\u4b8b\0\u4bde\0\u4c31\0\u4c84\0\u4cd7\0\u4d2a"+ - "\0\u4d7d\0\u4dd0\0\u0a60\0\u4e23\0\u4e76\0\u4ec9\0\u4f1c\0\u0a60"+ - "\0\u4f6f\0\u4fc2\0\u5015\0\u4f6f\0\u5068\0\u50bb\0\u510e\0\u5161"+ - "\0\u51b4\0\u0a60\0\u5207\0\u525a\0\u52ad\0\u5300\0\u5353\0\u53a6"+ - "\0\u53f9\0\u544c\0\u549f\0\u54f2\0\u5545\0\u0a60\0\u5598\0\u55eb"+ - "\0\u563e\0\u5691\0\u56e4\0\u5737\0\u578a\0\u57dd\0\u5830\0\u5883"+ - "\0\u58d6\0\u5929\0\u0a60\0\u597c\0\u59cf\0\u5a22\0\u5a75\0\u5ac8"+ - "\0\u5b1b\0\u5b6e\0\u5bc1\0\u5c14\0\u5c67\0\u5cba\0\u5d0d\0\u5d60"+ - "\0\u5db3\0\u5e06\0\u5e59\0\u5eac\0\u5eff\0\u5f52\0\u5fa5\0\u0775"+ - "\0\u17fe\0\u194a\0\u5ff8\0\u604b\0\u0775\0\u609e\0\u0775\0\u60f1"+ - "\0\u6144\0\u0775\0\u6197\0\u1ecd\0\u61ea\0\u0775\0\u0775\0\u623d"+ - "\0\u6290\0\u62e3\0\u0a60\0\u6336\0\u6389\0\u63dc\0\u642f\0\u6482"+ - "\0\u64d5\0\u6528\0\u0a60\0\u0a60\0\u657b\0\u65ce\0\u6621\0\u6674"+ - "\0\u66c7\0\u671a\0\u676d\0\u67c0\0\u6813\0\u6866\0\u4c84\0\u68b9"+ - "\0\u690c\0\u695f\0\u69b2\0\u6a05\0\u0a60\0\u6a58\0\u6aab\0\u6afe"+ - "\0\u6b51\0\u6ba4\0\u6bf7\0\u6c4a\0\u6c9d\0\u6cf0\0\u0a60\0\u6d43"+ - "\0\u6d96\0\u0a60\0\u6de9\0\u0a60\0\u6e3c\0\u6e8f\0\u6ee2\0\u0a60"+ - "\0\u6f35\0\u0a60\0\u0a60\0\u6f88\0\u6fdb\0\u702e\0\u7081\0\u0a60"+ + "\0\u3ba8\0\u3bfb\0\u3c4e\0\u3ca1\0\u3cf4\0\u3d47\0\u160c\0\u3d9a"+ + "\0\u3ded\0\u3e40\0\u3e93\0\u3ee6\0\u3f39\0\u3f8c\0\u3fdf\0\u4032"+ + "\0\u0775\0\u4085\0\u40d8\0\u18a4\0\u412b\0\u417e\0\u41d1\0\u40d8"+ + "\0\u0775\0\u0775\0\u0775\0\u412b\0\u4224\0\u19f0\0\u4277\0\u42ca"+ + "\0\u4224\0\u4277\0\u0775\0\u0775\0\u431d\0\u4370\0\u43c3\0\u4416"+ + "\0\u4469\0\u0775\0\u1dd4\0\u0775\0\u1e7a\0\u1f20\0\u1ecd\0\u44bc"+ + "\0\u450f\0\u4562\0\u2019\0\u0775\0\u206c\0\u0775\0\u2165\0\u0775"+ + "\0\u225e\0\u45b5\0\u0775\0\u4608\0\u465b\0\u0775\0\u46ae\0\u0775"+ + "\0\u0775\0\u4701\0\u4754\0\u0775\0\u47a7\0\u47fa\0\u22b1\0\u484d"+ + "\0\u48a0\0\u48f3\0\u4946\0\u4999\0\u49ec\0\u4a3f\0\u2b1f\0\u2b72"+ + "\0\u4a92\0\u4ae5\0\u4b38\0\u4b8b\0\u4bde\0\u4c31\0\u4c84\0\u4cd7"+ + "\0\u4d2a\0\u4d7d\0\u4dd0\0\u4e23\0\u4e76\0\u0a60\0\u4ec9\0\u4f1c"+ + "\0\u4f6f\0\u4fc2\0\u0a60\0\u5015\0\u5068\0\u50bb\0\u5015\0\u510e"+ + "\0\u5161\0\u51b4\0\u5207\0\u525a\0\u0a60\0\u52ad\0\u5300\0\u5353"+ + "\0\u53a6\0\u53f9\0\u544c\0\u549f\0\u54f2\0\u5545\0\u5598\0\u55eb"+ + "\0\u0a60\0\u563e\0\u5691\0\u56e4\0\u5737\0\u578a\0\u57dd\0\u5830"+ + "\0\u5883\0\u58d6\0\u5929\0\u597c\0\u59cf\0\u0a60\0\u5a22\0\u5a75"+ + "\0\u5ac8\0\u5b1b\0\u5b6e\0\u5bc1\0\u5c14\0\u5c67\0\u5cba\0\u5d0d"+ + "\0\u5d60\0\u5db3\0\u5e06\0\u5e59\0\u5eac\0\u5eff\0\u5f52\0\u5fa5"+ + "\0\u5ff8\0\u604b\0\u0775\0\u17fe\0\u194a\0\u609e\0\u60f1\0\u0775"+ + "\0\u6144\0\u0775\0\u0775\0\u0775\0\u0775\0\u6197\0\u61ea\0\u623d"+ + "\0\u0a60\0\u6290\0\u62e3\0\u6336\0\u6389\0\u63dc\0\u642f\0\u6482"+ + "\0\u0a60\0\u0a60\0\u64d5\0\u6528\0\u657b\0\u65ce\0\u6621\0\u6674"+ + "\0\u66c7\0\u671a\0\u676d\0\u67c0\0\u4d2a\0\u6813\0\u6866\0\u68b9"+ + "\0\u690c\0\u695f\0\u0a60\0\u69b2\0\u6a05\0\u6a58\0\u6aab\0\u6afe"+ + "\0\u6b51\0\u6ba4\0\u6bf7\0\u6c4a\0\u0a60\0\u6c9d\0\u6cf0\0\u0a60"+ + "\0\u6d43\0\u0a60\0\u6d96\0\u6de9\0\u6e3c\0\u0a60\0\u6e8f\0\u0a60"+ + "\0\u0a60\0\u6ee2\0\u6f35\0\u6f88\0\u6fdb\0\u0a60\0\u702e\0\u7081"+ "\0\u70d4\0\u7127\0\u717a\0\u71cd\0\u7220\0\u7273\0\u72c6\0\u7319"+ "\0\u736c\0\u73bf\0\u7412\0\u7465\0\u74b8\0\u750b\0\u755e\0\u75b1"+ "\0\u7604\0\u7657\0\u76aa\0\u76fd\0\u7750\0\u77a3\0\u77f6\0\u7849"+ - "\0\u789c\0\u78ef\0\u7942\0\u7995\0\u79e8\0\u0775\0\u7a3b\0\u7a8e"+ - "\0\u0775\0\u7ae1\0\u7b34\0\u7b87\0\u7bda\0\u0a60\0\u7c2d\0\u7c80"+ - "\0\u7cd3\0\u0a60\0\u7d26\0\u0a60\0\u7d79\0\u7dcc\0\u0a60\0\u0775"+ - "\0\u7e1f\0\u7e72\0\u7ec5\0\u7f18\0\u7f6b\0\u7fbe\0\u8011\0\u0a60"+ - "\0\u8064\0\u80b7\0\u810a\0\u815d\0\u81b0\0\u8203\0\u8256\0\u82a9"+ - "\0\u0a60\0\u82fc\0\u0a60\0\u0a60\0\u0a60\0\u834f\0\u83a2\0\u83f5"+ - "\0\u8448\0\u849b\0\u84ee\0\u0a60\0\u0a60\0\u8541\0\u0a60\0\u0a60"+ - "\0\u8594\0\u0a60\0\u85e7\0\u863a\0\u868d\0\u0a60\0\u86e0\0\u8733"+ - "\0\u8786\0\u87d9\0\u882c\0\u887f\0\u88d2\0\u8925\0\u0775\0\u8978"+ - "\0\u89cb\0\u0a60\0\u8a1e\0\u8a71\0\u8ac4\0\u8b17\0\u8b6a\0\u8bbd"+ - "\0\u8c10\0\u8c63\0\u8cb6\0\u8d09\0\u8d5c\0\u8daf\0\u8e02\0\u8e55"+ - "\0\u8ea8\0\u8efb\0\u0a60\0\u8f4e\0\u8fa1\0\u8ff4\0\u9047\0\u909a"+ - "\0\u90ed\0\u0a60\0\u9140\0\u9193\0\u91e6\0\u9239\0\u928c\0\u92df"+ - "\0\u9332\0\u9385\0\u93d8\0\u942b\0\u947e\0\u0a60\0\u0a60\0\u0a60"+ - "\0\u0a60\0\u0a60\0\u94d1\0\u9524\0\u9577\0\u95ca\0\u0a60\0\u0a60"+ + "\0\u789c\0\u78ef\0\u7942\0\u0775\0\u7995\0\u0775\0\u79e8\0\u7a3b"+ + "\0\u7a8e\0\u7ae1\0\u0a60\0\u7b34\0\u7b87\0\u7bda\0\u0a60\0\u7c2d"+ + "\0\u0a60\0\u7c80\0\u7cd3\0\u0a60\0\u0775\0\u7d26\0\u7d79\0\u7dcc"+ + "\0\u7e1f\0\u7e72\0\u7ec5\0\u7f18\0\u0a60\0\u7f6b\0\u7fbe\0\u8011"+ + "\0\u8064\0\u80b7\0\u810a\0\u815d\0\u81b0\0\u0a60\0\u8203\0\u0a60"+ + "\0\u0a60\0\u0a60\0\u8256\0\u82a9\0\u82fc\0\u834f\0\u83a2\0\u83f5"+ + "\0\u0a60\0\u0a60\0\u8448\0\u0a60\0\u0a60\0\u849b\0\u0a60\0\u84ee"+ + "\0\u8541\0\u8594\0\u0a60\0\u85e7\0\u863a\0\u868d\0\u86e0\0\u8733"+ + "\0\u8786\0\u87d9\0\u882c\0\u0775\0\u887f\0\u88d2\0\u0a60\0\u8925"+ + "\0\u8978\0\u89cb\0\u8a1e\0\u8a71\0\u8ac4\0\u8b17\0\u8b6a\0\u8bbd"+ + "\0\u8c10\0\u8c63\0\u8cb6\0\u8d09\0\u8d5c\0\u8daf\0\u8e02\0\u0a60"+ + "\0\u8e55\0\u8ea8\0\u8efb\0\u8f4e\0\u8fa1\0\u8ff4\0\u0a60\0\u9047"+ + "\0\u909a\0\u90ed\0\u9140\0\u9193\0\u91e6\0\u9239\0\u928c\0\u92df"+ + "\0\u9332\0\u9385\0\u0a60\0\u0a60\0\u0a60\0\u0a60\0\u0a60\0\u93d8"+ + "\0\u942b\0\u947e\0\u94d1\0\u0a60\0\u0a60\0\u9524\0\u9577\0\u95ca"+ "\0\u961d\0\u9670\0\u96c3\0\u9716\0\u9769\0\u97bc\0\u980f\0\u9862"+ - "\0\u98b5\0\u9908\0\u995b\0\u99ae\0\u9a01\0\u9a54\0\u9aa7\0\u9afa"+ - "\0\u0a60\0\u9b4d\0\u9ba0\0\u9bf3\0\u9c46\0\u0a60\0\u0a60\0\u9c99"+ - "\0\u0775\0\u9cec\0\u9d3f\0\u9d92\0\u9de5\0\u9e38\0\u0a60\0\u0a60"+ - "\0\u9e8b\0\u9ede\0\u9f31\0\u9f84\0\u9fd7\0\ua02a\0\ua07d\0\ua0d0"+ - "\0\ua123\0\u0a60\0\ua176\0\ua1c9\0\ua21c\0\ua26f\0\ua2c2\0\ua315"+ - "\0\u0a60\0\ua368\0\ua3bb\0\ua40e\0\ua461\0\ua4b4\0\ua507\0\ua55a"+ - "\0\ua5ad\0\ua600\0\ua653\0\u0a60\0\u0a60\0\ua6a6\0\ua6f9\0\u0a60"+ - "\0\ua74c\0\ua79f\0\ua7f2\0\ua845\0\ua898\0\u0a60\0\ua8eb\0\u0a60"+ - "\0\u0a60\0\ua93e\0\ua991\0\u0a60\0\ua9e4\0\uaa37\0\uaa8a\0\u0a60"+ - "\0\uaadd\0\uab30\0\uab83\0\uabd6\0\uac29\0\uac7c\0\uaccf\0\u0a60"+ - "\0\uad22\0\uad75\0\u0a60\0\u0a60\0\u0a60\0\uadc8\0\uae1b\0\uae6e"+ - "\0\u0a60\0\uaec1\0\uaf14\0\uaf67\0\u0a60\0\u0a60\0\uafba\0\ub00d"+ - "\0\ub060\0\ub0b3\0\u0a60\0\u0a60\0\ub106\0\u0a60\0\ub159\0\u0a60"+ - "\0\u0775\0\ub1ac\0\ub1ff\0\ub252\0\u0a60\0\uad22\0\ub2a5\0\ub2f8"+ - "\0\ub34b\0\ub39e\0\ub3f1\0\ub444\0\ub497\0\u0a60\0\u0a60\0\u0a60"+ - "\0\ub4ea\0\ub53d\0\ub590\0\u0a60\0\ub5e3\0\ub636\0\ub689\0\ub6dc"+ - "\0\u0a60\0\ub72f\0\ub782\0\ub7d5\0\ub828\0\ub87b\0\ub8ce\0\ub921"+ - "\0\ub974\0\ub9c7\0\uba1a\0\uba6d\0\ubac0\0\u0775\0\ubb13"; + "\0\u98b5\0\u9908\0\u995b\0\u99ae\0\u9a01\0\u0a60\0\u9a54\0\u9aa7"+ + "\0\u9afa\0\u9b4d\0\u0a60\0\u0a60\0\u9ba0\0\u0775\0\u9bf3\0\u9c46"+ + "\0\u9c99\0\u9cec\0\u9d3f\0\u0a60\0\u0a60\0\u9d92\0\u9de5\0\u9e38"+ + "\0\u9e8b\0\u9ede\0\u9f31\0\u9f84\0\u9fd7\0\ua02a\0\u0a60\0\ua07d"+ + "\0\ua0d0\0\ua123\0\ua176\0\ua1c9\0\ua21c\0\u0a60\0\ua26f\0\ua2c2"+ + "\0\ua315\0\ua368\0\ua3bb\0\ua40e\0\ua461\0\ua4b4\0\ua507\0\ua55a"+ + "\0\u0a60\0\u0a60\0\ua5ad\0\ua600\0\u0a60\0\ua653\0\ua6a6\0\ua6f9"+ + "\0\ua74c\0\ua79f\0\u0a60\0\ua7f2\0\u0a60\0\u0a60\0\ua845\0\ua898"+ + "\0\u0a60\0\ua8eb\0\ua93e\0\ua991\0\u0a60\0\ua9e4\0\uaa37\0\uaa8a"+ + "\0\uaadd\0\uab30\0\uab83\0\uabd6\0\u0a60\0\uac29\0\uac7c\0\u0a60"+ + "\0\u0a60\0\u0a60\0\uaccf\0\uad22\0\uad75\0\u0a60\0\uadc8\0\uae1b"+ + "\0\uae6e\0\u0a60\0\u0a60\0\uaec1\0\uaf14\0\uaf67\0\uafba\0\u0a60"+ + "\0\u0a60\0\ub00d\0\u0a60\0\ub060\0\u0a60\0\u0775\0\ub0b3\0\ub106"+ + "\0\ub159\0\u0a60\0\uac29\0\ub1ac\0\ub1ff\0\ub252\0\ub2a5\0\ub2f8"+ + "\0\ub34b\0\ub39e\0\u0a60\0\u0a60\0\u0a60\0\ub3f1\0\ub444\0\ub497"+ + "\0\u0a60\0\ub4ea\0\ub53d\0\ub590\0\ub5e3\0\u0a60\0\ub636\0\ub689"+ + "\0\ub6dc\0\ub72f\0\ub782\0\ub7d5\0\ub828\0\ub87b\0\ub8ce\0\ub921"+ + "\0\ub974\0\ub9c7\0\u0775\0\uba1a"; private static int [] zzUnpackRowMap() { - int [] result = new int[735]; + int [] result = new int[732]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -385,983 +385,984 @@ private static int zzUnpackRowMap(String packed, int offset, int [] result) { "\22\135\25\140\1\135\12\140\3\135\4\140\1\141\4\140"+ "\3\135\15\142\1\143\3\142\1\144\1\145\1\142\1\146"+ "\1\142\1\147\74\142\3\150\1\151\2\150\3\151\1\150"+ - "\2\151\30\150\25\151\1\150\12\151\3\150\4\151\1\150"+ - "\4\151\3\150\3\30\1\152\2\30\3\152\1\30\2\152"+ - "\1\30\1\0\26\30\25\152\1\30\12\152\3\30\4\152"+ - "\1\30\4\152\3\30\3\153\1\154\2\153\3\154\2\153"+ - "\1\154\1\153\1\155\3\153\1\156\22\153\25\154\1\153"+ - "\12\154\3\153\4\154\1\153\4\154\3\153\3\157\1\160"+ - "\2\157\3\160\1\157\2\160\30\157\25\160\1\157\12\160"+ - "\3\157\4\160\1\157\4\160\3\157\3\30\1\161\2\30"+ - "\3\161\1\30\2\161\1\30\1\0\26\30\25\161\1\30"+ - "\12\161\3\30\4\161\1\30\4\161\3\30\3\162\1\163"+ - "\1\164\1\162\3\163\1\162\2\163\1\162\2\42\2\162"+ - "\1\42\22\162\25\163\1\162\12\163\3\162\4\163\1\162"+ - "\4\163\6\162\1\163\2\162\3\163\1\162\2\163\1\162"+ - "\2\42\2\162\1\42\22\162\25\163\1\162\12\163\1\162"+ - "\1\165\1\162\4\163\1\162\4\163\3\162\3\166\1\167"+ - "\2\166\3\167\1\166\2\167\1\166\2\42\2\166\1\42"+ - "\22\166\25\167\1\166\12\167\3\166\4\167\1\166\4\167"+ - "\3\166\1\30\1\170\1\171\1\41\1\30\1\172\3\41"+ - "\1\170\2\41\1\30\2\173\1\165\1\171\1\173\1\174"+ - "\1\171\1\173\2\171\6\30\1\171\5\30\1\171\25\41"+ - "\1\171\12\41\1\173\2\171\4\41\1\171\4\41\1\171"+ - "\1\175\1\173\34\176\1\177\66\176\34\200\1\201\66\200"+ - "\15\202\1\203\3\202\1\204\11\202\1\205\2\202\1\206"+ - "\4\202\1\207\57\202\15\210\2\211\2\210\1\211\101\210"+ - "\123\212\33\26\1\213\122\26\1\0\2\26\1\214\4\26"+ - "\1\215\5\26\1\0\1\26\1\0\4\26\1\216\1\0"+ - "\6\26\3\0\12\26\1\0\15\26\124\0\1\31\1\217"+ - "\1\220\1\0\1\31\3\0\1\31\54\0\1\220\35\0"+ - "\1\217\1\221\2\0\1\217\3\0\1\217\15\0\1\65"+ - "\74\0\1\41\1\0\1\41\1\0\1\41\1\222\6\41"+ - "\27\0\3\41\1\223\2\41\1\223\2\41\1\224\6\41"+ - "\1\225\3\41\1\226\1\0\2\41\1\226\3\41\1\224"+ - "\3\41\3\0\1\41\1\227\2\41\1\0\1\225\3\41"+ - "\7\0\1\65\22\0\1\65\1\230\73\0\1\31\1\217"+ - "\1\220\1\0\1\31\1\231\1\0\1\232\1\31\51\0"+ - "\1\232\2\0\1\220\35\0\1\41\1\0\1\41\1\0"+ + "\2\151\2\150\1\152\25\150\25\151\1\150\12\151\3\150"+ + "\4\151\1\150\4\151\3\150\3\30\1\153\2\30\3\153"+ + "\1\30\2\153\1\30\1\0\1\154\25\30\25\153\1\30"+ + "\12\153\3\30\4\153\1\30\4\153\3\30\3\155\1\156"+ + "\2\155\3\156\2\155\1\156\1\155\1\157\3\155\1\160"+ + "\22\155\25\156\1\155\12\156\3\155\4\156\1\155\4\156"+ + "\3\155\3\161\1\162\2\161\3\162\1\161\2\162\2\161"+ + "\1\163\25\161\25\162\1\161\12\162\3\161\4\162\1\161"+ + "\4\162\3\161\3\30\1\164\2\30\3\164\1\30\2\164"+ + "\1\30\1\165\1\166\2\30\1\167\22\30\25\164\1\30"+ + "\12\164\3\30\4\164\1\30\4\164\3\30\3\170\1\171"+ + "\1\172\1\170\3\171\1\170\2\171\1\170\2\42\2\170"+ + "\1\42\22\170\25\171\1\170\12\171\3\170\4\171\1\170"+ + "\4\171\6\170\1\171\2\170\3\171\1\170\2\171\1\170"+ + "\2\42\2\170\1\42\22\170\25\171\1\170\12\171\1\170"+ + "\1\173\1\170\4\171\1\170\4\171\3\170\3\174\1\175"+ + "\2\174\3\175\1\174\2\175\1\174\2\42\2\174\1\42"+ + "\22\174\25\175\1\174\12\175\3\174\4\175\1\174\4\175"+ + "\3\174\1\30\1\176\1\177\1\41\1\30\1\200\3\41"+ + "\1\176\2\41\1\30\2\201\1\173\1\177\1\201\1\202"+ + "\1\177\1\201\2\177\6\30\1\177\5\30\1\177\25\41"+ + "\1\177\12\41\1\201\2\177\4\41\1\177\4\41\1\177"+ + "\1\203\1\201\34\204\1\205\66\204\34\206\1\207\66\206"+ + "\15\210\1\211\3\210\1\212\11\210\1\213\2\210\1\214"+ + "\4\210\1\215\57\210\15\216\2\217\2\216\1\217\101\216"+ + "\123\220\33\26\1\221\122\26\1\0\2\26\1\222\4\26"+ + "\1\223\5\26\1\0\1\26\1\0\4\26\1\224\1\0"+ + "\6\26\3\0\12\26\1\0\15\26\124\0\1\31\1\225"+ + "\1\226\1\0\1\31\3\0\1\31\54\0\1\226\35\0"+ + "\1\225\1\227\2\0\1\225\3\0\1\225\15\0\1\65"+ + "\74\0\1\41\1\0\1\41\1\0\1\41\1\230\6\41"+ + "\27\0\3\41\1\231\2\41\1\231\2\41\1\232\6\41"+ + "\1\233\3\41\1\234\1\0\2\41\1\234\3\41\1\232"+ + "\3\41\3\0\1\41\1\235\2\41\1\0\1\233\3\41"+ + "\7\0\1\65\22\0\1\65\1\236\73\0\1\31\1\225"+ + "\1\226\1\0\1\31\1\237\1\0\1\240\1\31\51\0"+ + "\1\240\2\0\1\226\35\0\1\41\1\0\1\41\1\0"+ "\10\41\27\0\1\67\11\41\1\67\12\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\1\233\1\41\1\234\2\41\1\235"+ - "\4\41\1\233\1\234\11\41\1\0\3\41\1\235\4\41"+ - "\1\236\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\6\0\1\46\7\0\1\237"+ - "\10\0\1\41\1\240\13\41\1\240\7\41\1\0\12\41"+ - "\1\241\2\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\0\10\41\27\0\1\241\1\41\1\242\2\41\1\243"+ + "\4\41\1\241\1\242\11\41\1\0\3\41\1\243\4\41"+ + "\1\244\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\6\0\1\46\7\0\1\245"+ + "\10\0\1\41\1\246\13\41\1\246\7\41\1\0\12\41"+ + "\1\247\2\0\4\41\1\0\4\41\4\0\1\41\1\0"+ "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+ "\4\41\1\0\4\41\20\0\2\42\2\0\1\42\104\0"+ - "\1\242\2\0\3\242\1\0\2\242\30\0\25\242\1\0"+ - "\12\242\3\0\4\242\1\0\4\242\3\0\22\243\1\244"+ - "\1\245\1\246\1\243\1\247\74\243\27\0\1\64\1\65"+ + "\1\250\2\0\3\250\1\0\2\250\30\0\25\250\1\0"+ + "\12\250\3\0\4\250\1\0\4\250\3\0\22\251\1\252"+ + "\1\253\1\254\1\251\1\255\74\251\27\0\1\64\1\65"+ "\121\0\1\65\1\64\121\0\1\65\1\0\1\65\120\0"+ - "\1\64\122\0\1\250\1\65\2\0\1\251\1\0\1\252"+ - "\114\0\1\65\4\0\1\64\115\0\1\65\4\0\1\253"+ - "\1\123\114\0\1\65\1\254\121\0\1\65\7\0\1\65"+ - "\112\0\1\65\10\0\1\65\111\0\1\65\123\0\1\255"+ + "\1\64\122\0\1\256\1\65\2\0\1\257\1\0\1\260"+ + "\114\0\1\65\4\0\1\64\115\0\1\65\4\0\1\261"+ + "\1\123\114\0\1\65\1\262\121\0\1\65\7\0\1\65"+ + "\112\0\1\65\10\0\1\65\111\0\1\65\123\0\1\263"+ "\12\0\1\65\60\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\1\41\1\256\13\41\1\256\7\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\257"+ - "\1\0\10\41\27\0\22\41\1\257\2\41\1\0\12\41"+ + "\27\0\1\41\1\264\13\41\1\264\7\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\265"+ + "\1\0\10\41\27\0\22\41\1\265\2\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\3\41\1\260\4\41\27\0\1\41\1\261\1\41"+ - "\1\262\2\41\1\262\5\41\1\263\1\261\1\41\1\260"+ - "\5\41\1\0\1\41\1\263\10\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\264\1\0\10\41\27\0"+ - "\2\41\1\265\10\41\1\265\6\41\1\264\2\41\1\0"+ - "\10\41\1\266\1\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\267\1\0\10\41\27\0\1\270\4\41"+ - "\1\271\4\41\1\270\7\41\1\267\2\41\1\0\3\41"+ - "\1\271\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\2\41\1\272\5\41\27\0\3\41"+ - "\1\273\2\41\1\274\1\275\1\272\3\41\1\276\10\41"+ - "\1\0\1\41\1\276\10\41\3\0\1\41\1\277\2\41"+ + "\1\0\3\41\1\266\4\41\27\0\1\41\1\267\1\41"+ + "\1\270\2\41\1\270\5\41\1\271\1\267\1\41\1\266"+ + "\5\41\1\0\1\41\1\271\10\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\272\1\0\10\41\27\0"+ + "\2\41\1\273\10\41\1\273\6\41\1\272\2\41\1\0"+ + "\10\41\1\274\1\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\275\1\0\10\41\27\0\1\276\4\41"+ + "\1\277\4\41\1\276\7\41\1\275\2\41\1\0\3\41"+ + "\1\277\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\2\41\1\300\5\41\27\0\3\41"+ + "\1\301\2\41\1\302\1\303\1\300\3\41\1\304\10\41"+ + "\1\0\1\41\1\304\10\41\3\0\1\41\1\305\2\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\1\41\1\300\13\41\1\300\7\41\1\0\11\41"+ - "\1\301\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\1\233\1\41\1\234\2\41"+ - "\1\235\3\41\1\302\1\233\1\234\11\41\1\0\3\41"+ - "\1\235\4\41\1\236\1\41\3\0\4\41\1\0\4\41"+ + "\27\0\1\41\1\306\13\41\1\306\7\41\1\0\11\41"+ + "\1\307\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\1\241\1\41\1\242\2\41"+ + "\1\243\3\41\1\310\1\241\1\242\11\41\1\0\3\41"+ + "\1\243\4\41\1\244\1\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+ - "\1\303\17\41\1\0\3\41\1\303\6\41\3\0\4\41"+ + "\1\311\17\41\1\0\3\41\1\311\6\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\1\41\1\256\13\41\1\256\1\41\1\304\5\41"+ + "\27\0\1\41\1\264\13\41\1\264\1\41\1\312\5\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\305\1\0\10\41\27\0\7\41\1\306\12\41"+ - "\1\305\2\41\1\0\5\41\1\307\4\41\3\0\2\41"+ - "\1\310\1\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\1\311\10\41\1\312\1\311\12\41"+ - "\1\0\6\41\1\312\3\41\3\0\4\41\1\0\4\41"+ + "\1\0\1\313\1\0\10\41\27\0\7\41\1\314\12\41"+ + "\1\313\2\41\1\0\5\41\1\315\4\41\3\0\2\41"+ + "\1\316\1\41\1\0\4\41\4\0\1\41\1\0\1\41"+ + "\1\0\10\41\27\0\1\317\10\41\1\320\1\317\12\41"+ + "\1\0\6\41\1\320\3\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\6\0\1\46"+ - "\7\0\1\237\10\0\1\41\1\240\10\41\1\313\2\41"+ - "\1\240\7\41\1\0\12\41\1\241\2\0\4\41\1\0"+ + "\7\0\1\245\10\0\1\41\1\246\10\41\1\321\2\41"+ + "\1\246\7\41\1\0\12\41\1\247\2\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\2\41\1\314\7\41\1\315\1\314\11\41\1\0\12\41"+ + "\2\41\1\322\7\41\1\323\1\322\11\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\1\316\1\41\1\317\6\41\1\320"+ - "\1\316\1\317\11\41\1\0\6\41\1\320\3\41\3\0"+ + "\1\0\10\41\27\0\1\324\1\41\1\325\6\41\1\326"+ + "\1\324\1\325\11\41\1\0\6\41\1\326\3\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\1\41\1\321\1\322\10\41\1\322\1\41"+ - "\1\321\7\41\1\0\10\41\1\323\1\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\305\1\0\10\41"+ - "\27\0\7\41\1\307\12\41\1\305\2\41\1\0\5\41"+ - "\1\307\4\41\3\0\2\41\1\310\1\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\2\41\1\272\5\41"+ - "\27\0\3\41\1\273\2\41\1\273\1\41\1\272\3\41"+ - "\1\276\10\41\1\0\1\41\1\276\10\41\3\0\1\41"+ - "\1\277\2\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\3\41\1\324\2\41\1\324\5\41"+ - "\1\325\10\41\1\0\1\41\1\325\10\41\3\0\4\41"+ - "\1\0\4\41\3\0\24\241\1\326\57\241\1\245\16\241"+ - "\7\0\1\327\1\330\5\0\1\331\25\0\1\332\1\333"+ - "\1\334\1\0\1\335\1\336\2\0\1\327\1\0\1\332"+ - "\1\334\1\337\1\333\1\0\1\330\1\0\1\335\5\0"+ - "\1\337\1\0\1\336\4\0\1\340\21\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\5\41\1\341\17\41\1\0"+ - "\3\41\1\341\6\41\3\0\4\41\1\0\4\41\4\0"+ + "\10\41\27\0\1\41\1\327\1\330\10\41\1\330\1\41"+ + "\1\327\7\41\1\0\10\41\1\331\1\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\313\1\0\10\41"+ + "\27\0\7\41\1\315\12\41\1\313\2\41\1\0\5\41"+ + "\1\315\4\41\3\0\2\41\1\316\1\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\2\41\1\300\5\41"+ + "\27\0\3\41\1\301\2\41\1\301\1\41\1\300\3\41"+ + "\1\304\10\41\1\0\1\41\1\304\10\41\3\0\1\41"+ + "\1\305\2\41\1\0\4\41\4\0\1\41\1\0\1\41"+ + "\1\0\10\41\27\0\3\41\1\332\2\41\1\332\5\41"+ + "\1\333\10\41\1\0\1\41\1\333\10\41\3\0\4\41"+ + "\1\0\4\41\3\0\24\247\1\334\57\247\1\253\16\247"+ + "\7\0\1\335\1\336\5\0\1\337\25\0\1\340\1\341"+ + "\1\342\1\0\1\343\1\344\2\0\1\335\1\0\1\340"+ + "\1\342\1\345\1\341\1\0\1\336\1\0\1\343\5\0"+ + "\1\345\1\0\1\344\4\0\1\346\21\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\5\41\1\347\17\41\1\0"+ + "\3\41\1\347\6\41\3\0\4\41\1\0\4\41\4\0"+ "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+ - "\11\41\1\342\3\0\4\41\1\0\4\41\116\0\1\343"+ + "\11\41\1\350\3\0\4\41\1\0\4\41\116\0\1\351"+ "\10\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+ - "\1\314\10\41\1\314\11\41\1\0\12\41\3\0\4\41"+ + "\1\322\10\41\1\322\11\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+ - "\1\344\1\41\3\0\22\124\1\345\1\0\1\346\1\124"+ - "\1\347\77\124\1\350\2\124\3\350\1\124\1\351\1\350"+ - "\6\124\1\352\1\353\1\346\1\124\1\354\15\124\25\350"+ - "\1\124\12\350\3\124\4\350\1\124\4\350\150\124\1\355"+ - "\1\353\1\346\1\124\1\356\74\124\22\131\1\357\1\131"+ - "\1\360\1\0\1\361\77\131\1\350\2\131\3\350\1\131"+ - "\1\362\1\350\6\131\1\363\1\131\1\360\1\353\1\354"+ - "\15\131\25\350\1\131\12\350\3\131\4\350\1\131\4\350"+ - "\150\131\1\355\1\131\1\360\1\353\1\364\74\131\30\0"+ - "\1\365\114\0\1\355\101\0\1\140\1\0\1\140\1\0"+ + "\1\352\1\41\3\0\22\124\1\353\1\0\1\354\1\124"+ + "\1\355\77\124\1\356\2\124\3\356\1\124\1\357\1\356"+ + "\6\124\1\360\1\361\1\354\1\124\1\362\15\124\25\356"+ + "\1\124\12\356\3\124\4\356\1\124\4\356\150\124\1\363"+ + "\1\361\1\354\1\124\1\364\74\124\22\131\1\365\1\131"+ + "\1\366\1\0\1\367\77\131\1\356\2\131\3\356\1\131"+ + "\1\370\1\356\6\131\1\371\1\131\1\366\1\361\1\362"+ + "\15\131\25\356\1\131\12\356\3\131\4\356\1\131\4\356"+ + "\150\131\1\363\1\131\1\366\1\361\1\372\74\131\30\0"+ + "\1\373\114\0\1\363\101\0\1\140\1\0\1\140\1\0"+ "\10\140\27\0\25\140\1\0\12\140\3\0\4\140\1\0"+ - "\4\140\116\0\1\366\7\0\15\142\1\0\3\142\1\0"+ - "\1\367\1\142\1\370\1\142\1\371\77\142\1\372\2\142"+ - "\3\372\1\142\2\372\1\142\1\0\3\142\1\0\1\367"+ - "\1\142\1\370\1\142\1\371\15\142\25\372\1\142\12\372"+ - "\3\142\4\372\1\142\4\372\6\142\1\372\2\142\3\372"+ - "\1\142\2\372\1\142\1\373\3\142\1\0\1\367\1\142"+ - "\1\370\1\142\1\371\15\142\25\372\1\142\12\372\3\142"+ - "\4\372\1\142\4\372\3\142\3\0\1\350\2\0\3\350"+ - "\1\0\2\350\12\0\1\354\15\0\25\350\1\0\12\350"+ - "\3\0\4\350\1\0\4\350\3\0\123\142\1\0\1\374"+ - "\1\0\1\374\1\0\10\374\1\375\2\0\1\376\1\375"+ - "\22\0\25\374\1\0\12\374\3\0\4\374\1\0\4\374"+ - "\4\0\1\377\1\0\1\377\1\0\10\377\1\u0100\2\0"+ - "\1\u0101\1\u0100\22\0\25\377\1\0\12\377\3\0\4\377"+ - "\1\0\4\377\3\0\15\u0102\1\155\3\u0102\1\155\102\u0102"+ - "\1\u0103\1\u0102\1\u0103\1\u0102\5\u0103\1\u0102\1\u0103\1\u0102"+ - "\1\0\2\u0102\1\u0104\1\0\22\u0102\25\u0103\1\u0102\12\u0103"+ - "\3\u0102\4\u0103\1\u0102\4\u0103\6\u0102\1\u0105\2\u0102\3\u0105"+ - "\1\u0102\1\u0106\1\u0105\1\u0102\1\155\3\u0102\1\155\22\u0102"+ - "\25\u0105\1\u0102\12\u0105\3\u0102\4\u0105\1\u0102\4\u0105\3\u0102"+ - "\1\0\1\u0107\1\0\1\u0107\1\0\10\u0107\1\u0108\2\0"+ - "\1\u0109\1\u0108\22\0\25\u0107\1\0\12\u0107\3\0\4\u0107"+ - "\1\0\4\u0107\4\0\1\u010a\1\0\1\u010a\1\0\10\u010a"+ - "\1\u010b\2\0\1\u010c\1\u010b\22\0\25\u010a\1\0\12\u010a"+ - "\3\0\4\u010a\1\0\4\u010a\4\0\1\163\1\0\1\163"+ - "\1\0\10\163\27\0\25\163\1\0\12\163\3\0\4\163"+ - "\1\0\4\163\33\0\1\u010d\73\0\1\u010e\1\0\1\u010e"+ - "\1\0\10\u010e\2\u010f\2\0\1\u010f\5\0\1\u0110\14\0"+ - "\25\u010e\1\0\12\u010e\3\0\4\u010e\1\0\4\u010e\4\0"+ - "\1\170\3\0\1\170\3\0\1\170\112\0\1\170\3\0"+ - "\1\170\1\231\2\0\1\170\114\0\1\u0111\2\0\3\u0111"+ - "\1\0\2\u0111\30\0\25\u0111\1\0\12\u0111\3\0\4\u0111"+ - "\1\0\4\u0111\3\0\34\176\1\u0112\122\176\1\u0112\1\u0113"+ - "\65\176\34\200\1\u0114\122\200\1\u0114\1\u0115\65\200\15\202"+ - "\1\203\3\202\1\203\14\202\1\203\4\202\1\203\57\202"+ - "\15\0\1\u0116\105\0\15\202\1\203\3\202\1\203\13\202"+ - "\1\u0117\1\203\4\202\1\203\57\202\30\0\1\u0118\122\0"+ - "\1\255\107\0\2\211\2\0\1\211\101\0\33\26\1\0"+ - "\2\26\1\0\4\26\1\0\5\26\1\0\1\26\1\0"+ - "\4\26\2\0\6\26\3\0\12\26\1\0\15\26\27\0"+ - "\1\u0119\122\0\1\u0119\42\0\1\u011a\3\0\1\u011a\114\0"+ - "\1\u011b\3\0\1\u011b\27\0\1\217\1\0\1\220\1\0"+ - "\1\217\3\0\1\217\54\0\1\220\35\0\1\170\2\0"+ - "\1\u011c\1\170\3\0\1\170\17\0\1\u011c\73\0\1\65"+ - "\121\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+ - "\1\u011d\1\41\1\u011e\15\41\1\0\3\41\1\u011d\1\41"+ - "\1\u011e\4\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\4\41\1\u011f\14\41"+ - "\1\u011f\3\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\14\41"+ - "\1\u0120\10\41\1\0\1\41\1\u0120\10\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\2\41\1\u0121\10\41\1\u0121\11\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\25\41\1\0\11\41\1\u0122\3\0"+ - "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\25\41\1\0\1\u0123\3\41\1\u0123\5\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\u0124\1\0\1\u0124"+ - "\1\0\1\u0124\1\0\3\u0124\34\0\1\u0124\1\0\1\u0124"+ - "\3\0\1\u0124\2\0\1\u0124\3\0\1\u0124\1\0\2\u0124"+ - "\1\0\1\u0124\3\0\1\u0124\33\0\1\u0125\3\0\1\u0125"+ - "\112\0\1\41\1\0\1\41\1\0\10\41\27\0\1\41"+ - "\1\u0126\13\41\1\u0126\7\41\1\0\12\41\3\0\4\41"+ + "\4\140\116\0\1\374\7\0\15\142\1\0\3\142\1\0"+ + "\1\375\1\142\1\376\1\142\1\377\77\142\1\u0100\2\142"+ + "\3\u0100\1\142\2\u0100\1\142\1\0\1\143\2\142\1\0"+ + "\1\375\1\142\1\376\1\142\1\377\15\142\25\u0100\1\142"+ + "\12\u0100\3\142\4\u0100\1\142\4\u0100\6\142\1\u0100\2\142"+ + "\3\u0100\1\142\2\u0100\1\142\1\u0101\1\143\2\142\1\0"+ + "\1\375\1\142\1\376\1\142\1\377\15\142\25\u0100\1\142"+ + "\12\u0100\3\142\4\u0100\1\142\4\u0100\3\142\3\0\1\356"+ + "\2\0\3\356\1\0\2\356\12\0\1\362\15\0\25\356"+ + "\1\0\12\356\3\0\4\356\1\0\4\356\3\0\123\142"+ + "\15\151\1\u0102\3\151\1\u0102\101\151\3\0\1\151\2\0"+ + "\3\151\1\0\2\151\2\0\1\u0103\25\0\25\151\1\0"+ + "\12\151\3\0\4\151\1\0\4\151\4\0\1\153\1\0"+ + "\1\153\1\0\10\153\3\0\1\u0104\23\0\25\153\1\0"+ + "\12\153\3\0\4\153\1\0\4\153\6\0\1\153\2\0"+ + "\3\153\1\0\2\153\2\0\1\u0105\25\0\25\153\1\0"+ + "\12\153\3\0\4\153\1\0\4\153\3\0\15\155\1\0"+ + "\3\155\1\0\102\155\1\u0106\1\155\1\u0106\1\155\5\u0106"+ + "\1\155\1\u0106\1\155\1\0\2\155\1\u0107\1\0\22\155"+ + "\25\u0106\1\155\12\u0106\3\155\4\u0106\1\155\4\u0106\6\155"+ + "\1\u0108\2\155\3\u0108\1\155\2\u0108\1\155\1\u0109\1\u010a"+ + "\2\155\1\u0109\22\155\25\u0108\1\155\12\u0108\3\155\4\u0108"+ + "\1\155\4\u0108\6\155\1\u0108\2\155\3\u0108\1\155\2\u0108"+ + "\1\155\1\157\1\u010a\2\155\1\u0109\22\155\25\u0108\1\155"+ + "\12\u0108\3\155\4\u0108\1\155\4\u0108\3\155\15\u010b\1\u010c"+ + "\3\u010b\1\u010c\101\u010b\3\0\1\u010b\2\0\3\u010b\1\0"+ + "\2\u010b\2\0\1\u010d\25\0\25\u010b\1\0\12\u010b\3\0"+ + "\4\u010b\1\0\4\u010b\4\0\1\164\1\0\1\164\1\0"+ + "\10\164\3\0\1\u010e\23\0\25\164\1\0\12\164\3\0"+ + "\4\164\1\0\4\164\6\0\1\164\2\0\3\164\1\0"+ + "\2\164\1\0\1\165\1\u010f\2\0\1\165\22\0\25\164"+ + "\1\0\12\164\3\0\4\164\1\0\4\164\6\0\1\164"+ + "\2\0\3\164\1\0\2\164\2\0\1\u010f\25\0\25\164"+ + "\1\0\12\164\3\0\4\164\1\0\4\164\4\0\1\171"+ + "\1\0\1\171\1\0\10\171\27\0\25\171\1\0\12\171"+ + "\3\0\4\171\1\0\4\171\33\0\1\u0110\73\0\1\u0111"+ + "\1\0\1\u0111\1\0\10\u0111\2\u0112\2\0\1\u0112\5\0"+ + "\1\u0113\14\0\25\u0111\1\0\12\u0111\3\0\4\u0111\1\0"+ + "\4\u0111\4\0\1\176\3\0\1\176\3\0\1\176\112\0"+ + "\1\176\3\0\1\176\1\237\2\0\1\176\114\0\1\u0114"+ + "\2\0\3\u0114\1\0\2\u0114\30\0\25\u0114\1\0\12\u0114"+ + "\3\0\4\u0114\1\0\4\u0114\3\0\34\204\1\u0115\122\204"+ + "\1\u0115\1\u0116\65\204\34\206\1\u0117\122\206\1\u0117\1\u0118"+ + "\65\206\15\210\1\211\3\210\1\211\14\210\1\211\4\210"+ + "\1\211\57\210\15\0\1\u0119\105\0\15\210\1\211\3\210"+ + "\1\211\13\210\1\u011a\1\211\4\210\1\211\57\210\30\0"+ + "\1\u011b\122\0\1\263\107\0\2\217\2\0\1\217\101\0"+ + "\33\26\1\0\2\26\1\0\4\26\1\0\5\26\1\0"+ + "\1\26\1\0\4\26\2\0\6\26\3\0\12\26\1\0"+ + "\15\26\27\0\1\u011c\122\0\1\u011c\42\0\1\u011d\3\0"+ + "\1\u011d\114\0\1\u011e\3\0\1\u011e\27\0\1\225\1\0"+ + "\1\226\1\0\1\225\3\0\1\225\54\0\1\226\35\0"+ + "\1\176\2\0\1\u011f\1\176\3\0\1\176\17\0\1\u011f"+ + "\73\0\1\65\121\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\5\41\1\u0120\1\41\1\u0121\15\41\1\0\3\41"+ + "\1\u0120\1\41\1\u0121\4\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\4\41"+ + "\1\u0122\14\41\1\u0122\3\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\11\41\1\u0127\13\41\1\0\6\41\1\u0127\3\41"+ + "\27\0\14\41\1\u0123\10\41\1\0\1\41\1\u0123\10\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\3\41\1\u0128\2\41\1\u0128\16\41"+ + "\1\0\10\41\27\0\2\41\1\u0124\10\41\1\u0124\11\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\3\41\1\u0129\2\41"+ - "\1\u0129\16\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\36\0\1\u012a\70\0\1\41\1\0\1\u012b\1\0\10\41"+ - "\27\0\22\41\1\u012b\2\41\1\0\12\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\242\1\0\1\242\1\0\10\242"+ - "\27\0\25\242\1\0\12\242\3\0\4\242\1\0\4\242"+ - "\3\0\3\243\1\0\2\243\3\0\2\243\1\0\6\243"+ - "\1\244\1\245\1\246\1\243\1\0\15\243\25\0\1\243"+ - "\12\0\3\243\4\0\1\243\4\0\150\243\1\0\1\245"+ - "\1\246\1\243\1\247\74\243\30\0\1\65\121\0\1\65"+ - "\3\0\1\u012c\147\0\1\u012d\12\0\1\u012d\63\0\1\u012e"+ - "\103\0\2\254\2\0\1\254\116\0\2\255\2\0\1\255"+ - "\102\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ - "\1\u012f\15\41\1\0\5\41\1\u012f\4\41\3\0\4\41"+ - "\1\0\3\41\1\u0130\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\14\41\1\u0131\10\41\1\0\1\41\1\u0131"+ - "\10\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\1\41\1\u0132\13\41\1\u0132"+ - "\7\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\4\41\1\256"+ - "\14\41\1\256\3\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\25\41\1\0\12\41\3\0\2\41\1\u0133\1\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\25\41\1\0\12\41\3\0\1\41\1\u0134\2\41\1\0"+ + "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\11\41"+ + "\1\u0125\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\25\41\1\0\1\u0126\3\41"+ + "\1\u0126\5\41\3\0\4\41\1\0\4\41\4\0\1\u0127"+ + "\1\0\1\u0127\1\0\1\u0127\1\0\3\u0127\34\0\1\u0127"+ + "\1\0\1\u0127\3\0\1\u0127\2\0\1\u0127\3\0\1\u0127"+ + "\1\0\2\u0127\1\0\1\u0127\3\0\1\u0127\33\0\1\u0128"+ + "\3\0\1\u0128\112\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\1\41\1\u0129\13\41\1\u0129\7\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ + "\1\0\10\41\27\0\11\41\1\u012a\13\41\1\0\6\41"+ + "\1\u012a\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\3\41\1\u012b\2\41"+ + "\1\u012b\16\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\3\41"+ + "\1\u012c\2\41\1\u012c\16\41\1\0\12\41\3\0\4\41"+ + "\1\0\4\41\36\0\1\u012d\70\0\1\41\1\0\1\u012e"+ + "\1\0\10\41\27\0\22\41\1\u012e\2\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\250\1\0\1\250"+ + "\1\0\10\250\27\0\25\250\1\0\12\250\3\0\4\250"+ + "\1\0\4\250\3\0\3\251\1\0\2\251\3\0\2\251"+ + "\1\0\6\251\1\252\1\253\1\254\1\251\1\0\15\251"+ + "\25\0\1\251\12\0\3\251\4\0\1\251\4\0\150\251"+ + "\1\0\1\253\1\254\1\251\1\255\74\251\30\0\1\65"+ + "\121\0\1\65\3\0\1\u012f\147\0\1\u0130\12\0\1\u0130"+ + "\63\0\1\u0131\103\0\2\262\2\0\1\262\116\0\2\263"+ + "\2\0\1\263\102\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\7\41\1\u0132\15\41\1\0\5\41\1\u0132\4\41"+ + "\3\0\4\41\1\0\3\41\1\u0133\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\14\41\1\u0134\10\41\1\0"+ + "\1\41\1\u0134\10\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\1\41\1\u0135"+ + "\13\41\1\u0135\7\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\11\41\1\u0135\13\41\1\0\6\41\1\u0135\3\41\3\0"+ + "\4\41\1\264\14\41\1\264\3\41\1\0\12\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\2\41\1\u0136\5\41\27\0\10\41\1\u0136\13\41\1\u0137"+ - "\1\0\2\41\1\u0137\7\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\u0138\1\0\10\41\27\0\22\41"+ - "\1\u0138\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ - "\1\u0139\4\41\1\u013a\7\41\1\u013b\1\0\1\41\1\u013a"+ - "\1\u013b\2\41\1\u0139\4\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ - "\1\u013c\4\41\1\u013a\7\41\1\u013b\1\0\1\41\1\u013a"+ - "\1\u013b\2\41\1\u0139\4\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\22\41"+ - "\1\u013d\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\14\41"+ - "\1\u013e\10\41\1\0\1\41\1\u013e\10\41\3\0\4\41"+ + "\10\41\27\0\25\41\1\0\12\41\3\0\2\41\1\u0136"+ + "\1\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\25\41\1\0\12\41\3\0\1\41\1\u0137"+ + "\2\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\11\41\1\u0138\13\41\1\0\6\41\1\u0138"+ + "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\2\41\1\u0139\5\41\27\0\10\41\1\u0139"+ + "\13\41\1\u013a\1\0\2\41\1\u013a\7\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\u013b\1\0\10\41"+ + "\27\0\22\41\1\u013b\2\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\25\41\1\0\1\u013f\3\41\1\u013f\5\41\3\0"+ - "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\2\41\1\u0140\10\41\1\u0140\11\41\1\0"+ - "\10\41\1\u0141\1\41\3\0\1\u0142\3\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\41"+ - "\1\u0143\13\41\1\u0143\7\41\1\0\12\41\3\0\4\41"+ + "\27\0\7\41\1\u013c\4\41\1\u013d\7\41\1\u013e\1\0"+ + "\1\41\1\u013d\1\u013e\2\41\1\u013c\4\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\12\41\1\u0144\12\41\1\0\12\41\3\0\4\41"+ + "\27\0\7\41\1\u013f\4\41\1\u013d\7\41\1\u013e\1\0"+ + "\1\41\1\u013d\1\u013e\2\41\1\u013c\4\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\14\41\1\u0145\10\41\1\0\1\41\1\u0145\10\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\23\41\1\u0146\1\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\11\41\1\u0147\13\41\1\0\6\41"+ - "\1\u0147\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\2\41\1\u0148\10\41"+ - "\1\u0148\1\41\1\u0149\7\41\1\0\12\41\3\0\4\41"+ + "\27\0\22\41\1\u0140\2\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\2\41\1\u0148\10\41\1\u0148\11\41\1\0\12\41"+ + "\27\0\14\41\1\u0141\10\41\1\0\1\41\1\u0141\10\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\5\41\1\u014a\17\41\1\0\3\41"+ - "\1\u014a\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\7\41\1\u014b\15\41"+ - "\1\0\5\41\1\u014b\4\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u014c"+ - "\11\41\1\u014c\12\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\12\41\1\u014d\12\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\1\41\1\u014e\13\41\1\u014e\7\41\1\0\12\41\3\0"+ - "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\5\41\1\u014f\17\41\1\0\12\41\3\0"+ - "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\3\41\1\u0150\2\41\1\u0150\16\41\1\0"+ - "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\7\41\1\u0151\1\41\1\u0152"+ - "\2\41\1\u0153\10\41\1\0\1\41\1\u0153\3\41\1\u0151"+ - "\1\u0152\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\1\u0154\1\41\1\u0155"+ - "\7\41\1\u0154\1\u0155\11\41\1\0\12\41\3\0\4\41"+ + "\1\0\10\41\27\0\25\41\1\0\1\u0142\3\41\1\u0142"+ + "\5\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\2\41\1\u0143\10\41\1\u0143"+ + "\11\41\1\0\10\41\1\u0144\1\41\3\0\1\u0145\3\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\1\u0156\4\41\1\u0157\4\41\1\u0156\12\41\1\0"+ - "\3\41\1\u0157\6\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\1\41\1\u0158"+ - "\13\41\1\u0158\7\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\41\1\0\3\41\1\u0159"+ - "\4\41\27\0\17\41\1\u0159\5\41\1\0\12\41\3\0"+ - "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\14\41\1\u015a\10\41\1\0\1\41\1\u015a"+ - "\10\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\u015b\1\0\10\41\27\0\22\41\1\u015b\2\41\1\0"+ - "\12\41\3\0\4\41\1\0\4\41\3\0\123\241\55\0"+ - "\1\u015c\22\0\1\u015c\66\0\1\u015d\4\0\1\u015e\4\0"+ - "\1\u015d\16\0\1\u015e\35\0\1\u015f\52\0\1\u015f\42\0"+ - "\1\u0160\62\0\1\u0160\101\0\1\u0161\13\0\1\u0161\105\0"+ - "\1\u0162\11\0\1\u0162\113\0\1\u0163\2\0\1\u0163\123\0"+ - "\1\u0164\23\0\1\u0164\72\0\1\u0165\2\0\1\u0165\51\0"+ - "\1\41\1\0\1\u0166\1\0\10\41\27\0\22\41\1\u0166"+ - "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u0167"+ - "\17\41\1\0\3\41\1\u0167\6\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\41\1\0\2\41\1\u0168"+ - "\5\41\27\0\3\41\1\u0169\1\u016a\1\41\1\u0169\1\u016b"+ - "\1\u0168\1\u016c\7\41\1\u016a\2\41\1\u016d\1\0\2\41"+ - "\1\u016d\2\41\1\u016b\1\u016c\2\41\1\u016e\3\0\1\41"+ - "\1\u016f\2\41\1\0\4\41\3\0\3\124\1\0\2\124"+ - "\3\0\2\124\1\0\6\124\1\352\1\353\1\346\1\124"+ - "\1\0\15\124\25\0\1\124\12\0\3\124\4\0\1\124"+ - "\4\0\25\124\1\0\1\353\1\346\1\124\1\356\74\124"+ - "\1\0\1\350\1\0\1\350\1\0\10\350\27\0\25\350"+ - "\1\0\12\350\3\0\4\350\1\0\4\350\1\0\1\u0170"+ - "\1\0\1\124\1\351\1\124\1\351\1\124\10\351\5\124"+ - "\1\345\1\0\1\346\1\124\1\347\15\124\25\351\1\124"+ - "\12\351\3\124\4\351\1\124\4\351\1\124\1\u0171\1\124"+ - "\3\131\1\0\2\131\3\0\2\131\1\0\6\131\1\363"+ - "\1\131\1\360\1\353\1\0\15\131\25\0\1\131\12\0"+ - "\3\131\4\0\1\131\4\0\25\131\1\0\1\131\1\360"+ - "\1\353\1\364\75\131\1\362\1\131\1\362\1\131\10\362"+ - "\5\131\1\357\1\131\1\360\1\0\1\361\15\131\25\362"+ - "\1\131\12\362\3\131\4\362\1\131\4\362\1\131\1\u0172"+ - "\1\131\3\142\1\u0173\2\142\3\u0173\2\142\1\u0173\1\142"+ - "\1\0\3\142\1\0\1\u0174\1\142\1\370\1\142\1\u0175"+ - "\15\142\25\u0173\1\142\12\u0173\3\142\4\u0173\1\142\4\u0173"+ - "\20\142\1\0\3\142\1\0\116\142\1\0\3\142\1\0"+ - "\1\u0175\1\142\1\370\1\142\1\u0176\75\142\1\372\1\142"+ - "\1\372\1\142\10\372\1\u0177\2\142\1\u0178\1\u0177\1\367"+ - "\1\142\1\370\1\142\1\371\15\142\25\372\1\142\12\372"+ - "\3\142\4\372\1\142\4\372\3\142\3\0\1\u0179\2\0"+ - "\3\u0179\1\0\2\u0179\30\0\25\u0179\1\0\12\u0179\3\0"+ - "\4\u0179\1\0\4\u0179\20\0\1\375\3\0\1\375\116\0"+ - "\1\u0100\3\0\1\u0100\101\0\15\u0102\1\0\3\u0102\1\0"+ - "\102\u0102\1\u0105\1\u0102\1\u0105\1\u0102\5\u0105\1\u0106\1\u0105"+ - "\1\u0106\1\u017a\2\u0102\1\u017b\1\u017a\22\u0102\25\u0105\1\u0102"+ - "\12\u0105\3\u0102\4\u0105\1\u0102\4\u0105\4\u0102\1\u0106\1\u0102"+ - "\1\u0106\1\u0102\10\u0106\1\u017c\2\u0102\1\u017d\1\u017c\22\u0102"+ - "\25\u0106\1\u0102\12\u0106\3\u0102\4\u0106\1\u0102\4\u0106\3\u0102"+ - "\15\0\1\u0108\3\0\1\u0108\116\0\1\u010b\3\0\1\u010b"+ - "\116\0\2\u010f\2\0\1\u010f\5\0\1\u0110\74\0\1\u0111"+ - "\1\0\1\u0111\1\0\10\u0111\27\0\25\u0111\1\0\12\u0111"+ - "\3\0\4\u0111\1\0\4\u0111\3\0\34\176\1\u0112\1\u017e"+ - "\65\176\34\200\1\u0114\1\u017f\65\200\15\202\1\203\3\202"+ - "\1\203\14\202\1\203\4\202\1\203\14\202\1\u0180\12\202"+ - "\1\u0180\27\202\15\0\2\u0118\2\0\1\u0118\204\0\1\u0181"+ - "\64\0\1\u0182\13\0\1\u0182\42\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\7\41\1\u0183\15\41\1\0\5\41"+ - "\1\u0183\4\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\u0184\1\0\10\41\27\0\22\41\1\u0184\2\41"+ - "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\2\41\1\u0185\5\41\27\0\4\41"+ - "\1\u0186\1\u0187\2\41\1\u0185\3\41\1\u0188\4\41\1\u0186"+ - "\3\41\1\0\1\41\1\u0188\1\41\1\u0187\6\41\3\0"+ - "\2\41\1\u0189\1\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\u018a\1\0\10\41\27\0\22\41\1\u018a\2\41\1\0"+ - "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\11\41\1\u018b\13\41\1\0"+ - "\6\41\1\u018b\3\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\1\u018c\11\41"+ - "\1\u018c\12\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ - "\1\u018d\15\41\1\0\5\41\1\u018d\4\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\u018e\1\0\10\41"+ - "\27\0\22\41\1\u018e\2\41\1\0\12\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\14\41\1\u018f\10\41\1\0\1\41\1\u018f\10\41"+ + "\27\0\1\41\1\u0146\13\41\1\u0146\7\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ + "\1\0\10\41\27\0\12\41\1\u0147\12\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\2\41\1\u0190\10\41\1\u0190\11\41"+ + "\1\0\10\41\27\0\14\41\1\u0148\10\41\1\0\1\41"+ + "\1\u0148\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\23\41\1\u0149\1\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\24\41\1\u0191\1\0"+ - "\2\41\1\u0191\7\41\3\0\4\41\1\0\4\41\36\0"+ - "\1\u012c\70\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\2\41\1\u0192\10\41\1\u0192\11\41\1\0\12\41\3\0"+ - "\4\41\1\0\4\41\6\0\1\u0193\2\0\3\u0193\1\0"+ - "\2\u0193\2\0\1\u012c\4\0\1\u0194\20\0\25\u0193\1\0"+ - "\12\u0193\1\u0195\2\0\4\u0193\1\0\4\u0193\73\0\1\u0196"+ - "\3\0\1\u0196\43\0\2\u0197\2\0\1\u0197\102\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\10\41"+ - "\1\u0198\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\10\41"+ - "\1\u0199\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\7\41\1\u019a\15\41"+ - "\1\0\5\41\1\u019a\4\41\3\0\4\41\1\0\4\41"+ + "\1\0\1\41\1\0\10\41\27\0\11\41\1\u014a\13\41"+ + "\1\0\6\41\1\u014a\3\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+ - "\1\u019b\10\41\1\u019b\11\41\1\0\12\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\u019c\1\0\10\41"+ - "\27\0\22\41\1\u019c\2\41\1\0\12\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\11\41\1\u019d\13\41\1\0\6\41\1\u019d\3\41"+ + "\1\u014b\10\41\1\u014b\1\41\1\u014c\7\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\2\41\1\u019e\10\41\1\u019e\11\41"+ + "\1\0\10\41\27\0\2\41\1\u014b\10\41\1\u014b\11\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\11\41\1\u019f\13\41"+ - "\1\0\6\41\1\u019f\3\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\u01a0\1\0\10\41\27\0\22\41"+ - "\1\u01a0\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\1\0\1\41\1\0\10\41\27\0\5\41\1\u014d\17\41"+ + "\1\0\3\41\1\u014d\6\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ - "\1\u01a1\15\41\1\0\5\41\1\u01a1\4\41\3\0\4\41"+ + "\1\u014e\15\41\1\0\5\41\1\u014e\4\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\11\41\1\u01a2\13\41\1\0\6\41\1\u01a2\3\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\15\41\1\u01a3\7\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u01a4"+ - "\1\0\10\41\27\0\22\41\1\u01a4\2\41\1\0\12\41"+ + "\27\0\1\u014f\11\41\1\u014f\12\41\1\0\12\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\12\41\1\u0150\12\41\1\0\12\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\1\41\1\u0151\13\41\1\u0151\7\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\5\41\1\u0152\17\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\3\41\1\u0153\2\41\1\u0153"+ + "\16\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0154"+ + "\1\41\1\u0155\2\41\1\u0156\10\41\1\0\1\41\1\u0156"+ + "\3\41\1\u0154\1\u0155\3\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u0157"+ + "\1\41\1\u0158\7\41\1\u0157\1\u0158\11\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\11\41\1\u01a5\13\41\1\0\6\41"+ - "\1\u01a5\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\5\41\1\u01a6\17\41"+ - "\1\0\3\41\1\u01a6\6\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\u01a7\1\0\10\41\27\0\22\41"+ - "\1\u01a7\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u01a8"+ - "\11\41\1\u01a8\12\41\1\0\12\41\3\0\4\41\1\0"+ + "\1\0\10\41\27\0\1\u0159\4\41\1\u015a\4\41\1\u0159"+ + "\12\41\1\0\3\41\1\u015a\6\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\13\41\1\u01a9\11\41\1\0\12\41\3\0\4\41\1\0"+ + "\1\41\1\u015b\13\41\1\u015b\7\41\1\0\12\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\3\41\1\u015c\4\41\27\0\17\41\1\u015c\5\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\14\41\1\u015d\10\41\1\0"+ + "\1\41\1\u015d\10\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\u015e\1\0\10\41\27\0\22\41\1\u015e"+ + "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\3\0"+ + "\123\247\55\0\1\u015f\22\0\1\u015f\66\0\1\u0160\4\0"+ + "\1\u0161\4\0\1\u0160\16\0\1\u0161\35\0\1\u0162\52\0"+ + "\1\u0162\42\0\1\u0163\62\0\1\u0163\101\0\1\u0164\13\0"+ + "\1\u0164\105\0\1\u0165\11\0\1\u0165\113\0\1\u0166\2\0"+ + "\1\u0166\123\0\1\u0167\23\0\1\u0167\72\0\1\u0168\2\0"+ + "\1\u0168\51\0\1\41\1\0\1\u0169\1\0\10\41\27\0"+ + "\22\41\1\u0169\2\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\7\41\1\u01aa\15\41\1\0\5\41\1\u01aa\4\41\3\0"+ + "\5\41\1\u016a\17\41\1\0\3\41\1\u016a\6\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\22\41\1\u01ab\2\41\1\0\12\41\3\0"+ + "\2\41\1\u016b\5\41\27\0\3\41\1\u016c\1\u016d\1\41"+ + "\1\u016c\1\u016e\1\u016b\1\u016f\7\41\1\u016d\2\41\1\u0170"+ + "\1\0\2\41\1\u0170\2\41\1\u016e\1\u016f\2\41\1\u0171"+ + "\3\0\1\41\1\u0172\2\41\1\0\4\41\3\0\3\124"+ + "\1\0\2\124\3\0\2\124\1\0\6\124\1\360\1\361"+ + "\1\354\1\124\1\0\15\124\25\0\1\124\12\0\3\124"+ + "\4\0\1\124\4\0\25\124\1\0\1\361\1\354\1\124"+ + "\1\364\74\124\1\0\1\356\1\0\1\356\1\0\10\356"+ + "\27\0\25\356\1\0\12\356\3\0\4\356\1\0\4\356"+ + "\1\0\1\u0173\1\0\1\124\1\357\1\124\1\357\1\124"+ + "\10\357\5\124\1\353\1\0\1\354\1\124\1\355\15\124"+ + "\25\357\1\124\12\357\3\124\4\357\1\124\4\357\1\124"+ + "\1\u0174\1\124\3\131\1\0\2\131\3\0\2\131\1\0"+ + "\6\131\1\371\1\131\1\366\1\361\1\0\15\131\25\0"+ + "\1\131\12\0\3\131\4\0\1\131\4\0\25\131\1\0"+ + "\1\131\1\366\1\361\1\372\75\131\1\370\1\131\1\370"+ + "\1\131\10\370\5\131\1\365\1\131\1\366\1\0\1\367"+ + "\15\131\25\370\1\131\12\370\3\131\4\370\1\131\4\370"+ + "\1\131\1\u0175\1\131\3\142\1\u0176\2\142\3\u0176\2\142"+ + "\1\u0176\1\142\1\0\3\142\1\0\1\u0177\1\142\1\376"+ + "\1\142\1\u0178\15\142\25\u0176\1\142\12\u0176\3\142\4\u0176"+ + "\1\142\4\u0176\20\142\1\0\3\142\1\0\116\142\1\0"+ + "\3\142\1\0\1\u0178\1\142\1\376\1\142\1\u0179\74\142"+ + "\15\u0100\1\u017a\3\u0100\1\u017a\101\u0100\3\0\1\u0100\2\0"+ + "\3\u0100\1\0\2\u0100\2\0\1\u0101\25\0\25\u0100\1\0"+ + "\12\u0100\3\0\4\u0100\1\0\4\u0100\3\0\15\u0108\1\u017b"+ + "\3\u0108\1\u017b\101\u0108\3\155\1\u0106\2\155\3\u0106\2\155"+ + "\1\u0106\1\155\1\u0109\3\155\1\u0109\22\155\25\u0106\1\155"+ + "\12\u0106\3\155\4\u0106\1\155\4\u0106\6\155\1\u0108\2\155"+ + "\3\u0108\1\155\2\u0108\1\155\1\0\1\u010a\2\155\1\0"+ + "\22\155\25\u0108\1\155\12\u0108\3\155\4\u0108\1\155\4\u0108"+ + "\3\155\15\0\2\u0112\2\0\1\u0112\5\0\1\u0113\74\0"+ + "\1\u0114\1\0\1\u0114\1\0\10\u0114\27\0\25\u0114\1\0"+ + "\12\u0114\3\0\4\u0114\1\0\4\u0114\3\0\34\204\1\u0115"+ + "\1\u017c\65\204\34\206\1\u0117\1\u017d\65\206\15\210\1\211"+ + "\3\210\1\211\14\210\1\211\4\210\1\211\14\210\1\u017e"+ + "\12\210\1\u017e\27\210\15\0\2\u011b\2\0\1\u011b\204\0"+ + "\1\u017f\64\0\1\u0180\13\0\1\u0180\42\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\7\41\1\u0181\15\41\1\0"+ + "\5\41\1\u0181\4\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\u0182\1\0\10\41\27\0\22\41\1\u0182"+ + "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\2\41\1\u0183\5\41\27\0"+ + "\4\41\1\u0184\1\u0185\2\41\1\u0183\3\41\1\u0186\4\41"+ + "\1\u0184\3\41\1\0\1\41\1\u0186\1\41\1\u0185\6\41"+ + "\3\0\2\41\1\u0187\1\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\u0188\1\0\10\41\27\0\22\41\1\u0188\2\41"+ + "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\11\41\1\u0189\13\41"+ + "\1\0\6\41\1\u0189\3\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u018a"+ + "\11\41\1\u018a\12\41\1\0\12\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ + "\7\41\1\u018b\15\41\1\0\5\41\1\u018b\4\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\u018c\1\0"+ + "\10\41\27\0\22\41\1\u018c\2\41\1\0\12\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\2\41\1\u01ac\5\41\27\0\10\41\1\u01ac\14\41\1\0"+ - "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\7\41\1\u01ad\15\41\1\0"+ - "\5\41\1\u01ad\4\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u01ae"+ - "\17\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u01af"+ - "\15\41\1\0\5\41\1\u01af\4\41\3\0\4\41\1\0"+ + "\10\41\27\0\14\41\1\u018d\10\41\1\0\1\41\1\u018d"+ + "\10\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\2\41\1\u018e\10\41\1\u018e"+ + "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\24\41\1\u018f"+ + "\1\0\2\41\1\u018f\7\41\3\0\4\41\1\0\4\41"+ + "\36\0\1\u012f\70\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\2\41\1\u0190\10\41\1\u0190\11\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\6\0\1\u0191\2\0\3\u0191"+ + "\1\0\2\u0191\2\0\1\u012f\4\0\1\u0192\20\0\25\u0191"+ + "\1\0\12\u0191\1\u0193\2\0\4\u0191\1\0\4\u0191\73\0"+ + "\1\u0194\3\0\1\u0194\43\0\2\u0195\2\0\1\u0195\102\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+ + "\10\41\1\u0196\1\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+ + "\10\41\1\u0197\1\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0198"+ + "\15\41\1\0\5\41\1\u0198\4\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\1\u01b0\11\41\1\u01b0\12\41\1\0\12\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\3\41"+ - "\1\u01b1\4\41\27\0\17\41\1\u01b1\5\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\11\41\1\u01b2\13\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\21\41\1\u01b3\3\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\7\41\1\u01b4\4\41\1\u01b5\10\41"+ - "\1\0\1\41\1\u01b5\3\41\1\u01b4\4\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\24\41\1\u01b6\1\0\2\41\1\u01b6\7\41\3\0"+ + "\2\41\1\u0199\10\41\1\u0199\11\41\1\0\12\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\u019a\1\0"+ + "\10\41\27\0\22\41\1\u019a\2\41\1\0\12\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\11\41\1\u01b7\13\41\1\0\6\41\1\u01b7"+ + "\10\41\27\0\11\41\1\u019b\13\41\1\0\6\41\1\u019b"+ "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\u01b8\1\0\10\41\27\0\22\41\1\u01b8\2\41\1\0"+ - "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\3\41\1\u01b9\2\41\1\u01b9"+ - "\16\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\14\41\1\u01ba"+ - "\10\41\1\0\1\41\1\u01ba\10\41\3\0\4\41\1\0"+ + "\1\41\1\0\10\41\27\0\2\41\1\u019c\10\41\1\u019c"+ + "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\11\41\1\u019d"+ + "\13\41\1\0\6\41\1\u019d\3\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\u019e\1\0\10\41\27\0"+ + "\22\41\1\u019e\2\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\7\41\1\u01bb\15\41\1\0\5\41\1\u01bb\4\41\3\0"+ + "\7\41\1\u019f\15\41\1\0\5\41\1\u019f\4\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\3\41\1\u01bc\2\41\1\u01bc\11\41\1\u01bd"+ - "\4\41\1\0\12\41\3\0\4\41\1\0\1\u01bd\3\41"+ - "\4\0\1\41\1\0\1\u01be\1\0\10\41\27\0\22\41"+ - "\1\u01be\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+ - "\1\u01bf\13\41\1\0\6\41\1\u01bf\3\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\u01c0\1\0\10\41"+ - "\27\0\22\41\1\u01c0\2\41\1\0\12\41\3\0\4\41"+ - "\1\0\4\41\47\0\1\u01c1\11\0\1\u01c1\110\0\1\u01c2"+ - "\11\0\1\u01c2\113\0\1\u01c3\2\0\1\u01c3\137\0\1\u01c4"+ - "\25\0\1\u01c4\53\0\1\u01c5\10\0\1\u01c5\110\0\1\u01c6"+ - "\13\0\1\u01c6\143\0\1\u01c7\73\0\1\u01c8\23\0\1\u01c8"+ - "\70\0\1\u01c9\13\0\1\u01c9\121\0\1\u01ca\12\0\1\u01ca"+ - "\30\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+ - "\1\u01cb\13\41\1\0\6\41\1\u01cb\3\41\3\0\4\41"+ + "\10\41\27\0\11\41\1\u01a0\13\41\1\0\6\41\1\u01a0"+ + "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\15\41\1\u01a1\7\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\u01a2\1\0\10\41\27\0\22\41\1\u01a2\2\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\11\41\1\u01a3\13\41\1\0"+ + "\6\41\1\u01a3\3\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u01a4"+ + "\17\41\1\0\3\41\1\u01a4\6\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\u01a5\1\0\10\41\27\0"+ + "\22\41\1\u01a5\2\41\1\0\12\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ + "\1\u01a6\11\41\1\u01a6\12\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\11\41\1\u01cc\13\41\1\0\6\41\1\u01cc\3\41"+ + "\27\0\13\41\1\u01a7\11\41\1\0\12\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\7\41\1\u01a8\15\41\1\0\5\41\1\u01a8\4\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\5\41\1\u01cd\17\41\1\0\3\41"+ - "\1\u01cd\4\41\1\u01ce\1\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+ - "\1\u01cf\10\41\1\u01cf\11\41\1\0\12\41\3\0\4\41"+ + "\1\0\10\41\27\0\22\41\1\u01a9\2\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ + "\1\0\2\41\1\u01aa\5\41\27\0\10\41\1\u01aa\14\41"+ + "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\7\41\1\u01ab\15\41"+ + "\1\0\5\41\1\u01ab\4\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+ + "\1\u01ac\17\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ + "\1\u01ad\15\41\1\0\5\41\1\u01ad\4\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\5\41\1\u01d0\17\41\1\0\3\41\1\u01d0\6\41"+ + "\27\0\1\u01ae\11\41\1\u01ae\12\41\1\0\12\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\3\41\1\u01af\4\41\27\0\17\41\1\u01af\5\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\11\41\1\u01b0\13\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\21\41\1\u01b1\3\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\7\41\1\u01b2\4\41\1\u01b3"+ + "\10\41\1\0\1\41\1\u01b3\3\41\1\u01b2\4\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\24\41\1\u01b4\1\0\2\41\1\u01b4\7\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\1\41\1\u01d1\13\41\1\u01d1\7\41"+ + "\1\0\10\41\27\0\11\41\1\u01b5\13\41\1\0\6\41"+ + "\1\u01b5\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\u01b6\1\0\10\41\27\0\22\41\1\u01b6\2\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\5\41\1\u01d2\17\41"+ - "\1\0\3\41\1\u01d2\6\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+ - "\1\u01d3\13\41\1\0\6\41\1\u01d3\3\41\3\0\4\41"+ + "\1\0\1\41\1\0\10\41\27\0\3\41\1\u01b7\2\41"+ + "\1\u01b7\16\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\14\41"+ + "\1\u01b8\10\41\1\0\1\41\1\u01b8\10\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\2\41\1\u01d4\10\41\1\u01d4\11\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u01d5"+ - "\1\0\10\41\27\0\22\41\1\u01d5\2\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\u0173\1\0\1\u0173"+ - "\1\0\10\u0173\27\0\25\u0173\1\0\12\u0173\3\0\4\u0173"+ - "\1\0\4\u0173\1\0\1\u01d6\1\0\3\142\1\0\2\142"+ - "\3\0\2\142\1\0\1\142\1\0\3\142\1\0\1\u0174"+ - "\1\142\1\370\1\142\1\0\15\142\25\0\1\142\12\0"+ - "\3\142\4\0\1\142\4\0\20\142\1\0\3\142\2\0"+ - "\1\142\1\370\1\142\1\u0176\111\142\1\u0177\3\142\1\u0177"+ - "\1\367\1\142\1\370\1\142\1\371\74\142\1\0\1\u0179"+ - "\1\0\1\u0179\1\0\10\u0179\1\u0177\2\0\1\u01d7\1\u0177"+ - "\22\0\25\u0179\1\0\12\u0179\3\0\4\u0179\1\0\4\u0179"+ - "\3\0\15\u0102\1\u017a\3\u0102\1\u017a\116\u0102\1\u017c\3\u0102"+ - "\1\u017c\101\u0102\15\202\1\203\3\202\1\203\14\202\1\203"+ - "\4\202\1\203\24\202\1\u01d8\3\202\1\u01d8\26\202\72\0"+ - "\1\u01d9\3\0\1\u01d9\75\0\1\u01da\23\0\1\u01da\26\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\3\41\1\u01db"+ - "\2\41\1\u01db\16\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\1\u01dc\11\41\1\u01dc\12\41\1\0\12\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\u01dd\1\0\10\41"+ - "\27\0\22\41\1\u01dd\2\41\1\0\12\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\2\41"+ - "\1\u01de\5\41\27\0\10\41\1\u01de\14\41\1\0\12\41"+ + "\27\0\7\41\1\u01b9\15\41\1\0\5\41\1\u01b9\4\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\2\41"+ - "\1\u01df\1\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\25\41\1\0\11\41\1\u01e0\3\0"+ + "\1\0\10\41\27\0\3\41\1\u01ba\2\41\1\u01ba\11\41"+ + "\1\u01bb\4\41\1\0\12\41\3\0\4\41\1\0\1\u01bb"+ + "\3\41\4\0\1\41\1\0\1\u01bc\1\0\10\41\27\0"+ + "\22\41\1\u01bc\2\41\1\0\12\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ + "\11\41\1\u01bd\13\41\1\0\6\41\1\u01bd\3\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\u01be\1\0"+ + "\10\41\27\0\22\41\1\u01be\2\41\1\0\12\41\3\0"+ + "\4\41\1\0\4\41\47\0\1\u01bf\11\0\1\u01bf\110\0"+ + "\1\u01c0\11\0\1\u01c0\113\0\1\u01c1\2\0\1\u01c1\137\0"+ + "\1\u01c2\25\0\1\u01c2\53\0\1\u01c3\10\0\1\u01c3\110\0"+ + "\1\u01c4\13\0\1\u01c4\143\0\1\u01c5\73\0\1\u01c6\23\0"+ + "\1\u01c6\70\0\1\u01c7\13\0\1\u01c7\121\0\1\u01c8\12\0"+ + "\1\u01c8\30\0\1\41\1\0\1\41\1\0\10\41\27\0"+ + "\11\41\1\u01c9\13\41\1\0\6\41\1\u01c9\3\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\11\41\1\u01ca\13\41\1\0\6\41\1\u01ca"+ + "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\5\41\1\u01cb\17\41\1\0"+ + "\3\41\1\u01cb\4\41\1\u01cc\1\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ + "\2\41\1\u01cd\10\41\1\u01cd\11\41\1\0\12\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\5\41\1\u01e1\17\41\1\0\3\41\1\u01e1"+ + "\10\41\27\0\5\41\1\u01ce\17\41\1\0\3\41\1\u01ce"+ "\6\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+ - "\1\u01e2\3\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\2\41\1\u01e3\10\41\1\u01e3\11\41"+ + "\1\41\1\0\10\41\27\0\1\41\1\u01cf\13\41\1\u01cf"+ + "\7\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u01d0"+ + "\17\41\1\0\3\41\1\u01d0\6\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ + "\11\41\1\u01d1\13\41\1\0\6\41\1\u01d1\3\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\2\41\1\u01d2\10\41\1\u01d2\11\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\u01d3\1\0\10\41\27\0\22\41\1\u01d3\2\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\u0176\1\0"+ + "\1\u0176\1\0\10\u0176\27\0\25\u0176\1\0\12\u0176\3\0"+ + "\4\u0176\1\0\4\u0176\1\0\1\u01d4\1\0\3\142\1\0"+ + "\2\142\3\0\2\142\1\0\1\142\1\0\3\142\1\0"+ + "\1\u0177\1\142\1\376\1\142\1\0\15\142\25\0\1\142"+ + "\12\0\3\142\4\0\1\142\4\0\20\142\1\0\3\142"+ + "\2\0\1\142\1\376\1\142\1\u0179\74\142\15\210\1\211"+ + "\3\210\1\211\14\210\1\211\4\210\1\211\24\210\1\u01d5"+ + "\3\210\1\u01d5\26\210\72\0\1\u01d6\3\0\1\u01d6\75\0"+ + "\1\u01d7\23\0\1\u01d7\26\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\3\41\1\u01d8\2\41\1\u01d8\16\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\1\u01d9\11\41\1\u01d9\12\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\u01e4\1\0\10\41\27\0\22\41\1\u01e4\2\41"+ + "\1\0\1\u01da\1\0\10\41\27\0\22\41\1\u01da\2\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\11\41\1\u01e5\13\41"+ - "\1\0\6\41\1\u01e5\3\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ - "\1\u01e6\15\41\1\0\5\41\1\u01e6\4\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\25\41\1\0\12\41\3\0\3\41\1\u01e7\1\0"+ - "\4\41\4\0\1\u0193\1\0\1\u0193\1\0\10\u0193\1\u01e8"+ - "\3\0\1\u01e9\22\0\25\u0193\1\0\12\u0193\3\0\4\u0193"+ - "\1\0\4\u0193\6\0\1\u01ea\2\0\3\u01ea\1\0\2\u01ea"+ - "\30\0\25\u01ea\1\0\12\u01ea\3\0\4\u01ea\1\0\4\u01ea"+ - "\6\0\1\u01eb\2\0\3\u01eb\1\0\2\u01eb\30\0\25\u01eb"+ - "\1\0\12\u01eb\3\0\4\u01eb\1\0\4\u01eb\50\0\1\u01ec"+ - "\13\0\1\u01ec\42\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\1\41\1\u01ed\13\41\1\u01ed\7\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\5\41\1\u01ee\17\41\1\0\3\41"+ - "\1\u01ee\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\1\41\1\u01ef\13\41"+ - "\1\u01ef\7\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\1\0\1\41\1\0\2\41\1\u01db\5\41\27\0\10\41"+ + "\1\u01db\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ - "\1\0\12\41\3\0\1\u01f0\3\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\14\41\1\u01f1"+ - "\10\41\1\0\1\41\1\u01f1\10\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\25\41\1\0\10\41\1\u01f2\1\41\3\0\4\41\1\0"+ + "\1\0\12\41\3\0\2\41\1\u01dc\1\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ + "\1\0\11\41\1\u01dd\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u01de"+ + "\17\41\1\0\3\41\1\u01de\6\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\2\41\1\u01f3\10\41\1\u01f3\11\41\1\0\12\41\3\0"+ - "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\1\41\1\u01f4\13\41\1\u01f4\7\41\1\0"+ + "\25\41\1\0\12\41\3\0\1\u01df\3\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+ + "\1\u01e0\10\41\1\u01e0\11\41\1\0\12\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\u01e1\1\0\10\41"+ + "\27\0\22\41\1\u01e1\2\41\1\0\12\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\11\41\1\u01e2\13\41\1\0\6\41\1\u01e2\3\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ + "\1\0\10\41\27\0\7\41\1\u01e3\15\41\1\0\5\41"+ + "\1\u01e3\4\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+ + "\3\0\3\41\1\u01e4\1\0\4\41\4\0\1\u0191\1\0"+ + "\1\u0191\1\0\10\u0191\1\u01e5\3\0\1\u01e6\22\0\25\u0191"+ + "\1\0\12\u0191\3\0\4\u0191\1\0\4\u0191\6\0\1\u01e7"+ + "\2\0\3\u01e7\1\0\2\u01e7\30\0\25\u01e7\1\0\12\u01e7"+ + "\3\0\4\u01e7\1\0\4\u01e7\6\0\1\u01e8\2\0\3\u01e8"+ + "\1\0\2\u01e8\30\0\25\u01e8\1\0\12\u01e8\3\0\4\u01e8"+ + "\1\0\4\u01e8\50\0\1\u01e9\13\0\1\u01e9\42\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\1\41\1\u01ea\13\41"+ + "\1\u01ea\7\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+ + "\1\u01eb\17\41\1\0\3\41\1\u01eb\6\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\1\41\1\u01ec\13\41\1\u01ec\7\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ + "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\1\u01ed"+ + "\3\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\14\41\1\u01ee\10\41\1\0\1\41\1\u01ee"+ + "\10\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\25\41\1\0\10\41\1\u01ef"+ + "\1\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\2\41\1\u01f0\10\41\1\u01f0"+ + "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\1\41\1\u01f1"+ + "\13\41\1\u01f1\7\41\1\0\12\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\u01f2\1\0\10\41\27\0"+ + "\2\41\1\u01f3\10\41\1\u01f3\6\41\1\u01f2\2\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\25\41\1\0\10\41\1\u01f4"+ + "\1\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\13\41\1\u01f5\11\41\1\0"+ "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\u01f5\1\0\10\41\27\0\2\41\1\u01f6\10\41\1\u01f6"+ - "\6\41\1\u01f5\2\41\1\0\12\41\3\0\4\41\1\0"+ + "\1\41\1\0\10\41\27\0\7\41\1\u01f6\15\41\1\0"+ + "\5\41\1\u01f6\4\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\u01f7\1\0\10\41\27\0\22\41\1\u01f7"+ + "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u01f8"+ + "\15\41\1\0\5\41\1\u01f8\4\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\25\41\1\0\10\41\1\u01f7\1\41\3\0\4\41\1\0"+ + "\25\41\1\0\12\41\3\0\2\41\1\u01f9\1\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\13\41\1\u01f8\11\41\1\0\12\41\3\0\4\41\1\0"+ + "\7\41\1\u01fa\15\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\7\41\1\u01f9\15\41\1\0\5\41\1\u01f9\4\41\3\0"+ - "\4\41\1\0\4\41\4\0\1\41\1\0\1\u01fa\1\0"+ - "\10\41\27\0\22\41\1\u01fa\2\41\1\0\12\41\3\0"+ + "\24\41\1\u01fb\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+ + "\1\u01fc\17\41\1\0\3\41\1\u01fc\6\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\6\41\1\u01fd\16\41\1\0\12\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\24\41\1\u01fe\1\0\2\41\1\u01fe\7\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\7\41\1\u01fb\15\41\1\0\5\41\1\u01fb"+ - "\4\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+ - "\2\41\1\u01fc\1\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\7\41\1\u01fd\15\41\1\0"+ + "\10\41\27\0\2\41\1\u01ff\10\41\1\u01ff\11\41\1\0"+ "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\24\41\1\u01fe\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\5\41\1\u01ff\17\41\1\0\3\41"+ - "\1\u01ff\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\6\41\1\u0200\16\41"+ - "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\24\41\1\u0201\1\0"+ - "\2\41\1\u0201\7\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u0202"+ - "\10\41\1\u0202\11\41\1\0\12\41\3\0\4\41\1\0"+ + "\1\41\1\0\10\41\27\0\5\41\1\u0200\17\41\1\0"+ + "\3\41\1\u0200\6\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0201"+ + "\15\41\1\0\5\41\1\u0201\4\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\5\41\1\u0203\17\41\1\0\3\41\1\u0203\6\41\3\0"+ - "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\7\41\1\u0204\15\41\1\0\5\41\1\u0204"+ - "\4\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\25\41\1\0\11\41\1\u0205"+ + "\25\41\1\0\11\41\1\u0202\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+ + "\1\u0203\10\41\1\u0203\11\41\1\0\12\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\u0204\1\0\10\41"+ + "\27\0\22\41\1\u0204\2\41\1\0\12\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\14\41\1\u0205\10\41\1\0\1\41\1\u0205\10\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u0206"+ + "\1\0\10\41\27\0\22\41\1\u0206\2\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\2\41\1\u0206\10\41\1\u0206\11\41"+ - "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\u0207\1\0\10\41\27\0\22\41\1\u0207\2\41"+ - "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\14\41\1\u0208\10\41"+ - "\1\0\1\41\1\u0208\10\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\u0209\1\0\10\41\27\0\22\41"+ - "\1\u0209\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ - "\1\u020a\15\41\1\0\5\41\1\u020a\4\41\3\0\4\41"+ + "\1\0\10\41\27\0\7\41\1\u0207\15\41\1\0\5\41"+ + "\1\u0207\4\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\2\41\1\u0208\10\41"+ + "\1\u0208\11\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\3\41"+ + "\1\u0209\2\41\1\u0209\16\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\2\41\1\u020b\10\41\1\u020b\11\41\1\0\12\41"+ + "\27\0\5\41\1\u020a\17\41\1\0\3\41\1\u020a\6\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\3\41\1\u020c\2\41\1\u020c\16\41"+ - "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\5\41\1\u020d\17\41"+ - "\1\0\3\41\1\u020d\6\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ - "\1\u020e\15\41\1\0\5\41\1\u020e\4\41\3\0\4\41"+ - "\1\0\4\41\51\0\1\u020f\10\0\1\u020f\120\0\1\u0210"+ - "\22\0\1\u0210\70\0\1\u0211\10\0\1\u0211\46\0\1\u0212"+ - "\62\0\1\u0212\111\0\1\u0213\22\0\1\u0213\70\0\1\u0214"+ - "\10\0\1\u0214\53\0\1\u0215\52\0\1\u0215\42\0\1\u0216"+ - "\12\0\1\u0213\47\0\1\u0216\2\0\1\u0217\102\0\1\u0218"+ - "\23\0\1\u0218\30\0\1\u020f\62\0\1\u020f\35\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\4\41\1\u0219\14\41"+ - "\1\u0219\3\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\u021a\1\0\10\41\27\0\22\41"+ - "\1\u021a\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+ - "\1\u021b\13\41\1\0\6\41\1\u021b\3\41\3\0\4\41"+ + "\1\0\10\41\27\0\7\41\1\u020b\15\41\1\0\5\41"+ + "\1\u020b\4\41\3\0\4\41\1\0\4\41\51\0\1\u020c"+ + "\10\0\1\u020c\120\0\1\u020d\22\0\1\u020d\70\0\1\u020e"+ + "\10\0\1\u020e\46\0\1\u020f\62\0\1\u020f\111\0\1\u0210"+ + "\22\0\1\u0210\70\0\1\u0211\10\0\1\u0211\53\0\1\u0212"+ + "\52\0\1\u0212\42\0\1\u0213\12\0\1\u0210\47\0\1\u0213"+ + "\2\0\1\u0214\102\0\1\u0215\23\0\1\u0215\30\0\1\u020c"+ + "\62\0\1\u020c\35\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\4\41\1\u0216\14\41\1\u0216\3\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u0217"+ + "\1\0\10\41\27\0\22\41\1\u0217\2\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ + "\1\0\10\41\27\0\11\41\1\u0218\13\41\1\0\6\41"+ + "\1\u0218\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\3\41\1\u0219\2\41"+ + "\1\u0219\16\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ + "\1\0\12\41\3\0\1\41\1\u021a\2\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\41"+ + "\1\u021b\13\41\1\u021b\7\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\3\41\1\u021c\2\41\1\u021c\16\41\1\0\12\41"+ + "\27\0\2\41\1\u021c\10\41\1\u021c\11\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\1\41"+ - "\1\u021d\2\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\1\41\1\u021e\13\41\1\u021e\7\41"+ + "\1\0\10\41\27\0\3\41\1\u021d\2\41\1\u021d\16\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\2\41\1\u021f\10\41"+ - "\1\u021f\11\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\3\41"+ - "\1\u0220\2\41\1\u0220\16\41\1\0\12\41\3\0\4\41"+ + "\1\0\1\41\1\0\10\41\27\0\2\41\1\u021e\10\41"+ + "\1\u021e\11\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+ + "\1\u021f\13\41\1\0\6\41\1\u021f\3\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\2\41\1\u0221\10\41\1\u0221\11\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\11\41\1\u0222\13\41\1\0\6\41"+ - "\1\u0222\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\7\41\1\u0223\15\41"+ - "\1\0\5\41\1\u0223\4\41\3\0\4\41\1\0\4\41"+ - "\20\0\1\u0177\3\0\1\u0177\101\0\15\202\1\203\3\202"+ - "\1\203\14\202\1\203\4\202\1\203\1\202\1\u0224\13\202"+ - "\1\u0224\41\202\72\0\1\u0225\3\0\1\u0225\25\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\4\41\1\u0226\14\41"+ - "\1\u0226\3\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\27\0\7\41\1\u0220\15\41\1\0\5\41\1\u0220\4\41"+ + "\3\0\4\41\1\0\4\41\3\0\15\210\1\211\3\210"+ + "\1\211\14\210\1\211\4\210\1\211\1\210\1\u0221\13\210"+ + "\1\u0221\41\210\72\0\1\u0222\3\0\1\u0222\25\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\4\41\1\u0223\14\41"+ + "\1\u0223\3\41\1\0\12\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\41"+ - "\1\u0227\13\41\1\u0227\7\41\1\0\12\41\3\0\4\41"+ + "\1\u0224\13\41\1\u0224\7\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\24\41\1\u0228\1\0\2\41\1\u0228\7\41\3\0"+ + "\27\0\24\41\1\u0225\1\0\2\41\1\u0225\7\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\5\41\1\u0229\17\41\1\0\3\41\1\u0229"+ + "\10\41\27\0\5\41\1\u0226\17\41\1\0\3\41\1\u0226"+ "\6\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\5\41\1\u022a\17\41\1\0"+ - "\3\41\1\u022a\6\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\2\41\1\u022b\5\41\27\0"+ - "\10\41\1\u022b\14\41\1\0\12\41\3\0\4\41\1\0"+ + "\1\41\1\0\10\41\27\0\5\41\1\u0227\17\41\1\0"+ + "\3\41\1\u0227\6\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\2\41\1\u0228\5\41\27\0"+ + "\10\41\1\u0228\14\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\24\41\1\u022c\1\0\2\41\1\u022c\7\41\3\0\4\41"+ + "\24\41\1\u0229\1\0\2\41\1\u0229\7\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\11\41\1\u022d\13\41\1\0\6\41\1\u022d\3\41"+ + "\27\0\11\41\1\u022a\13\41\1\0\6\41\1\u022a\3\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\5\41\1\u022e\17\41\1\0\3\41"+ - "\1\u022e\6\41\3\0\4\41\1\0\4\41\20\0\1\u01e8"+ - "\106\0\1\u01ea\1\0\1\u01ea\1\0\10\u01ea\6\0\1\u022f"+ - "\20\0\25\u01ea\1\0\12\u01ea\3\0\4\u01ea\1\0\4\u01ea"+ - "\4\0\1\u01eb\1\0\1\u01eb\1\0\10\u01eb\27\0\25\u01eb"+ - "\1\0\12\u01eb\1\u0230\2\0\4\u01eb\1\0\4\u01eb\54\0"+ - "\1\u0231\23\0\1\u0231\26\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\3\41\1\u0232\2\41\1\u0232\16\41\1\0"+ + "\1\0\10\41\27\0\5\41\1\u022b\17\41\1\0\3\41"+ + "\1\u022b\6\41\3\0\4\41\1\0\4\41\20\0\1\u01e5"+ + "\106\0\1\u01e7\1\0\1\u01e7\1\0\10\u01e7\6\0\1\u022c"+ + "\20\0\25\u01e7\1\0\12\u01e7\3\0\4\u01e7\1\0\4\u01e7"+ + "\4\0\1\u01e8\1\0\1\u01e8\1\0\10\u01e8\27\0\25\u01e8"+ + "\1\0\12\u01e8\1\u022d\2\0\4\u01e8\1\0\4\u01e8\54\0"+ + "\1\u022e\23\0\1\u022e\26\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\3\41\1\u022f\2\41\1\u022f\16\41\1\0"+ "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\1\41\1\u0233\13\41\1\u0233"+ + "\1\41\1\0\10\41\27\0\1\41\1\u0230\13\41\1\u0230"+ "\7\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u0234"+ - "\10\41\1\u0234\11\41\1\0\12\41\3\0\4\41\1\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u0231"+ + "\10\41\1\u0231\11\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\25\41\1\0\1\u0235\3\41\1\u0235\5\41\3\0\4\41"+ + "\25\41\1\0\1\u0232\3\41\1\u0232\5\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\11\41\1\u0236\13\41\1\0\6\41\1\u0236\3\41"+ + "\27\0\11\41\1\u0233\13\41\1\0\6\41\1\u0233\3\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\1\41\1\u0237\13\41\1\u0237\7\41"+ + "\1\0\10\41\27\0\1\41\1\u0234\13\41\1\u0234\7\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\2\41\1\u0238\5\41\27\0\10\41"+ - "\1\u0238\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\1\0\1\41\1\0\2\41\1\u0235\5\41\27\0\10\41"+ + "\1\u0235\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+ - "\1\u0239\10\41\1\u0239\11\41\1\0\12\41\3\0\4\41"+ + "\1\u0236\10\41\1\u0236\11\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\3\41\1\u023a\2\41\1\u023a\16\41\1\0\12\41"+ + "\27\0\3\41\1\u0237\2\41\1\u0237\16\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\4\41\1\u023b\14\41\1\u023b\3\41"+ + "\1\0\10\41\27\0\4\41\1\u0238\14\41\1\u0238\3\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\17\41\1\u023c\5\41"+ + "\1\0\1\41\1\0\10\41\27\0\17\41\1\u0239\5\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+ - "\3\0\1\41\1\u023d\2\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\7\41\1\u023e\15\41"+ + "\3\0\1\41\1\u023a\2\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\7\41\1\u023b\15\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\24\41\1\u023f\1\0"+ - "\2\41\1\u023f\7\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\16\41\1\u0240"+ + "\1\0\1\41\1\0\10\41\27\0\24\41\1\u023c\1\0"+ + "\2\41\1\u023c\7\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\16\41\1\u023d"+ "\6\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+ - "\11\41\1\u0241\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\11\41\1\u0242\13\41"+ - "\1\0\6\41\1\u0242\3\41\3\0\4\41\1\0\4\41"+ + "\11\41\1\u023e\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\11\41\1\u023f\13\41"+ + "\1\0\6\41\1\u023f\3\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\3\41"+ - "\1\u0243\2\41\1\u0243\16\41\1\0\12\41\3\0\4\41"+ + "\1\u0240\2\41\1\u0240\16\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\3\41"+ - "\1\u0244\4\41\27\0\17\41\1\u0244\5\41\1\0\12\41"+ + "\1\u0241\4\41\27\0\17\41\1\u0241\5\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\24\41\1\u0245\1\0\2\41\1\u0245"+ + "\1\0\10\41\27\0\24\41\1\u0242\1\0\2\41\1\u0242"+ "\7\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\7\41\1\u0246\15\41\1\0"+ - "\5\41\1\u0246\4\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0247"+ - "\15\41\1\0\5\41\1\u0247\4\41\3\0\4\41\1\0"+ + "\1\41\1\0\10\41\27\0\7\41\1\u0243\15\41\1\0"+ + "\5\41\1\u0243\4\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0244"+ + "\15\41\1\0\5\41\1\u0244\4\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\24\41\1\u0248\1\0\2\41\1\u0248\7\41\3\0\4\41"+ - "\1\0\4\41\56\0\1\u0213\23\0\1\u0213\26\0\1\u0249"+ - "\12\0\1\u0213\47\0\1\u0249\2\0\1\u0217\76\0\1\u0214"+ - "\13\0\1\u0214\131\0\1\u020f\3\0\1\u020f\44\0\1\u0213"+ - "\52\0\1\u0217\140\0\1\u0213\70\0\1\u024a\22\0\1\u024a"+ - "\104\0\1\u024b\16\0\1\u024b\70\0\1\u024c\2\0\1\u024c"+ - "\51\0\1\41\1\0\1\41\1\0\10\41\2\u024d\2\0"+ - "\1\u024d\22\0\25\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\u024e\1\0\10\41\27\0"+ - "\22\41\1\u024e\2\41\1\0\12\41\3\0\4\41\1\0"+ + "\24\41\1\u0245\1\0\2\41\1\u0245\7\41\3\0\4\41"+ + "\1\0\4\41\56\0\1\u0210\23\0\1\u0210\26\0\1\u0246"+ + "\12\0\1\u0210\47\0\1\u0246\2\0\1\u0214\76\0\1\u0211"+ + "\13\0\1\u0211\131\0\1\u020c\3\0\1\u020c\44\0\1\u0210"+ + "\52\0\1\u0214\140\0\1\u0210\70\0\1\u0247\22\0\1\u0247"+ + "\104\0\1\u0248\16\0\1\u0248\70\0\1\u0249\2\0\1\u0249"+ + "\51\0\1\41\1\0\1\41\1\0\10\41\2\u024a\2\0"+ + "\1\u024a\22\0\25\41\1\0\12\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\u024b\1\0\10\41\27\0"+ + "\22\41\1\u024b\2\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\24\41\1\u024f\1\0\2\41\1\u024f\7\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\u0250\1\0\10\41"+ - "\27\0\22\41\1\u0250\2\41\1\0\12\41\3\0\4\41"+ + "\24\41\1\u024c\1\0\2\41\1\u024c\7\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\u024d\1\0\10\41"+ + "\27\0\22\41\1\u024d\2\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+ - "\1\u0251\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\5\41\1\u0252\17\41\1\0\3\41\1\u0252\6\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u0253"+ - "\1\0\10\41\27\0\22\41\1\u0253\2\41\1\0\12\41"+ + "\1\u024e\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\5\41\1\u024f\17\41\1\0\3\41\1\u024f\6\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u0250"+ + "\1\0\10\41\27\0\22\41\1\u0250\2\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\14\41\1\u0254\10\41\1\0\1\41"+ - "\1\u0254\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\7\41\1\u0255\15\41"+ - "\1\0\5\41\1\u0255\4\41\3\0\4\41\1\0\4\41"+ + "\1\0\10\41\27\0\14\41\1\u0251\10\41\1\0\1\41"+ + "\1\u0251\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\7\41\1\u0252\15\41"+ + "\1\0\5\41\1\u0252\4\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ - "\1\0\11\41\1\u0256\3\0\4\41\1\0\4\41\3\0"+ - "\15\202\1\203\3\202\1\203\14\202\1\203\4\202\1\203"+ - "\5\202\1\u0257\23\202\1\u0257\25\202\53\0\1\u0258\23\0"+ - "\1\u0258\24\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\14\41\1\u0259\10\41\1\0\1\41\1\u0259\10\41\3\0"+ - "\4\41\1\0\4\41\4\0\1\41\1\0\1\u025a\1\0"+ - "\10\41\27\0\22\41\1\u025a\2\41\1\0\12\41\3\0"+ + "\1\0\11\41\1\u0253\3\0\4\41\1\0\4\41\3\0"+ + "\15\210\1\211\3\210\1\211\14\210\1\211\4\210\1\211"+ + "\5\210\1\u0254\23\210\1\u0254\25\210\53\0\1\u0255\23\0"+ + "\1\u0255\24\0\1\41\1\0\1\41\1\0\10\41\27\0"+ + "\14\41\1\u0256\10\41\1\0\1\41\1\u0256\10\41\3\0"+ + "\4\41\1\0\4\41\4\0\1\41\1\0\1\u0257\1\0"+ + "\10\41\27\0\22\41\1\u0257\2\41\1\0\12\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\11\41\1\u025b\13\41\1\0\6\41\1\u025b"+ + "\10\41\27\0\11\41\1\u0258\13\41\1\0\6\41\1\u0258"+ "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\7\41\1\u025c\15\41\1\0"+ - "\5\41\1\u025c\4\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\11\41\1\u025d"+ - "\13\41\1\0\6\41\1\u025d\3\41\3\0\4\41\1\0"+ + "\1\41\1\0\10\41\27\0\7\41\1\u0259\15\41\1\0"+ + "\5\41\1\u0259\4\41\3\0\4\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\11\41\1\u025a"+ + "\13\41\1\0\6\41\1\u025a\3\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\25\41\1\0\11\41\1\u025e\3\0\4\41\1\0\4\41"+ + "\25\41\1\0\11\41\1\u025b\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ - "\1\0\12\41\3\0\1\u025f\3\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\1\u0260\11\41"+ - "\1\u0260\12\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\20\0\1\u01e8\3\0\1\u01e9\116\0\1\u0261\3\0\1\u0262"+ - "\173\0\1\u0263\3\0\1\u0263\25\0\1\41\1\0\1\u0264"+ - "\1\0\10\41\27\0\22\41\1\u0264\2\41\1\0\12\41"+ + "\1\0\12\41\3\0\1\u025c\3\41\1\0\4\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\1\u025d\11\41"+ + "\1\u025d\12\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\20\0\1\u01e5\3\0\1\u01e6\116\0\1\u025e\3\0\1\u025f"+ + "\173\0\1\u0260\3\0\1\u0260\25\0\1\41\1\0\1\u0261"+ + "\1\0\10\41\27\0\22\41\1\u0261\2\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\24\41\1\u0265\1\0\2\41\1\u0265"+ + "\1\0\10\41\27\0\24\41\1\u0262\1\0\2\41\1\u0262"+ "\7\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\2\41\1\u0266\10\41\1\u0266"+ + "\1\41\1\0\10\41\27\0\2\41\1\u0263\10\41\1\u0263"+ "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0267"+ - "\15\41\1\0\5\41\1\u0267\4\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\u0268\1\0\10\41\27\0"+ - "\22\41\1\u0268\2\41\1\0\12\41\3\0\4\41\1\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0264"+ + "\15\41\1\0\5\41\1\u0264\4\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\u0265\1\0\10\41\27\0"+ + "\22\41\1\u0265\2\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\2\41\1\u0269\10\41\1\u0269\11\41\1\0\12\41\3\0"+ + "\2\41\1\u0266\10\41\1\u0266\11\41\1\0\12\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\4\41\1\u026a\14\41\1\u026a\3\41\1\0"+ + "\10\41\27\0\4\41\1\u0267\14\41\1\u0267\3\41\1\0"+ "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\24\41\1\u026b\1\0\2\41"+ - "\1\u026b\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\u026c\1\0\10\41\27\0\22\41\1\u026c\2\41"+ + "\1\41\1\0\10\41\27\0\24\41\1\u0268\1\0\2\41"+ + "\1\u0268\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\u0269\1\0\10\41\27\0\22\41\1\u0269\2\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\11\41\1\u026d\13\41"+ + "\1\0\1\41\1\0\10\41\27\0\11\41\1\u026a\13\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\u026e\1\0\10\41\27\0\22\41\1\u026e\2\41"+ + "\1\0\1\u026b\1\0\10\41\27\0\22\41\1\u026b\2\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\10\41"+ - "\1\u026f\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\11\41\1\u0270\13\41"+ - "\1\0\6\41\1\u0270\3\41\3\0\4\41\1\0\4\41"+ + "\1\u026c\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\11\41\1\u026d\13\41"+ + "\1\0\6\41\1\u026d\3\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+ - "\1\u0271\15\41\1\0\5\41\1\u0271\4\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\u0272\1\0\10\41"+ - "\27\0\22\41\1\u0272\2\41\1\0\12\41\3\0\4\41"+ - "\1\0\4\41\51\0\1\u0273\10\0\1\u0273\46\0\1\u0213"+ - "\62\0\1\u0213\37\0\1\u0274\62\0\1\u0274\116\0\1\u0213"+ - "\16\0\1\u0213\30\0\1\u0275\5\0\2\u024d\2\0\1\u024d"+ - "\32\0\1\u0275\47\0\1\41\1\0\1\41\1\0\10\41"+ + "\1\u026e\15\41\1\0\5\41\1\u026e\4\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\u026f\1\0\10\41"+ + "\27\0\22\41\1\u026f\2\41\1\0\12\41\3\0\4\41"+ + "\1\0\4\41\51\0\1\u0270\10\0\1\u0270\46\0\1\u0210"+ + "\62\0\1\u0210\37\0\1\u0271\62\0\1\u0271\116\0\1\u0210"+ + "\16\0\1\u0210\30\0\1\u0272\5\0\2\u024a\2\0\1\u024a"+ + "\32\0\1\u0272\47\0\1\41\1\0\1\41\1\0\10\41"+ "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+ - "\1\u0276\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\7\41\1\u0277\15\41\1\0\5\41\1\u0277\4\41"+ + "\1\u0273\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\7\41\1\u0274\15\41\1\0\5\41\1\u0274\4\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\14\41\1\u0278\10\41\1\0\1\41"+ - "\1\u0278\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\10\41\27\0\14\41\1\u0275\10\41\1\0\1\41"+ + "\1\u0275\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+ "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+ - "\3\0\4\41\1\0\2\41\1\u0279\1\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\7\41\1\u027a\15\41"+ - "\1\0\5\41\1\u027a\4\41\3\0\4\41\1\0\4\41"+ + "\3\0\4\41\1\0\2\41\1\u0276\1\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\7\41\1\u0277\15\41"+ + "\1\0\5\41\1\u0277\4\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ - "\1\0\12\41\3\0\4\41\1\0\2\41\1\u027b\1\41"+ + "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0278\1\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\14\41"+ - "\1\u027c\10\41\1\0\1\41\1\u027c\10\41\3\0\4\41"+ + "\1\u0279\10\41\1\0\1\41\1\u0279\10\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+ - "\1\u027d\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\1\u027e\11\41\1\u027e\12\41\1\0\12\41\3\0"+ - "\4\41\1\0\4\41\3\0\15\202\1\203\3\202\1\203"+ - "\14\202\1\203\4\202\1\203\26\202\1\u027f\3\202\1\u027f"+ - "\24\202\15\0\2\u0280\2\0\1\u0280\102\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\2\41\1\u0281\10\41\1\u0281"+ + "\1\u027a\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\1\u027b\11\41\1\u027b\12\41\1\0\12\41\3\0"+ + "\4\41\1\0\4\41\3\0\15\210\1\211\3\210\1\211"+ + "\14\210\1\211\4\210\1\211\26\210\1\u027c\3\210\1\u027c"+ + "\24\210\15\0\2\u027d\2\0\1\u027d\102\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\2\41\1\u027e\10\41\1\u027e"+ "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u0282"+ - "\10\41\1\u0282\11\41\1\0\12\41\3\0\4\41\1\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u027f"+ + "\10\41\1\u027f\11\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\24\41\1\u0283\1\0\2\41\1\u0283\7\41\3\0\4\41"+ - "\1\0\4\41\4\0\1\41\1\0\1\u0284\1\0\10\41"+ - "\27\0\22\41\1\u0284\2\41\1\0\12\41\3\0\4\41"+ + "\24\41\1\u0280\1\0\2\41\1\u0280\7\41\3\0\4\41"+ + "\1\0\4\41\4\0\1\41\1\0\1\u0281\1\0\10\41"+ + "\27\0\22\41\1\u0281\2\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\3\41\1\u0285\2\41\1\u0285\16\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\20\0\1\u0261\160\0\1\u0286"+ - "\23\0\1\u0286\24\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\3\41\1\u0282\2\41\1\u0282\16\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\20\0\1\u025e\160\0\1\u0283"+ + "\23\0\1\u0283\24\0\1\41\1\0\1\41\1\0\10\41"+ "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+ - "\1\u0287\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\7\41\1\u0288\15\41\1\0\5\41\1\u0288\4\41"+ + "\1\u0284\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\7\41\1\u0285\15\41\1\0\5\41\1\u0285\4\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\24\41\1\u0289\1\0\2\41\1\u0289"+ + "\1\0\10\41\27\0\24\41\1\u0286\1\0\2\41\1\u0286"+ "\7\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\24\41\1\u028a\1\0\2\41"+ - "\1\u028a\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\1\u028b\11\41\1\u028b"+ + "\1\41\1\0\10\41\27\0\24\41\1\u0287\1\0\2\41"+ + "\1\u0287\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\1\u0288\11\41\1\u0288"+ "\12\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\u028c\1\0\10\41\27\0\22\41\1\u028c"+ + "\1\41\1\0\1\u0289\1\0\10\41\27\0\22\41\1\u0289"+ "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+ - "\12\41\3\0\4\41\1\0\2\41\1\u028d\1\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\22\41\1\u028e"+ + "\12\41\3\0\4\41\1\0\2\41\1\u028a\1\41\4\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\22\41\1\u028b"+ "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\3\41\1\u028f"+ - "\2\41\1\u028f\16\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\u0290\1\0\10\41\27\0"+ - "\22\41\1\u0290\2\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\u0291\1\0\10\41\27\0"+ - "\22\41\1\u0291\2\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\4\0\1\41\1\0\1\u0292\1\0\10\41\27\0"+ - "\22\41\1\u0292\2\41\1\0\12\41\3\0\4\41\1\0"+ - "\4\41\52\0\1\u0213\2\0\1\u0213\115\0\1\u0213\13\0"+ - "\1\u0213\106\0\1\u0293\13\0\1\u0293\42\0\1\41\1\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\3\41\1\u028c"+ + "\2\41\1\u028c\16\41\1\0\12\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\u028d\1\0\10\41\27\0"+ + "\22\41\1\u028d\2\41\1\0\12\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\u028e\1\0\10\41\27\0"+ + "\22\41\1\u028e\2\41\1\0\12\41\3\0\4\41\1\0"+ + "\4\41\4\0\1\41\1\0\1\u028f\1\0\10\41\27\0"+ + "\22\41\1\u028f\2\41\1\0\12\41\3\0\4\41\1\0"+ + "\4\41\52\0\1\u0210\2\0\1\u0210\115\0\1\u0210\13\0"+ + "\1\u0210\106\0\1\u0290\13\0\1\u0290\42\0\1\41\1\0"+ "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+ - "\4\41\1\0\2\41\1\u0294\1\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\5\41\1\u0295\17\41\1\0"+ - "\3\41\1\u0295\6\41\3\0\4\41\1\0\4\41\4\0"+ + "\4\41\1\0\2\41\1\u0291\1\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\5\41\1\u0292\17\41\1\0"+ + "\3\41\1\u0292\6\41\3\0\4\41\1\0\4\41\4\0"+ "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+ - "\1\u0296\3\41\1\u0296\5\41\3\0\4\41\1\0\4\41"+ + "\1\u0293\3\41\1\u0293\5\41\3\0\4\41\1\0\4\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ - "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0297\1\41"+ + "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0294\1\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ - "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0298\1\41"+ + "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0295\1\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ - "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0299\1\41"+ + "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0296\1\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\24\41"+ - "\1\u029a\1\0\2\41\1\u029a\7\41\3\0\4\41\1\0"+ + "\1\u0297\1\0\2\41\1\u0297\7\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\4\41\1\u029b\14\41\1\u029b\3\41\1\0\12\41\3\0"+ - "\4\41\1\0\4\41\3\0\15\202\1\203\3\202\1\203"+ - "\14\202\1\203\4\202\1\203\7\202\1\u029c\23\202\1\u029c"+ - "\23\202\15\0\2\u0280\2\0\1\u0280\33\0\1\u029d\22\0"+ - "\1\u029d\23\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\24\41\1\u029e\1\0\2\41\1\u029e\7\41\3\0\4\41"+ + "\4\41\1\u0298\14\41\1\u0298\3\41\1\0\12\41\3\0"+ + "\4\41\1\0\4\41\3\0\15\210\1\211\3\210\1\211"+ + "\14\210\1\211\4\210\1\211\7\210\1\u0299\23\210\1\u0299"+ + "\23\210\15\0\2\u027d\2\0\1\u027d\33\0\1\u029a\22\0"+ + "\1\u029a\23\0\1\41\1\0\1\41\1\0\10\41\27\0"+ + "\24\41\1\u029b\1\0\2\41\1\u029b\7\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\1\41\1\u029f\13\41\1\u029f\7\41\1\0\12\41"+ + "\27\0\1\41\1\u029c\13\41\1\u029c\7\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\25\41\1\0\11\41\1\u02a0\3\0"+ - "\4\41\1\0\4\41\33\0\1\u02a1\73\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\1\u02a2\11\41\1\u02a2\12\41"+ + "\1\0\10\41\27\0\25\41\1\0\11\41\1\u029d\3\0"+ + "\4\41\1\0\4\41\33\0\1\u029e\73\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\1\u029f\11\41\1\u029f\12\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\u02a3\1\0\10\41\27\0\22\41\1\u02a3\2\41"+ + "\1\0\1\u02a0\1\0\10\41\27\0\22\41\1\u02a0\2\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\u02a4\1\0\10\41\27\0\22\41\1\u02a4\2\41"+ + "\1\0\1\u02a1\1\0\10\41\27\0\22\41\1\u02a1\2\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\2\41\1\u02a5\5\41\27\0\10\41"+ - "\1\u02a5\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+ - "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u02a6"+ - "\11\41\1\u02a6\12\41\1\0\12\41\3\0\4\41\1\0"+ + "\1\0\1\41\1\0\2\41\1\u02a2\5\41\27\0\10\41"+ + "\1\u02a2\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+ + "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u02a3"+ + "\11\41\1\u02a3\12\41\1\0\12\41\3\0\4\41\1\0"+ "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\1\u02a7\11\41\1\u02a7\12\41\1\0\12\41\3\0\4\41"+ + "\1\u02a4\11\41\1\u02a4\12\41\1\0\12\41\3\0\4\41"+ "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\7\41\1\u02a8\15\41\1\0\5\41\1\u02a8\4\41"+ + "\27\0\7\41\1\u02a5\15\41\1\0\5\41\1\u02a5\4\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\4\41\1\u02a9\14\41\1\u02a9\3\41"+ - "\1\0\12\41\3\0\4\41\1\0\4\41\47\0\1\u02aa"+ - "\11\0\1\u02aa\45\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\1\u02ab\11\41\1\u02ab\12\41\1\0\12\41\3\0"+ + "\1\0\10\41\27\0\4\41\1\u02a6\14\41\1\u02a6\3\41"+ + "\1\0\12\41\3\0\4\41\1\0\4\41\47\0\1\u02a7"+ + "\11\0\1\u02a7\45\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\1\u02a8\11\41\1\u02a8\12\41\1\0\12\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\2\41\1\u02ac\10\41\1\u02ac\11\41\1\0"+ + "\10\41\27\0\2\41\1\u02a9\10\41\1\u02a9\11\41\1\0"+ "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+ - "\4\41\1\0\2\41\1\u02ad\1\41\4\0\1\41\1\0"+ + "\4\41\1\0\2\41\1\u02aa\1\41\4\0\1\41\1\0"+ "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+ - "\4\41\1\0\2\41\1\u02ae\1\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\1\u02af\11\41\1\u02af\12\41"+ + "\4\41\1\0\2\41\1\u02ab\1\41\4\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\1\u02ac\11\41\1\u02ac\12\41"+ "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+ "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+ - "\3\0\4\41\1\0\2\41\1\u02b0\1\41\3\0\15\202"+ - "\1\203\3\202\1\203\6\202\1\u02b1\5\202\1\203\4\202"+ - "\1\203\57\202\46\0\1\u02b2\10\0\1\u02b2\44\0\1\41"+ + "\3\0\4\41\1\0\2\41\1\u02ad\1\41\3\0\15\210"+ + "\1\211\3\210\1\211\6\210\1\u02ae\5\210\1\211\4\210"+ + "\1\211\57\210\46\0\1\u02af\10\0\1\u02af\44\0\1\41"+ "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\11\41"+ - "\1\u02b3\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\u02b4\1\0\10\41\27\0\22\41\1\u02b4\2\41\1\0"+ - "\12\41\3\0\4\41\1\0\4\41\20\0\2\u02a1\2\0"+ - "\1\u02a1\102\0\1\41\1\0\1\41\1\0\10\41\27\0"+ - "\3\41\1\u02b5\2\41\1\u02b5\16\41\1\0\12\41\3\0"+ + "\1\u02b0\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ + "\1\u02b1\1\0\10\41\27\0\22\41\1\u02b1\2\41\1\0"+ + "\12\41\3\0\4\41\1\0\4\41\20\0\2\u029e\2\0"+ + "\1\u029e\102\0\1\41\1\0\1\41\1\0\10\41\27\0"+ + "\3\41\1\u02b2\2\41\1\u02b2\16\41\1\0\12\41\3\0"+ "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+ - "\2\41\1\u02b6\5\41\27\0\10\41\1\u02b6\14\41\1\0"+ + "\2\41\1\u02b3\5\41\27\0\10\41\1\u02b3\14\41\1\0"+ "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\3\41\1\u02b7\2\41\1\u02b7"+ + "\1\41\1\0\10\41\27\0\3\41\1\u02b4\2\41\1\u02b4"+ "\16\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ - "\1\41\1\0\1\41\1\0\10\41\27\0\14\41\1\u02b8"+ - "\10\41\1\0\1\41\1\u02b8\10\41\3\0\4\41\1\0"+ - "\4\41\113\0\1\u02b9\13\0\1\41\1\0\1\41\1\0"+ - "\10\41\27\0\3\41\1\u02ba\2\41\1\u02ba\16\41\1\0"+ + "\1\41\1\0\1\41\1\0\10\41\27\0\14\41\1\u02b5"+ + "\10\41\1\0\1\41\1\u02b5\10\41\3\0\4\41\1\0"+ + "\4\41\113\0\1\u02b6\13\0\1\41\1\0\1\41\1\0"+ + "\10\41\27\0\3\41\1\u02b7\2\41\1\u02b7\16\41\1\0"+ "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\24\41\1\u02bb\1\0\2\41"+ - "\1\u02bb\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\41\1\0\10\41\27\0\24\41\1\u02b8\1\0\2\41"+ + "\1\u02b8\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+ "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+ - "\3\0\1\41\1\u02bc\2\41\1\0\4\41\4\0\1\41"+ + "\3\0\1\41\1\u02b9\2\41\1\0\4\41\4\0\1\41"+ "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+ - "\3\0\4\41\1\0\2\41\1\u02bd\1\41\3\0\15\202"+ - "\1\u02be\1\u02b1\2\202\1\u02be\14\202\1\203\4\202\1\203"+ - "\57\202\47\0\1\u02bf\2\0\1\u02bf\51\0\1\41\1\0"+ - "\1\41\1\0\10\41\27\0\24\41\1\u02c0\1\0\2\41"+ - "\1\u02c0\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+ - "\1\0\1\41\1\0\10\41\27\0\24\41\1\u02c1\1\0"+ - "\2\41\1\u02c1\7\41\3\0\4\41\1\0\4\41\4\0"+ + "\3\0\4\41\1\0\2\41\1\u02ba\1\41\3\0\15\210"+ + "\1\u02bb\1\u02ae\2\210\1\u02bb\14\210\1\211\4\210\1\211"+ + "\57\210\47\0\1\u02bc\2\0\1\u02bc\51\0\1\41\1\0"+ + "\1\41\1\0\10\41\27\0\24\41\1\u02bd\1\0\2\41"+ + "\1\u02bd\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+ + "\1\0\1\41\1\0\10\41\27\0\24\41\1\u02be\1\0"+ + "\2\41\1\u02be\7\41\3\0\4\41\1\0\4\41\4\0"+ "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+ - "\12\41\3\0\4\41\1\0\2\41\1\u02c2\1\41\4\0"+ - "\1\41\1\0\1\u02c3\1\0\10\41\27\0\22\41\1\u02c3"+ + "\12\41\3\0\4\41\1\0\2\41\1\u02bf\1\41\4\0"+ + "\1\41\1\0\1\u02c0\1\0\10\41\27\0\22\41\1\u02c0"+ "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+ "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+ - "\1\u02c4\3\41\1\u02c4\5\41\3\0\4\41\1\0\4\41"+ - "\65\0\1\u02c5\16\0\1\u02c5\22\0\1\41\1\0\1\u02c6"+ - "\1\0\10\41\27\0\22\41\1\u02c6\2\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u02c7"+ - "\1\0\10\41\27\0\22\41\1\u02c7\2\41\1\0\12\41"+ + "\1\u02c1\3\41\1\u02c1\5\41\3\0\4\41\1\0\4\41"+ + "\65\0\1\u02c2\16\0\1\u02c2\22\0\1\41\1\0\1\u02c3"+ + "\1\0\10\41\27\0\22\41\1\u02c3\2\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u02c4"+ + "\1\0\10\41\27\0\22\41\1\u02c4\2\41\1\0\12\41"+ "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+ "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\4\41"+ - "\1\0\2\41\1\u02c8\1\41\4\0\1\41\1\0\1\41"+ + "\1\0\2\41\1\u02c5\1\41\4\0\1\41\1\0\1\41"+ "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\4\41"+ - "\1\0\2\41\1\u02c9\1\41\4\0\1\41\1\0\1\41"+ - "\1\0\10\41\27\0\5\41\1\u02ca\17\41\1\0\3\41"+ - "\1\u02ca\6\41\3\0\4\41\1\0\4\41\105\0\1\u02cb"+ + "\1\0\2\41\1\u02c6\1\41\4\0\1\41\1\0\1\41"+ + "\1\0\10\41\27\0\5\41\1\u02c7\17\41\1\0\3\41"+ + "\1\u02c7\6\41\3\0\4\41\1\0\4\41\105\0\1\u02c8"+ "\21\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+ - "\1\0\12\41\3\0\4\41\1\0\2\41\1\u02cc\1\41"+ + "\1\0\12\41\3\0\4\41\1\0\2\41\1\u02c9\1\41"+ "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+ - "\1\u02cd\13\41\1\0\6\41\1\u02cd\3\41\3\0\4\41"+ - "\1\0\4\41\51\0\1\u02ce\10\0\1\u02ce\44\0\1\41"+ - "\1\0\1\u02cf\1\0\10\41\27\0\22\41\1\u02cf\2\41"+ - "\1\0\12\41\3\0\4\41\1\0\4\41\65\0\1\u02d0"+ - "\16\0\1\u02d0\22\0\1\41\1\0\1\41\1\0\10\41"+ - "\27\0\1\41\1\u02d1\13\41\1\u02d1\7\41\1\0\12\41"+ - "\3\0\4\41\1\0\4\41\6\0\1\u02d2\62\0\1\u02d2"+ - "\51\0\2\u02d2\2\0\1\u02d2\5\0\1\u02d3\110\0\2\u02d3"+ - "\2\0\1\u02d3\1\0\1\u02d4\46\0\1\u02d5\3\0\1\u02d5"+ - "\5\0\1\u02d6\110\0\1\u02d7\3\0\1\u02d7\127\0\1\u02d8"+ - "\111\0\1\u02d9\3\0\1\u02d9\127\0\1\u02da\111\0\1\u02db"+ - "\3\0\1\u02db\127\0\1\u02dc\111\0\1\u02dd\3\0\1\u02dd"+ - "\41\0\2\u02db\2\0\1\u02db\6\0\1\u02de\164\0\1\u02df"+ - "\3\0\1\u02df\47\0\1\u02db\203\0\1\u02db\16\0"; + "\1\u02ca\13\41\1\0\6\41\1\u02ca\3\41\3\0\4\41"+ + "\1\0\4\41\51\0\1\u02cb\10\0\1\u02cb\44\0\1\41"+ + "\1\0\1\u02cc\1\0\10\41\27\0\22\41\1\u02cc\2\41"+ + "\1\0\12\41\3\0\4\41\1\0\4\41\65\0\1\u02cd"+ + "\16\0\1\u02cd\22\0\1\41\1\0\1\41\1\0\10\41"+ + "\27\0\1\41\1\u02ce\13\41\1\u02ce\7\41\1\0\12\41"+ + "\3\0\4\41\1\0\4\41\6\0\1\u02cf\62\0\1\u02cf"+ + "\51\0\2\u02cf\2\0\1\u02cf\5\0\1\u02d0\110\0\2\u02d0"+ + "\2\0\1\u02d0\1\0\1\u02d1\46\0\1\u02d2\3\0\1\u02d2"+ + "\5\0\1\u02d3\110\0\1\u02d4\3\0\1\u02d4\127\0\1\u02d5"+ + "\111\0\1\u02d6\3\0\1\u02d6\127\0\1\u02d7\111\0\1\u02d8"+ + "\3\0\1\u02d8\127\0\1\u02d9\111\0\1\u02da\3\0\1\u02da"+ + "\41\0\2\u02d8\2\0\1\u02d8\6\0\1\u02db\164\0\1\u02dc"+ + "\3\0\1\u02dc\47\0\1\u02d8\203\0\1\u02d8\16\0"; private static int [] zzUnpackTrans() { - int [] result = new int[47974]; + int [] result = new int[47725]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -1401,29 +1402,28 @@ private static int zzUnpackTrans(String packed, int offset, int [] result) { private static final String ZZ_ATTRIBUTE_PACKED_0 = "\25\0\2\1\1\11\12\1\2\11\2\1\3\11\13\1"+ "\1\11\26\1\1\11\5\1\2\11\2\1\1\11\6\1"+ - "\1\11\12\1\1\11\4\1\1\0\1\1\1\11\2\1"+ + "\1\11\12\1\1\11\10\1\1\11\3\1\1\0\2\1"+ "\1\11\2\1\2\11\2\1\1\11\1\1\1\11\1\1"+ "\1\11\4\0\1\1\1\11\4\1\1\11\2\1\1\0"+ "\2\1\1\0\1\1\2\0\6\1\1\11\2\0\4\1"+ "\1\0\1\1\1\0\1\1\2\0\1\11\2\0\2\1"+ "\1\0\53\1\13\0\2\1\1\11\1\1\3\0\3\1"+ - "\3\11\1\1\3\0\3\1\2\11\3\0\1\1\2\0"+ - "\1\11\2\0\1\11\7\0\1\11\2\0\1\11\1\0"+ - "\1\11\2\0\1\11\1\1\1\0\1\11\1\0\2\11"+ - "\2\1\1\11\3\0\15\1\1\0\1\1\3\0\55\1"+ - "\12\0\12\1\1\11\3\1\1\0\1\11\1\0\1\11"+ - "\1\1\1\0\1\11\1\0\1\1\1\0\2\11\1\1"+ - "\2\0\20\1\4\0\52\1\12\0\13\1\1\11\1\0"+ - "\1\1\1\11\1\0\15\1\1\11\1\1\3\0\42\1"+ - "\10\0\1\11\1\0\14\1\1\0\11\1\3\0\27\1"+ - "\5\0\23\1\1\11\1\1\1\0\17\1\3\0\12\1"+ - "\1\0\5\1\1\0\14\1\1\0\11\1\1\0\14\1"+ - "\1\0\7\1\1\0\6\1\1\11\5\1\1\0\5\1"+ - "\1\0\5\1\1\0\2\1\1\0\1\1\1\0\1\1"+ - "\14\0\1\11\1\0"; + "\3\11\1\1\3\0\3\1\2\11\3\0\1\1\1\0"+ + "\1\11\1\0\1\11\3\0\1\1\1\0\2\1\1\11"+ + "\1\0\1\11\1\0\1\11\2\0\1\11\1\1\1\0"+ + "\1\11\1\0\2\11\2\1\1\11\3\0\15\1\1\0"+ + "\1\1\3\0\55\1\12\0\12\1\1\11\3\1\1\0"+ + "\1\11\1\0\4\11\1\1\2\0\20\1\4\0\52\1"+ + "\12\0\13\1\1\11\1\1\1\11\1\0\15\1\1\11"+ + "\1\1\3\0\42\1\10\0\1\11\1\0\14\1\1\0"+ + "\11\1\3\0\27\1\5\0\23\1\1\11\1\1\1\0"+ + "\17\1\3\0\12\1\1\0\5\1\1\0\14\1\1\0"+ + "\11\1\1\0\14\1\1\0\7\1\1\0\6\1\1\11"+ + "\5\1\1\0\5\1\1\0\5\1\1\0\2\1\1\0"+ + "\1\1\1\0\1\1\14\0\1\11\1\0"; private static int [] zzUnpackAttribute() { - int [] result = new int[735]; + int [] result = new int[732]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -1635,6 +1635,47 @@ protected void pushState(final int state) { yybegin(state); } + private boolean isLabelChar(char c) { + return c == '_' + || (c >= 'a' && c <= 'z') + || (c >= 'A' && c <= 'Z') + || (c >= 0x7f && c <= 0xff); + } + + private boolean isEndNowdoc() { + String yytext = yytext().trim(); + int lastIndexOfNewline = yytext.lastIndexOf('\n'); + if (lastIndexOfNewline == -1) { + lastIndexOfNewline = yytext.lastIndexOf('\r'); + } + if (lastIndexOfNewline != -1) { + yytext = yytext.substring(lastIndexOfNewline); + } + return isEndHereOrNowdoc(yytext); + } + + private boolean isEndHeredoc() { + return isEndHereOrNowdoc(yytext()); + } + + private boolean isEndHereOrNowdoc(String text) { + // check whether ID exists + String trimedText = text.trim(); + boolean isEnd = false; + if (trimedText.startsWith(heredoc)) { + if (trimedText.length() == heredoc.length()) { + isEnd = true; + } else if (trimedText.length() > heredoc.length() + && !isLabelChar(trimedText.charAt(heredoc.length()))) { + // e.g. + // $test = <<< END + // ENDING + // END + isEnd = true; + } + } + return isEnd; + } // End user code @@ -1871,21 +1912,21 @@ public PHPTokenId nextToken() throws java.io.IOException { } switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 27: + case 31: { //the difference from the original rules comes from the fact that we took ';' out out of tokens return PHPTokenId.UNKNOWN_TOKEN; } - case 159: break; - case 94: + case 160: break; + case 95: { return PHPTokenId.PHP_FALSE; } - case 160: break; - case 22: + case 161: break; + case 25: { yypushback(1); yybegin(ST_PHP_NOWDOC); } - case 161: break; - case 30: + case 162: break; + case 34: { String yytext = yytext(); switch (yytext.charAt(yytext.length() - 1)) { case '?': @@ -1897,12 +1938,12 @@ public PHPTokenId nextToken() throws java.io.IOException { } return PHPTokenId.PHP_LINE_COMMENT; } - case 162: break; - case 73: + case 163: break; + case 76: { yypushback(2); return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; } - case 163: break; + case 164: break; case 4: { if(isInConst) { // for checking arrays @@ -1927,38 +1968,56 @@ public PHPTokenId nextToken() throws java.io.IOException { } return PHPTokenId.PHP_TOKEN; } - case 164: break; - case 60: + case 165: break; + case 63: { popState(); return PHPTokenId.PHPDOC_COMMENT_END; } - case 165: break; - case 129: + case 166: break; + case 130: { return PHPTokenId.PHP_INCLUDE; } - case 166: break; - case 148: + case 167: break; + case 149: { return PHPTokenId.PHP_ENDDECLARE; } - case 167: break; - case 32: + case 168: break; + case 36: { return PHPTokenId.UNKNOWN_TOKEN; } - case 168: break; - case 119: + case 169: break; + case 58: + { /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */ + if (isEndNowdoc()) { + String yytext = yytext(); + int trailingNewlineOffset = (yytext.endsWith("\n") || yytext.endsWith("\r")) ? 2 : 0; + int lastIndexOfNewline = yytext.lastIndexOf('\n', yylength() - trailingNewlineOffset); + if (lastIndexOfNewline == -1) { + lastIndexOfNewline = yytext.lastIndexOf('\r', yylength() - trailingNewlineOffset); + } + int back = yylength() - lastIndexOfNewline - 1; // -1 [\r\n] length + yypushback(back); + yybegin(ST_PHP_END_NOWDOC); + return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; + } else { + yypushback(1); // [\r\n] length + } + } + case 170: break; + case 120: { return PHPTokenId.PHP_GLOBAL; } - case 169: break; - case 155: + case 171: break; + case 156: { return PHPTokenId.PHP__FUNCTION__; } - case 170: break; + case 172: break; case 18: { popState(); return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; } - case 171: break; - case 36: + case 173: break; + case 40: { if (shortTagsAllowed ) { //yybegin(ST_PHP_IN_SCRIPTING); pushState(ST_PHP_IN_SCRIPTING); @@ -1969,39 +2028,39 @@ public PHPTokenId nextToken() throws java.io.IOException { return PHPTokenId.T_INLINE_HTML; } } - case 172: break; - case 50: + case 174: break; + case 54: { yypushback(1); pushState(ST_PHP_IN_SCRIPTING); return PHPTokenId.PHP_CURLY_OPEN; } - case 173: break; - case 115: + case 175: break; + case 116: { return PHPTokenId.PHP_TYPE_OBJECT; } - case 174: break; - case 85: + case 176: break; + case 86: { return PHPTokenId.PHP_LIST; } - case 175: break; - case 93: + case 177: break; + case 94: { return PHPTokenId.PHP_EMPTY; } - case 176: break; + case 178: break; case 15: { pushState(ST_PHP_LINE_COMMENT); return PHPTokenId.PHP_LINE_COMMENT; } - case 177: break; - case 90: + case 179: break; + case 91: { return PHPTokenId.PHP_CASE; } - case 178: break; - case 38: + case 180: break; + case 42: { return PHPTokenId.PHP_VARIABLE; } - case 179: break; - case 41: + case 181: break; + case 45: { //popState(); yybegin(YYINITIAL); if (yylength() > 2) { @@ -2010,7 +2069,28 @@ public PHPTokenId nextToken() throws java.io.IOException { stack.clear(); return PHPTokenId.PHP_CLOSETAG; } - case 180: break; + case 182: break; + case 22: + { int trailingNewLineLength = 1; + int label_len = yylength() - trailingNewLineLength; + int back = trailingNewLineLength; + + if (yytext().charAt(label_len - 1)==';') { + label_len--; + back++; + } + + if (isEndHeredoc()) { + int indexOfHeredocId = yytext().indexOf(heredoc); + back += label_len - indexOfHeredocId; + yypushback(back); + yybegin(ST_PHP_END_HEREDOC); + } else { + yypushback(yylength() - trailingNewLineLength); + yybegin(ST_PHP_HEREDOC); + } + } + case 183: break; case 8: { if(isInConst) { isInConst = false; @@ -2019,8 +2099,8 @@ public PHPTokenId nextToken() throws java.io.IOException { } return PHPTokenId.PHP_SEMICOLON; } - case 181: break; - case 40: + case 184: break; + case 44: { if (aspTagsAllowed) { yybegin(YYINITIAL); stack.clear(); @@ -2028,36 +2108,36 @@ public PHPTokenId nextToken() throws java.io.IOException { } return PHPTokenId.UNKNOWN_TOKEN; } - case 182: break; - case 31: + case 185: break; + case 35: { return PHPTokenId.PHP_LINE_COMMENT; } - case 183: break; - case 82: + case 186: break; + case 83: { pushState(ST_PHP_DOC_COMMENT); yypushback(yylength()-3); return PHPTokenId.PHPDOC_COMMENT_START; } - case 184: break; - case 99: + case 187: break; + case 100: { return PHPTokenId.PHP_ISSET; } - case 185: break; - case 138: + case 188: break; + case 139: { return PHPTokenId.PHP__FILE__; } - case 186: break; - case 45: + case 189: break; + case 49: { return PHPTokenId.PHP_IF; } - case 187: break; - case 51: + case 190: break; + case 55: { popState(); pushState(ST_PHP_LOOKING_FOR_PROPERTY); return PHPTokenId.PHP_OBJECT_OPERATOR; } - case 188: break; - case 62: + case 191: break; + case 65: { if (aspTagsAllowed) { yybegin(YYINITIAL); stack.clear(); @@ -2069,58 +2149,99 @@ public PHPTokenId nextToken() throws java.io.IOException { } return PHPTokenId.PHP_LINE_COMMENT; } - case 189: break; - case 43: + case 192: break; + case 47: { return PHPTokenId.PHP_AS; } - case 190: break; - case 157: + case 193: break; + case 23: + { heredoc=null; + hereocLength=0; + yybegin(ST_PHP_IN_SCRIPTING); + int back = 0; + // mark just the label + if (yytext().charAt(yylength() - 1)==';') { + back++; + } + yypushback(back); + return PHPTokenId.PHP_HEREDOC_TAG_END; + } + case 194: break; + case 158: { pushState(ST_HALTED_COMPILER); return PHPTokenId.PHP_HALT_COMPILER; } - case 191: break; - case 70: + case 195: break; + case 73: { return PHPTokenId.PHP_USE; } - case 192: break; - case 102: + case 196: break; + case 103: { return PHPTokenId.PHP_TYPE_FLOAT; } - case 193: break; - case 156: + case 197: break; + case 57: + { /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */ + int trailingNewLineLength = 1; + if (isEndHeredoc()) { + String yytext = yytext(); + int newlineLength = yytext.startsWith("\r\n") ? 2 : 1; + int back = yylength() - newlineLength; + yypushback(back); + yybegin(ST_PHP_END_HEREDOC); + } else { + int indexOfVariable1 = yytext().indexOf("$"); + int indexOfVariable2 = yytext().indexOf("{$"); + if (indexOfVariable1 > 0 && indexOfVariable2 == -1) { + yypushback(yylength() - indexOfVariable1); + return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; + } else if (indexOfVariable2 > 0 && indexOfVariable1 == -1) { + yypushback(yylength() - indexOfVariable2); + return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; + } else if (indexOfVariable1 > 0 && indexOfVariable2 > 0) { + yypushback(yylength() - Math.min(indexOfVariable1, indexOfVariable2)); + return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; + } else { + yypushback(trailingNewLineLength); + } + } + return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; + } + case 198: break; + case 157: { return PHPTokenId.PHP__NAMESPACE__; } - case 194: break; - case 61: + case 199: break; + case 64: { popState(); return PHPTokenId.PHP_LINE_COMMENT; } - case 195: break; - case 154: + case 200: break; + case 155: { return PHPTokenId.PHP_INCLUDE_ONCE; } - case 196: break; - case 141: + case 201: break; + case 142: { return PHPTokenId.PHP_NAMESPACE; } - case 197: break; + case 202: break; case 13: { if (isInConst) { pushState(ST_PHP_LOOKING_FOR_CONSTANT_NAME); } return PHPTokenId.PHP_TOKEN; } - case 198: break; - case 59: + case 203: break; + case 62: { popState(); return PHPTokenId.PHP_COMMENT_END; } - case 199: break; - case 135: + case 204: break; + case 136: { return PHPTokenId.PHP_ITERABLE; } - case 200: break; - case 97: + case 205: break; + case 98: { int bprefix = (yytext().charAt(0) != '<') ? 1 : 0; int startString=3+bprefix; hereocLength = yylength()-bprefix-3-1-(yytext().charAt(yylength()-2)=='\r'?1:0); @@ -2137,8 +2258,8 @@ public PHPTokenId nextToken() throws java.io.IOException { yybegin(ST_PHP_START_HEREDOC); return PHPTokenId.PHP_HEREDOC_TAG_START; } - case 201: break; - case 58: + case 206: break; + case 61: { // const keyword is also used within group uses. so check "=", otherwise it matches the following: // use A\{const CONSTANTA, function myFunction,...} popState(); @@ -2152,152 +2273,152 @@ public PHPTokenId nextToken() throws java.io.IOException { yypushback(back); return PHPTokenId.PHP_STRING; } - case 202: break; - case 34: + case 207: break; + case 38: { popState(); return PHPTokenId.T_INLINE_HTML; } - case 203: break; + case 208: break; case 6: { return PHPTokenId.PHP_OPERATOR; } - case 204: break; + case 209: break; case 11: { pushState(ST_PHP_BACKQUOTE); return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; } - case 205: break; - case 47: + case 210: break; + case 51: { pushState(ST_PHP_QUOTES_AFTER_VARIABLE); return PHPTokenId.PHP_VARIABLE; } - case 206: break; + case 211: break; case 3: { return PHPTokenId.PHP_NUMBER; } - case 207: break; - case 71: + case 212: break; + case 74: { yypushback(1); pushState(ST_PHP_VAR_OFFSET); return PHPTokenId.PHP_VARIABLE; } - case 208: break; - case 126: + case 213: break; + case 127: { return PHPTokenId.PHP_REQUIRE; } - case 209: break; - case 128: + case 214: break; + case 129: { return PHPTokenId.PHP_DECLARE; } - case 210: break; - case 105: + case 215: break; + case 106: { return PHPTokenId.PHP_CLONE; } - case 211: break; - case 100: + case 216: break; + case 101: { return PHPTokenId.PHP_TRAIT; } - case 212: break; - case 49: + case 217: break; + case 53: { pushState(ST_PHP_IN_SCRIPTING); return PHPTokenId.PHP_TOKEN; } - case 213: break; - case 65: + case 218: break; + case 68: { return PHPTokenId.PHP_NEW; } - case 214: break; - case 76: + case 219: break; + case 77: { yypushback(2); return PHPTokenId.PHP_COMMENT; } - case 215: break; - case 57: + case 220: break; + case 60: { return PHPTokenId.PHP_OBJECT_OPERATOR; } - case 216: break; + case 221: break; case 19: { yypushback(1); popState(); } - case 217: break; - case 122: + case 222: break; + case 123: { return PHPTokenId.PHP_EXTENDS; } - case 218: break; - case 83: + case 223: break; + case 84: { return PHPTokenId.PHP_NULL; } - case 219: break; - case 91: + case 224: break; + case 92: { pushState(ST_PHP_IN_SCRIPTING); //yybegin(ST_PHP_IN_SCRIPTING); return PHPTokenId.PHP_OPENTAG; //return createSymbol(ASTSymbol.T_OPEN_TAG); } - case 220: break; - case 111: + case 225: break; + case 112: { return PHPTokenId.PHP_WHILE; } - case 221: break; - case 140: + case 226: break; + case 141: { return PHPTokenId.PHP_ENDSWITCH; } - case 222: break; - case 130: + case 227: break; + case 131: { return PHPTokenId.PHP_PRIVATE; } - case 223: break; + case 228: break; case 1: { return PHPTokenId.T_INLINE_HTML; } - case 224: break; - case 151: + case 229: break; + case 152: { return PHPTokenId.PHP_YIELD_FROM; } - case 225: break; - case 92: + case 230: break; + case 93: { return PHPTokenId.PHP_ENDIF; } - case 226: break; - case 28: + case 231: break; + case 32: { yypushback(1); popState(); if (yylength() > 0) return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; } - case 227: break; - case 116: + case 232: break; + case 117: { return PHPTokenId.PHP_STATIC; } - case 228: break; - case 127: + case 233: break; + case 128: { return PHPTokenId.PHP_DEFAULT; } - case 229: break; + case 234: break; case 17: { return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; } - case 230: break; - case 25: + case 235: break; + case 29: { popState(); return PHPTokenId.PHP_TOKEN; } - case 231: break; - case 37: + case 236: break; + case 41: { pushState(ST_PHP_LOOKING_FOR_PROPERTY); return PHPTokenId.PHP_OBJECT_OPERATOR; } - case 232: break; - case 139: + case 237: break; + case 140: { return PHPTokenId.PHP__LINE__; } - case 233: break; - case 78: + case 238: break; + case 79: { return PHPTokenId.PHP_EXIT; } - case 234: break; - case 35: + case 239: break; + case 39: { if (aspTagsAllowed) { //yybegin(ST_PHP_IN_SCRIPTING); pushState(ST_PHP_IN_SCRIPTING); @@ -2308,38 +2429,43 @@ public PHPTokenId nextToken() throws java.io.IOException { return PHPTokenId.T_INLINE_HTML; } } - case 235: break; - case 39: + case 240: break; + case 43: { pushState(ST_PHP_COMMENT); return PHPTokenId.PHP_COMMENT_START; } - case 236: break; - case 96: + case 241: break; + case 97: { return PHPTokenId.PHP_BREAK; } - case 237: break; - case 26: + case 242: break; + case 30: { if(parenBalanceInConst == 0 && bracketBalanceInConst == 0) { isInConst = false; } yypushback(1); popState(); } - case 238: break; + case 243: break; case 21: { yypushback(1); yybegin(ST_PHP_HEREDOC); } - case 239: break; - case 143: + case 244: break; + case 144: { return PHPTokenId.PHP_INSTEADOF; } - case 240: break; - case 144: + case 245: break; + case 24: + { /* {NOWDOC_CHARS}|{NEWLINE} */ + // retrun PHPTokenId when the closing marker is found + } + case 246: break; + case 145: { return PHPTokenId.PHP_PROTECTED; } - case 241: break; - case 63: + case 247: break; + case 66: { String text = yytext(); if ((text.charAt(1)=='%' && aspTagsAllowed) || (text.charAt(1)=='?')) { @@ -2352,281 +2478,260 @@ public PHPTokenId nextToken() throws java.io.IOException { return PHPTokenId.T_INLINE_HTML; } } - case 242: break; - case 107: + case 248: break; + case 108: { return PHPTokenId.PHP_PRINT; } - case 243: break; - case 69: + case 249: break; + case 72: { return PHPTokenId.PHP_VAR; } - case 244: break; - case 158: + case 250: break; + case 159: { pushState(ST_PHP_IN_SCRIPTING); return PHPTokenId.T_INLINE_HTML; } - case 245: break; - case 101: - { return PHPTokenId.PHP_THROW; + case 251: break; + case 102: + { return PHPTokenId.PHP_THROW; } - case 246: break; - case 120: + case 252: break; + case 121: { return PHPTokenId.PHP_PARENT; } - case 247: break; - case 118: + case 253: break; + case 119: { return PHPTokenId.PHP_SWITCH; } - case 248: break; - case 74: - { int trailingNewLineLength = 1; - int label_len = yylength() - trailingNewLineLength; - int back = trailingNewLineLength; - - if (yytext().charAt(label_len-1)==';') { - label_len--; - back++; - } - if (label_len > hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) { - back = back + hereocLength; - yypushback(back); - yybegin(ST_PHP_END_HEREDOC); - } else { - yypushback(trailingNewLineLength); - return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; - } - } - case 249: break; - case 77: + case 254: break; + case 78: { yypushback(2); // go back to mark end of comment in the next token return PHPTokenId.PHPDOC_COMMENT; } - case 250: break; - case 67: + case 255: break; + case 70: { return PHPTokenId.PHP_TYPE_INT; } - case 251: break; - case 109: + case 256: break; + case 110: { return PHPTokenId.PHP_CASTING; } - case 252: break; - case 42: + case 257: break; + case 46: { return PHPTokenId.PHP_TEXTUAL_OPERATOR; } - case 253: break; - case 33: + case 258: break; + case 37: { popState();return PHPTokenId.WHITESPACE; } - case 254: break; - case 66: + case 259: break; + case 69: { return PHPTokenId.PHP_DIE; } - case 255: break; - case 146: + case 260: break; + case 147: { return PHPTokenId.PHP__CLASS__; } - case 256: break; - case 75: - { int label_len = yylength() - 1; - int back = 1; - - if (yytext().charAt(label_len-1)==';') { - label_len--; - back++; - } - if (label_len > hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) { - back = back + hereocLength; - yypushback(back); - yybegin(ST_PHP_END_NOWDOC); - } - else { - yypushback(1); - } - return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; - } - case 257: break; + case 261: break; case 2: { yypushback(1); pushState(ST_PHP_HIGHLIGHTING_ERROR); } - case 258: break; - case 106: + case 262: break; + case 107: { return PHPTokenId.PHP_CLASS; } - case 259: break; - case 124: + case 263: break; + case 125: { return PHPTokenId.PHP_FINALLY; } - case 260: break; - case 142: + case 264: break; + case 143: { return PHPTokenId.PHP_INTERFACE; } - case 261: break; - case 145: + case 265: break; + case 146: { return PHPTokenId.PHP__TRAIT__; } - case 262: break; - case 108: + case 266: break; + case 109: { return PHPTokenId.PHP_UNSET; } - case 263: break; + case 267: break; case 12: { return PHPTokenId.PHP_CURLY_OPEN; } - case 264: break; - case 23: + case 268: break; + case 27: { yypushback(1); popState(); } - case 265: break; - case 121: + case 269: break; + case 122: { return PHPTokenId.PHP_PUBLIC; } - case 266: break; - case 153: + case 270: break; + case 154: { return PHPTokenId.PHP_REQUIRE_ONCE; } - case 267: break; - case 147: + case 271: break; + case 148: { return PHPTokenId.PHP_ENDFOREACH; } - case 268: break; - case 117: + case 272: break; + case 118: { return PHPTokenId.PHP_TYPE_STRING; } - case 269: break; - case 80: + case 273: break; + case 81: { return PHPTokenId.PHP_EVAL; } - case 270: break; - case 87: + case 274: break; + case 88: { return PHPTokenId.PHP_GOTO; } - case 271: break; - case 103: + case 275: break; + case 104: { isInConst = true; parenBalanceInConst = 0; bracketBalanceInConst = 0; pushState(ST_PHP_LOOKING_FOR_CONSTANT_NAME); return PHPTokenId.PHP_CONST; } - case 272: break; + case 276: break; case 20: { popState(); return PHPTokenId.PHP_STRING; } - case 273: break; - case 134: + case 277: break; + case 135: { return PHPTokenId.PHP_ABSTRACT; } - case 274: break; + case 278: break; + case 26: + { heredoc=null; hereocLength=0; + yybegin(ST_PHP_IN_SCRIPTING); + int back = 0; + // mark just the label + if (yytext().charAt(yylength() - 1)==';') { + back++; + } + yypushback(back); + return PHPTokenId.PHP_NOWDOC_TAG_END; + } + case 279: break; case 9: { pushState(ST_PHP_DOUBLE_QUOTES); return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; } - case 275: break; - case 81: + case 280: break; + case 59: + { /* {TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */ + // there is no [\r\n] if it is the last line + // i.e. not [\r\n] but EOF, so check not [\r\n] but [\r\n]? + if (isEndNowdoc()) { + int indexOfNowdocId = yytext().indexOf(heredoc); + int back = yylength() - indexOfNowdocId - heredoc.length(); + yypushback(back); + heredoc=null; + hereocLength=0; + yybegin(ST_PHP_IN_SCRIPTING); + return PHPTokenId.PHP_NOWDOC_TAG_END; + } else { + yypushback(1); + yybegin(ST_PHP_NOWDOC); + } + } + case 281: break; + case 82: { return PHPTokenId.PHP_ECHO; } - case 276: break; - case 95: + case 282: break; + case 96: { return PHPTokenId.PHP_FINAL; } - case 277: break; - case 152: + case 283: break; + case 153: { return PHPTokenId.PHP__METHOD__; } - case 278: break; + case 284: break; case 10: { return PHPTokenId.PHP_NS_SEPARATOR; } - case 279: break; - case 110: + case 285: break; + case 111: { return PHPTokenId.PHP_YIELD; } - case 280: break; - case 133: + case 286: break; + case 134: { pushState(ST_PHP_LOOKING_FOR_FUNCTION_NAME); return PHPTokenId.PHP_FUNCTION; } - case 281: break; - case 131: + case 287: break; + case 132: { return PHPTokenId.PHP__DIR__; } - case 282: break; + case 288: break; case 5: { return PHPTokenId.PHP_STRING; } - case 283: break; - case 136: + case 289: break; + case 137: { return PHPTokenId.PHP_CONTINUE; } - case 284: break; - case 150: + case 290: break; + case 151: { return PHPTokenId.PHP_IMPLEMENTS; } - case 285: break; - case 68: + case 291: break; + case 71: { return PHPTokenId.PHP_TRY; } - case 286: break; - case 98: + case 292: break; + case 99: { return PHPTokenId.PHP_ARRAY; } - case 287: break; + case 293: break; case 7: { return PHPTokenId.WHITESPACE; } - case 288: break; - case 114: + case 294: break; + case 115: { return PHPTokenId.PHP_RETURN; } - case 289: break; - case 29: + case 295: break; + case 33: { return PHPTokenId.PHP_TOKEN; } - case 290: break; + case 296: break; case 16: { return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; } - case 291: break; - case 104: + case 297: break; + case 105: { return PHPTokenId.PHP_CATCH; } - case 292: break; - case 72: + case 298: break; + case 75: { String text = yytext(); int lastIndexOfDollar = text.lastIndexOf('$'); yypushback(text.length() - lastIndexOfDollar); return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; } - case 293: break; - case 52: + case 299: break; + case 56: { return PHPTokenId.PHP_PAAMAYIM_NEKUDOTAYIM; } - case 294: break; - case 137: + case 300: break; + case 138: { return PHPTokenId.PHP_CALLABLE; } - case 295: break; - case 149: + case 301: break; + case 150: { return PHPTokenId.PHP_INSTANCEOF; } - case 296: break; - case 54: - { heredoc=null; - hereocLength=0; - yybegin(ST_PHP_IN_SCRIPTING); - int back = 1; - // mark just the label - if (yytext().charAt(yylength() - 2)==';') { - back++; - } - yypushback(back); - return PHPTokenId.PHP_HEREDOC_TAG_END; - } - case 297: break; - case 125: + case 302: break; + case 126: { int bprefix = (yytext().charAt(0) != '<') ? 1 : 0; int startString=3+bprefix; /* 3 is <<<, 2 is quotes, 1 is newline */ @@ -2641,75 +2746,46 @@ public PHPTokenId nextToken() throws java.io.IOException { yybegin(ST_PHP_START_NOWDOC); return PHPTokenId.PHP_NOWDOC_TAG_START; } - case 298: break; - case 88: + case 303: break; + case 89: { return PHPTokenId.PHP_TYPE_BOOL; } - case 299: break; - case 112: + case 304: break; + case 113: { return PHPTokenId.PHP_ENDFOR; } - case 300: break; - case 64: + case 305: break; + case 67: { return PHPTokenId.PHP_FOR; } - case 301: break; - case 55: - { int label_len = yylength() - 1; - - if (yytext().charAt(label_len-1)==';') { - label_len--; - } - - if (label_len==hereocLength && yytext().substring(0,label_len).equals(heredoc)) { - heredoc=null; - hereocLength=0; - yybegin(ST_PHP_IN_SCRIPTING); - return PHPTokenId.PHP_NOWDOC_TAG_END; - } else { - return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; - } - } - case 302: break; - case 123: + case 306: break; + case 124: { return PHPTokenId.PHP_FOREACH; } - case 303: break; - case 46: + case 307: break; + case 50: { pushState(ST_PHP_LOOKING_FOR_STATIC_PROPERTY); return PHPTokenId.PHP_PAAMAYIM_NEKUDOTAYIM; } - case 304: break; - case 24: + case 308: break; + case 28: { popState(); return PHPTokenId.PHP_STRING; } - case 305: break; - case 79: + case 309: break; + case 80: { return PHPTokenId.PHP_ELSE; } - case 306: break; - case 86: + case 310: break; + case 87: { return PHPTokenId.PHP_SELF; } - case 307: break; - case 56: - { heredoc=null; hereocLength=0; - yybegin(ST_PHP_IN_SCRIPTING); - int back = 1; - // mark just the label - if (yytext().charAt(yylength() - 2)==';') { - back++; - } - yypushback(back); - return PHPTokenId.PHP_NOWDOC_TAG_END; - } - case 308: break; - case 48: + case 311: break; + case 52: { yypushback(1); return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; } - case 309: break; + case 312: break; case 14: { int lastState = stack.peek(); if (lastState != ST_PHP_IN_SCRIPTING && lastState != YYINITIAL) { @@ -2718,46 +2794,27 @@ public PHPTokenId nextToken() throws java.io.IOException { } return PHPTokenId.PHP_CURLY_CLOSE; } - case 310: break; - case 44: + case 313: break; + case 48: { return PHPTokenId.PHP_DO; } - case 311: break; - case 53: - { int trailingNewLineLength = 1; - int label_len = yylength() - trailingNewLineLength; - int back = trailingNewLineLength; - - if (yytext().charAt(label_len-1)==';') { - label_len--; - back++; - } - if (label_len == hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) { - back = back + hereocLength; - yypushback(back); - yybegin(ST_PHP_END_HEREDOC); - } else { - yypushback(yylength() - trailingNewLineLength); - yybegin(ST_PHP_HEREDOC); - } - } - case 312: break; - case 89: + case 314: break; + case 90: { return PHPTokenId.PHP_TYPE_VOID; } - case 313: break; - case 132: + case 315: break; + case 133: { return PHPTokenId.PHP_ENDWHILE; } - case 314: break; - case 113: + case 316: break; + case 114: { return PHPTokenId.PHP_ELSEIF; } - case 315: break; - case 84: + case 317: break; + case 85: { return PHPTokenId.PHP_TRUE; } - case 316: break; + case 318: break; default: if (zzInput == YYEOF) //zzAtEOF = true; @@ -2771,7 +2828,7 @@ public PHPTokenId nextToken() throws java.io.IOException { return null; } } - case 736: break; + case 733: break; case ST_PHP_DOC_COMMENT: { if (input.readLength() > 0) { input.backup(1); // backup eof @@ -2781,7 +2838,7 @@ public PHPTokenId nextToken() throws java.io.IOException { return null; } } - case 737: break; + case 734: break; default: { if(input.readLength() > 0) { // backup eof diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Scanner.java b/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Scanner.java index 8e3768582de6..52cc1cacbafc 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Scanner.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Scanner.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 18/06/21 0:39 */ +/* The following code was generated by JFlex 1.4.3 on 18/09/17 17:24 */ /* * Licensed to the Apache Software Foundation (ASF) under one @@ -33,8 +33,8 @@ /** * This class is a scanner generated by * JFlex 1.4.3 - * on 18/06/21 0:39 from the specification file - * /home/junichi11/NetBeansProjects/netbeans-releases/php.editor/tools/ASTPHP5Scanner.flex + * on 18/09/17 17:24 from the specification file + * /home/junichi11/NetBeansProjects/incubator-netbeans/php/php.editor/tools/ASTPHP5Scanner.flex */ public class ASTPHP5Scanner implements Scanner { @@ -187,53 +187,54 @@ public class ASTPHP5Scanner implements Scanner { "\1\5\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+ "\1\2\1\43\1\44\2\2\1\45\1\2\1\46\2\2"+ - "\1\47\1\2\1\50\1\2\2\50\2\51\2\52\4\2"+ - "\2\53\1\2\1\54\1\55\1\54\1\56\1\57\1\60"+ - "\1\4\1\6\1\60\1\61\1\62\1\63\1\64\1\16"+ - "\1\17\1\20\1\21\1\22\1\24\1\25\1\26\1\27"+ - "\1\30\1\31\1\32\1\33\1\34\1\65\1\66\1\67"+ - "\1\70\2\2\3\71\2\70\1\72\1\1\1\0\1\73"+ - "\1\74\1\1\1\75\2\0\1\76\6\5\1\77\1\100"+ - "\2\0\3\5\1\101\2\5\2\0\1\102\3\0\1\103"+ - "\1\0\1\104\1\105\1\106\7\5\1\107\12\5\1\110"+ - "\12\5\1\111\1\112\1\113\1\114\1\115\1\116\1\5"+ - "\12\0\1\5\1\117\1\120\1\117\1\121\1\0\1\122"+ - "\1\123\1\124\1\125\1\126\1\127\1\130\1\131\1\132"+ - "\1\133\1\134\1\135\1\136\4\0\2\102\2\137\1\140"+ - "\1\141\1\137\3\0\1\102\3\142\3\0\1\50\2\0"+ - "\1\143\2\0\1\144\10\0\1\145\2\0\1\146\1\0"+ - "\1\147\1\150\2\0\1\151\2\0\1\152\1\153\1\154"+ - "\2\0\1\75\1\0\1\155\7\5\2\75\1\156\1\5"+ - "\1\157\2\5\1\0\1\160\6\5\1\161\3\5\1\162"+ - "\2\5\1\163\1\5\1\164\1\165\23\5\1\166\1\167"+ - "\12\0\10\5\1\170\1\171\1\172\2\0\1\173\1\0"+ - "\1\174\1\0\2\127\2\135\1\0\1\175\1\44\1\175"+ - "\1\46\1\175\1\176\1\0\1\177\1\0\1\200\1\50"+ - "\1\0\1\201\1\0\1\201\1\0\2\150\1\202\2\0"+ - "\6\5\1\203\1\204\1\5\1\205\23\5\1\206\12\5"+ - "\1\207\1\5\1\210\5\5\12\0\11\5\5\0\1\211"+ - "\3\0\1\44\1\46\1\176\3\0\1\5\1\212\5\5"+ - "\1\213\1\5\1\214\1\215\4\5\1\216\1\5\1\217"+ - "\1\220\3\5\1\221\2\5\1\222\1\5\1\223\2\5"+ - "\1\224\1\225\1\226\4\5\1\227\1\230\2\5\1\231"+ - "\2\5\5\0\1\232\6\0\11\5\2\233\5\0\3\234"+ - "\2\235\1\0\2\5\1\236\2\5\1\237\7\5\1\240"+ - "\7\5\1\241\1\242\1\243\1\5\1\0\1\244\1\245"+ - "\2\5\4\0\1\246\5\0\1\247\11\5\6\0\1\250"+ - "\6\5\1\251\3\5\1\252\1\253\1\254\1\5\1\255"+ - "\3\5\1\256\1\0\1\257\1\5\1\260\3\0\1\261"+ - "\1\0\1\5\1\262\7\5\2\263\4\0\3\5\1\264"+ - "\1\265\5\5\1\266\1\5\1\267\1\270\1\5\1\0"+ - "\1\5\1\271\1\272\1\5\1\273\3\5\1\274\2\5"+ - "\5\0\2\5\1\275\1\276\1\5\1\277\2\5\1\300"+ - "\1\5\1\0\1\301\1\302\2\5\1\303\2\5\5\0"+ - "\1\304\1\305\1\5\1\306\1\307\1\5\1\310\2\5"+ - "\1\311\1\5\10\0\5\5\7\0\1\312\1\313\1\314"+ - "\2\5\1\0\1\315\2\0\1\316\1\5\5\0\1\5"+ - "\1\317\3\0\1\5\7\0\1\320\7\0\1\74\1\0"; + "\1\47\1\2\1\50\1\2\2\50\2\51\3\52\1\53"+ + "\1\2\1\54\1\2\2\54\3\55\1\56\1\2\1\57"+ + "\1\60\1\57\1\61\1\62\1\63\1\4\1\6\1\63"+ + "\1\64\1\65\1\66\1\67\1\16\1\17\1\20\1\21"+ + "\1\22\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\1\34\1\70\1\71\1\72\1\73\2\2\3\74"+ + "\2\73\1\75\1\1\1\0\1\76\1\77\1\1\1\100"+ + "\2\0\1\101\6\5\1\102\1\103\2\0\3\5\1\104"+ + "\2\5\2\0\1\105\3\0\1\106\1\0\1\107\1\110"+ + "\1\111\7\5\1\112\12\5\1\113\12\5\1\114\1\115"+ + "\1\116\1\117\1\120\1\121\1\5\12\0\1\5\1\122"+ + "\1\123\1\122\1\124\1\0\1\125\1\126\1\127\1\130"+ + "\1\131\1\132\1\133\1\134\1\135\1\136\1\137\1\140"+ + "\1\141\4\0\2\105\2\142\1\143\1\144\1\142\3\0"+ + "\1\105\3\145\3\0\1\146\1\0\2\147\1\0\1\53"+ + "\3\0\1\150\1\0\1\54\2\151\1\0\1\56\1\0"+ + "\1\152\1\153\2\0\1\154\2\0\1\155\1\156\1\157"+ + "\2\0\1\100\1\0\1\160\7\5\2\100\1\161\1\5"+ + "\1\162\2\5\1\0\1\163\6\5\1\164\3\5\1\165"+ + "\2\5\1\166\1\5\1\167\1\170\23\5\1\171\1\172"+ + "\12\0\10\5\1\173\1\174\1\175\2\0\1\176\1\0"+ + "\1\177\1\0\2\132\2\140\1\0\1\200\1\44\1\200"+ + "\1\46\1\200\1\201\1\0\1\202\1\0\1\146\1\150"+ + "\2\153\1\203\2\0\6\5\1\204\1\205\1\5\1\206"+ + "\23\5\1\207\12\5\1\210\1\5\1\211\5\5\12\0"+ + "\11\5\5\0\1\212\3\0\1\44\1\46\1\201\2\0"+ + "\1\5\1\213\5\5\1\214\1\5\1\215\1\216\4\5"+ + "\1\217\1\5\1\220\1\221\3\5\1\222\2\5\1\223"+ + "\1\5\1\224\2\5\1\225\1\226\1\227\4\5\1\230"+ + "\1\231\2\5\1\232\2\5\5\0\1\233\6\0\11\5"+ + "\2\234\5\0\3\235\2\236\1\0\2\5\1\237\2\5"+ + "\1\240\7\5\1\241\7\5\1\242\1\243\1\244\1\5"+ + "\1\0\1\245\1\246\2\5\4\0\1\247\5\0\1\250"+ + "\11\5\6\0\1\251\6\5\1\252\3\5\1\253\1\254"+ + "\1\255\1\5\1\256\3\5\1\257\1\0\1\260\1\5"+ + "\1\261\3\0\1\262\1\0\1\5\1\263\7\5\2\264"+ + "\4\0\3\5\1\265\1\266\5\5\1\267\1\5\1\270"+ + "\1\271\1\5\1\0\1\5\1\272\1\273\1\5\1\274"+ + "\3\5\1\275\2\5\5\0\2\5\1\276\1\277\1\5"+ + "\1\300\2\5\1\301\1\5\1\0\1\302\1\303\2\5"+ + "\1\304\2\5\5\0\1\305\1\306\1\5\1\307\1\310"+ + "\1\5\1\311\2\5\1\312\1\5\10\0\5\5\7\0"+ + "\1\313\1\314\1\315\2\5\1\0\1\316\2\0\1\317"+ + "\1\5\5\0\1\5\1\320\3\0\1\5\7\0\1\321"+ + "\7\0\1\77\1\0"; private static int [] zzUnpackAction() { - int [] result = new int[790]; + int [] result = new int[786]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -270,96 +271,96 @@ private static int zzUnpackAction(String packed, int offset, int [] result) { "\0\u0550\0\u0550\0\u0550\0\u1100\0\u0550\0\u1144\0\u1188\0\u11cc"+ "\0\u0550\0\u1210\0\u1254\0\u1298\0\u12dc\0\u0550\0\u1320\0\u1364"+ "\0\u13a8\0\u13ec\0\u1430\0\u1474\0\u14b8\0\u0550\0\u14fc\0\u1540"+ - "\0\u1584\0\u15c8\0\u160c\0\u0550\0\u1650\0\u1694\0\u0550\0\u16d8"+ - "\0\u171c\0\u0550\0\u1760\0\u17a4\0\u0550\0\u0550\0\u17e8\0\u0550"+ + "\0\u1584\0\u15c8\0\u160c\0\u1650\0\u1694\0\u16d8\0\u0550\0\u171c"+ + "\0\u1760\0\u17a4\0\u17e8\0\u0550\0\u182c\0\u1870\0\u0550\0\u18b4"+ + "\0\u18f8\0\u0550\0\u0550\0\u193c\0\u0550\0\u0550\0\u0550\0\u0550"+ "\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550"+ "\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550"+ - "\0\u0550\0\u0550\0\u0550\0\u182c\0\u1870\0\u18b4\0\u18f8\0\u193c"+ - "\0\u0550\0\u1980\0\u0550\0\u19c4\0\u0550\0\u0484\0\u1a08\0\u1a4c"+ - "\0\u1a90\0\u1ad4\0\u1b18\0\u1b5c\0\u1ba0\0\u0550\0\u1be4\0\u1c28"+ - "\0\u1c6c\0\u1cb0\0\u1cf4\0\u1d38\0\u0550\0\u0550\0\u1d7c\0\u1dc0"+ - "\0\u1e04\0\u1e48\0\u1e8c\0\u07b4\0\u1ed0\0\u1f14\0\u1f58\0\u1100"+ - "\0\u1f9c\0\u0880\0\u1fe0\0\u2024\0\u0550\0\u2068\0\u20ac\0\u0550"+ - "\0\u07b4\0\u20f0\0\u2134\0\u2178\0\u21bc\0\u2200\0\u2244\0\u2288"+ - "\0\u07b4\0\u22cc\0\u2310\0\u2354\0\u2398\0\u23dc\0\u2420\0\u2464"+ - "\0\u24a8\0\u24ec\0\u2530\0\u07b4\0\u2574\0\u25b8\0\u25fc\0\u2640"+ - "\0\u2684\0\u26c8\0\u270c\0\u2750\0\u2794\0\u27d8\0\u0550\0\u0550"+ - "\0\u0550\0\u0550\0\u281c\0\u0550\0\u2860\0\u28a4\0\u28e8\0\u0e14"+ - "\0\u292c\0\u2970\0\u29b4\0\u29f8\0\u2a3c\0\u2a80\0\u2ac4\0\u2b08"+ - "\0\u2b4c\0\u2b90\0\u0550\0\u2bd4\0\u2c18\0\u0550\0\u2c5c\0\u0550"+ - "\0\u2ca0\0\u0550\0\u2ce4\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550"+ - "\0\u2d28\0\u0550\0\u2d6c\0\u1188\0\u2db0\0\u2df4\0\u2e38\0\u2e7c"+ - "\0\u2db0\0\u0550\0\u0550\0\u0550\0\u2df4\0\u1298\0\u2ec0\0\u2f04"+ - "\0\u2f48\0\u2ec0\0\u0550\0\u2f04\0\u2f8c\0\u2fd0\0\u3014\0\u3058"+ - "\0\u309c\0\u14fc\0\u0550\0\u30e0\0\u1540\0\u0550\0\u3124\0\u1584"+ - "\0\u160c\0\u15c8\0\u3168\0\u31ac\0\u31f0\0\u1650\0\u0550\0\u3234"+ - "\0\u1694\0\u0550\0\u3278\0\u0550\0\u32bc\0\u3300\0\u3344\0\u0550"+ - "\0\u18b4\0\u3388\0\u0550\0\u0550\0\u0550\0\u33cc\0\u3410\0\u3454"+ - "\0\u3454\0\u0550\0\u3498\0\u34dc\0\u3520\0\u3564\0\u35a8\0\u35ec"+ - "\0\u3630\0\u1d7c\0\u1dc0\0\u07b4\0\u3674\0\u07b4\0\u36b8\0\u36fc"+ - "\0\u3740\0\u0550\0\u3784\0\u37c8\0\u380c\0\u3850\0\u3894\0\u38d8"+ - "\0\u07b4\0\u391c\0\u3960\0\u39a4\0\u07b4\0\u39e8\0\u3a2c\0\u3a70"+ - "\0\u3ab4\0\u07b4\0\u07b4\0\u3af8\0\u3b3c\0\u3b80\0\u3bc4\0\u3c08"+ - "\0\u3c4c\0\u3c90\0\u3cd4\0\u3d18\0\u3d5c\0\u3da0\0\u3de4\0\u3e28"+ - "\0\u3e6c\0\u3eb0\0\u3ef4\0\u3f38\0\u3f7c\0\u3fc0\0\u0550\0\u07b4"+ - "\0\u4004\0\u4048\0\u408c\0\u40d0\0\u4114\0\u4158\0\u419c\0\u41e0"+ - "\0\u4224\0\u4268\0\u42ac\0\u42f0\0\u4334\0\u4378\0\u43bc\0\u4400"+ - "\0\u4444\0\u4488\0\u0550\0\u0550\0\u0550\0\u44cc\0\u4510\0\u0550"+ - "\0\u4554\0\u4598\0\u45dc\0\u0550\0\u4620\0\u0550\0\u4664\0\u46a8"+ - "\0\u0550\0\u46ec\0\u1144\0\u4730\0\u1254\0\u4774\0\u47b8\0\u0550"+ - "\0\u47fc\0\u0550\0\u4840\0\u4884\0\u0550\0\u48c8\0\u160c\0\u490c"+ - "\0\u3300\0\u3344\0\u0550\0\u4950\0\u4994\0\u49d8\0\u4a1c\0\u4a60"+ - "\0\u4aa4\0\u4ae8\0\u4b2c\0\u07b4\0\u4b70\0\u4bb4\0\u07b4\0\u4bf8"+ + "\0\u1980\0\u19c4\0\u1a08\0\u1a4c\0\u1a90\0\u0550\0\u1ad4\0\u0550"+ + "\0\u1b18\0\u0550\0\u0484\0\u1b5c\0\u1ba0\0\u1be4\0\u1c28\0\u1c6c"+ + "\0\u1cb0\0\u1cf4\0\u0550\0\u1d38\0\u1d7c\0\u1dc0\0\u1e04\0\u1e48"+ + "\0\u1e8c\0\u0550\0\u0550\0\u1ed0\0\u1f14\0\u1f58\0\u1f9c\0\u1fe0"+ + "\0\u07b4\0\u2024\0\u2068\0\u20ac\0\u1100\0\u20f0\0\u0880\0\u2134"+ + "\0\u2178\0\u0550\0\u21bc\0\u2200\0\u0550\0\u07b4\0\u2244\0\u2288"+ + "\0\u22cc\0\u2310\0\u2354\0\u2398\0\u23dc\0\u07b4\0\u2420\0\u2464"+ + "\0\u24a8\0\u24ec\0\u2530\0\u2574\0\u25b8\0\u25fc\0\u2640\0\u2684"+ + "\0\u07b4\0\u26c8\0\u270c\0\u2750\0\u2794\0\u27d8\0\u281c\0\u2860"+ + "\0\u28a4\0\u28e8\0\u292c\0\u0550\0\u0550\0\u0550\0\u0550\0\u2970"+ + "\0\u0550\0\u29b4\0\u29f8\0\u2a3c\0\u0e14\0\u2a80\0\u2ac4\0\u2b08"+ + "\0\u2b4c\0\u2b90\0\u2bd4\0\u2c18\0\u2c5c\0\u2ca0\0\u2ce4\0\u0550"+ + "\0\u2d28\0\u2d6c\0\u0550\0\u2db0\0\u0550\0\u2df4\0\u0550\0\u2e38"+ + "\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u2e7c\0\u0550\0\u2ec0"+ + "\0\u1188\0\u2f04\0\u2f48\0\u2f8c\0\u2fd0\0\u2f04\0\u0550\0\u0550"+ + "\0\u0550\0\u2f48\0\u1298\0\u3014\0\u3058\0\u309c\0\u3014\0\u0550"+ + "\0\u3058\0\u30e0\0\u3124\0\u3168\0\u31ac\0\u31f0\0\u14fc\0\u0550"+ + "\0\u1540\0\u0550\0\u15c8\0\u1650\0\u160c\0\u3234\0\u3278\0\u32bc"+ + "\0\u171c\0\u0550\0\u1760\0\u0550\0\u17e8\0\u0550\0\u3300\0\u3344"+ + "\0\u3388\0\u0550\0\u1a08\0\u33cc\0\u0550\0\u0550\0\u0550\0\u3410"+ + "\0\u3454\0\u3498\0\u3498\0\u0550\0\u34dc\0\u3520\0\u3564\0\u35a8"+ + "\0\u35ec\0\u3630\0\u3674\0\u1ed0\0\u1f14\0\u07b4\0\u36b8\0\u07b4"+ + "\0\u36fc\0\u3740\0\u3784\0\u0550\0\u37c8\0\u380c\0\u3850\0\u3894"+ + "\0\u38d8\0\u391c\0\u07b4\0\u3960\0\u39a4\0\u39e8\0\u07b4\0\u3a2c"+ + "\0\u3a70\0\u3ab4\0\u3af8\0\u07b4\0\u07b4\0\u3b3c\0\u3b80\0\u3bc4"+ + "\0\u3c08\0\u3c4c\0\u3c90\0\u3cd4\0\u3d18\0\u3d5c\0\u3da0\0\u3de4"+ + "\0\u3e28\0\u3e6c\0\u3eb0\0\u3ef4\0\u3f38\0\u3f7c\0\u3fc0\0\u4004"+ + "\0\u0550\0\u07b4\0\u4048\0\u408c\0\u40d0\0\u4114\0\u4158\0\u419c"+ + "\0\u41e0\0\u4224\0\u4268\0\u42ac\0\u42f0\0\u4334\0\u4378\0\u43bc"+ + "\0\u4400\0\u4444\0\u4488\0\u44cc\0\u0550\0\u0550\0\u0550\0\u4510"+ + "\0\u4554\0\u0550\0\u4598\0\u45dc\0\u4620\0\u0550\0\u4664\0\u0550"+ + "\0\u46a8\0\u46ec\0\u0550\0\u4730\0\u1144\0\u4774\0\u1254\0\u47b8"+ + "\0\u47fc\0\u0550\0\u4840\0\u0550\0\u0550\0\u3344\0\u3388\0\u0550"+ + "\0\u4884\0\u48c8\0\u490c\0\u4950\0\u4994\0\u49d8\0\u4a1c\0\u4a60"+ + "\0\u07b4\0\u4aa4\0\u4ae8\0\u07b4\0\u4b2c\0\u4b70\0\u4bb4\0\u4bf8"+ "\0\u4c3c\0\u4c80\0\u4cc4\0\u4d08\0\u4d4c\0\u4d90\0\u4dd4\0\u4e18"+ - "\0\u4e5c\0\u4ea0\0\u4ee4\0\u4f28\0\u4f6c\0\u4fb0\0\u4ff4\0\u5038"+ - "\0\u507c\0\u50c0\0\u07b4\0\u5104\0\u5148\0\u518c\0\u51d0\0\u5214"+ - "\0\u5258\0\u529c\0\u52e0\0\u5324\0\u5368\0\u07b4\0\u53ac\0\u07b4"+ + "\0\u4e5c\0\u4ea0\0\u4ee4\0\u4f28\0\u4f6c\0\u4fb0\0\u4ff4\0\u07b4"+ + "\0\u5038\0\u507c\0\u50c0\0\u5104\0\u5148\0\u518c\0\u51d0\0\u5214"+ + "\0\u5258\0\u529c\0\u07b4\0\u52e0\0\u07b4\0\u5324\0\u5368\0\u53ac"+ "\0\u53f0\0\u5434\0\u5478\0\u54bc\0\u5500\0\u5544\0\u5588\0\u55cc"+ "\0\u5610\0\u5654\0\u5698\0\u56dc\0\u5720\0\u5764\0\u57a8\0\u57ec"+ "\0\u5830\0\u5874\0\u58b8\0\u58fc\0\u5940\0\u5984\0\u59c8\0\u5a0c"+ - "\0\u5a50\0\u5a94\0\u5ad8\0\u5b1c\0\u5b60\0\u0550\0\u5ba4\0\u5be8"+ - "\0\u5c2c\0\u5c70\0\u5cb4\0\u0550\0\u5cf8\0\u5d3c\0\u5d80\0\u5dc4"+ - "\0\u07b4\0\u5e08\0\u5e4c\0\u5e90\0\u5ed4\0\u5f18\0\u07b4\0\u5f5c"+ - "\0\u07b4\0\u07b4\0\u5fa0\0\u5fe4\0\u6028\0\u606c\0\u07b4\0\u60b0"+ - "\0\u07b4\0\u07b4\0\u60f4\0\u6138\0\u617c\0\u61c0\0\u6204\0\u6248"+ - "\0\u07b4\0\u628c\0\u07b4\0\u62d0\0\u6314\0\u07b4\0\u07b4\0\u07b4"+ - "\0\u6358\0\u639c\0\u63e0\0\u6424\0\u6468\0\u07b4\0\u64ac\0\u64f0"+ - "\0\u07b4\0\u6534\0\u6578\0\u65bc\0\u6600\0\u6644\0\u6688\0\u66cc"+ - "\0\u0550\0\u6710\0\u6754\0\u6798\0\u67dc\0\u6820\0\u6864\0\u68a8"+ - "\0\u68ec\0\u6930\0\u6974\0\u69b8\0\u69fc\0\u6a40\0\u6a84\0\u6ac8"+ - "\0\u0550\0\u6b0c\0\u6b50\0\u6b94\0\u6bd8\0\u6c1c\0\u6c60\0\u0550"+ - "\0\u1144\0\u1254\0\u0550\0\u6ca4\0\u6ce8\0\u6d2c\0\u6d70\0\u6db4"+ - "\0\u6df8\0\u6e3c\0\u07b4\0\u6e80\0\u6ec4\0\u6f08\0\u6f4c\0\u6f90"+ - "\0\u6fd4\0\u7018\0\u07b4\0\u705c\0\u70a0\0\u70e4\0\u7128\0\u716c"+ - "\0\u71b0\0\u71f4\0\u07b4\0\u07b4\0\u07b4\0\u7238\0\u727c\0\u07b4"+ - "\0\u07b4\0\u72c0\0\u7304\0\u7348\0\u738c\0\u73d0\0\u7414\0\u0550"+ - "\0\u7458\0\u749c\0\u74e0\0\u7524\0\u7568\0\u0550\0\u75ac\0\u75f0"+ + "\0\u5a50\0\u5a94\0\u0550\0\u5ad8\0\u5b1c\0\u5b60\0\u5ba4\0\u5be8"+ + "\0\u0550\0\u5c2c\0\u5c70\0\u5cb4\0\u07b4\0\u5cf8\0\u5d3c\0\u5d80"+ + "\0\u5dc4\0\u5e08\0\u07b4\0\u5e4c\0\u07b4\0\u07b4\0\u5e90\0\u5ed4"+ + "\0\u5f18\0\u5f5c\0\u07b4\0\u5fa0\0\u07b4\0\u07b4\0\u5fe4\0\u6028"+ + "\0\u606c\0\u60b0\0\u60f4\0\u6138\0\u07b4\0\u617c\0\u07b4\0\u61c0"+ + "\0\u6204\0\u07b4\0\u07b4\0\u07b4\0\u6248\0\u628c\0\u62d0\0\u6314"+ + "\0\u6358\0\u07b4\0\u639c\0\u63e0\0\u07b4\0\u6424\0\u6468\0\u64ac"+ + "\0\u64f0\0\u6534\0\u6578\0\u65bc\0\u0550\0\u6600\0\u6644\0\u6688"+ + "\0\u66cc\0\u6710\0\u6754\0\u6798\0\u67dc\0\u6820\0\u6864\0\u68a8"+ + "\0\u68ec\0\u6930\0\u6974\0\u69b8\0\u0550\0\u69fc\0\u6a40\0\u6a84"+ + "\0\u6ac8\0\u6b0c\0\u6b50\0\u0550\0\u1144\0\u1254\0\u0550\0\u6b94"+ + "\0\u6bd8\0\u6c1c\0\u6c60\0\u6ca4\0\u6ce8\0\u6d2c\0\u07b4\0\u6d70"+ + "\0\u6db4\0\u6df8\0\u6e3c\0\u6e80\0\u6ec4\0\u6f08\0\u07b4\0\u6f4c"+ + "\0\u6f90\0\u6fd4\0\u7018\0\u705c\0\u70a0\0\u70e4\0\u07b4\0\u07b4"+ + "\0\u07b4\0\u7128\0\u716c\0\u07b4\0\u07b4\0\u71b0\0\u71f4\0\u7238"+ + "\0\u727c\0\u72c0\0\u7304\0\u0550\0\u7348\0\u738c\0\u73d0\0\u7414"+ + "\0\u7458\0\u0550\0\u749c\0\u74e0\0\u7524\0\u7568\0\u75ac\0\u75f0"+ "\0\u7634\0\u7678\0\u76bc\0\u7700\0\u7744\0\u7788\0\u77cc\0\u7810"+ - "\0\u7854\0\u7898\0\u78dc\0\u7920\0\u7964\0\u07b4\0\u79a8\0\u79ec"+ - "\0\u7a30\0\u7a74\0\u7ab8\0\u7afc\0\u7b40\0\u7b84\0\u7bc8\0\u7c0c"+ - "\0\u07b4\0\u07b4\0\u07b4\0\u7c50\0\u07b4\0\u7c94\0\u7cd8\0\u7d1c"+ - "\0\u7d60\0\u7da4\0\u07b4\0\u7de8\0\u0550\0\u7e2c\0\u7e70\0\u7eb4"+ - "\0\u0550\0\u7ef8\0\u7f3c\0\u07b4\0\u7f80\0\u7fc4\0\u8008\0\u804c"+ - "\0\u8090\0\u80d4\0\u8118\0\u0550\0\u815c\0\u81a0\0\u81e4\0\u8228"+ - "\0\u826c\0\u82b0\0\u82f4\0\u8338\0\u07b4\0\u07b4\0\u837c\0\u83c0"+ - "\0\u8404\0\u8448\0\u848c\0\u07b4\0\u84d0\0\u07b4\0\u07b4\0\u8514"+ - "\0\u8558\0\u859c\0\u0550\0\u0550\0\u85e0\0\u07b4\0\u8624\0\u8668"+ - "\0\u86ac\0\u07b4\0\u86f0\0\u8734\0\u8778\0\u87bc\0\u8800\0\u8844"+ - "\0\u8888\0\u88cc\0\u8910\0\u07b4\0\u07b4\0\u8954\0\u07b4\0\u8998"+ - "\0\u89dc\0\u07b4\0\u8a20\0\u8a64\0\u07b4\0\u07b4\0\u8aa8\0\u8aec"+ - "\0\u07b4\0\u8b30\0\u8b74\0\u8bb8\0\u8bfc\0\u8c40\0\u8c84\0\u8cc8"+ - "\0\u07b4\0\u07b4\0\u8d0c\0\u07b4\0\u07b4\0\u8d50\0\u0550\0\u8d94"+ - "\0\u8dd8\0\u07b4\0\u8e1c\0\u8e60\0\u8ea4\0\u8ee8\0\u8f2c\0\u8f70"+ + "\0\u7854\0\u07b4\0\u7898\0\u78dc\0\u7920\0\u7964\0\u79a8\0\u79ec"+ + "\0\u7a30\0\u7a74\0\u7ab8\0\u7afc\0\u07b4\0\u07b4\0\u07b4\0\u7b40"+ + "\0\u07b4\0\u7b84\0\u7bc8\0\u7c0c\0\u7c50\0\u7c94\0\u07b4\0\u7cd8"+ + "\0\u0550\0\u7d1c\0\u7d60\0\u7da4\0\u0550\0\u7de8\0\u7e2c\0\u07b4"+ + "\0\u7e70\0\u7eb4\0\u7ef8\0\u7f3c\0\u7f80\0\u7fc4\0\u8008\0\u0550"+ + "\0\u804c\0\u8090\0\u80d4\0\u8118\0\u815c\0\u81a0\0\u81e4\0\u8228"+ + "\0\u07b4\0\u07b4\0\u826c\0\u82b0\0\u82f4\0\u8338\0\u837c\0\u07b4"+ + "\0\u83c0\0\u07b4\0\u07b4\0\u8404\0\u8448\0\u848c\0\u0550\0\u0550"+ + "\0\u84d0\0\u07b4\0\u8514\0\u8558\0\u859c\0\u07b4\0\u85e0\0\u8624"+ + "\0\u8668\0\u86ac\0\u86f0\0\u8734\0\u8778\0\u87bc\0\u8800\0\u07b4"+ + "\0\u07b4\0\u8844\0\u07b4\0\u8888\0\u88cc\0\u07b4\0\u8910\0\u8954"+ + "\0\u07b4\0\u07b4\0\u8998\0\u89dc\0\u07b4\0\u8a20\0\u8a64\0\u8aa8"+ + "\0\u8aec\0\u8b30\0\u8b74\0\u8bb8\0\u07b4\0\u07b4\0\u8bfc\0\u07b4"+ + "\0\u07b4\0\u8c40\0\u0550\0\u8c84\0\u8cc8\0\u07b4\0\u8d0c\0\u8d50"+ + "\0\u8d94\0\u8dd8\0\u8e1c\0\u8e60\0\u8ea4\0\u8ee8\0\u8f2c\0\u8f70"+ "\0\u8fb4\0\u8ff8\0\u903c\0\u9080\0\u90c4\0\u9108\0\u914c\0\u9190"+ - "\0\u91d4\0\u9218\0\u925c\0\u92a0\0\u92e4\0\u9328\0\u936c\0\u07b4"+ - "\0\u07b4\0\u07b4\0\u93b0\0\u93f4\0\u9438\0\u0550\0\u947c\0\u94c0"+ - "\0\u07b4\0\u9504\0\u9548\0\u958c\0\u95d0\0\u9614\0\u9658\0\u969c"+ - "\0\u9548\0\u96e0\0\u9724\0\u9768\0\u97ac\0\u97f0\0\u9834\0\u9878"+ - "\0\u98bc\0\u9900\0\u9944\0\u9988\0\u0550\0\u99cc\0\u9a10\0\u9a54"+ - "\0\u9a98\0\u9adc\0\u9b20\0\u9b64\0\u0550\0\u9ba8"; + "\0\u91d4\0\u9218\0\u925c\0\u07b4\0\u07b4\0\u07b4\0\u92a0\0\u92e4"+ + "\0\u9328\0\u0550\0\u936c\0\u93b0\0\u07b4\0\u93f4\0\u9438\0\u947c"+ + "\0\u94c0\0\u9504\0\u9548\0\u958c\0\u9438\0\u95d0\0\u9614\0\u9658"+ + "\0\u969c\0\u96e0\0\u9724\0\u9768\0\u97ac\0\u97f0\0\u9834\0\u9878"+ + "\0\u0550\0\u98bc\0\u9900\0\u9944\0\u9988\0\u99cc\0\u9a10\0\u9a54"+ + "\0\u0550\0\u9a98"; private static int [] zzUnpackRowMap() { - int [] result = new int[790]; + int [] result = new int[786]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -394,855 +395,852 @@ private static int zzUnpackRowMap(String packed, int offset, int [] result) { "\1\116\1\122\57\116\15\123\1\124\3\123\1\125\1\123"+ "\1\126\1\127\57\123\15\130\1\131\1\132\1\130\1\133"+ "\1\134\2\130\1\135\57\130\3\136\1\137\2\136\3\137"+ - "\1\136\2\137\13\136\22\137\3\136\1\137\2\136\3\137"+ - "\17\136\1\137\2\136\3\25\1\140\2\25\3\140\1\25"+ - "\2\140\13\25\22\140\3\25\1\140\2\25\3\140\17\25"+ - "\1\140\2\25\3\141\1\142\2\141\3\142\2\141\1\142"+ - "\2\141\1\143\1\141\1\143\6\141\22\142\3\141\1\142"+ - "\2\141\3\142\17\141\1\142\2\141\3\144\1\145\2\144"+ - "\3\145\1\144\2\145\13\144\22\145\3\144\1\145\2\144"+ - "\3\145\17\144\1\145\2\144\3\25\1\146\2\25\3\146"+ - "\1\25\2\146\13\25\22\146\3\25\1\146\2\25\3\146"+ - "\17\25\1\146\2\25\3\147\1\150\2\147\3\150\1\147"+ - "\2\150\2\147\3\40\6\147\22\150\1\151\2\147\1\150"+ - "\2\147\3\150\17\147\1\150\2\147\3\152\1\153\2\152"+ - "\3\153\1\152\2\153\13\152\22\153\3\152\1\153\2\152"+ - "\3\153\17\152\1\153\2\152\1\25\1\154\1\155\1\36"+ - "\1\156\1\157\3\36\1\154\2\36\1\25\4\160\1\41"+ - "\1\161\1\162\1\163\1\45\1\164\22\36\1\165\1\166"+ - "\1\167\1\36\1\170\1\73\3\36\1\171\1\172\1\173"+ - "\1\174\1\175\1\176\1\177\1\200\1\201\1\106\1\107"+ - "\1\202\1\111\1\112\1\203\1\36\2\160\64\204\1\205"+ - "\17\204\64\206\1\207\17\206\16\210\1\211\1\210\1\212"+ - "\31\210\1\213\13\210\1\214\3\210\1\214\11\210\26\0"+ - "\1\215\55\0\104\216\63\23\1\217\103\23\1\0\2\23"+ - "\1\220\3\23\1\221\6\23\1\222\2\23\105\0\1\26"+ - "\1\223\1\224\1\0\1\26\3\0\1\26\73\0\1\223"+ - "\1\225\2\0\1\223\3\0\1\223\14\0\1\226\56\0"+ - "\1\36\1\0\1\36\1\0\1\36\1\227\6\36\12\0"+ - "\5\36\1\230\1\231\4\36\1\232\1\233\5\36\3\0"+ - "\1\234\2\0\3\36\17\0\1\36\6\0\1\235\21\0"+ - "\1\236\56\0\1\26\1\223\1\224\1\0\1\26\1\237"+ - "\1\0\1\240\1\26\73\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\7\36\1\241\12\36\3\0\1\36\2\0"+ + "\1\136\2\137\3\136\1\140\7\136\22\137\3\136\1\137"+ + "\2\136\3\137\17\136\1\137\2\136\3\25\1\141\2\25"+ + "\3\141\1\25\2\141\3\25\1\142\7\25\22\141\3\25"+ + "\1\141\2\25\3\141\17\25\1\141\2\25\3\143\1\144"+ + "\2\143\3\144\2\143\1\144\2\143\1\145\1\143\1\146"+ + "\6\143\22\144\3\143\1\144\2\143\3\144\17\143\1\144"+ + "\2\143\3\147\1\150\2\147\3\150\1\147\2\150\3\147"+ + "\1\151\7\147\22\150\3\147\1\150\2\147\3\150\17\147"+ + "\1\150\2\147\3\25\1\152\2\25\3\152\1\25\2\152"+ + "\3\25\1\153\7\25\22\152\3\25\1\152\2\25\3\152"+ + "\17\25\1\152\2\25\3\154\1\155\2\154\3\155\1\154"+ + "\2\155\2\154\3\40\6\154\22\155\1\156\2\154\1\155"+ + "\2\154\3\155\17\154\1\155\2\154\3\157\1\160\2\157"+ + "\3\160\1\157\2\160\13\157\22\160\3\157\1\160\2\157"+ + "\3\160\17\157\1\160\2\157\1\25\1\161\1\162\1\36"+ + "\1\163\1\164\3\36\1\161\2\36\1\25\4\165\1\41"+ + "\1\166\1\167\1\170\1\45\1\171\22\36\1\172\1\173"+ + "\1\174\1\36\1\175\1\73\3\36\1\176\1\177\1\200"+ + "\1\201\1\202\1\203\1\204\1\205\1\206\1\106\1\107"+ + "\1\207\1\111\1\112\1\210\1\36\2\165\64\211\1\212"+ + "\17\211\64\213\1\214\17\213\16\215\1\216\1\215\1\217"+ + "\31\215\1\220\13\215\1\221\3\215\1\221\11\215\26\0"+ + "\1\222\55\0\104\223\63\23\1\224\103\23\1\0\2\23"+ + "\1\225\3\23\1\226\6\23\1\227\2\23\105\0\1\26"+ + "\1\230\1\231\1\0\1\26\3\0\1\26\73\0\1\230"+ + "\1\232\2\0\1\230\3\0\1\230\14\0\1\233\56\0"+ + "\1\36\1\0\1\36\1\0\1\36\1\234\6\36\12\0"+ + "\5\36\1\235\1\236\4\36\1\237\1\240\5\36\3\0"+ + "\1\241\2\0\3\36\17\0\1\36\6\0\1\242\21\0"+ + "\1\243\56\0\1\26\1\230\1\231\1\0\1\26\1\244"+ + "\1\0\1\245\1\26\73\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\7\36\1\246\12\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\3\36\1\242\4\36\12\0\5\36\1\243\2\36\1\244"+ - "\1\245\10\36\3\0\1\36\2\0\3\36\17\0\1\244"+ + "\3\36\1\247\4\36\12\0\5\36\1\250\2\36\1\251"+ + "\1\252\10\36\3\0\1\36\2\0\3\36\17\0\1\251"+ "\3\0\1\36\1\0\1\36\1\0\10\36\5\0\1\42"+ - "\4\0\11\36\1\246\10\36\3\0\1\36\2\0\3\36"+ - "\1\0\1\247\15\0\1\36\1\250\2\0\1\36\1\0"+ + "\4\0\11\36\1\253\10\36\3\0\1\36\2\0\3\36"+ + "\1\0\1\254\15\0\1\36\1\255\2\0\1\36\1\0"+ "\1\36\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\20\0\3\40\66\0\1\251\2\0"+ - "\3\251\1\0\2\251\13\0\22\251\3\0\1\251\2\0"+ - "\3\251\17\0\1\251\2\0\15\252\1\253\3\252\1\254"+ - "\1\255\1\252\1\256\57\252\26\0\1\257\23\0\1\260"+ + "\3\36\17\0\1\36\20\0\3\40\66\0\1\256\2\0"+ + "\3\256\1\0\2\256\13\0\22\256\3\0\1\256\2\0"+ + "\3\256\17\0\1\256\2\0\15\257\1\260\3\257\1\261"+ + "\1\262\1\257\1\263\57\257\26\0\1\264\23\0\1\265"+ "\32\0\1\36\1\0\1\36\1\0\10\36\12\0\3\36"+ - "\1\261\1\36\1\262\2\36\1\263\3\36\1\264\5\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\263\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\11\36\1\265\3\36"+ - "\1\266\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\267\1\0\10\36\12\0\1\270"+ - "\6\36\1\271\12\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\266\1\36\1\267\2\36\1\270\3\36\1\271\5\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\270\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\11\36\1\272\3\36"+ + "\1\273\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\274\1\0\10\36\12\0\1\275"+ + "\6\36\1\276\12\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\272\3\36\1\273\2\36\1\274\12\36\3\0\1\36"+ + "\1\277\3\36\1\300\2\36\1\301\12\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\5\36\1\275\2\36\1\276\11\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\276\3\0\1\36"+ - "\1\0\1\277\1\0\2\36\1\300\5\36\12\0\22\36"+ + "\1\0\10\36\12\0\5\36\1\302\2\36\1\303\11\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\303\3\0\1\36"+ + "\1\0\1\304\1\0\2\36\1\305\5\36\12\0\22\36"+ "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\2\36\1\301\5\36\12\0\7\36"+ - "\1\302\3\36\1\303\6\36\3\0\1\36\2\0\3\36"+ + "\1\0\1\36\1\0\2\36\1\306\5\36\12\0\7\36"+ + "\1\307\3\36\1\310\6\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\11\36\1\304\10\36\3\0\1\36\2\0\3\36"+ + "\12\0\11\36\1\311\10\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\1\36\1\305\14\36\1\306\3\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\307"+ + "\12\0\1\36\1\312\14\36\1\313\3\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\314"+ "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\1\310\21\36\3\0\1\36\2\0\3\36\17\0"+ + "\12\0\1\315\21\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\311\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\1\316\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+ "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\15\36"+ - "\1\312\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\1\317\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+ "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\7\36"+ - "\1\313\3\36\1\314\6\36\3\0\1\36\2\0\3\36"+ + "\1\320\3\36\1\321\6\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\4\36\1\315\4\36\1\316\10\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\30\0\1\317\22\0\1\320"+ - "\1\321\57\0\1\322\23\0\1\323\104\0\1\324\31\0"+ - "\1\36\1\0\1\36\1\0\2\36\1\325\5\36\12\0"+ + "\12\0\4\36\1\322\4\36\1\323\10\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\30\0\1\324\22\0\1\325"+ + "\1\326\57\0\1\327\23\0\1\330\104\0\1\331\31\0"+ + "\1\36\1\0\1\36\1\0\2\36\1\332\5\36\12\0"+ "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\11\0"+ - "\1\326\1\327\6\0\1\330\7\0\1\331\1\0\1\332"+ - "\1\333\1\334\2\0\1\335\1\336\1\337\40\0\1\336"+ + "\1\333\1\334\6\0\1\335\7\0\1\336\1\0\1\337"+ + "\1\340\1\341\2\0\1\342\1\343\1\344\40\0\1\343"+ "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\22\36"+ - "\3\0\1\36\2\0\1\36\1\340\1\36\17\0\1\36"+ - "\30\0\1\341\103\0\1\342\23\0\1\343\10\0\1\344"+ - "\1\0\1\345\44\0\1\346\35\0\1\347\45\0\1\350"+ - "\35\0\1\351\1\115\44\0\1\352\23\0\1\353\57\0"+ - "\1\354\40\0\1\355\42\0\1\356\41\0\1\357\41\0"+ - "\1\360\127\0\1\361\17\0\1\362\11\0\15\250\1\363"+ - "\64\250\1\255\1\250\15\116\1\364\3\116\1\365\1\0"+ - "\1\116\1\366\166\116\1\367\2\116\3\367\1\116\1\370"+ - "\1\367\1\116\1\364\3\116\1\371\1\372\1\116\1\373"+ - "\2\116\22\367\3\116\1\367\2\116\3\367\17\116\1\367"+ - "\17\116\1\364\3\116\1\374\1\372\1\116\1\375\57\116"+ - "\15\123\1\376\3\123\1\377\1\123\1\0\1\u0100\166\123"+ - "\1\367\2\123\3\367\1\123\1\u0101\1\367\1\123\1\376"+ - "\3\123\1\u0102\1\123\1\u0103\1\373\2\123\22\367\3\123"+ - "\1\367\2\123\3\367\17\123\1\367\17\123\1\376\3\123"+ - "\1\374\1\123\1\u0103\1\u0104\57\123\15\130\1\u0105\1\0"+ - "\1\130\1\0\1\u0106\2\130\1\u0107\166\130\1\u0108\2\130"+ - "\3\u0108\1\130\2\u0108\1\130\1\u0105\1\0\1\130\1\0"+ - "\1\u0106\2\130\1\u0107\2\130\22\u0108\3\130\1\u0108\2\130"+ - "\3\u0108\17\130\1\u0108\5\130\1\u0108\2\130\3\u0108\1\130"+ - "\2\u0108\1\130\1\u0105\1\u0109\1\130\1\0\1\u0106\2\130"+ - "\1\u0107\2\130\22\u0108\3\130\1\u0108\2\130\3\u0108\17\130"+ - "\1\u0108\2\130\3\0\1\367\2\0\3\367\1\0\2\367"+ - "\10\0\1\373\2\0\22\367\3\0\1\367\2\0\3\367"+ - "\17\0\1\367\23\0\1\374\63\0\1\u010a\1\0\1\u010a"+ - "\1\0\10\u010a\1\0\1\u010b\1\0\1\u010b\4\0\1\u010c"+ - "\1\0\22\u010a\3\0\1\u010a\2\0\3\u010a\17\0\1\u010a"+ - "\3\0\1\u010d\1\0\1\u010d\1\0\10\u010d\1\0\1\u010e"+ - "\1\0\1\u010e\4\0\1\u010f\1\0\22\u010d\3\0\1\u010d"+ - "\2\0\3\u010d\17\0\1\u010d\2\0\16\u0110\1\u0111\1\u0110"+ - "\1\u0111\64\u0110\1\u0112\1\u0110\1\u0112\1\u0110\5\u0112\1\u0110"+ - "\1\u0112\2\u0110\1\0\1\u0110\1\0\4\u0110\1\u0113\1\u0110"+ - "\22\u0112\3\u0110\1\u0112\2\u0110\3\u0112\17\u0110\1\u0112\5\u0110"+ - "\1\u0114\2\u0110\3\u0114\1\u0110\1\u0115\1\u0114\2\u0110\1\u0111"+ - "\1\u0110\1\u0111\6\u0110\22\u0114\3\u0110\1\u0114\2\u0110\3\u0114"+ - "\17\u0110\1\u0114\2\u0110\1\0\1\u0116\1\0\1\u0116\1\0"+ - "\10\u0116\1\0\1\u0117\1\0\1\u0117\4\0\1\u0118\1\0"+ - "\22\u0116\3\0\1\u0116\2\0\3\u0116\17\0\1\u0116\3\0"+ - "\1\u0119\1\0\1\u0119\1\0\10\u0119\1\0\1\u011a\1\0"+ - "\1\u011a\4\0\1\u011b\1\0\22\u0119\3\0\1\u0119\2\0"+ - "\3\u0119\17\0\1\u0119\3\0\1\150\1\0\1\150\1\0"+ - "\10\150\12\0\22\150\3\0\1\150\2\0\3\150\17\0"+ - "\1\150\54\0\1\u011c\32\0\1\153\1\0\1\153\1\0"+ - "\10\153\12\0\22\153\3\0\1\153\2\0\3\153\17\0"+ - "\1\153\3\0\1\154\3\0\1\154\3\0\1\154\73\0"+ - "\1\u011d\3\0\1\u011d\1\u011e\1\0\1\u011f\1\u011d\72\0"+ - "\64\204\1\0\17\204\65\0\1\u0120\16\0\64\u0121\1\u0122"+ - "\103\u0121\1\u0122\1\u0123\16\u0121\16\210\1\211\1\210\1\212"+ - "\31\210\1\211\13\210\1\211\3\210\1\211\11\210\16\0"+ - "\1\211\137\0\1\u0124\31\0\63\23\1\0\2\23\1\0"+ - "\3\23\1\0\6\23\1\0\2\23\26\0\1\u0125\103\0"+ - "\1\u0125\21\0\1\u0126\70\0\1\u0127\47\0\1\223\1\0"+ - "\1\224\1\0\1\223\3\0\1\223\73\0\1\u0128\2\0"+ - "\1\u0129\1\u0128\3\0\1\u0128\37\0\1\u0129\34\0\1\u012a"+ - "\102\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u012b"+ - "\1\u012c\20\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\2\36"+ - "\1\u012d\17\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\15\36"+ - "\1\u012e\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\2\0\1\36\1\345\1\36\17\0\1\36"+ + "\30\0\1\346\103\0\1\347\23\0\1\350\10\0\1\351"+ + "\1\0\1\352\44\0\1\353\35\0\1\354\45\0\1\355"+ + "\35\0\1\356\1\115\44\0\1\357\23\0\1\360\57\0"+ + "\1\361\40\0\1\362\42\0\1\363\41\0\1\364\41\0"+ + "\1\365\127\0\1\366\17\0\1\367\11\0\15\255\1\370"+ + "\64\255\1\262\1\255\15\116\1\371\3\116\1\372\1\0"+ + "\1\116\1\373\166\116\1\374\2\116\3\374\1\116\1\375"+ + "\1\374\1\116\1\371\3\116\1\376\1\377\1\116\1\u0100"+ + "\2\116\22\374\3\116\1\374\2\116\3\374\17\116\1\374"+ + "\17\116\1\371\3\116\1\u0101\1\377\1\116\1\u0102\57\116"+ + "\15\123\1\u0103\3\123\1\u0104\1\123\1\0\1\u0105\166\123"+ + "\1\374\2\123\3\374\1\123\1\u0106\1\374\1\123\1\u0103"+ + "\3\123\1\u0107\1\123\1\u0108\1\u0100\2\123\22\374\3\123"+ + "\1\374\2\123\3\374\17\123\1\374\17\123\1\u0103\3\123"+ + "\1\u0101\1\123\1\u0108\1\u0109\57\123\15\130\1\u010a\1\0"+ + "\1\130\1\0\1\u010b\2\130\1\u010c\166\130\1\u010d\2\130"+ + "\3\u010d\1\130\2\u010d\1\130\1\u010a\1\0\1\132\1\0"+ + "\1\u010b\2\130\1\u010c\2\130\22\u010d\3\130\1\u010d\2\130"+ + "\3\u010d\17\130\1\u010d\5\130\1\u010d\2\130\3\u010d\1\130"+ + "\2\u010d\1\130\1\u010a\1\u010e\1\132\1\0\1\u010b\2\130"+ + "\1\u010c\2\130\22\u010d\3\130\1\u010d\2\130\3\u010d\17\130"+ + "\1\u010d\2\130\3\0\1\374\2\0\3\374\1\0\2\374"+ + "\10\0\1\u0100\2\0\22\374\3\0\1\374\2\0\3\374"+ + "\17\0\1\374\23\0\1\u0101\62\0\16\u010f\1\u0110\1\u010f"+ + "\1\u0110\63\u010f\3\0\1\u010f\2\0\3\u010f\1\0\2\u010f"+ + "\3\0\1\u0111\7\0\22\u010f\3\0\1\u010f\2\0\3\u010f"+ + "\17\0\1\u010f\3\0\1\141\1\0\1\141\1\0\10\141"+ + "\10\0\1\u0112\1\0\22\141\3\0\1\141\2\0\3\141"+ + "\17\0\1\141\5\0\1\141\2\0\3\141\1\0\2\141"+ + "\3\0\1\u0113\7\0\22\141\3\0\1\141\2\0\3\141"+ + "\17\0\1\141\2\0\16\143\1\0\1\143\1\0\64\143"+ + "\1\u0114\1\143\1\u0114\1\143\5\u0114\1\143\1\u0114\2\143"+ + "\1\0\1\143\1\0\4\143\1\u0115\1\143\22\u0114\3\143"+ + "\1\u0114\2\143\3\u0114\17\143\1\u0114\5\143\1\u0116\2\143"+ + "\3\u0116\1\143\2\u0116\2\143\1\u0117\1\u0118\1\u0117\6\143"+ + "\22\u0116\3\143\1\u0116\2\143\3\u0116\17\143\1\u0116\5\143"+ + "\1\u0116\2\143\3\u0116\1\143\2\u0116\2\143\1\145\1\u0118"+ + "\1\u0117\6\143\22\u0116\3\143\1\u0116\2\143\3\u0116\17\143"+ + "\1\u0116\2\143\16\u0119\1\u011a\1\u0119\1\u011a\63\u0119\3\0"+ + "\1\u0119\2\0\3\u0119\1\0\2\u0119\3\0\1\u011b\7\0"+ + "\22\u0119\3\0\1\u0119\2\0\3\u0119\17\0\1\u0119\3\0"+ + "\1\152\1\0\1\152\1\0\10\152\10\0\1\u011c\1\0"+ + "\22\152\3\0\1\152\2\0\3\152\17\0\1\152\5\0"+ + "\1\152\2\0\3\152\1\0\2\152\3\0\1\u011d\7\0"+ + "\22\152\3\0\1\152\2\0\3\152\17\0\1\152\3\0"+ + "\1\155\1\0\1\155\1\0\10\155\12\0\22\155\3\0"+ + "\1\155\2\0\3\155\17\0\1\155\54\0\1\u011e\32\0"+ + "\1\160\1\0\1\160\1\0\10\160\12\0\22\160\3\0"+ + "\1\160\2\0\3\160\17\0\1\160\3\0\1\161\3\0"+ + "\1\161\3\0\1\161\73\0\1\u011f\3\0\1\u011f\1\u0120"+ + "\1\0\1\u0121\1\u011f\72\0\64\211\1\0\17\211\65\0"+ + "\1\u0122\16\0\64\u0123\1\u0124\103\u0123\1\u0124\1\u0125\16\u0123"+ + "\16\215\1\216\1\215\1\217\31\215\1\216\13\215\1\216"+ + "\3\215\1\216\11\215\16\0\1\216\137\0\1\u0126\31\0"+ + "\63\23\1\0\2\23\1\0\3\23\1\0\6\23\1\0"+ + "\2\23\26\0\1\u0127\103\0\1\u0127\21\0\1\u0128\70\0"+ + "\1\u0129\47\0\1\230\1\0\1\231\1\0\1\230\3\0"+ + "\1\230\73\0\1\u012a\2\0\1\u012b\1\u012a\3\0\1\u012a"+ + "\37\0\1\u012b\34\0\1\u012c\102\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\1\u012d\1\u012e\20\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\2\36\1\u012f\17\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\15\36\1\u0130\4\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\10\36\1\u0131\11\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\u0131\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\21\36\1\u0132\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\2\36\1\u0133\5\36\12\0\22\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\u0134\1\0\1\u0134\1\0"+ + "\1\u0134\1\0\3\u0134\17\0\2\u0134\2\0\1\u0134\53\0"+ + "\1\u0135\3\0\1\u0135\73\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\11\36\1\u0136\10\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\10\36\1\u0137\11\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\u0137\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\2\36\1\u0138\17\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\11\36\1\u0139\10\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\u013a\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\65\0\1\u013b\21\0\1\256\1\0\1\256\1\0"+ + "\10\256\12\0\22\256\3\0\1\256\2\0\3\256\17\0"+ + "\1\256\2\0\107\257\1\0\2\257\3\0\2\257\1\0"+ + "\1\257\1\260\3\257\1\261\1\262\1\257\1\0\2\257"+ + "\22\0\3\257\1\0\2\257\3\0\17\257\1\0\17\257"+ + "\1\260\3\257\1\0\1\262\1\257\1\263\57\257\26\0"+ + "\1\u013c\56\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\1\36\1\u013d\4\36\1\u013e\1\36\1\u013f\11\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\u013f\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\10\36\1\u0140\11\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\u0140\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\21\36\1\u0141\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\2\36\1\u0142\5\36\12\0\12\36\1\u0143\7\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\11\36\1\u0144\10\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\3\36\1\u0145\2\36"+ + "\1\u0146\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\u0147\1\0\10\36\12\0\22\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\5\36\1\u0148\14\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\5\36\1\u0149\14\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\11\36\1\u014a\10\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\10\36\1\u014b\11\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\u014b\3\0\1\36"+ + "\1\0\1\u014c\1\0\10\36\12\0\22\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\16\36\1\u014d\3\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\14\36\1\u014e\5\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\1\36\1\u014f\6\36\1\u0150\2\36"+ + "\1\u0151\6\36\3\0\1\36\2\0\3\36\17\0\1\u0150"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\5\36"+ + "\1\u0152\14\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\2\36\1\u0153\5\36"+ + "\12\0\7\36\1\u0154\12\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\2\36"+ + "\1\u0155\5\36\12\0\22\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\1\u0156\21\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\1\36\1\u0157\20\36\3\0\1\36\2\0\2\36\1\u0158"+ + "\17\0\1\36\3\0\1\36\1\0\1\u0159\1\0\10\36"+ + "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\10\36"+ - "\1\u012f\11\36\3\0\1\36\2\0\3\36\17\0\1\u012f"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\21\36"+ - "\1\u0130\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\2\36\1\u0131\5\36\12\0"+ + "\1\u015a\11\36\3\0\1\36\2\0\3\36\17\0\1\u015a"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u015b"+ + "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u015c"+ + "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u015d"+ + "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\3\36\1\u015e\4\36\12\0"+ "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\u0132\1\0\1\u0132\1\0\1\u0132\1\0\3\u0132\17\0"+ - "\2\u0132\2\0\1\u0132\53\0\1\u0133\3\0\1\u0133\73\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\11\36\1\u0134"+ - "\10\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\10\36\1\u0135"+ - "\11\36\3\0\1\36\2\0\3\36\17\0\1\u0135\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\2\36\1\u0136"+ - "\17\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\11\36\1\u0137"+ - "\10\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\u0138\1\0\10\36\12\0\22\36\3\0"+ - "\1\36\2\0\3\36\17\0\1\36\65\0\1\u0139\21\0"+ - "\1\251\1\0\1\251\1\0\10\251\12\0\22\251\3\0"+ - "\1\251\2\0\3\251\17\0\1\251\2\0\107\252\1\0"+ - "\2\252\3\0\2\252\1\0\1\252\1\253\3\252\1\254"+ - "\1\255\1\252\1\0\2\252\22\0\3\252\1\0\2\252"+ - "\3\0\17\252\1\0\17\252\1\253\3\252\1\0\1\255"+ - "\1\252\1\256\57\252\26\0\1\u013a\56\0\1\36\1\0"+ - "\1\36\1\0\10\36\12\0\1\36\1\u013b\4\36\1\u013c"+ - "\1\36\1\u013d\11\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\u013d\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\10\36\1\u013e\11\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\u013e\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\21\36\1\u013f\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\2\36\1\u0140\5\36"+ - "\12\0\12\36\1\u0141\7\36\3\0\1\36\2\0\3\36"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\u015f\6\36"+ + "\1\u0160\12\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\30\0\1\u0161\56\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\11\36\1\u0162\10\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\42\0\1\u0163\72\0\1\u0164\6\0\1\u0165"+ + "\101\0\1\u0166\105\0\1\u0167\107\0\1\u0168\75\0\1\u0169"+ + "\57\0\1\u016a\123\0\1\u016b\56\0\1\u016c\101\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\1\36\1\u016d\1\u016e"+ + "\1\u016f\1\36\1\u0170\1\u0171\4\36\1\u0172\1\u0173\1\u0174"+ + "\4\36\3\0\1\36\2\0\3\36\17\0\1\36\30\0"+ + "\1\u0175\127\0\1\u0176\57\0\1\u0177\34\0\1\u0178\57\0"+ + "\1\u0179\41\0\1\u0179\30\0\1\u017a\73\0\3\u017b\43\0"+ + "\1\u017c\12\0\1\u017d\22\0\1\u017e\1\0\1\u017f\101\0"+ + "\1\u0180\1\0\1\u0181\63\0\104\255\3\116\1\0\2\116"+ + "\3\0\2\116\1\0\1\116\1\371\3\116\1\376\1\377"+ + "\1\116\1\0\2\116\22\0\3\116\1\0\2\116\3\0"+ + "\17\116\1\0\17\116\1\371\3\116\1\0\1\377\1\116"+ + "\1\u0102\57\116\1\0\1\374\1\0\1\374\1\0\10\374"+ + "\12\0\22\374\1\u0182\2\0\1\374\2\0\3\374\12\0"+ + "\1\u0183\4\0\1\374\2\0\1\116\1\375\1\116\1\375"+ + "\1\116\10\375\1\371\3\116\1\372\1\0\1\116\1\373"+ + "\2\116\22\375\1\u0184\2\116\1\375\2\116\3\375\12\116"+ + "\1\u0185\4\116\1\375\2\116\3\123\1\0\2\123\3\0"+ + "\2\123\1\0\1\123\1\u0103\3\123\1\u0107\1\123\1\u0108"+ + "\1\0\2\123\22\0\3\123\1\0\2\123\3\0\17\123"+ + "\1\0\17\123\1\u0103\3\123\1\0\1\123\1\u0108\1\u0109"+ + "\60\123\1\u0106\1\123\1\u0106\1\123\10\u0106\1\u0103\3\123"+ + "\1\u0104\1\123\1\0\1\u0105\2\123\22\u0106\1\u0186\2\123"+ + "\1\u0106\2\123\3\u0106\12\123\1\u0187\4\123\1\u0106\2\123"+ + "\16\130\1\0\1\130\1\0\66\130\1\u0188\2\130\3\u0188"+ + "\2\130\1\u0188\1\130\1\u010a\1\0\1\130\1\0\1\u0189"+ + "\2\130\1\u018a\2\130\22\u0188\3\130\1\u0188\2\130\3\u0188"+ + "\17\130\1\u0188\17\130\1\u010a\1\0\1\130\1\0\1\u018a"+ + "\2\130\1\u018b\57\130\16\u010d\1\u018c\1\u010d\1\u018c\63\u010d"+ + "\3\0\1\u010d\2\0\3\u010d\1\0\2\u010d\3\0\1\u010e"+ + "\7\0\22\u010d\3\0\1\u010d\2\0\3\u010d\17\0\1\u010d"+ + "\2\0\16\u0116\1\u018d\1\u0116\1\u018d\63\u0116\3\143\1\u0114"+ + "\2\143\3\u0114\2\143\1\u0114\2\143\1\u0117\1\143\1\u0117"+ + "\6\143\22\u0114\3\143\1\u0114\2\143\3\u0114\17\143\1\u0114"+ + "\5\143\1\u0116\2\143\3\u0116\1\143\2\u0116\2\143\1\0"+ + "\1\u0118\1\0\6\143\22\u0116\3\143\1\u0116\2\143\3\u0116"+ + "\17\143\1\u0116\2\143\1\0\1\u011f\3\0\1\u011f\3\0"+ + "\1\u011f\73\0\1\u018e\1\0\1\u018e\1\0\1\u018e\1\0"+ + "\3\u018e\17\0\2\u018e\2\0\1\u018e\53\0\1\u018f\3\0"+ + "\1\u018f\72\0\64\u0123\1\u0124\1\u0190\16\u0123\44\0\1\u0191"+ + "\77\0\1\u0192\44\0\1\u012a\3\0\1\u012a\3\0\1\u012a"+ + "\73\0\1\36\1\0\1\36\1\0\10\36\12\0\1\36"+ + "\1\u0147\20\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\u0193\1\0\10\36\12\0\22\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\1\u0194\1\36\1\u0195"+ + "\1\u0196\4\36\1\u0197\5\36\1\u0198\3\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\u0197\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\7\36\1\u0199\12\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u019a"+ + "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\11\36\1\u0142\10\36\3\0\1\36\2\0\3\36"+ + "\12\0\1\36\1\u019b\20\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\3\36\1\u0143\2\36\1\u0144\13\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u0145"+ - "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ + "\12\0\13\36\1\u019c\6\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\5\36\1\u0146\14\36\3\0\1\36\2\0\3\36"+ + "\12\0\1\36\1\u019d\20\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\2\36"+ + "\1\u019e\5\36\12\0\22\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\2\36"+ + "\1\u019f\5\36\12\0\22\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\65\0\1\u0178\21\0\1\36\1\0\1\u01a0"+ + "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\5\36\1\u0147\14\36\3\0\1\36\2\0\3\36"+ + "\12\0\13\36\1\u01a1\6\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\11\36\1\u0148\10\36\3\0\1\36\2\0\3\36"+ + "\12\0\1\36\1\u01a2\20\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\u01a3\1\0\10\36"+ + "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\13\36"+ + "\1\u01a4\6\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u01a5"+ + "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u01a6"+ + "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\2\36\1\u01a7\5\36\12\0"+ + "\1\u01a8\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\13\36"+ + "\1\u01a9\6\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\2\36\1\u01aa\5\36"+ + "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+ + "\1\u01ab\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\u01ac\1\0\10\36\12\0\22\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\u01ad\1\0\10\36\12\0\22\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u01ae"+ + "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\10\36\1\u0149\11\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\u0149\3\0\1\36\1\0\1\u014a\1\0\10\36"+ + "\12\0\6\36\1\u01af\13\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\u01b0\1\0\10\36"+ "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\16\36"+ - "\1\u014b\3\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\14\36"+ - "\1\u014c\5\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\13\36"+ + "\1\u01b1\6\36\3\0\1\36\2\0\3\36\17\0\1\36"+ "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\36"+ - "\1\u014d\6\36\1\u014e\2\36\1\u014f\6\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\u014e\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\5\36\1\u0150\14\36\3\0\1\36"+ + "\1\u01b2\6\36\1\u01b3\11\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\u01b3\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\10\36\1\u01b4\11\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\u01b4\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\5\36\1\u01b5\14\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\1\36\1\u01b6\20\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\1\36\1\u01b7\20\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\4\36\1\u01b8\15\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\4\36\1\u01b9\15\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\13\36\1\u01ba\6\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\1\36\1\u01bb\20\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\13\36\1\u01bc\6\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\7\36\1\u01bd\12\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\3\36"+ + "\1\u01be\4\36\12\0\22\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\13\36\1\u01bf\6\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\5\36\1\u01c0\14\36\3\0\1\u01c1\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\1\36\1\u01c2\20\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\42\0\1\u01c3\77\0\1\u01c4\105\0\1\u01c5"+ + "\75\0\1\u01c6\106\0\1\u01c7\106\0\1\u01c8\104\0\1\u01c9"+ + "\41\0\1\u01c9\61\0\1\u01ca\64\0\1\u01cb\52\0\1\u01cc"+ + "\75\0\1\36\1\0\1\36\1\0\10\36\12\0\11\36"+ + "\1\u01cd\10\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u01ce"+ + "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\u01cf\3\36"+ + "\1\u01d0\15\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\2\36\1\u01d1\5\36"+ + "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\13\36"+ + "\1\u01d2\6\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u01d3"+ + "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\u01d4\1\0\10\36\12\0\22\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\2\36\1\u01d5\5\36\12\0\22\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\5\0\1\u01d6\2\0"+ + "\3\u01d6\1\0\2\u01d6\3\0\1\u0178\2\0\1\u01d7\4\0"+ + "\22\u01d6\3\0\1\u01d6\2\0\3\u01d6\17\0\1\u01d6\1\u01d8"+ + "\36\0\1\u01d9\64\0\3\u017b\56\0\1\u017d\22\0\3\u01da"+ + "\44\0\1\u01db\11\0\1\u01dc\60\0\1\u01dd\45\0\1\u017e"+ + "\103\0\1\u0180\137\0\1\u01de\31\0\15\116\1\371\3\116"+ + "\1\372\1\0\1\116\1\373\25\116\1\u01df\31\116\15\123"+ + "\1\u0103\3\123\1\u0104\1\123\1\0\1\u0105\25\123\1\u01e0"+ + "\31\123\1\0\1\u0188\1\0\1\u0188\1\0\10\u0188\12\0"+ + "\22\u0188\3\0\1\u0188\2\0\3\u0188\12\0\1\u01e1\4\0"+ + "\1\u0188\2\0\3\130\1\0\2\130\3\0\2\130\1\0"+ + "\1\130\1\u010a\1\0\1\130\1\0\1\u0189\2\130\1\0"+ + "\2\130\22\0\3\130\1\0\2\130\3\0\17\130\1\0"+ + "\17\130\1\u010a\1\0\1\130\2\0\2\130\1\u018b\57\130"+ + "\50\0\1\u01e2\62\0\1\u01e3\55\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\5\36\1\u01e4\14\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\2\36\1\u0151\5\36\12\0\7\36\1\u0152\12\36"+ + "\1\0\10\36\12\0\3\36\1\u01e5\16\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u01e6"+ + "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\7\36\1\u01e7\12\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\16\36\1\u01e8\3\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\15\36\1\u01e9\4\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\1\u01ea\21\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\12\36\1\u01eb\7\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\11\36\1\u01ec\10\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\12\36\1\u01ed\7\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\17\36\1\u01ee\2\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\11\36\1\u01ef\10\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\4\36\1\u01f0\15\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\u01f1\1\0\2\36\1\u01f2"+ + "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\1\36\1\u01f3\20\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\u01f4\1\0\10\36\12\0"+ + "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u01f5"+ + "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\16\36\1\u01f6"+ + "\3\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\4\36\1\u01f7"+ + "\15\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\5\36\1\u01f8"+ + "\14\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\2\36\1\u01f9\5\36\12\0"+ + "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\13\36\1\u01fa"+ + "\6\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u01fb"+ + "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\2\36\1\u01fc\5\36\12\0"+ + "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u01fd"+ + "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\10\36\1\u01fe"+ + "\11\36\3\0\1\36\2\0\3\36\17\0\1\u01fe\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\15\36\1\u01ff"+ + "\4\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\2\36\1\u0200\5\36\12\0"+ + "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\u0201\21\36"+ "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\2\36\1\u0153\5\36\12\0\22\36"+ + "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0202\20\36"+ "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\1\u0154\21\36\3\0"+ - "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ - "\1\36\1\0\10\36\12\0\1\36\1\u0155\20\36\3\0"+ - "\1\36\2\0\2\36\1\u0156\17\0\1\36\3\0\1\36"+ - "\1\0\1\u0157\1\0\10\36\12\0\22\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\10\36\1\u0203\11\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\u0203\3\0\1\36"+ + "\1\0\1\u0204\1\0\10\36\12\0\22\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\10\36\1\u0158\11\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\u0158\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\1\u0159\21\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\36\1\u015a\20\36\3\0\1\36\2\0"+ + "\1\0\10\36\12\0\1\u0205\21\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\7\36\1\u015b\12\36\3\0\1\36\2\0"+ + "\10\36\12\0\6\36\1\u0206\13\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\3\36\1\u015c\4\36\12\0\22\36\3\0\1\36\2\0"+ + "\10\36\12\0\11\36\1\u0207\10\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\u015d\6\36\1\u015e\12\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\30\0\1\u015f\56\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\11\36\1\u0160\10\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\42\0\1\u0161"+ - "\72\0\1\u0162\6\0\1\u0163\101\0\1\u0164\105\0\1\u0165"+ - "\107\0\1\u0166\75\0\1\u0167\57\0\1\u0168\123\0\1\u0169"+ - "\56\0\1\u016a\101\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\1\36\1\u016b\1\u016c\1\u016d\1\36\1\u016e\1\u016f"+ - "\4\36\1\u0170\1\u0171\1\u0172\4\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\30\0\1\u0173\127\0\1\u0174\57\0"+ - "\1\u0175\34\0\1\u0176\57\0\1\u0177\41\0\1\u0177\30\0"+ - "\1\u0178\73\0\3\u0179\43\0\1\u017a\12\0\1\u017b\22\0"+ - "\1\u017c\1\0\1\u017d\101\0\1\u017e\1\0\1\u017f\63\0"+ - "\104\250\3\116\1\0\2\116\3\0\2\116\1\0\1\116"+ - "\1\364\3\116\1\371\1\372\1\116\1\0\2\116\22\0"+ - "\3\116\1\0\2\116\3\0\17\116\1\0\17\116\1\364"+ - "\3\116\1\0\1\372\1\116\1\375\57\116\1\0\1\367"+ - "\1\0\1\367\1\0\10\367\12\0\22\367\1\u0180\2\0"+ - "\1\367\2\0\3\367\12\0\1\u0181\4\0\1\367\2\0"+ - "\1\116\1\370\1\116\1\370\1\116\10\370\1\364\3\116"+ - "\1\365\1\0\1\116\1\366\2\116\22\370\1\u0182\2\116"+ - "\1\370\2\116\3\370\12\116\1\u0183\4\116\1\370\2\116"+ - "\3\123\1\0\2\123\3\0\2\123\1\0\1\123\1\376"+ - "\3\123\1\u0102\1\123\1\u0103\1\0\2\123\22\0\3\123"+ - "\1\0\2\123\3\0\17\123\1\0\17\123\1\376\3\123"+ - "\1\0\1\123\1\u0103\1\u0104\60\123\1\u0101\1\123\1\u0101"+ - "\1\123\10\u0101\1\376\3\123\1\377\1\123\1\0\1\u0100"+ - "\2\123\22\u0101\1\u0184\2\123\1\u0101\2\123\3\u0101\12\123"+ - "\1\u0185\4\123\1\u0101\2\123\16\130\1\0\1\130\1\0"+ - "\66\130\1\u0186\2\130\3\u0186\2\130\1\u0186\1\130\1\u0105"+ - "\1\0\1\130\1\0\1\u0187\2\130\1\u0188\2\130\22\u0186"+ - "\3\130\1\u0186\2\130\3\u0186\17\130\1\u0186\17\130\1\u0105"+ - "\1\0\1\130\1\0\1\u0188\2\130\1\u0189\60\130\1\u0108"+ - "\1\130\1\u0108\1\130\10\u0108\1\u0105\1\u018a\1\130\1\u018a"+ - "\1\u0106\2\130\1\u0107\1\u018b\1\130\22\u0108\3\130\1\u0108"+ - "\2\130\3\u0108\17\130\1\u0108\2\130\3\0\1\u018c\2\0"+ - "\3\u018c\1\0\2\u018c\13\0\22\u018c\3\0\1\u018c\2\0"+ - "\3\u018c\17\0\1\u018c\20\0\1\u010b\1\0\1\u010b\101\0"+ - "\1\u010e\1\0\1\u010e\63\0\16\u0110\1\0\1\u0110\1\0"+ - "\64\u0110\1\u0114\1\u0110\1\u0114\1\u0110\5\u0114\1\u0115\1\u0114"+ - "\1\u0115\1\u0110\1\u018d\1\u0110\1\u018d\4\u0110\1\u018e\1\u0110"+ - "\22\u0114\3\u0110\1\u0114\2\u0110\3\u0114\17\u0110\1\u0114\3\u0110"+ - "\1\u0115\1\u0110\1\u0115\1\u0110\10\u0115\1\u0110\1\u018f\1\u0110"+ - "\1\u018f\4\u0110\1\u0190\1\u0110\22\u0115\3\u0110\1\u0115\2\u0110"+ - "\3\u0115\17\u0110\1\u0115\2\u0110\16\0\1\u0117\1\0\1\u0117"+ - "\101\0\1\u011a\1\0\1\u011a\64\0\1\u011d\3\0\1\u011d"+ - "\3\0\1\u011d\73\0\1\u0191\1\0\1\u0191\1\0\1\u0191"+ - "\1\0\3\u0191\17\0\2\u0191\2\0\1\u0191\53\0\1\u0192"+ - "\3\0\1\u0192\72\0\64\u0121\1\u0122\1\u0193\16\u0121\44\0"+ - "\1\u0194\77\0\1\u0195\44\0\1\u0128\3\0\1\u0128\3\0"+ - "\1\u0128\73\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\36\1\u0145\20\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\36\3\0\1\36\1\0\1\u0196\1\0\10\36\12\0"+ + "\10\36\12\0\1\u0208\21\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\2\36\1\u0209\17\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\u020a\1\0\10\36"+ + "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\2\36\1\u020b\5\36"+ + "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u020c"+ + "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u020d"+ + "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\2\36\1\u020e\5\36\12\0"+ "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\1\u0197\1\36"+ - "\1\u0198\1\u0199\4\36\1\u019a\5\36\1\u019b\3\36\3\0"+ - "\1\36\2\0\3\36\17\0\1\u019a\3\0\1\36\1\0"+ - "\1\36\1\0\10\36\12\0\7\36\1\u019c\12\36\3\0"+ + "\1\36\1\0\1\u020f\1\0\10\36\12\0\22\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\11\0\1\u0210\103\0"+ + "\1\u0211\136\0\1\u0212\44\0\1\u0213\13\0\1\u0214\36\0"+ + "\1\u0215\35\0\1\u0216\102\0\1\u0217\77\0\1\u0218\103\0"+ + "\1\u0219\127\0\1\u021a\116\0\1\u021b\42\0\1\36\1\0"+ + "\1\36\1\0\2\36\1\u021c\5\36\12\0\22\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\11\36\1\u021d\10\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\13\36\1\u021e\6\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\5\36\1\u021f\14\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\14\36\1\u0220\5\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\2\36\1\u0221\5\36\12\0\22\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\5\36\1\u0222\14\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\1\36\1\u0223\20\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\13\36\1\u0224\6\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\u01d6\1\0"+ + "\1\u01d6\1\0\10\u01d6\1\0\1\u0225\1\0\1\u0226\6\0"+ + "\22\u01d6\3\0\1\u01d6\2\0\3\u01d6\17\0\1\u01d6\5\0"+ + "\1\u0227\2\0\3\u0227\1\0\2\u0227\13\0\22\u0227\3\0"+ + "\1\u0227\2\0\3\u0227\17\0\1\u0227\5\0\1\u0228\2\0"+ + "\3\u0228\1\0\2\u0228\13\0\22\u0228\3\0\1\u0228\2\0"+ + "\3\u0228\17\0\1\u0228\42\0\1\u0229\61\0\3\u01da\56\0"+ + "\1\u01dc\60\0\1\u022a\36\0\1\u022b\77\0\1\u022c\2\0"+ + "\3\u022c\2\0\1\u022c\13\0\22\u022c\3\0\1\u022c\2\0"+ + "\3\u022c\17\0\1\u022c\2\0\3\116\1\u022d\2\116\3\u022d"+ + "\2\116\1\u022d\1\116\1\371\3\116\1\372\1\0\1\116"+ + "\1\373\2\116\22\u022d\3\116\1\u022d\2\116\3\u022d\17\116"+ + "\1\u022d\2\116\3\123\1\u022e\2\123\3\u022e\2\123\1\u022e"+ + "\1\123\1\u0103\3\123\1\u0104\1\123\1\0\1\u0105\2\123"+ + "\22\u022e\3\123\1\u022e\2\123\3\u022e\17\123\1\u022e\2\123"+ + "\16\0\2\u022f\1\u0230\133\0\1\u0231\34\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\2\36\1\u0232\17\36\3\0"+ "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ - "\1\u019d\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ + "\1\36\1\0\10\36\12\0\6\36\1\u0233\13\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\11\36\1\u0234\10\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\1\u0235\21\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\1\u0236\21\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\36\1\u019e\20\36\3\0\1\36\2\0"+ + "\10\36\12\0\3\36\1\u0237\16\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\13\36\1\u019f\6\36\3\0\1\36\2\0"+ + "\2\36\1\u0238\5\36\12\0\22\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\36\1\u01a0\20\36\3\0\1\36\2\0"+ + "\10\36\12\0\3\36\1\u0239\16\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\2\36\1\u01a1\5\36\12\0\22\36\3\0\1\36\2\0"+ + "\10\36\12\0\2\36\1\u023a\17\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\2\36\1\u01a2\5\36\12\0\22\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\65\0\1\u0176\21\0\1\36\1\0"+ - "\1\u01a3\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ + "\2\36\1\u023b\5\36\12\0\22\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\13\36\1\u01a4\6\36\3\0\1\36\2\0"+ + "\10\36\12\0\5\36\1\u023c\14\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\36\1\u01a5\20\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\u01a6\1\0"+ + "\10\36\12\0\14\36\1\u023d\5\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\13\36\1\u023e\6\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\u023f\1\0"+ "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\13\36\1\u01a7\6\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\u01a8\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\7\36"+ - "\1\u01a9\12\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\2\36\1\u01aa\5\36"+ - "\12\0\1\u01ab\21\36\3\0\1\36\2\0\3\36\17\0"+ + "\11\36\1\u0240\10\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\13\36\1\u01ac\6\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\36\3\0\1\36\1\0\1\36\1\0\2\36\1\u01ad"+ - "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ + "\13\36\1\u0241\6\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\6\36\1\u01ae\13\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\36\3\0\1\36\1\0\1\u01af\1\0\10\36\12\0"+ + "\1\u0242\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+ + "\1\u0243\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\21\36"+ + "\1\u0244\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\3\36\1\u0245\4\36\12\0"+ + "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\5\36\1\u0246"+ + "\14\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u0247"+ + "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\15\36\1\u0248"+ + "\4\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\5\36\1\u0249"+ + "\14\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\11\36\1\u024a"+ + "\10\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\1\0\3\u024b\6\0"+ "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\u01b0\1\0\10\36\12\0\22\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\13\36\1\u024c"+ + "\6\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u024d"+ + "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u024e"+ + "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u024f"+ + "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\43\0"+ + "\1\u0250\102\0\1\u0251\46\0\1\u0252\13\0\1\u0253\36\0"+ + "\1\u0254\74\0\1\u0255\53\0\1\u0214\36\0\1\u0215\67\0"+ + "\1\u0256\71\0\1\u021b\103\0\1\u0257\110\0\1\u0258\102\0"+ + "\1\u0259\66\0\1\u021b\36\0\1\u025a\26\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\1\u025b\21\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+ + "\1\u025c\1\36\17\0\1\36\3\0\1\36\1\0\1\u025d"+ + "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\6\36\1\u025e\13\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\u025f\1\0\10\36"+ + "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\10\36"+ + "\1\u0260\11\36\3\0\1\36\2\0\3\36\17\0\1\u0260"+ + "\3\0\1\36\1\0\1\u0261\1\0\10\36\12\0\22\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\15\36\1\u0262\4\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0263\20\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\20\0\1\u0225"+ + "\66\0\1\u0227\1\0\1\u0227\1\0\10\u0227\5\0\1\u0264"+ + "\4\0\22\u0227\3\0\1\u0227\2\0\3\u0227\17\0\1\u0227"+ + "\3\0\1\u0228\1\0\1\u0228\1\0\10\u0228\12\0\22\u0228"+ + "\3\0\1\u0228\2\0\3\u0228\17\0\1\u0228\1\u0265\30\0"+ + "\1\u0266\63\0\1\u0267\134\0\1\u0268\61\0\1\u022f\115\0"+ + "\1\u0269\54\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\10\36\1\u026a\11\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\u026a\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\13\36\1\u026b\6\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\u026c\1\0\10\36\12\0"+ + "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u026d"+ + "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\13\36\1\u026e"+ + "\6\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u026f"+ + "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\2\36\1\u0270\5\36\12\0"+ + "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\u0271\1\0\10\36\12\0\22\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\2\36\1\u0272\17\36\3\0"+ "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ - "\1\u01b1\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ + "\1\36\1\0\10\36\12\0\6\36\1\u0273\13\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\u0274\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\6\36\1\u01b2\13\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\u01b3\1\0"+ + "\10\36\12\0\1\36\1\u0275\20\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\u0276\1\0"+ "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\13\36\1\u01b4\6\36\3\0\1\36\2\0\3\36\17\0"+ + "\12\36\1\u0277\7\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\36\1\u01b5\6\36\1\u01b6\11\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\u01b6\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\10\36\1\u01b7\11\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\u01b7\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\5\36\1\u01b8\14\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\36\1\u01b9\20\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\36\1\u01ba\20\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\4\36\1\u01bb\15\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\4\36\1\u01bc\15\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\13\36\1\u01bd\6\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\36\1\u01be\20\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\13\36\1\u01bf\6\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\7\36\1\u01c0\12\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\3\36\1\u01c1\4\36\12\0\22\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\13\36\1\u01c2\6\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\5\36\1\u01c3\14\36\3\0\1\u01c4\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\36\1\u01c5\20\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\42\0\1\u01c6\77\0\1\u01c7\105\0"+ - "\1\u01c8\75\0\1\u01c9\106\0\1\u01ca\106\0\1\u01cb\104\0"+ - "\1\u01cc\41\0\1\u01cc\61\0\1\u01cd\64\0\1\u01ce\52\0"+ - "\1\u01cf\75\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\11\36\1\u01d0\10\36\3\0\1\36\2\0\3\36\17\0"+ + "\7\36\1\u0278\12\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\u01d1\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u01d2"+ - "\3\36\1\u01d3\15\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\36\3\0\1\36\1\0\1\36\1\0\2\36\1\u01d4"+ + "\15\36\1\u0279\4\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\2\36\1\u027a"+ "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\13\36\1\u01d5\6\36\3\0\1\36\2\0\3\36\17\0"+ + "\13\36\1\u027b\6\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\u01d6\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\u01d7\1\0\10\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\2\36\1\u01d8\5\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\5\0\1\u01d9"+ - "\2\0\3\u01d9\1\0\2\u01d9\3\0\1\u0176\2\0\1\u01da"+ - "\4\0\22\u01d9\3\0\1\u01d9\2\0\3\u01d9\17\0\1\u01d9"+ - "\1\u01db\36\0\1\u01dc\64\0\3\u0179\56\0\1\u017b\22\0"+ - "\3\u01dd\44\0\1\u01de\11\0\1\u01df\60\0\1\u01e0\45\0"+ - "\1\u017c\103\0\1\u017e\137\0\1\u01e1\31\0\15\116\1\364"+ - "\3\116\1\365\1\0\1\116\1\366\25\116\1\u01e2\31\116"+ - "\15\123\1\376\3\123\1\377\1\123\1\0\1\u0100\25\123"+ - "\1\u01e3\31\123\1\0\1\u0186\1\0\1\u0186\1\0\10\u0186"+ - "\12\0\22\u0186\3\0\1\u0186\2\0\3\u0186\12\0\1\u01e4"+ - "\4\0\1\u0186\2\0\3\130\1\0\2\130\3\0\2\130"+ - "\1\0\1\130\1\u0105\1\0\1\130\1\0\1\u0187\2\130"+ - "\1\0\2\130\22\0\3\130\1\0\2\130\3\0\17\130"+ - "\1\0\17\130\1\u0105\1\0\1\130\2\0\2\130\1\u0189"+ - "\74\130\1\u0105\1\u018a\1\130\1\u018a\1\u0106\2\130\1\u0107"+ - "\57\130\1\0\1\u018c\1\0\1\u018c\1\0\10\u018c\1\0"+ - "\1\u018a\1\0\1\u018a\4\0\1\u01e5\1\0\22\u018c\3\0"+ - "\1\u018c\2\0\3\u018c\17\0\1\u018c\2\0\16\u0110\1\u018d"+ - "\1\u0110\1\u018d\101\u0110\1\u018f\1\u0110\1\u018f\63\u0110\50\0"+ - "\1\u01e6\62\0\1\u01e7\55\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\5\36\1\u01e8\14\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\3\36\1\u01e9\16\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\u01ea\1\0"+ + "\4\36\1\u027c\15\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\u027d\1\0\10\36\12\0"+ + "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\20\0"+ + "\3\u024b\11\0\1\u027e\52\0\1\36\1\0\1\u027f\1\0"+ "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\7\36\1\u01eb\12\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\1\u0280\20\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\21\0\1\u0250\36\0\1\u0281\66\0\1\u0282\51\0"+ + "\1\u0283\113\0\1\u0253\36\0\1\u0254\30\0\1\u0284\103\0"+ + "\1\u021b\117\0\1\u0257\36\0\1\u0285\55\0\1\u0286\122\0"+ + "\1\u0282\35\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\1\36\1\u0287\20\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\16\36\1\u01ec\3\36\3\0\1\36\2\0\3\36\17\0"+ + "\22\36\3\0\1\36\2\0\1\36\1\u0288\1\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\15\36\1\u01ed\4\36\3\0\1\36\2\0\3\36\17\0"+ + "\22\36\3\0\1\36\2\0\1\36\1\u0289\1\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\u01ee\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\12\36"+ - "\1\u01ef\7\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\11\36"+ - "\1\u01f0\10\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\12\36"+ - "\1\u01f1\7\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\17\36"+ - "\1\u01f2\2\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\11\36"+ - "\1\u01f3\10\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\4\36"+ - "\1\u01f4\15\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\u01f5\1\0\2\36\1\u01f6\5\36"+ - "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\36"+ - "\1\u01f7\20\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\u01f8\1\0\10\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\1\36\1\u01f9\20\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\16\36\1\u01fa\3\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\4\36\1\u01fb\15\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\5\36\1\u01fc\14\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\2\36\1\u01fd\5\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\13\36\1\u01fe\6\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\1\36\1\u01ff\20\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\2\36\1\u0200\5\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0201\20\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\10\36\1\u0202\11\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\u0202\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\15\36\1\u0203\4\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\2\36\1\u0204\5\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\1\u0205\21\36\3\0"+ - "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ - "\1\36\1\0\10\36\12\0\1\36\1\u0206\20\36\3\0"+ - "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ - "\1\36\1\0\10\36\12\0\10\36\1\u0207\11\36\3\0"+ - "\1\36\2\0\3\36\17\0\1\u0207\3\0\1\36\1\0"+ - "\1\u0208\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\1\u0209\21\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\6\36\1\u020a\13\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\11\36\1\u020b\10\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\1\u020c\21\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\1\u028a\20\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\2\36\1\u020d\17\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\36\3\0\1\36\1\0\1\u020e\1\0\10\36\12\0"+ - "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\2\36\1\u020f\5\36\12\0"+ + "\10\36\1\u028b\11\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\u028b\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\10\36\1\u028c\11\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\u028c\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\22\36\3\0\1\36\2\0\1\36\1\u028d\1\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\7\36\1\u028e\12\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\22\36\3\0\1\36\2\0\1\36\1\u028f\1\36\17\0"+ + "\1\36\20\0\1\u0225\1\0\1\u0226\101\0\1\u0290\1\0"+ + "\1\u0291\133\0\1\u0292\73\0\1\u0293\61\0\3\u0294\101\0"+ + "\3\u0295\64\0\1\36\1\0\1\36\1\0\2\36\1\u0296"+ + "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\2\36\1\u0297"+ + "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\6\36\1\u0298\13\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\3\0\1\36\1\0\1\u0299\1\0\10\36\12\0"+ "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\1\u0210\21\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0211\20\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\2\36\1\u0212\5\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\u0213\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\11\0\1\u0214\103\0\1\u0215"+ - "\136\0\1\u0216\44\0\1\u0217\13\0\1\u0218\36\0\1\u0219"+ - "\35\0\1\u021a\102\0\1\u021b\77\0\1\u021c\103\0\1\u021d"+ - "\127\0\1\u021e\116\0\1\u021f\42\0\1\36\1\0\1\36"+ - "\1\0\2\36\1\u0220\5\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\11\36\1\u0221\10\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\13\36\1\u0222\6\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\5\36\1\u0223\14\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\14\36\1\u0224\5\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\2\36\1\u0225\5\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\5\36\1\u0226\14\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\1\36\1\u0227\20\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\13\36\1\u0228\6\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\u01d9\1\0\1\u01d9"+ - "\1\0\10\u01d9\1\0\1\u0229\1\0\1\u022a\6\0\22\u01d9"+ - "\3\0\1\u01d9\2\0\3\u01d9\17\0\1\u01d9\5\0\1\u022b"+ - "\2\0\3\u022b\1\0\2\u022b\13\0\22\u022b\3\0\1\u022b"+ - "\2\0\3\u022b\17\0\1\u022b\5\0\1\u022c\2\0\3\u022c"+ - "\1\0\2\u022c\13\0\22\u022c\3\0\1\u022c\2\0\3\u022c"+ - "\17\0\1\u022c\42\0\1\u022d\61\0\3\u01dd\56\0\1\u01df"+ - "\60\0\1\u022e\36\0\1\u022f\77\0\1\u0230\2\0\3\u0230"+ - "\2\0\1\u0230\13\0\22\u0230\3\0\1\u0230\2\0\3\u0230"+ - "\17\0\1\u0230\2\0\3\116\1\u0231\2\116\3\u0231\2\116"+ - "\1\u0231\1\116\1\364\3\116\1\365\1\0\1\116\1\366"+ - "\2\116\22\u0231\3\116\1\u0231\2\116\3\u0231\17\116\1\u0231"+ - "\2\116\3\123\1\u0232\2\123\3\u0232\2\123\1\u0232\1\123"+ - "\1\376\3\123\1\377\1\123\1\0\1\u0100\2\123\22\u0232"+ - "\3\123\1\u0232\2\123\3\u0232\17\123\1\u0232\2\123\16\0"+ - "\1\u018a\1\0\1\u018a\101\0\2\u0233\1\u0234\133\0\1\u0235"+ - "\34\0\1\36\1\0\1\36\1\0\10\36\12\0\2\36"+ - "\1\u0236\17\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+ - "\1\u0237\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\11\36"+ - "\1\u0238\10\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u0239"+ - "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\1\u023a\21\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\3\36\1\u023b\16\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\2\36\1\u023c\5\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\3\36\1\u023d\16\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\2\36\1\u023e\17\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\2\36\1\u023f\5\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\5\36\1\u0240\14\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\14\36\1\u0241\5\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\13\36\1\u0242\6\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\u0243\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\11\36\1\u0244\10\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\13\36\1\u0245\6\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\1\u0246\21\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\6\36\1\u0247\13\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\21\36\1\u0248\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\3\36"+ - "\1\u0249\4\36\12\0\22\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\5\36\1\u024a\14\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\6\36\1\u024b\13\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\15\36\1\u024c\4\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\5\36\1\u024d\14\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\11\36\1\u024e\10\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\1\0\3\u024f\6\0\22\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\13\36\1\u0250\6\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\6\36\1\u0251\13\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\1\36\1\u0252\20\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\6\36\1\u0253\13\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\43\0\1\u0254\102\0\1\u0255\46\0\1\u0256"+ - "\13\0\1\u0257\36\0\1\u0258\74\0\1\u0259\53\0\1\u0218"+ - "\36\0\1\u0219\67\0\1\u025a\71\0\1\u021f\103\0\1\u025b"+ - "\110\0\1\u025c\102\0\1\u025d\66\0\1\u021f\36\0\1\u025e"+ - "\26\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u025f"+ - "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u029a"+ + "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u029b"+ + "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ "\1\36\1\0\1\36\1\0\10\36\12\0\22\36\3\0"+ - "\1\36\2\0\1\36\1\u0260\1\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\u0261\1\0\10\36\12\0\22\36\3\0"+ + "\1\36\2\0\1\36\1\u029c\1\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u029d"+ + "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ + "\1\36\1\0\1\u029e\1\0\10\36\12\0\22\36\3\0"+ "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ - "\1\36\1\0\10\36\12\0\6\36\1\u0262\13\36\3\0"+ + "\1\36\1\0\10\36\12\0\5\36\1\u029f\14\36\3\0"+ "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ - "\1\u0263\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ - "\10\36\12\0\10\36\1\u0264\11\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\u0264\3\0\1\36\1\0\1\u0265\1\0"+ + "\1\36\1\0\10\36\12\0\5\36\1\u02a0\14\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\6\36\1\u02a1\13\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\u02a2\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\u02a3\1\0"+ "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\15\36\1\u0266\4\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\36\1\u0267\20\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\36\20\0\1\u0229\66\0\1\u022b\1\0\1\u022b\1\0"+ - "\10\u022b\5\0\1\u0268\4\0\22\u022b\3\0\1\u022b\2\0"+ - "\3\u022b\17\0\1\u022b\3\0\1\u022c\1\0\1\u022c\1\0"+ - "\10\u022c\12\0\22\u022c\3\0\1\u022c\2\0\3\u022c\17\0"+ - "\1\u022c\1\u0269\30\0\1\u026a\63\0\1\u026b\134\0\1\u026c"+ - "\61\0\1\u0233\115\0\1\u026d\54\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\10\36\1\u026e\11\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\u026e\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\13\36\1\u026f\6\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u0270"+ - "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\1\36\1\u0271\20\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\13\36\1\u0272\6\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\6\36\1\u0273\13\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\2\36"+ - "\1\u0274\5\36\12\0\22\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\u0275\1\0\10\36"+ - "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\2\36"+ - "\1\u0276\17\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+ - "\1\u0277\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\u0278\1\0\10\36\12\0\22\36"+ + "\22\36\3\0\1\36\2\0\1\36\1\u02a4\1\36\17\0"+ + "\1\36\42\0\1\u02a5\44\0\1\36\1\0\1\u02a6\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\21\0\1\u0282\36\0\1\u02a7\61\0\1\u0253\107\0"+ + "\1\u0214\62\0\1\u0286\36\0\1\u02a8\26\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ + "\1\36\1\u02a9\1\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ + "\1\36\1\u02aa\1\36\17\0\1\36\3\0\1\36\1\0"+ + "\1\36\1\0\10\36\12\0\1\u02ab\21\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\21\36\1\u02ac\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02ad"+ + "\1\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02ae"+ + "\1\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\2\36\1\u02af\17\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\6\36\1\u02b0\13\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\20\0\1\u0290\115\0\1\u02b1\71\0"+ + "\3\u02b2\66\0\1\u02b3\2\0\3\u02b3\1\0\2\u02b3\2\0"+ + "\3\u0294\1\u02b4\5\0\22\u02b3\3\0\1\u02b3\2\0\3\u02b3"+ + "\17\0\1\u02b3\20\0\3\u0295\21\0\1\u02b5\42\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\11\36\1\u02b6\10\36"+ "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0279\20\36"+ + "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02b7\13\36"+ "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\u027a\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\12\36\1\u027b\7\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\7\36\1\u027c\12\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\15\36\1\u02b8\4\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\u02b9\1\0\10\36\12\0\22\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\15\36\1\u027d\4\36\3\0\1\36"+ + "\1\0\10\36\12\0\7\36\1\u02ba\12\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\2\36\1\u027e\5\36\12\0\22\36\3\0\1\36"+ + "\1\0\10\36\12\0\3\36\1\u02bb\16\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\13\36\1\u027f\6\36\3\0\1\36"+ + "\1\0\10\36\12\0\7\36\1\u02bc\12\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\4\36\1\u0280\15\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u0281"+ + "\1\0\10\36\12\0\1\36\1\u02bd\20\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u02be"+ "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\20\0\3\u024f\11\0\1\u0282\52\0\1\36"+ - "\1\0\1\u0283\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\1\36\1\u0284\20\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\21\0\1\u0254\36\0\1\u0285"+ - "\66\0\1\u0286\51\0\1\u0287\113\0\1\u0257\36\0\1\u0258"+ - "\30\0\1\u0288\103\0\1\u021f\117\0\1\u025b\36\0\1\u0289"+ - "\55\0\1\u028a\122\0\1\u0286\35\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\1\36\1\u028b\20\36\3\0\1\36"+ + "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\7\36\1\u02bf\12\36\3\0\1\36\2\0\3\36"+ + "\17\0\1\36\40\0\1\u02c0\46\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\2\36\1\u02c1\17\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+ - "\1\u028c\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+ - "\1\u028d\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\1\36\1\u028e\20\36\3\0\1\36"+ + "\1\u02c2\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\7\36\1\u02c3\12\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\10\36\1\u028f\11\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\u028f\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\10\36\1\u0290\11\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\u0290\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+ - "\1\u0291\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\7\36\1\u0292\12\36\3\0\1\36"+ + "\1\0\2\36\1\u02c4\5\36\12\0\22\36\3\0\1\36"+ "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+ - "\1\u0293\1\36\17\0\1\36\20\0\1\u0229\1\0\1\u022a"+ - "\101\0\1\u0294\1\0\1\u0295\133\0\1\u0296\73\0\1\u0297"+ - "\61\0\3\u0298\101\0\3\u0299\64\0\1\36\1\0\1\36"+ - "\1\0\2\36\1\u029a\5\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\2\36\1\u029b\5\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\6\36\1\u029c\13\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u029d"+ - "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\1\36\1\u029e\20\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\6\36\1\u029f\13\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\22\36\3\0\1\36\2\0\1\36\1\u02a0\1\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\7\36\1\u02a1\12\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\3\0\1\36\1\0\1\u02a2\1\0\10\36"+ - "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\5\36"+ - "\1\u02a3\14\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\5\36"+ - "\1\u02a4\14\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+ - "\1\u02a5\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\u02a6\1\0\10\36\12\0\22\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\u02a7\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\u02c5\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+ "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+ - "\1\u02a8\1\36\17\0\1\36\42\0\1\u02a9\44\0\1\36"+ - "\1\0\1\u02aa\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\21\0\1\u0286\36\0\1\u02ab"+ - "\61\0\1\u0257\107\0\1\u0218\62\0\1\u028a\36\0\1\u02ac"+ - "\26\0\1\36\1\0\1\36\1\0\10\36\12\0\22\36"+ - "\3\0\1\36\2\0\1\36\1\u02ad\1\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\22\36"+ - "\3\0\1\36\2\0\1\36\1\u02ae\1\36\17\0\1\36"+ - "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u02af"+ - "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\21\36\1\u02b0"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\1\36\1\u02b1\1\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\1\36\1\u02b2\1\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\2\36\1\u02b3\17\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02b4\13\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\20\0\1\u0294"+ - "\115\0\1\u02b5\71\0\3\u02b6\66\0\1\u02b7\2\0\3\u02b7"+ - "\1\0\2\u02b7\2\0\3\u0298\1\u02b8\5\0\22\u02b7\3\0"+ - "\1\u02b7\2\0\3\u02b7\17\0\1\u02b7\20\0\3\u0299\21\0"+ - "\1\u02b9\42\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\11\36\1\u02ba\10\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\u02c6\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+ + "\1\0\10\36\12\0\7\36\1\u02c7\12\36\3\0\1\36"+ + "\2\0\3\36\17\0\1\36\20\0\3\u02b1\31\0\1\366"+ + "\34\0\1\u02c8\2\0\3\u02c8\1\0\2\u02c8\1\0\1\u02c9"+ + "\3\u02b2\6\0\22\u02c8\3\0\1\u02c8\2\0\3\u02c8\17\0"+ + "\1\u02c8\3\0\1\u02b3\1\0\1\u02b3\1\0\10\u02b3\1\0"+ + "\3\u02ca\6\0\22\u02b3\3\0\1\u02b3\2\0\3\u02b3\12\0"+ + "\1\u02cb\4\0\1\u02b3\5\0\1\u02b3\2\0\3\u02b3\1\0"+ + "\2\u02b3\13\0\22\u02b3\3\0\1\u02b3\2\0\3\u02b3\17\0"+ + "\1\u02b3\11\0\1\u02cc\75\0\1\36\1\0\1\u02cd\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\6\36\1\u02bb\13\36\3\0\1\36\2\0\3\36\17\0"+ + "\15\36\1\u02ce\4\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\15\36\1\u02bc\4\36\3\0\1\36\2\0\3\36\17\0"+ - "\1\36\3\0\1\36\1\0\1\u02bd\1\0\10\36\12\0"+ - "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u02be"+ - "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\3\36\1\u02bf"+ - "\16\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u02c0"+ - "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u02c1"+ - "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\u02c2\1\0\10\36\12\0\22\36\3\0"+ - "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+ - "\1\36\1\0\10\36\12\0\7\36\1\u02c3\12\36\3\0"+ - "\1\36\2\0\3\36\17\0\1\36\40\0\1\u02c4\46\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\2\36\1\u02c5"+ - "\17\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\22\36\3\0"+ - "\1\36\2\0\1\36\1\u02c6\1\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u02c7"+ - "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\2\36\1\u02c8\5\36\12\0"+ - "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\22\36\3\0"+ - "\1\36\2\0\1\36\1\u02c9\1\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\22\36\3\0"+ - "\1\36\2\0\1\36\1\u02ca\1\36\17\0\1\36\3\0"+ - "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u02cb"+ - "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\20\0"+ - "\3\u02b5\31\0\1\361\34\0\1\u02cc\2\0\3\u02cc\1\0"+ - "\2\u02cc\1\0\1\u02cd\3\u02b6\6\0\22\u02cc\3\0\1\u02cc"+ - "\2\0\3\u02cc\17\0\1\u02cc\3\0\1\u02b7\1\0\1\u02b7"+ - "\1\0\10\u02b7\1\0\3\u02ce\6\0\22\u02b7\3\0\1\u02b7"+ - "\2\0\3\u02b7\12\0\1\u02cf\4\0\1\u02b7\5\0\1\u02b7"+ - "\2\0\3\u02b7\1\0\2\u02b7\13\0\22\u02b7\3\0\1\u02b7"+ - "\2\0\3\u02b7\17\0\1\u02b7\11\0\1\u02d0\75\0\1\36"+ - "\1\0\1\u02d1\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\15\36\1\u02d2\4\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\5\36\1\u02d3\14\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\3\36\1\u02d4\16\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\10\36\1\u02d5\11\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\u02d5\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\5\36\1\u02d6\14\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\45\0\1\u02d7\41\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\5\36\1\u02d8\14\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02d9\13\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\1\36\1\u02da\1\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\14\36\1\u02db\5\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\u02cc"+ - "\1\0\1\u02cc\1\0\10\u02cc\1\u02cd\3\u02dc\6\0\22\u02cc"+ - "\3\0\1\u02cc\2\0\3\u02cc\6\0\1\u02dd\3\0\1\u02de"+ - "\4\0\1\u02cc\5\0\1\u02cc\2\0\3\u02cc\1\0\2\u02cc"+ - "\13\0\22\u02cc\3\0\1\u02cc\2\0\3\u02cc\17\0\1\u02cc"+ - "\5\0\1\u02df\2\0\3\u02df\1\0\2\u02df\1\0\1\u02e0"+ - "\3\u02ce\6\0\22\u02df\3\0\1\u02df\2\0\3\u02df\17\0"+ - "\1\u02df\5\0\1\u02e1\2\0\3\u02e1\1\0\2\u02e1\6\0"+ - "\1\u02cf\4\0\22\u02e1\3\0\1\u02e1\2\0\3\u02e1\13\0"+ - "\1\u02e2\3\0\1\u02e1\1\u02cf\35\0\1\u02e3\50\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02e4\13\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02e5\13\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\1\36\1\u02e6\1\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\u02e7\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+ - "\1\0\10\36\12\0\21\36\1\u02e8\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\20\0\3\u02dc\1\u02e9\65\0\1\u02cc"+ - "\2\0\3\u02cc\1\0\2\u02cc\1\0\1\u02cd\11\0\22\u02cc"+ - "\3\0\1\u02cc\2\0\3\u02cc\17\0\1\u02cc\77\0\1\u02ea"+ - "\7\0\1\u02df\1\0\1\u02df\1\0\10\u02df\1\u02e0\3\u02eb"+ - "\6\0\22\u02df\3\0\1\u02df\2\0\3\u02df\2\0\1\u02ec"+ - "\3\0\1\u02ed\3\0\1\u02ee\4\0\1\u02df\5\0\1\u02df"+ - "\2\0\3\u02df\1\0\2\u02df\13\0\22\u02df\3\0\1\u02df"+ - "\2\0\3\u02df\17\0\1\u02df\3\0\1\u02e1\1\0\1\u02e1"+ - "\1\0\10\u02e1\5\0\1\u02cf\4\0\22\u02e1\3\0\1\u02e1"+ - "\2\0\3\u02e1\13\0\1\u02e2\3\0\1\u02e1\1\u02cf\17\0"+ - "\3\u02ce\53\0\1\u02cf\56\0\1\u02ef\35\0\1\36\1\0"+ - "\1\u02f0\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+ - "\3\36\17\0\1\36\3\0\1\36\1\0\1\u02f1\1\0"+ - "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ + "\5\36\1\u02cf\14\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\22\36\3\0\1\36\2\0\1\36\1\u02f2\1\36\17\0"+ + "\3\36\1\u02d0\16\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\22\36\3\0\1\36\2\0\1\36\1\u02f3\1\36\17\0"+ + "\10\36\1\u02d1\11\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\u02d1\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ + "\5\36\1\u02d2\14\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\45\0\1\u02d3\41\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\5\36\1\u02d4\14\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\6\36\1\u02d5\13\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02d6"+ + "\1\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\14\36\1\u02d7\5\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\u02c8\1\0\1\u02c8\1\0"+ + "\10\u02c8\1\u02c9\3\u02d8\6\0\22\u02c8\3\0\1\u02c8\2\0"+ + "\3\u02c8\6\0\1\u02d9\3\0\1\u02da\4\0\1\u02c8\5\0"+ + "\1\u02c8\2\0\3\u02c8\1\0\2\u02c8\13\0\22\u02c8\3\0"+ + "\1\u02c8\2\0\3\u02c8\17\0\1\u02c8\5\0\1\u02db\2\0"+ + "\3\u02db\1\0\2\u02db\1\0\1\u02dc\3\u02ca\6\0\22\u02db"+ + "\3\0\1\u02db\2\0\3\u02db\17\0\1\u02db\5\0\1\u02dd"+ + "\2\0\3\u02dd\1\0\2\u02dd\6\0\1\u02cb\4\0\22\u02dd"+ + "\3\0\1\u02dd\2\0\3\u02dd\13\0\1\u02de\3\0\1\u02dd"+ + "\1\u02cb\35\0\1\u02df\50\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\6\36\1\u02e0\13\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\6\36\1\u02e1\13\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02e2"+ + "\1\36\17\0\1\36\3\0\1\36\1\0\1\u02e3\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+ - "\1\u02f4\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+ - "\5\0\1\u02f5\2\0\3\u02f5\1\0\2\u02f5\13\0\22\u02f5"+ - "\3\0\1\u02f5\2\0\3\u02f5\17\0\1\u02f5\20\0\3\u02dc"+ - "\47\0\1\u02dd\3\0\1\u02de\25\0\3\u02eb\43\0\1\u02ec"+ - "\104\0\1\u02f6\21\0\1\u02df\2\0\3\u02df\1\0\2\u02df"+ - "\1\0\1\u02e0\11\0\22\u02df\3\0\1\u02df\2\0\3\u02df"+ - "\17\0\1\u02df\77\0\1\u02f7\41\0\1\u02f8\51\0\1\36"+ + "\21\36\1\u02e4\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\20\0\3\u02d8\1\u02e5\65\0\1\u02c8\2\0\3\u02c8\1\0"+ + "\2\u02c8\1\0\1\u02c9\11\0\22\u02c8\3\0\1\u02c8\2\0"+ + "\3\u02c8\17\0\1\u02c8\77\0\1\u02e6\7\0\1\u02db\1\0"+ + "\1\u02db\1\0\10\u02db\1\u02dc\3\u02e7\6\0\22\u02db\3\0"+ + "\1\u02db\2\0\3\u02db\2\0\1\u02e8\3\0\1\u02e9\3\0"+ + "\1\u02ea\4\0\1\u02db\5\0\1\u02db\2\0\3\u02db\1\0"+ + "\2\u02db\13\0\22\u02db\3\0\1\u02db\2\0\3\u02db\17\0"+ + "\1\u02db\3\0\1\u02dd\1\0\1\u02dd\1\0\10\u02dd\5\0"+ + "\1\u02cb\4\0\22\u02dd\3\0\1\u02dd\2\0\3\u02dd\13\0"+ + "\1\u02de\3\0\1\u02dd\1\u02cb\17\0\3\u02ca\53\0\1\u02cb"+ + "\56\0\1\u02eb\35\0\1\36\1\0\1\u02ec\1\0\10\36"+ + "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+ + "\3\0\1\36\1\0\1\u02ed\1\0\10\36\12\0\22\36"+ + "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+ + "\2\0\1\36\1\u02ee\1\36\17\0\1\36\3\0\1\36"+ "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\1\36\1\u02f9\1\36\17\0\1\36\3\0\1\36"+ - "\1\0\1\36\1\0\10\36\12\0\13\36\1\u02fa\6\36"+ - "\3\0\1\36\2\0\3\36\17\0\1\36\2\0\1\u02fb"+ - "\1\u02f5\1\u02fb\1\u02f5\1\u02fb\10\u02f5\1\u02fb\3\u02fc\6\u02fb"+ - "\22\u02f5\3\u02fb\1\u02f5\2\u02fb\3\u02f5\2\u02fb\1\u02fd\7\u02fb"+ - "\1\u02fe\4\u02fb\1\u02f5\2\u02fb\16\0\3\u02eb\43\0\1\u02ec"+ - "\3\0\1\u02ed\3\0\1\u02ee\16\0\1\u02ff\75\0\1\36"+ - "\1\0\1\u0300\1\0\10\36\12\0\22\36\3\0\1\36"+ - "\2\0\3\36\17\0\1\36\2\0\16\u02fb\1\0\1\u02fb"+ - "\1\0\43\u02fb\1\u02fd\35\u02fb\3\u02fc\43\u02fb\1\u02fd\35\u02fb"+ - "\1\0\1\u02fb\1\0\43\u02fb\1\u02fd\1\u0301\21\u02fb\1\u0302"+ - "\2\u02fb\3\u0302\1\u02fb\2\u0302\2\u02fb\1\0\1\u02fb\1\0"+ - "\1\u02fb\1\u02fe\4\u02fb\22\u0302\3\u02fb\1\u0302\2\u02fb\3\u0302"+ - "\2\u02fb\1\u02fd\10\u02fb\1\u0303\3\u02fb\1\u0302\1\u02fe\1\u02fb"+ - "\47\0\1\u0304\35\0\1\36\1\0\1\36\1\0\10\36"+ - "\12\0\11\36\1\u0305\10\36\3\0\1\36\2\0\3\36"+ - "\17\0\1\36\2\0\1\u02fb\1\u0302\1\u02fb\1\u0302\1\u02fb"+ - "\10\u0302\1\u02fb\1\0\1\u02fb\1\0\1\u02fb\1\u02fe\4\u02fb"+ - "\22\u0302\3\u02fb\1\u0302\2\u02fb\3\u0302\2\u02fb\1\u02fd\10\u02fb"+ - "\1\u0303\3\u02fb\1\u0302\1\u02fe\17\u02fb\3\u02fc\43\u02fb\1\u02fd"+ - "\7\u02fb\1\u02fe\7\u02fb\3\0\1\u0306\101\0\1\36\1\0"+ - "\1\36\1\0\10\36\12\0\22\36\3\0\1\36\1\u0307"+ - "\1\0\3\36\17\0\1\36\20\0\3\u0306\5\0\1\u0308"+ - "\133\0\1\u0309\43\0\3\u0308\1\0\1\u030a\25\0\1\u030b"+ - "\31\0\1\u030c\26\0\1\u030d\126\0\1\u030e\77\0\1\u030f"+ - "\107\0\1\u0310\77\0\1\u0311\107\0\1\u0312\77\0\1\u0313"+ - "\107\0\1\u0314\51\0\3\u0312\31\0\1\u0315\101\0\1\u0316"+ - "\55\0\1\u0312\163\0\1\u0312\1\0"; + "\2\0\1\36\1\u02ef\1\36\17\0\1\36\3\0\1\36"+ + "\1\0\1\36\1\0\10\36\12\0\1\u02f0\21\36\3\0"+ + "\1\36\2\0\3\36\17\0\1\36\5\0\1\u02f1\2\0"+ + "\3\u02f1\1\0\2\u02f1\13\0\22\u02f1\3\0\1\u02f1\2\0"+ + "\3\u02f1\17\0\1\u02f1\20\0\3\u02d8\47\0\1\u02d9\3\0"+ + "\1\u02da\25\0\3\u02e7\43\0\1\u02e8\104\0\1\u02f2\21\0"+ + "\1\u02db\2\0\3\u02db\1\0\2\u02db\1\0\1\u02dc\11\0"+ + "\22\u02db\3\0\1\u02db\2\0\3\u02db\17\0\1\u02db\77\0"+ + "\1\u02f3\41\0\1\u02f4\51\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02f5"+ + "\1\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+ + "\10\36\12\0\13\36\1\u02f6\6\36\3\0\1\36\2\0"+ + "\3\36\17\0\1\36\2\0\1\u02f7\1\u02f1\1\u02f7\1\u02f1"+ + "\1\u02f7\10\u02f1\1\u02f7\3\u02f8\6\u02f7\22\u02f1\3\u02f7\1\u02f1"+ + "\2\u02f7\3\u02f1\2\u02f7\1\u02f9\7\u02f7\1\u02fa\4\u02f7\1\u02f1"+ + "\2\u02f7\16\0\3\u02e7\43\0\1\u02e8\3\0\1\u02e9\3\0"+ + "\1\u02ea\16\0\1\u02fb\75\0\1\36\1\0\1\u02fc\1\0"+ + "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+ + "\1\36\2\0\16\u02f7\1\0\1\u02f7\1\0\43\u02f7\1\u02f9"+ + "\35\u02f7\3\u02f8\43\u02f7\1\u02f9\35\u02f7\1\0\1\u02f7\1\0"+ + "\43\u02f7\1\u02f9\1\u02fd\21\u02f7\1\u02fe\2\u02f7\3\u02fe\1\u02f7"+ + "\2\u02fe\2\u02f7\1\0\1\u02f7\1\0\1\u02f7\1\u02fa\4\u02f7"+ + "\22\u02fe\3\u02f7\1\u02fe\2\u02f7\3\u02fe\2\u02f7\1\u02f9\10\u02f7"+ + "\1\u02ff\3\u02f7\1\u02fe\1\u02fa\1\u02f7\47\0\1\u0300\35\0"+ + "\1\36\1\0\1\36\1\0\10\36\12\0\11\36\1\u0301"+ + "\10\36\3\0\1\36\2\0\3\36\17\0\1\36\2\0"+ + "\1\u02f7\1\u02fe\1\u02f7\1\u02fe\1\u02f7\10\u02fe\1\u02f7\1\0"+ + "\1\u02f7\1\0\1\u02f7\1\u02fa\4\u02f7\22\u02fe\3\u02f7\1\u02fe"+ + "\2\u02f7\3\u02fe\2\u02f7\1\u02f9\10\u02f7\1\u02ff\3\u02f7\1\u02fe"+ + "\1\u02fa\17\u02f7\3\u02f8\43\u02f7\1\u02f9\7\u02f7\1\u02fa\7\u02f7"+ + "\3\0\1\u0302\101\0\1\36\1\0\1\36\1\0\10\36"+ + "\12\0\22\36\3\0\1\36\1\u0303\1\0\3\36\17\0"+ + "\1\36\20\0\3\u0302\5\0\1\u0304\133\0\1\u0305\43\0"+ + "\3\u0304\1\0\1\u0306\25\0\1\u0307\31\0\1\u0308\26\0"+ + "\1\u0309\126\0\1\u030a\77\0\1\u030b\107\0\1\u030c\77\0"+ + "\1\u030d\107\0\1\u030e\77\0\1\u030f\107\0\1\u0310\51\0"+ + "\3\u030e\31\0\1\u0311\101\0\1\u0312\55\0\1\u030e\163\0"+ + "\1\u030e\1\0"; private static int [] zzUnpackTrans() { - int [] result = new int[39916]; + int [] result = new int[39644]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -1282,7 +1280,7 @@ private static int zzUnpackTrans(String packed, int offset, int [] result) { private static final String ZZ_ATTRIBUTE_PACKED_0 = "\22\0\2\1\1\11\11\1\1\11\3\1\3\11\25\1"+ "\1\11\12\1\6\11\1\1\1\11\3\1\1\11\4\1"+ - "\1\11\7\1\1\11\5\1\1\11\2\1\1\11\2\1"+ + "\1\11\7\1\1\11\10\1\1\11\4\1\1\11\2\1"+ "\1\11\2\1\2\11\1\1\24\11\5\1\1\11\1\1"+ "\1\11\1\1\1\11\1\1\1\0\4\1\2\0\1\11"+ "\6\1\2\11\2\0\6\1\2\0\1\1\3\0\1\11"+ @@ -1290,25 +1288,25 @@ private static int zzUnpackTrans(String packed, int offset, int [] result) { "\12\0\3\1\1\11\1\1\1\0\1\11\1\1\1\11"+ "\1\1\1\11\1\1\5\11\1\1\1\11\4\0\3\1"+ "\3\11\1\1\3\0\2\1\1\11\1\1\3\0\1\1"+ - "\2\0\1\11\2\0\1\11\10\0\1\11\2\0\1\11"+ - "\1\0\1\11\1\1\2\0\1\11\2\0\3\11\2\0"+ - "\1\1\1\0\1\11\16\1\1\0\1\11\44\1\1\11"+ - "\1\1\12\0\10\1\3\11\2\0\1\11\1\0\1\1"+ - "\1\0\1\11\1\1\1\11\1\1\1\0\1\11\5\1"+ - "\1\0\1\11\1\0\1\11\1\1\1\0\1\11\1\0"+ - "\1\1\1\0\2\1\1\11\2\0\60\1\12\0\11\1"+ - "\5\0\1\11\3\0\2\1\1\11\3\0\54\1\5\0"+ - "\1\11\6\0\11\1\1\11\1\1\5\0\1\11\2\1"+ - "\1\11\1\1\1\0\31\1\1\0\4\1\4\0\1\11"+ - "\5\0\1\11\11\1\6\0\24\1\1\0\2\1\1\11"+ - "\3\0\1\11\1\0\11\1\1\11\1\1\4\0\17\1"+ - "\1\0\1\1\2\11\10\1\5\0\12\1\1\0\7\1"+ - "\5\0\6\1\1\11\4\1\10\0\5\1\7\0\5\1"+ - "\1\0\1\11\2\0\2\1\5\0\2\1\3\0\1\1"+ - "\7\0\1\11\7\0\1\11\1\0"; + "\1\0\1\1\1\11\1\0\1\11\3\0\1\1\1\0"+ + "\2\1\1\11\1\0\1\11\1\0\1\11\1\1\2\0"+ + "\1\11\2\0\3\11\2\0\1\1\1\0\1\11\16\1"+ + "\1\0\1\11\44\1\1\11\1\1\12\0\10\1\3\11"+ + "\2\0\1\11\1\0\1\1\1\0\1\11\1\1\1\11"+ + "\1\1\1\0\1\11\5\1\1\0\1\11\1\0\2\11"+ + "\2\1\1\11\2\0\60\1\12\0\11\1\5\0\1\11"+ + "\3\0\2\1\1\11\2\0\54\1\5\0\1\11\6\0"+ + "\11\1\1\11\1\1\5\0\1\11\2\1\1\11\1\1"+ + "\1\0\31\1\1\0\4\1\4\0\1\11\5\0\1\11"+ + "\11\1\6\0\24\1\1\0\2\1\1\11\3\0\1\11"+ + "\1\0\11\1\1\11\1\1\4\0\17\1\1\0\1\1"+ + "\2\11\10\1\5\0\12\1\1\0\7\1\5\0\6\1"+ + "\1\11\4\1\10\0\5\1\7\0\5\1\1\0\1\11"+ + "\2\0\2\1\5\0\2\1\3\0\1\1\7\0\1\11"+ + "\7\0\1\11\1\0"; private static int [] zzUnpackAttribute() { - int [] result = new int[790]; + int [] result = new int[786]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -1570,6 +1568,32 @@ private Symbol createFullHeredocBodySymbol() { return symbol; } + private boolean isLabelChar(char c) { + return c == '_' + || (c >= 'a' && c <= 'z') + || (c >= 'A' && c <= 'Z') + || (c >= 0x7f && c <= 0xff); + } + + private boolean isEndHereOrNowdoc(String hereOrNowdoc) { + // check whether ID exists + String trimedText = yytext().trim(); + boolean isEnd = false; + if (trimedText.startsWith(hereOrNowdoc)) { + if (trimedText.length() == hereOrNowdoc.length()) { + isEnd = true; + } else if (trimedText.length() > hereOrNowdoc.length() + && !isLabelChar(trimedText.charAt(hereOrNowdoc.length()))) { + // e.g. + // $test = <<< END + // ENDING + // END + isEnd = true; + } + } + return isEnd; + } + public int[] getParamenters(){ return new int[]{zzMarkedPos, zzPushbackPos, zzCurrentPos, zzStartRead, zzEndRead, yyline}; } @@ -1962,16 +1986,16 @@ else if (zzAtEOF) { zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 207: + case 208: { comment = yytext(); handleVarComment(); } - case 209: break; - case 190: + case 210: break; + case 191: { return createFullSymbol(ASTPHP5Symbols.T_INTERFACE); } - case 210: break; - case 155: + case 211: break; + case 156: { int removeChars = (yytext().charAt(0) == 'b')?4:3; heredoc = yytext().substring(removeChars).trim(); // for 'b<<<' or '<<<' if (heredoc.charAt(0) == '"') { @@ -1980,52 +2004,52 @@ else if (zzAtEOF) { yybegin(ST_START_HEREDOC); return createSymbol(ASTPHP5Symbols.T_START_HEREDOC); } - case 211: break; + case 212: break; case 26: { return createSymbol(ASTPHP5Symbols.T_OR); } - case 212: break; - case 153: + case 213: break; + case 154: { return createFullSymbol(ASTPHP5Symbols.T_PRINT); } - case 213: break; - case 177: + case 214: break; + case 178: { return createSymbol(ASTPHP5Symbols.T_UNSET_CAST); } - case 214: break; + case 215: break; case 35: { handleCommentStart(); yybegin(ST_ONE_LINE_COMMENT); // yymore(); } - case 215: break; + case 216: break; case 1: { return createSymbol(ASTPHP5Symbols.T_INLINE_HTML); } - case 216: break; + case 217: break; case 21: { return createSymbol(ASTPHP5Symbols.T_RGREATER); } - case 217: break; - case 125: + case 218: break; + case 128: { yypushback(1); pushState(ST_VAR_OFFSET); return createFullSymbol(ASTPHP5Symbols.T_VARIABLE); } - case 218: break; - case 164: + case 219: break; + case 165: { return createFullSymbol(ASTPHP5Symbols.T_GLOBAL); } - case 219: break; - case 56: + case 220: break; + case 59: { // yymore(); } - case 220: break; + case 221: break; case 22: { return createSymbol(ASTPHP5Symbols.T_TIMES); } - case 221: break; - case 108: + case 222: break; + case 111: { String text = yytext(); if ((text.charAt(1)=='%' && asp_tags) || (text.charAt(1)=='?')) { @@ -2035,204 +2059,164 @@ else if (zzAtEOF) { return createSymbol(ASTPHP5Symbols.T_INLINE_HTML); } } - case 222: break; - case 73: - { return createSymbol(ASTPHP5Symbols.T_MINUS_EQUAL); - } case 223: break; - case 91: - { return createSymbol(ASTPHP5Symbols.T_BOOLEAN_OR); + case 76: + { return createSymbol(ASTPHP5Symbols.T_MINUS_EQUAL); } case 224: break; + case 94: + { return createSymbol(ASTPHP5Symbols.T_BOOLEAN_OR); + } + case 225: break; case 12: { pushState(ST_IN_SCRIPTING); bracket++; return createSymbol(ASTPHP5Symbols.T_CURLY_OPEN); } - case 225: break; + case 226: break; + case 46: + { /* {LABEL}";"?[\n\r] */ + nowdoc=null; + nowdoc_len=0; + nowdocBody.delete(0, nowdocBody.length()); + nowdocBodyStart = -1; + nowdocBodyLength = 0; + yybegin(ST_IN_SCRIPTING); + int back = 0; + if (yytext().charAt(yylength() - 1)==';') { + back++; + } + yypushback(back); + return createSymbol(ASTPHP5Symbols.T_END_NOWDOC); + } + case 227: break; case 42: { yypushback(1); yybegin(ST_HEREDOC); } - case 226: break; + case 228: break; case 19: { return createSymbol(ASTPHP5Symbols.T_CLOSE_PARENTHESE); } - case 227: break; - case 44: + case 229: break; + case 47: { yypushback(yylength()); popState(); } - case 228: break; + case 230: break; case 20: { return createSymbol(ASTPHP5Symbols.T_NOT); } - case 229: break; - case 156: + case 231: break; + case 157: { yypushback(3); pushState(ST_LOOKING_FOR_PROPERTY); return createFullSymbol(ASTPHP5Symbols.T_VARIABLE); } - case 230: break; + case 232: break; case 28: { return createSymbol(ASTPHP5Symbols.T_QUESTION_MARK); } - case 231: break; - case 119: + case 233: break; + case 122: { return createFullSymbol(ASTPHP5Symbols.T_VAR); } - case 232: break; - case 204: + case 234: break; + case 205: { return createFullSymbol(ASTPHP5Symbols.T_FUNC_C); } - case 233: break; - case 143: + case 235: break; + case 144: { return createFullSymbol(ASTPHP5Symbols.T_TRAIT); } - case 234: break; - case 128: - { /* {NEWLINE}{LABEL}";"?[\n\r] */ - int trailingNewLineLength = 1; - int labelLength = yylength() - trailingNewLineLength; - int back = trailingNewLineLength; - - if (yytext().charAt(labelLength-1) == ';') { - labelLength--; - back++; - } - if (labelLength > heredoc.length() - && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredoc)) { - back += heredoc.length(); - yypushback(back); - yybegin(ST_END_HEREDOC); - } else { - yypushback(trailingNewLineLength); - } - updateHeredocBodyInfo(); - if (yystate() == ST_END_HEREDOC) { - return createFullHeredocBodySymbol(); - } - } - case 235: break; - case 161: + case 236: break; + case 162: { return createFullSymbol(ASTPHP5Symbols.T_STATIC); } - case 236: break; - case 133: + case 237: break; + case 134: { return createFullSymbol(ASTPHP5Symbols.T_EVAL); } - case 237: break; - case 163: + case 238: break; + case 164: { return createFullSymbol(ASTPHP5Symbols.T_RETURN); } - case 238: break; - case 146: + case 239: break; + case 147: { return createFullSymbol(ASTPHP5Symbols.T_UNSET); } - case 239: break; - case 84: + case 240: break; + case 87: { return createSymbol(ASTPHP5Symbols.T_DIV_EQUAL); } - case 240: break; - case 45: + case 241: break; + case 48: { popState(); return createFullSymbol(ASTPHP5Symbols.T_STRING); } - case 241: break; - case 201: + case 242: break; + case 202: { return createFullSymbol(ASTPHP5Symbols.T_METHOD_C); } - case 242: break; - case 197: + case 243: break; + case 198: { return createFullSymbol(ASTPHP5Symbols.T_ENDFOREACH); } - case 243: break; - case 172: + case 244: break; + case 173: { return createFullSymbol(ASTPHP5Symbols.T_FINALLY); } - case 244: break; - case 80: + case 245: break; + case 83: { return createSymbol(ASTPHP5Symbols.T_IS_SMALLER_OR_EQUAL); } - case 245: break; - case 67: + case 246: break; + case 70: { return createFullSymbol(ASTPHP5Symbols.T_CONSTANT_ENCAPSED_STRING); } - case 246: break; - case 111: + case 247: break; + case 114: { return createFullSymbol(ASTPHP5Symbols.T_LOGICAL_AND); } - case 247: break; - case 148: + case 248: break; + case 149: { return createFullSymbol(ASTPHP5Symbols.T_CONST); } - case 248: break; - case 136: + case 249: break; + case 137: { return createFullSymbol(ASTPHP5Symbols.T_GOTO); } - case 249: break; - case 114: + case 250: break; + case 117: { return createFullSymbol(ASTPHP5Symbols.T_EXIT); } - case 250: break; + case 251: break; case 37: { yybegin(ST_IN_SCRIPTING); return createSymbol(ASTPHP5Symbols.T_QUATE); } - case 251: break; - case 100: - { /* {LABEL}";"?[\n\r] { */ - heredoc=null; - resetHeredocBodyInfo(); - yybegin(ST_IN_SCRIPTING); - int back = 1; - // mark just the label - if (yytext().charAt(yylength() - 2)==';') { - back++; - } - yypushback(back); - return createSymbol(ASTPHP5Symbols.T_END_HEREDOC); - } case 252: break; - case 127: + case 130: { /* {HEREDOC_CHARS}("{$" | "${") */ yypushback(2); updateHeredocBodyInfo(); return createFullHeredocBodySymbol(); } case 253: break; - case 183: + case 184: { return createFullSymbol(ASTPHP5Symbols.T_CALLABLE); } case 254: break; - case 120: + case 123: { return createSymbol(ASTPHP5Symbols.T_IS_NOT_IDENTICAL); } case 255: break; - case 101: - { int length = yylength() - 1; - yypushback(1); - - if (yytext().charAt(length - 1) == ';') { - length--; - yypushback(1); - } - if (length == nowdoc.length() && yytext().substring(0, length).equals(nowdoc)) { - nowdoc = null; - yybegin(ST_IN_SCRIPTING); - return createSymbol(ASTPHP5Symbols.T_END_NOWDOC); - } else { - yybegin(ST_NOWDOC); - updateNowdocBodyInfo(); - } - } - case 256: break; - case 160: + case 161: { /* not a keyword, hust for recognize constans.*/ return createFullSymbol(ASTPHP5Symbols.T_DEFINE); } - case 257: break; - case 57: + case 256: break; + case 60: { String yytext = yytext(); switch (yytext.charAt(yytext.length() - 1)) { case '?': @@ -2246,127 +2230,132 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo } // yymore(); } - case 258: break; - case 90: + case 257: break; + case 93: { return createSymbol(ASTPHP5Symbols.T_OR_EQUAL); } - case 259: break; - case 141: + case 258: break; + case 142: { return createFullSymbol(ASTPHP5Symbols.T_BREAK); } - case 260: break; - case 208: + case 259: break; + case 209: { yybegin(ST_HALTED_COMPILER); return createSymbol(ASTPHP5Symbols.T_HALT_COMPILER); } - case 261: break; - case 58: + case 260: break; + case 61: { yybegin(ST_IN_SCRIPTING); return createSymbol(ASTPHP5Symbols.T_ECHO); } - case 262: break; - case 162: + case 261: break; + case 163: { return createFullSymbol(ASTPHP5Symbols.T_SWITCH); } - case 263: break; - case 53: + case 262: break; + case 56: { popState(); return createSymbol(ASTPHP5Symbols.T_CLOSE_RECT); } - case 264: break; + case 263: break; case 32: { return createSymbol(ASTPHP5Symbols.T_TILDA); } - case 265: break; - case 70: + case 264: break; + case 73: { return createFullSymbol(ASTPHP5Symbols.T_IF); } - case 266: break; - case 174: + case 265: break; + case 175: { return createFullSymbol(ASTPHP5Symbols.T_REQUIRE); } - case 267: break; + case 266: break; case 17: { return createSymbol(ASTPHP5Symbols.T_NEKUDOTAIM); } - case 268: break; + case 267: break; case 25: { return createSymbol(ASTPHP5Symbols.T_REFERENCE); } - case 269: break; - case 85: + case 268: break; + case 88: { handleCommentStart(); yybegin(ST_COMMENT); } - case 270: break; - case 192: + case 269: break; + case 193: { return createFullSymbol(ASTPHP5Symbols.T_NAMESPACE); } - case 271: break; - case 199: + case 270: break; + case 200: { return createFullSymbol(ASTPHP5Symbols.T_IMPLEMENTS); } - case 272: break; - case 151: + case 271: break; + case 152: { return createFullSymbol(ASTPHP5Symbols.T_YIELD); } - case 273: break; + case 272: break; case 15: { return createSymbol(ASTPHP5Symbols.T_MINUS); } + case 273: break; + case 44: + { /* {NOWDOC_CHARS}|{NEWLINE} */ + updateNowdocBodyInfo(); + } case 274: break; - case 195: + case 196: { return createFullSymbol(ASTPHP5Symbols.T_CLASS_C); } case 275: break; - case 106: + case 109: { handlePHPDocEnd(); yybegin(ST_IN_SCRIPTING); } case 276: break; - case 206: + case 207: { return createFullSymbol(ASTPHP5Symbols.T_NS_C); } case 277: break; - case 154: + case 155: { return createSymbol(ASTPHP5Symbols.T_INT_CAST); } case 278: break; - case 159: + case 160: { return createFullSymbol(ASTPHP5Symbols.T_ELSEIF); } case 279: break; - case 94: + case 97: { return createSymbol(ASTPHP5Symbols.T_COALESCE); } case 280: break; - case 196: + case 197: { return createFullSymbol(ASTPHP5Symbols.T_ENDDECLARE); } case 281: break; - case 74: + case 77: { return createSymbol(ASTPHP5Symbols.T_DEC); } case 282: break; - case 95: + case 98: { yypushback(1); /*{DOUBLE_QUOTES_CHARS}*("{""{"+|"$""$"+|(("{"+|"$"+)[\"]))*/ return createFullSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE); } case 283: break; - case 181: + case 182: { return createFullSymbol(ASTPHP5Symbols.T_ABSTRACT); } case 284: break; - case 132: + case 133: { return createFullSymbol(ASTPHP5Symbols.T_ELSE); } case 285: break; - case 191: + case 192: { return createFullSymbol(ASTPHP5Symbols.T_INSTEADOF); } case 286: break; - case 75: + case 78: { pushState(ST_LOOKING_FOR_PROPERTY); return createSymbol(ASTPHP5Symbols.T_OBJECT_OPERATOR); } @@ -2379,7 +2368,7 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo { // do nothing } case 289: break; - case 47: + case 50: { popState(); pushState(ST_IN_SCRIPTING); return createFullSymbol(ASTPHP5Symbols.T_STRING_VARNAME); @@ -2389,16 +2378,16 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo { return createSymbol(ASTPHP5Symbols.T_LGREATER); } case 291: break; - case 135: + case 136: { return createFullSymbol(ASTPHP5Symbols.T_LIST); } case 292: break; - case 105: + case 108: { handleMultilineCommentEnd(); yybegin(ST_IN_SCRIPTING); } case 293: break; - case 158: + case 159: { return createFullSymbol(ASTPHP5Symbols.T_ENDFOR); } case 294: break; @@ -2406,7 +2395,7 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo { return createFullSymbol(ASTPHP5Symbols.T_LNUMBER); } case 295: break; - case 98: + case 101: { yypushback(1); /*{BACKQUOTE_CHARS}*("{""{"+|"$""$"+|(("{"+|"$"+)[`]))*/ return createFullSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE); @@ -2417,57 +2406,35 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo updateHeredocBodyInfo(); } case 297: break; - case 137: + case 138: { handleCommentStart(); } case 298: break; - case 140: + case 141: { return createFullSymbol(ASTPHP5Symbols.T_ARRAY); } case 299: break; - case 131: + case 132: { return createFullSymbol(ASTPHP5Symbols.T_ECHO); } case 300: break; - case 48: + case 51: { return createFullSymbol(ASTPHP5Symbols.T_NUM_STRING); } case 301: break; - case 88: + case 91: { return createSymbol(ASTPHP5Symbols.T_AND_EQUAL); } case 302: break; - case 99: - { /* {LABEL}";"?[\n\r] */ - int trailingNewLineLength = 1; - int labelLength = yylength() - trailingNewLineLength; - int back = trailingNewLineLength; - String yytext = yytext(); - - if (yytext.charAt(labelLength - 1) == ';') { - labelLength--; - back++; - } - if (labelLength == heredoc.length() - && yytext.substring(labelLength - heredoc.length(), labelLength).equals(heredoc)) { - back = back + heredoc.length(); - yypushback(back); - yybegin(ST_END_HEREDOC); - } else { - yypushback(yylength()); - yybegin(ST_HEREDOC); - } - } - case 303: break; - case 52: + case 55: { bracket++; return createSymbol(ASTPHP5Symbols.T_CURLY_OPEN); } - case 304: break; - case 144: + case 303: break; + case 145: { return createFullSymbol(ASTPHP5Symbols.T_THROW); } - case 305: break; - case 126: + case 304: break; + case 129: { /* {HEREDOC_CHARS}"$"{LABEL}"["? */ String text = yytext(); int lastIndexOfDollar = text.lastIndexOf('$'); @@ -2475,16 +2442,16 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo updateHeredocBodyInfo(); return createFullHeredocBodySymbol(); } - case 306: break; - case 152: + case 305: break; + case 153: { return createFullSymbol(ASTPHP5Symbols.T_WHILE); } - case 307: break; - case 189: + case 306: break; + case 190: { return createFullSymbol(ASTPHP5Symbols.T_ENDSWITCH); } - case 308: break; - case 59: + case 307: break; + case 62: { if (asp_tags) { yybegin(ST_IN_SCRIPTING); //return T_OPEN_TAG; @@ -2493,23 +2460,64 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo return createSymbol(ASTPHP5Symbols.T_INLINE_HTML); } } - case 309: break; - case 176: + case 308: break; + case 177: { return createSymbol(ASTPHP5Symbols.T_ARRAY_CAST); } + case 309: break; + case 102: + { /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */ + int trailingNewLineLength = 1; + int labelLength = yylength() - trailingNewLineLength; + int back = trailingNewLineLength; + + if (yytext().charAt(labelLength-1) == ';') { + labelLength--; + back++; + } + + if (isEndHereOrNowdoc(heredoc)) { + int indexOfHeredocId = yytext().indexOf(heredoc); + back += labelLength - indexOfHeredocId; + yypushback(back); + yybegin(ST_END_HEREDOC); + } else { + int indexOfVariable1 = yytext().indexOf("$"); + int indexOfVariable2 = yytext().indexOf("{$"); + if (indexOfVariable1 > 0 && indexOfVariable2 == -1) { + yypushback(yylength() - indexOfVariable1); + updateHeredocBodyInfo(); + return createFullHeredocBodySymbol(); + } else if (indexOfVariable2 > 0 && indexOfVariable1 == -1) { + yypushback(yylength() - indexOfVariable2); + updateHeredocBodyInfo(); + return createFullHeredocBodySymbol(); + } else if (indexOfVariable1 > 0 && indexOfVariable2 > 0) { + yypushback(yylength() - Math.min(indexOfVariable1, indexOfVariable2)); + updateHeredocBodyInfo(); + return createFullHeredocBodySymbol(); + } else { + yypushback(trailingNewLineLength); + } + } + updateHeredocBodyInfo(); + if (yystate() == ST_END_HEREDOC) { + return createFullHeredocBodySymbol(); + } + } case 310: break; - case 97: + case 100: { pushState(ST_IN_SCRIPTING); yypushback(yylength()-1); bracket++; return createSymbol(ASTPHP5Symbols.T_CURLY_OPEN_WITH_DOLAR); } case 311: break; - case 170: + case 171: { return createFullSymbol(ASTPHP5Symbols.T_DEFAULT); } case 312: break; - case 167: + case 168: { return createSymbol(ASTPHP5Symbols.T_DOUBLE_CAST); } case 313: break; @@ -2522,15 +2530,33 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo { return createSymbol(ASTPHP5Symbols.T_OPEN_RECT); } case 315: break; - case 147: + case 148: { return createFullSymbol(ASTPHP5Symbols.T_CATCH); } case 316: break; - case 96: + case 104: + { /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */ + if (isEndHereOrNowdoc(nowdoc)) { + String yytext = yytext(); + int newlineLength = yytext.startsWith("\r\n") ? 2 : 1; + int back = yylength() - newlineLength; + yypushback(back); + updateNowdocBodyInfo(); + yybegin(ST_END_NOWDOC); + if (nowdocBodyLength > 0) { + return createFullNowdocBodySymbol(); + } + } else { + yypushback(1); + updateNowdocBodyInfo(); + } + } + case 317: break; + case 99: { pushState(ST_LOOKING_FOR_VARNAME); return createSymbol(ASTPHP5Symbols.T_DOLLAR_OPEN_CURLY_BRACES); } - case 317: break; + case 318: break; case 34: { /* This is a temporary fix which is dependant on flex and it's implementation */ if (!stack.isEmpty()) { @@ -2539,86 +2565,109 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo bracket--; return createSymbol(ASTPHP5Symbols.T_CURLY_CLOSE); } - case 318: break; - case 86: + case 319: break; + case 89: { return createSymbol(ASTPHP5Symbols.T_MOD_EQUAL); } - case 319: break; + case 320: break; case 23: { return createSymbol(ASTPHP5Symbols.T_DIV); } - case 320: break; + case 321: break; + case 103: + { /* {TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */ + int trailingNewLineLength = 1; + int labelLength = yylength() - trailingNewLineLength; + int back = trailingNewLineLength; + String yytext = yytext(); + + if (yytext.charAt(labelLength - 1) == ';') { + labelLength--; + back++; + } + + if (isEndHereOrNowdoc(heredoc)) { + int indexOfHeredocId = yytext().indexOf(heredoc); + back += labelLength - indexOfHeredocId; + yypushback(back); + yybegin(ST_END_HEREDOC); + } else { + yypushback(yylength()); + yybegin(ST_HEREDOC); + } + } + case 322: break; case 31: { return createSymbol(ASTPHP5Symbols.T_CLOSE_RECT); } - case 321: break; - case 121: + case 323: break; + case 124: { return createSymbol(ASTPHP5Symbols.T_SPACESHIP); } - case 322: break; + case 324: break; case 6: { return createSymbol(ASTPHP5Symbols.T_PLUS); } - case 323: break; - case 149: + case 325: break; + case 150: { return createFullSymbol(ASTPHP5Symbols.T_CLASS); } - case 324: break; - case 115: + case 326: break; + case 118: { return createFullSymbol(ASTPHP5Symbols.T_FOR); } - case 325: break; - case 76: + case 327: break; + case 79: { return createSymbol(ASTPHP5Symbols.T_IS_GREATER_OR_EQUAL); } - case 326: break; - case 71: + case 328: break; + case 74: { return createFullSymbol(ASTPHP5Symbols.T_DO); } - case 327: break; + case 329: break; case 38: { /*{BACKQUOTE_CHARS}+*/ return createFullSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE); } - case 328: break; + case 330: break; case 36: { /*{DOUBLE_QUOTES_CHARS}+*/ return createFullSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE); } - case 329: break; - case 89: + case 331: break; + case 92: { return createSymbol(ASTPHP5Symbols.T_BOOLEAN_AND); } - case 330: break; + case 332: break; case 5: { return createFullSymbol(ASTPHP5Symbols.T_STRING); } - case 331: break; - case 169: + case 333: break; + case 170: { return createFullSymbol(ASTPHP5Symbols.T_INCLUDE); } - case 332: break; + case 334: break; case 4: { return createSymbol(ASTPHP5Symbols.T_NEKUDA); } - case 333: break; - case 138: + case 335: break; + case 139: { return createFullSymbol(ASTPHP5Symbols.T_ENDIF); } - case 334: break; - case 117: + case 336: break; + case 120: { return createFullSymbol(ASTPHP5Symbols.T_NEW); } - case 335: break; - case 54: + case 337: break; + case 57: { bracket--; return createSymbol(ASTPHP5Symbols.T_CURLY_CLOSE); } - case 336: break; - case 198: + case 338: break; + case 199: { return createFullSymbol(ASTPHP5Symbols.T_INSTANCEOF); } - case 337: break; - case 179: + case 339: break; + case 180: { int bprefix = (yytext().charAt(0) != '<') ? 1 : 0; int startString=3+bprefix; /* 3 is <<<, 2 is quotes, 1 is newline */ @@ -2633,62 +2682,62 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo yybegin(ST_START_NOWDOC); return createSymbol(ASTPHP5Symbols.T_START_NOWDOC); } - case 338: break; - case 46: + case 340: break; + case 49: { yypushback(yylength()); popState(); pushState(ST_IN_SCRIPTING); } - case 339: break; - case 157: + case 341: break; + case 158: { isEndedPhp = false; whitespaceEndPosition = getTokenStartPosition() + yylength(); yybegin(ST_IN_SCRIPTING); //return T_OPEN_TAG; //return createSymbol(ASTPHP5Symbols.T_OPEN_TAG); } - case 340: break; - case 64: + case 342: break; + case 67: { return createSymbol(ASTPHP5Symbols.T_PLUS_EQUAL); } - case 341: break; + case 343: break; case 8: { whitespaceEndPosition = getTokenStartPosition() + yylength(); } - case 342: break; - case 175: + case 344: break; + case 176: { return createFullSymbol(ASTPHP5Symbols.T_PRIVATE); } - case 343: break; - case 203: + case 345: break; + case 204: { return createFullSymbol(ASTPHP5Symbols.T_REQUIRE_ONCE); } - case 344: break; - case 173: + case 346: break; + case 174: { return createFullSymbol(ASTPHP5Symbols.T_FOREACH); } - case 345: break; - case 150: + case 347: break; + case 151: { return createFullSymbol(ASTPHP5Symbols.T_CLONE); } - case 346: break; - case 142: + case 348: break; + case 143: { return createFullSymbol(ASTPHP5Symbols.T_ISSET); } - case 347: break; + case 349: break; case 18: { return createSymbol(ASTPHP5Symbols.T_OPEN_PARENTHESE); } - case 348: break; - case 165: + case 350: break; + case 166: { return createFullSymbol(ASTPHP5Symbols.T_PUBLIC); } - case 349: break; - case 118: + case 351: break; + case 121: { return createSymbol(ASTPHP5Symbols.T_SR_EQUAL); } - case 350: break; - case 60: + case 352: break; + case 63: { if (short_tags_allowed || yylength()>2) { /* yyleng>2 means it's not */ yybegin(ST_IN_SCRIPTING); //return T_OPEN_TAG; @@ -2697,104 +2746,126 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo return createSymbol(ASTPHP5Symbols.T_INLINE_HTML); } } - case 351: break; - case 139: + case 353: break; + case 140: { return createFullSymbol(ASTPHP5Symbols.T_EMPTY); } - case 352: break; + case 354: break; case 40: { /* {HEREDOC_CHARS} */ updateHeredocBodyInfo(); } - case 353: break; - case 79: + case 355: break; + case 82: { return createSymbol(ASTPHP5Symbols.T_IS_NOT_EQUAL); } - case 354: break; - case 82: + case 356: break; + case 85: { return createSymbol(ASTPHP5Symbols.T_MUL_EQUAL); } - case 355: break; - case 124: + case 357: break; + case 127: { if (!parsePHPDoc()) { handleCommentStart(); yybegin(ST_DOCBLOCK); } } - case 356: break; - case 122: + case 358: break; + case 105: + { /* {TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */ + // there is no [\r\n] if it is the last line + // i.e. not [\r\n] but EOF, so check not [\r\n] but [\r\n]? + if (isEndHereOrNowdoc(nowdoc)) { + int indexOfNowdocId = yytext().indexOf(nowdoc); + int back = yylength() - indexOfNowdocId - nowdoc.length(); + yypushback(back); + nowdoc = null; + nowdoc_len = 0; + nowdocBody.delete(0, nowdocBody.length()); + nowdocBodyStart = -1; + nowdocBodyLength = 0; + yybegin(ST_IN_SCRIPTING); + return createSymbol(ASTPHP5Symbols.T_END_NOWDOC); + } else { + yypushback(1); // [\r\n] length + yybegin(ST_NOWDOC); + updateNowdocBodyInfo(); + } + } + case 359: break; + case 125: { return createSymbol(ASTPHP5Symbols.T_SL_EQUAL); } - case 357: break; - case 113: + case 360: break; + case 116: { return createFullSymbol(ASTPHP5Symbols.T_TRY); } - case 358: break; - case 145: + case 361: break; + case 146: { return createFullSymbol(ASTPHP5Symbols.T_FINAL); } - case 359: break; - case 130: + case 362: break; + case 131: { int len = yylength(); yypushback(2); // go back to mark end of comment in the next token comment = yytext(); } - case 360: break; - case 186: + case 363: break; + case 187: { return createSymbol(ASTPHP5Symbols.T_OBJECT_CAST); } - case 361: break; - case 166: + case 364: break; + case 167: { return createSymbol(ASTPHP5Symbols.T_BOOL_CAST); } - case 362: break; + case 365: break; case 39: { yybegin(ST_IN_SCRIPTING); return createSymbol(ASTPHP5Symbols.T_BACKQUATE); } - case 363: break; + case 366: break; case 7: { return createSymbol(ASTPHP5Symbols.T_NS_SEPARATOR); } - case 364: break; - case 185: + case 367: break; + case 186: { return createSymbol(ASTPHP5Symbols.T_STRING_CAST); } - case 365: break; - case 110: + case 368: break; + case 113: { return createFullSymbol(ASTPHP5Symbols.T_LOGICAL_XOR); } - case 366: break; - case 49: + case 369: break; + case 52: { yypushback(1); popState(); /*[ \n\r\t\\'#]*/ return createSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE); } - case 367: break; - case 61: + case 370: break; + case 64: { return createFullSymbol(ASTPHP5Symbols.T_DNUMBER); } - case 368: break; + case 371: break; case 24: { return createSymbol(ASTPHP5Symbols.T_PRECENT); } - case 369: break; - case 205: + case 372: break; + case 206: { comment = yytext(); handleVarComment(); // if we want to handle the var comment in ast, then return the T_VAR_Comment symbol // but it needs some changes in parser grammar. see issue #154967 //return createFullSymbol(ASTPHP5Symbols.T_VAR_COMMENT); } - case 370: break; - case 93: + case 373: break; + case 96: { isEndedPhp = true; yybegin(YYINITIAL); return createSymbol(ASTPHP5Symbols.T_SEMICOLON); /* implicit ';' at php-end tag */ } - case 371: break; - case 87: + case 374: break; + case 90: { if (asp_tags) { yybegin(YYINITIAL); return createSymbol(ASTPHP5Symbols.T_SEMICOLON); /* implicit ';' at php-end tag */ @@ -2802,81 +2873,79 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo return createSymbol(ASTPHP5Symbols.T_INLINE_HTML); } } - case 372: break; - case 182: + case 375: break; + case 183: { return createFullSymbol(ASTPHP5Symbols.T_FUNCTION); } - case 373: break; - case 180: + case 376: break; + case 181: { return createFullSymbol(ASTPHP5Symbols.T_ENDWHILE); } - case 374: break; + case 377: break; case 27: { return createSymbol(ASTPHP5Symbols.T_KOVA); } - case 375: break; + case 378: break; + case 43: + { /* {TABS_AND_SPACES}{LABEL}";"? */ + heredoc=null; + resetHeredocBodyInfo(); + yybegin(ST_IN_SCRIPTING); + int back = 0; + // mark just the label + if (yytext().charAt(yylength() - 1)==';') { + back++; + } + yypushback(back); + return createSymbol(ASTPHP5Symbols.T_END_HEREDOC); + } + case 379: break; case 10: { yybegin(ST_DOUBLE_QUOTES); return createSymbol(ASTPHP5Symbols.T_QUATE); } - case 376: break; - case 184: + case 380: break; + case 185: { return createFullSymbol(ASTPHP5Symbols.T_CONTINUE); } - case 377: break; - case 112: + case 381: break; + case 115: { return createSymbol(ASTPHP5Symbols.T_IS_IDENTICAL); } - case 378: break; - case 69: + case 382: break; + case 72: { return createSymbol(ASTPHP5Symbols.T_DOUBLE_ARROW); } - case 379: break; - case 194: + case 383: break; + case 195: { return createFullSymbol(ASTPHP5Symbols.T_TRAIT_C); } - case 380: break; - case 102: - { /* {LABEL}";"?[\n\r] */ - nowdoc=null; - nowdoc_len=0; - nowdocBody.delete(0, nowdocBody.length()); - nowdocBodyStart = -1; - nowdocBodyLength = 0; - yybegin(ST_IN_SCRIPTING); - int back = 1; - if (yytext().charAt(yylength() - 2)==';') { - back++; - } - yypushback(back); - return createSymbol(ASTPHP5Symbols.T_END_NOWDOC); - } - case 381: break; - case 78: + case 384: break; + case 81: { return createSymbol(ASTPHP5Symbols.T_PAAMAYIM_NEKUDOTAYIM); } - case 382: break; - case 116: + case 385: break; + case 119: { return createFullSymbol(ASTPHP5Symbols.T_USE); } - case 383: break; - case 77: + case 386: break; + case 80: { return createSymbol(ASTPHP5Symbols.T_SR); } - case 384: break; + case 387: break; case 14: { return createSymbol(ASTPHP5Symbols.T_EQUAL); } - case 385: break; + case 388: break; case 29: { return createSymbol(ASTPHP5Symbols.T_COMMA); } - case 386: break; - case 178: + case 389: break; + case 179: { return createFullSymbol(ASTPHP5Symbols.T_DIR); } - case 387: break; - case 107: + case 390: break; + case 110: { if (asp_tags || yytext().charAt(0)!='%') { /* asp comment? */ isEndedPhp = true; handleLineCommentEnd(); @@ -2885,142 +2954,117 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo //return T_COMMENT; } } - case 388: break; - case 193: + case 391: break; + case 194: { return createFullSymbol(ASTPHP5Symbols.T_PROTECTED); } - case 389: break; - case 62: + case 392: break; + case 65: { return createSymbol(ASTPHP5Symbols.T_CONCAT_EQUAL); } - case 390: break; - case 104: + case 393: break; + case 107: { /* treat numbers (almost) as strings inside encapsulated strings */ return createFullSymbol(ASTPHP5Symbols.T_NUM_STRING); } - case 391: break; + case 394: break; case 9: { return createSymbol(ASTPHP5Symbols.T_DOLLAR); } - case 392: break; - case 63: + case 395: break; + case 66: { return createSymbol(ASTPHP5Symbols.T_INC); } - case 393: break; - case 43: + case 396: break; + case 45: { yypushback(1); yybegin(ST_NOWDOC); } - case 394: break; - case 72: + case 397: break; + case 75: { return createFullSymbol(ASTPHP5Symbols.T_LOGICAL_OR); } - case 395: break; - case 81: + case 398: break; + case 84: { return createSymbol(ASTPHP5Symbols.T_SL); } - case 396: break; - case 65: + case 399: break; + case 68: { return createFullSymbol(ASTPHP5Symbols.T_AS); } - case 397: break; - case 202: + case 400: break; + case 203: { return createFullSymbol(ASTPHP5Symbols.T_INCLUDE_ONCE); } - case 398: break; - case 123: + case 401: break; + case 126: { return createSymbol(ASTPHP5Symbols.T_POW_EQUAL); } - case 399: break; - case 68: + case 402: break; + case 71: { return createSymbol(ASTPHP5Symbols.T_IS_EQUAL); } - case 400: break; + case 403: break; case 33: { return createSymbol(ASTPHP5Symbols.T_AT); } - case 401: break; - case 50: + case 404: break; + case 53: { return createSymbol(ASTPHP5Symbols.T_QUATE); } - case 402: break; - case 188: + case 405: break; + case 189: { return createFullSymbol(ASTPHP5Symbols.T_LINE); } - case 403: break; - case 168: + case 406: break; + case 169: { return createFullSymbol(ASTPHP5Symbols.T_EXTENDS); } - case 404: break; - case 129: - { /* {NOWDOC_CHARS}*{NEWLINE}+{LABEL}";"?[\n\r] */ - String text = yytext(); - - if (text.charAt(text.length() - 2)== ';') { - text = text.substring(0, text.length() - 2); - yypushback(1); - } else { - text = text.substring(0, text.length() - 1); - } - - int textLength = text.length(); - if (textLength > nowdoc_len && text.substring(textLength - nowdoc_len, textLength).equals(nowdoc)) { - yypushback(nowdoc_len + 1); - updateNowdocBodyInfo(); - yybegin(ST_END_NOWDOC); - if (nowdocBodyLength > 0) { - return createFullNowdocBodySymbol(); - } - } else { - yypushback(1); - updateNowdocBodyInfo(); - } - } - case 405: break; - case 66: + case 407: break; + case 69: { return createFullSymbol(ASTPHP5Symbols.T_VARIABLE); } - case 406: break; - case 200: + case 408: break; + case 201: { return createSymbol(ASTPHP5Symbols.T_YIELD_FROM); } - case 407: break; - case 171: + case 409: break; + case 172: { return createFullSymbol(ASTPHP5Symbols.T_DECLARE); } - case 408: break; - case 92: + case 410: break; + case 95: { return createSymbol(ASTPHP5Symbols.T_XOR_EQUAL); } - case 409: break; - case 83: + case 411: break; + case 86: { return createSymbol(ASTPHP5Symbols.T_POW); } - case 410: break; - case 134: + case 412: break; + case 135: { return createFullSymbol(ASTPHP5Symbols.T_CASE); } - case 411: break; - case 187: + case 413: break; + case 188: { return createFullSymbol(ASTPHP5Symbols.T_FILE); } - case 412: break; - case 103: + case 414: break; + case 106: { return createSymbol(ASTPHP5Symbols.T_OBJECT_OPERATOR); } - case 413: break; - case 109: + case 415: break; + case 112: { return createSymbol(ASTPHP5Symbols.T_ELLIPSIS); } - case 414: break; - case 51: + case 416: break; + case 54: { return createSymbol(ASTPHP5Symbols.T_BACKQUATE); } - case 415: break; - case 55: + case 417: break; + case 58: { } - case 416: break; + case 418: break; default: if (zzInput == YYEOF && (zzStartRead == zzCurrentPos || zzLexicalState == ST_DOCBLOCK)) { zzAtEOF = true; @@ -3035,7 +3079,7 @@ && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredo return createSymbol(ASTPHP5Symbols.EOF); } } - case 791: break; + case 787: break; default: { return createSymbol(ASTPHP5Symbols.EOF); } diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/Quote.java b/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/Quote.java index 27d10c830a53..6dfbc3201a12 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/Quote.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/Quote.java @@ -20,16 +20,17 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; /** * Represents complex qoute(i.e. qoute that includes string and variables). * Also represents heredoc - *
e.g.
+ * 
e.g.
  * "this is $a quote",
  * "'single ${$complex->quote()}'"
  * >>>Heredoc\n  This is here documents \nHeredoc;\n
- *
+ * 
* Note: "This is".$not." a quote node", * 'This is $not a quote too' */ @@ -58,7 +59,7 @@ public Quote(int start, int end, List expressions, Quote.Type type) { * @return expression list of the echo statement */ public List getExpressions() { - return this.expressions; + return Collections.unmodifiableList(this.expressions); } /** @@ -80,7 +81,7 @@ public String toString() { for (Expression expression : getExpressions()) { sb.append(expression).append(","); //NOI18N } - return getQuoteType() + " " + sb.toString(); + return getQuoteType() + " " + sb.toString(); //NOI18N } } diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP73UnhandledError.java b/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP73UnhandledError.java index f1ba6cab7af7..9b1f745926bf 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP73UnhandledError.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP73UnhandledError.java @@ -95,6 +95,7 @@ public CheckVisitor(FileObject fileObject) { public Collection getErrors() { checkFunctionCallTrailingCommas(); + checkFlexibleHeredocAndNowdoc(); return Collections.unmodifiableCollection(errors); } @@ -209,6 +210,56 @@ private void checkListReferenceAssignment(List elements) { }); } + private void checkFlexibleHeredocAndNowdoc() { + if (CancelSupport.getDefault().isCancelled()) { + return; + } + + BaseDocument document = GsfUtilities.getDocument(fileObject, true); + if (document == null) { + return; + } + document.readLock(); + try { + TokenSequence ts = LexUtilities.getPHPTokenSequence(document, document.getLength()); + if (ts == null) { + return; + } + ts.move(document.getLength()); + checkHeredocNowdocIndentationAndNewline(ts); + } finally { + document.readUnlock(); + } + } + + private void checkHeredocNowdocIndentationAndNewline(TokenSequence ts) { + Token endTag; + List lookforEndTokens = Arrays.asList(PHPTokenId.PHP_HEREDOC_TAG_END, PHPTokenId.PHP_NOWDOC_TAG_END); + while (ts.movePrevious() + && (endTag = LexUtilities.findPreviousToken(ts, lookforEndTokens)) != null) { + String endId = endTag.text().toString(); + // indentation of closing marker + int offset = ts.offset(); + if (endId.contains(" ") || endId.contains("\t")) { // NOI18N + createError(offset, offset + endId.length()); + } + // new line of closing marker + if (ts.moveNext()) { + Token newLine = ts.token(); + if (newLine != null) { + if (TokenUtilities.startsWith(newLine.text(), "\r") // NOI18N + || (TokenUtilities.startsWith(newLine.text(), "\n") // NOI18N + || TokenUtilities.textEquals(newLine.text(), ";"))) { // NOI18N + // noop + } else { + createError(ts.offset(), ts.offset() + newLine.length()); + } + } + } + ts.move(offset); + } + } + private void createError(ASTNode node) { createError(node.getStartOffset(), node.getEndOffset()); } diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_001.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_001.pass index d9737b4ff50a..c9a98aab5ca5 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_001.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_001.pass @@ -11,27 +11,29 @@ token #9 WHITESPACE token #10 PHP_HEREDOC_TAG_START << -token #36 T_INLINE_HTML \n--EXPECT--\nThis is a heredoc test.\nThis is another heredoc test.\n +token #13 PHP_CONSTANT_ENCAPSED_STRING \n +token #14 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #15 PHP_SEMICOLON ; +token #16 WHITESPACE \n\n +token #17 PHP_VARIABLE $x +token #18 WHITESPACE +token #19 PHP_OPERATOR = +token #20 WHITESPACE +token #21 PHP_HEREDOC_TAG_START << +token #38 T_INLINE_HTML \n--EXPECT--\nThis is a heredoc test.\nThis is another heredoc test.\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_002.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_002.pass index 053dc1e31ae7..f0be6a81f894 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_002.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_002.pass @@ -11,27 +11,29 @@ token #9 WHITESPACE token #10 PHP_HEREDOC_TAG_START b<< -token #36 T_INLINE_HTML \n--EXPECT--\nThis is a heredoc test.\nThis is another heredoc test.\n +token #13 PHP_CONSTANT_ENCAPSED_STRING \n +token #14 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #15 PHP_SEMICOLON ; +token #16 WHITESPACE \n\n +token #17 PHP_VARIABLE $x +token #18 WHITESPACE +token #19 PHP_OPERATOR = +token #20 WHITESPACE +token #21 PHP_HEREDOC_TAG_START b<< +token #38 T_INLINE_HTML \n--EXPECT--\nThis is a heredoc test.\nThis is another heredoc test.\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_003.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_003.pass index b1628b726a71..240dac51798e 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_003.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_003.pass @@ -13,29 +13,31 @@ token #11 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test # token #12 PHP_VARIABLE $a token #13 PHP_CONSTANT_ENCAPSED_STRING . token #14 PHP_CONSTANT_ENCAPSED_STRING \n -token #15 PHP_HEREDOC_TAG_END \nENDOFHEREDOC -token #16 PHP_SEMICOLON ; -token #17 WHITESPACE \n\n -token #18 PHP_VARIABLE $x -token #19 WHITESPACE -token #20 PHP_OPERATOR = -token #21 WHITESPACE -token #22 PHP_HEREDOC_TAG_START << -token #40 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #1.\nThis is heredoc test #2.\n +token #15 PHP_CONSTANT_ENCAPSED_STRING \n +token #16 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #17 PHP_SEMICOLON ; +token #18 WHITESPACE \n\n +token #19 PHP_VARIABLE $x +token #20 WHITESPACE +token #21 PHP_OPERATOR = +token #22 WHITESPACE +token #23 PHP_HEREDOC_TAG_START << +token #42 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #1.\nThis is heredoc test #2.\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_004.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_004.pass index ad286346ae2b..206f62e699e6 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_004.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_004.pass @@ -15,31 +15,33 @@ token #13 PHP_VARIABLE $a token #14 PHP_CURLY_CLOSE } token #15 PHP_CONSTANT_ENCAPSED_STRING . token #16 PHP_CONSTANT_ENCAPSED_STRING \n -token #17 PHP_HEREDOC_TAG_END \nENDOFHEREDOC -token #18 PHP_SEMICOLON ; -token #19 WHITESPACE \n\n -token #20 PHP_VARIABLE $x -token #21 WHITESPACE -token #22 PHP_OPERATOR = -token #23 WHITESPACE -token #24 PHP_HEREDOC_TAG_START << -token #44 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #1.\nThis is heredoc test #2.\n +token #17 PHP_CONSTANT_ENCAPSED_STRING \n +token #18 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #19 PHP_SEMICOLON ; +token #20 WHITESPACE \n\n +token #21 PHP_VARIABLE $x +token #22 WHITESPACE +token #23 PHP_OPERATOR = +token #24 WHITESPACE +token #25 PHP_HEREDOC_TAG_START << +token #46 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #1.\nThis is heredoc test #2.\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_005.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_005.pass index e597e6afd3a1..6145dd0b2154 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_005.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_005.pass @@ -22,38 +22,40 @@ token #20 PHP_OBJECT_OPERATOR -> token #21 PHP_STRING d token #22 PHP_CONSTANT_ENCAPSED_STRING . token #23 PHP_CONSTANT_ENCAPSED_STRING \n -token #24 PHP_HEREDOC_TAG_END \nENDOFHEREDOC -token #25 PHP_SEMICOLON ; -token #26 WHITESPACE \n\n -token #27 PHP_VARIABLE $x -token #28 WHITESPACE -token #29 PHP_OPERATOR = -token #30 WHITESPACE -token #31 PHP_HEREDOC_TAG_START << -token #42 PHP_STRING d -token #43 PHP_CONSTANT_ENCAPSED_STRING . -token #44 PHP_CONSTANT_ENCAPSED_STRING \n -token #45 PHP_HEREDOC_TAG_END \nENDOFHEREDOC -token #46 PHP_SEMICOLON ; -token #47 WHITESPACE \n\n -token #48 PHP_PRINT print -token #49 WHITESPACE -token #50 PHP_CONSTANT_ENCAPSED_STRING " -token #51 PHP_CURLY_OPEN { -token #52 PHP_VARIABLE $x -token #53 PHP_CURLY_CLOSE } -token #54 PHP_CONSTANT_ENCAPSED_STRING " -token #55 PHP_SEMICOLON ; -token #56 WHITESPACE \n\n -token #57 PHP_CLOSETAG ?> -token #58 T_INLINE_HTML \n--EXPECTF--\nParse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in %sheredoc_005.php on line 6\n +token #24 PHP_CONSTANT_ENCAPSED_STRING \n +token #25 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #26 PHP_SEMICOLON ; +token #27 WHITESPACE \n\n +token #28 PHP_VARIABLE $x +token #29 WHITESPACE +token #30 PHP_OPERATOR = +token #31 WHITESPACE +token #32 PHP_HEREDOC_TAG_START << +token #43 PHP_STRING d +token #44 PHP_CONSTANT_ENCAPSED_STRING . +token #45 PHP_CONSTANT_ENCAPSED_STRING \n +token #46 PHP_CONSTANT_ENCAPSED_STRING \n +token #47 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #48 PHP_SEMICOLON ; +token #49 WHITESPACE \n\n +token #50 PHP_PRINT print +token #51 WHITESPACE +token #52 PHP_CONSTANT_ENCAPSED_STRING " +token #53 PHP_CURLY_OPEN { +token #54 PHP_VARIABLE $x +token #55 PHP_CURLY_CLOSE } +token #56 PHP_CONSTANT_ENCAPSED_STRING " +token #57 PHP_SEMICOLON ; +token #58 WHITESPACE \n\n +token #59 PHP_CLOSETAG ?> +token #60 T_INLINE_HTML \n--EXPECTF--\nParse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in %sheredoc_005.php on line 6\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_006.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_006.pass index 0b68f2837c6a..1fe5336c1ba4 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_006.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_006.pass @@ -32,48 +32,50 @@ token #30 PHP_STRING d token #31 PHP_CURLY_CLOSE } token #32 PHP_CONSTANT_ENCAPSED_STRING . token #33 PHP_CONSTANT_ENCAPSED_STRING \n -token #34 PHP_HEREDOC_TAG_END \nENDOFHEREDOC -token #35 PHP_SEMICOLON ; -token #36 WHITESPACE \n\n -token #37 PHP_VARIABLE $x -token #38 WHITESPACE -token #39 PHP_OPERATOR = -token #40 WHITESPACE -token #41 PHP_HEREDOC_TAG_START << -token #61 PHP_STRING d -token #62 PHP_CURLY_CLOSE } -token #63 PHP_CONSTANT_ENCAPSED_STRING . -token #64 PHP_CONSTANT_ENCAPSED_STRING \n -token #65 PHP_HEREDOC_TAG_END \nENDOFHEREDOC -token #66 PHP_SEMICOLON ; -token #67 WHITESPACE \n\n -token #68 PHP_PRINT print -token #69 WHITESPACE -token #70 PHP_CONSTANT_ENCAPSED_STRING " -token #71 PHP_CURLY_OPEN { -token #72 PHP_VARIABLE $x -token #73 PHP_CURLY_CLOSE } -token #74 PHP_CONSTANT_ENCAPSED_STRING " -token #75 PHP_SEMICOLON ; -token #76 WHITESPACE \n\n -token #77 PHP_CLOSETAG ?> -token #78 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #s 1, 2, 3, and 4.\nThis is heredoc test #s 1, 2, 3, and 4.\n +token #34 PHP_CONSTANT_ENCAPSED_STRING \n +token #35 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #36 PHP_SEMICOLON ; +token #37 WHITESPACE \n\n +token #38 PHP_VARIABLE $x +token #39 WHITESPACE +token #40 PHP_OPERATOR = +token #41 WHITESPACE +token #42 PHP_HEREDOC_TAG_START << +token #62 PHP_STRING d +token #63 PHP_CURLY_CLOSE } +token #64 PHP_CONSTANT_ENCAPSED_STRING . +token #65 PHP_CONSTANT_ENCAPSED_STRING \n +token #66 PHP_CONSTANT_ENCAPSED_STRING \n +token #67 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #68 PHP_SEMICOLON ; +token #69 WHITESPACE \n\n +token #70 PHP_PRINT print +token #71 WHITESPACE +token #72 PHP_CONSTANT_ENCAPSED_STRING " +token #73 PHP_CURLY_OPEN { +token #74 PHP_VARIABLE $x +token #75 PHP_CURLY_CLOSE } +token #76 PHP_CONSTANT_ENCAPSED_STRING " +token #77 PHP_SEMICOLON ; +token #78 WHITESPACE \n\n +token #79 PHP_CLOSETAG ?> +token #80 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #s 1, 2, 3, and 4.\nThis is heredoc test #s 1, 2, 3, and 4.\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_007.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_007.pass index 58a8e918ebb1..49da0d4e56cc 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_007.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_007.pass @@ -30,46 +30,48 @@ token #28 PHP_STRING d token #29 PHP_CURLY_CLOSE } token #30 PHP_CONSTANT_ENCAPSED_STRING . token #31 PHP_CONSTANT_ENCAPSED_STRING \n -token #32 PHP_HEREDOC_TAG_END \nENDOFHEREDOC -token #33 PHP_SEMICOLON ; -token #34 WHITESPACE \n\n -token #35 PHP_VARIABLE $x -token #36 WHITESPACE -token #37 PHP_OPERATOR = -token #38 WHITESPACE -token #39 PHP_HEREDOC_TAG_START << -token #57 PHP_STRING d -token #58 PHP_CURLY_CLOSE } -token #59 PHP_CONSTANT_ENCAPSED_STRING . -token #60 PHP_CONSTANT_ENCAPSED_STRING \n -token #61 PHP_HEREDOC_TAG_END \nENDOFHEREDOC -token #62 PHP_SEMICOLON ; -token #63 WHITESPACE \n\n -token #64 PHP_PRINT print -token #65 WHITESPACE -token #66 PHP_CONSTANT_ENCAPSED_STRING " -token #67 PHP_CURLY_OPEN { -token #68 PHP_VARIABLE $x -token #69 PHP_CURLY_CLOSE } -token #70 PHP_CONSTANT_ENCAPSED_STRING " -token #71 PHP_SEMICOLON ; -token #72 WHITESPACE \n\n -token #73 PHP_CLOSETAG ?> -token #74 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #s 1, 2, 3, and 4.\nThis is heredoc test #s 1, 2, 3, and 4.\n +token #32 PHP_CONSTANT_ENCAPSED_STRING \n +token #33 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #34 PHP_SEMICOLON ; +token #35 WHITESPACE \n\n +token #36 PHP_VARIABLE $x +token #37 WHITESPACE +token #38 PHP_OPERATOR = +token #39 WHITESPACE +token #40 PHP_HEREDOC_TAG_START << +token #58 PHP_STRING d +token #59 PHP_CURLY_CLOSE } +token #60 PHP_CONSTANT_ENCAPSED_STRING . +token #61 PHP_CONSTANT_ENCAPSED_STRING \n +token #62 PHP_CONSTANT_ENCAPSED_STRING \n +token #63 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #64 PHP_SEMICOLON ; +token #65 WHITESPACE \n\n +token #66 PHP_PRINT print +token #67 WHITESPACE +token #68 PHP_CONSTANT_ENCAPSED_STRING " +token #69 PHP_CURLY_OPEN { +token #70 PHP_VARIABLE $x +token #71 PHP_CURLY_CLOSE } +token #72 PHP_CONSTANT_ENCAPSED_STRING " +token #73 PHP_SEMICOLON ; +token #74 WHITESPACE \n\n +token #75 PHP_CLOSETAG ?> +token #76 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #s 1, 2, 3, and 4.\nThis is heredoc test #s 1, 2, 3, and 4.\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_009.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_009.pass deleted file mode 100644 index 789919006c7d..000000000000 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_009.pass +++ /dev/null @@ -1,49 +0,0 @@ -token #0 T_INLINE_HTML --TEST--\nTorture the T_END_HEREDOC rules (heredoc)\n--FILE--\n -token #1 PHP_OPENTAG -token #48 T_INLINE_HTML \n--EXPECTF--\nNotice: Undefined variable: ENDOFHEREDOC in %s on line %d\nENDOFHEREDOC ;\n ENDOFHEREDOC;\nENDOFHEREDOC \n ENDOFHEREDOC\n;\n\nNotice: Undefined variable: ENDOFHEREDOC in %s on line %d\nENDOFHEREDOC ;\n ENDOFHEREDOC;\nENDOFHEREDOC \n ENDOFHEREDOC\n;\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_010.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_010.pass deleted file mode 100644 index 063b78bdefe3..000000000000 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_010.pass +++ /dev/null @@ -1,74 +0,0 @@ -token #0 T_INLINE_HTML --TEST--\nTorture the T_END_HEREDOC rules with variable expansions (heredoc)\n--FILE--\n -token #1 PHP_OPENTAG -token #73 T_INLINE_HTML \n--EXPECT--\nENDOFHEREDOC\nENDOFHEREDOC\nENDOFHEREDOC\nENDOFHEREDOC\nENDOFHEREDOC\nENDOFHEREDOC\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_011.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_011.pass index 3a6c62bb53b7..e53094de1a13 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_011.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_011.pass @@ -20,22 +20,23 @@ token #18 PHP_OPERATOR = token #19 WHITESPACE token #20 PHP_HEREDOC_TAG_START << -token #40 T_INLINE_HTML \n--EXPECT--\nIf you see this, everything is ok.\n +token #22 PHP_CONSTANT_ENCAPSED_STRING \n +token #23 PHP_HEREDOC_TAG_END THISMUSTNOTERROR +token #24 PHP_SEMICOLON ; +token #25 WHITESPACE \n\n +token #26 PHP_CURLY_CLOSE } +token #27 PHP_SEMICOLON ; +token #28 WHITESPACE \n\n +token #29 PHP_PRINT print +token #30 WHITESPACE +token #31 PHP_STRING e +token #32 PHP_PAAMAYIM_NEKUDOTAYIM :: +token #33 PHP_STRING E +token #34 WHITESPACE +token #35 PHP_TOKEN . +token #36 WHITESPACE +token #37 PHP_CONSTANT_ENCAPSED_STRING "\n" +token #38 PHP_SEMICOLON ; +token #39 WHITESPACE \n\n +token #40 PHP_CLOSETAG ?> +token #41 T_INLINE_HTML \n--EXPECT--\nIf you see this, everything is ok.\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_012.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_012.pass index e9143b1fa9c7..12f8ddd28f8d 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_012.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_012.pass @@ -15,13 +15,14 @@ token #13 WHITESPACE token #14 PHP_HEREDOC_TAG_START <<<"MYLABEL"\n token #15 PHP_ENCAPSED_AND_WHITESPACE test: token #16 PHP_VARIABLE $test -token #17 PHP_HEREDOC_TAG_END \nMYLABEL -token #18 PHP_SEMICOLON ; -token #19 WHITESPACE \n -token #20 PHP_ECHO echo -token #21 WHITESPACE -token #22 PHP_VARIABLE $var -token #23 PHP_SEMICOLON ; -token #24 WHITESPACE \n -token #25 PHP_CLOSETAG ?> -token #26 T_INLINE_HTML \n--EXPECT--\ntest: foo\n +token #17 PHP_CONSTANT_ENCAPSED_STRING \n +token #18 PHP_HEREDOC_TAG_END MYLABEL +token #19 PHP_SEMICOLON ; +token #20 WHITESPACE \n +token #21 PHP_ECHO echo +token #22 WHITESPACE +token #23 PHP_VARIABLE $var +token #24 PHP_SEMICOLON ; +token #25 WHITESPACE \n +token #26 PHP_CLOSETAG ?> +token #27 T_INLINE_HTML \n--EXPECT--\ntest: foo\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_013.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_013.pass index ba70c610a7e8..efed7eea29b7 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_013.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_013.pass @@ -16,13 +16,14 @@ token #14 PHP_STRING prefix token #15 PHP_HEREDOC_TAG_START <<<"MYLABEL"\n token #16 PHP_ENCAPSED_AND_WHITESPACE test: token #17 PHP_VARIABLE $test -token #18 PHP_HEREDOC_TAG_END \nMYLABEL -token #19 PHP_SEMICOLON ; -token #20 WHITESPACE \n -token #21 PHP_ECHO echo -token #22 WHITESPACE -token #23 PHP_VARIABLE $var -token #24 PHP_SEMICOLON ; -token #25 WHITESPACE \n -token #26 PHP_CLOSETAG ?> -token #27 T_INLINE_HTML \n--EXPECTF--\nParse error: syntax error, unexpected T_START_HEREDOC in %sheredoc_013.php on line %d\n +token #18 PHP_CONSTANT_ENCAPSED_STRING \n +token #19 PHP_HEREDOC_TAG_END MYLABEL +token #20 PHP_SEMICOLON ; +token #21 WHITESPACE \n +token #22 PHP_ECHO echo +token #23 WHITESPACE +token #24 PHP_VARIABLE $var +token #25 PHP_SEMICOLON ; +token #26 WHITESPACE \n +token #27 PHP_CLOSETAG ?> +token #28 T_INLINE_HTML \n--EXPECTF--\nParse error: syntax error, unexpected T_START_HEREDOC in %sheredoc_013.php on line %d\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_015.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_015.pass index cace7f7e10c7..3519aded35d9 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_015.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_015.pass @@ -15,33 +15,34 @@ token #13 PHP_OPERATOR = token #14 WHITESPACE token #15 PHP_HEREDOC_TAG_START << -token #38 PHP_STRING e -token #39 WHITESPACE -token #40 PHP_TOKEN . -token #41 WHITESPACE -token #42 PHP_CONSTANT_ENCAPSED_STRING "\n" -token #43 PHP_SEMICOLON ; -token #44 WHITESPACE \n\n -token #45 PHP_CLOSETAG ?> -token #46 T_INLINE_HTML \n--EXPECT--\nIf you see this, everything is ok.\n +token #17 PHP_CONSTANT_ENCAPSED_STRING \n +token #18 PHP_HEREDOC_TAG_END THISMUSTNOTERROR +token #19 PHP_SEMICOLON ; +token #20 WHITESPACE \n\n +token #21 PHP_CURLY_CLOSE } +token #22 PHP_SEMICOLON ; +token #23 WHITESPACE \n +token #24 PHP_VARIABLE $e +token #25 WHITESPACE +token #26 PHP_OPERATOR = +token #27 WHITESPACE +token #28 PHP_NEW new +token #29 WHITESPACE +token #30 PHP_STRING e +token #31 PHP_TOKEN ( +token #32 PHP_TOKEN ) +token #33 PHP_SEMICOLON ; +token #34 WHITESPACE \n +token #35 PHP_PRINT print +token #36 WHITESPACE +token #37 PHP_VARIABLE $e +token #38 PHP_OBJECT_OPERATOR -> +token #39 PHP_STRING e +token #40 WHITESPACE +token #41 PHP_TOKEN . +token #42 WHITESPACE +token #43 PHP_CONSTANT_ENCAPSED_STRING "\n" +token #44 PHP_SEMICOLON ; +token #45 WHITESPACE \n\n +token #46 PHP_CLOSETAG ?> +token #47 T_INLINE_HTML \n--EXPECT--\nIf you see this, everything is ok.\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/issue225549.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/issue225549.pass index bc1014db7bc5..5050ef76f824 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/issue225549.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/issue225549.pass @@ -10,7 +10,8 @@ token #8 PHP_CURLY_OPEN { token #9 PHP_VARIABLE $url token #10 PHP_CURLY_CLOSE } token #11 PHP_CONSTANT_ENCAPSED_STRING " -token #12 PHP_HEREDOC_TAG_END \nEOT -token #13 PHP_SEMICOLON ; -token #14 WHITESPACE \n -token #15 PHP_CLOSETAG ?>\n +token #12 PHP_CONSTANT_ENCAPSED_STRING \n +token #13 PHP_HEREDOC_TAG_END EOT +token #14 PHP_SEMICOLON ; +token #15 WHITESPACE \n +token #16 PHP_CLOSETAG ?>\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_008.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_008.pass index dd33072f0d12..4c00ed030e3a 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_008.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_008.pass @@ -9,23 +9,25 @@ token #7 WHITESPACE \n\n token #8 PHP_PRINT print token #9 WHITESPACE token #10 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n -token #11 PHP_NOWDOC_TAG_END ENDOFNOWDOC;\n -token #12 WHITESPACE \n -token #13 PHP_VARIABLE $x -token #14 WHITESPACE -token #15 PHP_OPERATOR = -token #16 WHITESPACE -token #17 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n -token #18 PHP_NOWDOC_TAG_END ENDOFNOWDOC;\n -token #19 WHITESPACE \n -token #20 PHP_PRINT print -token #21 WHITESPACE -token #22 PHP_CONSTANT_ENCAPSED_STRING " -token #23 PHP_CURLY_OPEN { -token #24 PHP_VARIABLE $x -token #25 PHP_CURLY_CLOSE } -token #26 PHP_CONSTANT_ENCAPSED_STRING " -token #27 PHP_SEMICOLON ; -token #28 WHITESPACE \n\n -token #29 PHP_CLOSETAG ?> -token #30 T_INLINE_HTML \n--EXPECT--\n +token #11 PHP_NOWDOC_TAG_END ENDOFNOWDOC +token #12 PHP_SEMICOLON ; +token #13 WHITESPACE \n\n +token #14 PHP_VARIABLE $x +token #15 WHITESPACE +token #16 PHP_OPERATOR = +token #17 WHITESPACE +token #18 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n +token #19 PHP_NOWDOC_TAG_END ENDOFNOWDOC +token #20 PHP_SEMICOLON ; +token #21 WHITESPACE \n\n +token #22 PHP_PRINT print +token #23 WHITESPACE +token #24 PHP_CONSTANT_ENCAPSED_STRING " +token #25 PHP_CURLY_OPEN { +token #26 PHP_VARIABLE $x +token #27 PHP_CURLY_CLOSE } +token #28 PHP_CONSTANT_ENCAPSED_STRING " +token #29 PHP_SEMICOLON ; +token #30 WHITESPACE \n\n +token #31 PHP_CLOSETAG ?> +token #32 T_INLINE_HTML \n--EXPECT--\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_009.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_009.pass deleted file mode 100644 index 33106495c32e..000000000000 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_009.pass +++ /dev/null @@ -1,35 +0,0 @@ -token #0 T_INLINE_HTML --TEST--\nTorture the T_END_NOWDOC rules (nowdoc)\n--FILE--\n -token #1 PHP_OPENTAG -token #34 T_INLINE_HTML \n--EXPECT--\nENDOFNOWDOC ;\n ENDOFNOWDOC;\nENDOFNOWDOC \n ENDOFNOWDOC\n$ENDOFNOWDOC;\nENDOFNOWDOC ;\n ENDOFNOWDOC;\nENDOFNOWDOC \n ENDOFNOWDOC\n$ENDOFNOWDOC;\n\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_010.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_010.pass deleted file mode 100644 index c9a51e05b181..000000000000 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_010.pass +++ /dev/null @@ -1,42 +0,0 @@ -token #0 T_INLINE_HTML --TEST--\nTorture the T_END_NOWDOC rules with variable expansions (nowdoc)\n--FILE--\n -token #1 PHP_OPENTAG -token #41 T_INLINE_HTML \n--EXPECT--\n{$fooledYou}ENDOFNOWDOC{$fooledYou}\nENDOFNOWDOC{$fooledYou}\n{$fooledYou}ENDOFNOWDOC\n{$fooledYou}ENDOFNOWDOC{$fooledYou}\nENDOFNOWDOC{$fooledYou}\n{$fooledYou}ENDOFNOWDOC\n\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_012.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_012.pass index ba140f340363..e371334c97b8 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_012.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_012.pass @@ -11,22 +11,19 @@ token #9 WHITESPACE token #10 PHP_OPERATOR = token #11 WHITESPACE token #12 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n -token #13 PHP_CONSTANT_ENCAPSED_STRING This is a nowdoc test.\nNOTREALLYEND; -token #14 PHP_CONSTANT_ENCAPSED_STRING \nAnother line\nNOTENDEITHER; -token #15 PHP_CONSTANT_ENCAPSED_STRING \nENDOFNOWDOCWILLBESOON -token #16 PHP_CONSTANT_ENCAPSED_STRING \nNow let's finish it\n -token #17 PHP_NOWDOC_TAG_END ENDOFNOWDOC -token #18 PHP_SEMICOLON ; -token #19 WHITESPACE \n -token #20 PHP_PRINT print -token #21 WHITESPACE -token #22 PHP_CONSTANT_ENCAPSED_STRING " -token #23 PHP_CURLY_OPEN { -token #24 PHP_VARIABLE $x -token #25 PHP_CURLY_CLOSE } -token #26 PHP_ENCAPSED_AND_WHITESPACE \n -token #27 PHP_CONSTANT_ENCAPSED_STRING " -token #28 PHP_SEMICOLON ; -token #29 WHITESPACE \n\n -token #30 PHP_CLOSETAG ?> -token #31 T_INLINE_HTML \n--EXPECT--\nThis is a nowdoc test.\nNOTREALLYEND;\nAnother line\nNOTENDEITHER;\nENDOFNOWDOCWILLBESOON\nNow let's finish it\n +token #13 PHP_CONSTANT_ENCAPSED_STRING This is a nowdoc test.\nNOTREALLYEND;\nAnother line\nNOTENDEITHER;\nENDOFNOWDOCWILLBESOON\nNow let's finish it\n +token #14 PHP_NOWDOC_TAG_END ENDOFNOWDOC +token #15 PHP_SEMICOLON ; +token #16 WHITESPACE \n +token #17 PHP_PRINT print +token #18 WHITESPACE +token #19 PHP_CONSTANT_ENCAPSED_STRING " +token #20 PHP_CURLY_OPEN { +token #21 PHP_VARIABLE $x +token #22 PHP_CURLY_CLOSE } +token #23 PHP_ENCAPSED_AND_WHITESPACE \n +token #24 PHP_CONSTANT_ENCAPSED_STRING " +token #25 PHP_SEMICOLON ; +token #26 WHITESPACE \n\n +token #27 PHP_CLOSETAG ?> +token #28 T_INLINE_HTML \n--EXPECT--\nThis is a nowdoc test.\nNOTREALLYEND;\nAnother line\nNOTENDEITHER;\nENDOFNOWDOCWILLBESOON\nNow let's finish it\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_013.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_013.pass index d51a90ccf35b..07ef356e6a75 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_013.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_013.pass @@ -6,38 +6,37 @@ token #4 WHITESPACE token #5 PHP_OPERATOR = token #6 WHITESPACE token #7 PHP_NOWDOC_TAG_START <<<'EOF'\n -token #8 PHP_CONSTANT_ENCAPSED_STRING \n -token #10 PHP_NOWDOC_TAG_END EOF -token #11 PHP_SEMICOLON ; -token #12 WHITESPACE \n -token #13 PHP_STRING highlight_string -token #14 PHP_TOKEN ( -token #15 PHP_VARIABLE $code -token #16 PHP_TOKEN ) -token #17 PHP_SEMICOLON ; -token #18 WHITESPACE \n -token #19 PHP_CLOSETAG ?> -token #20 T_INLINE_HTML \n--EXPECT--\n -token #21 T_INLINE_HTML < -token #22 T_INLINE_HTML code> -token #23 T_INLINE_HTML < -token #24 T_INLINE_HTML span style="color: #000000">\n -token #25 T_INLINE_HTML < -token #26 T_INLINE_HTML span style="color: #0000BB"><?php
  $x  -token #27 T_INLINE_HTML < -token #28 T_INLINE_HTML span style="color: #007700">= <<<'EOT'
-token #29 T_INLINE_HTML < -token #30 T_INLINE_HTML span style="color: #0000BB">some string    
-token #31 T_INLINE_HTML < -token #32 T_INLINE_HTML span style="color: #007700">EOT
   -token #33 T_INLINE_HTML < -token #34 T_INLINE_HTML span style="color: #0000BB">$y  -token #35 T_INLINE_HTML < -token #36 T_INLINE_HTML span style="color: #007700">=  -token #37 T_INLINE_HTML < -token #38 T_INLINE_HTML span style="color: #0000BB">2 -token #39 T_INLINE_HTML < -token #40 T_INLINE_HTML span style="color: #007700">;
-token #41 T_INLINE_HTML < -token #42 T_INLINE_HTML span style="color: #0000BB">?>\n\n\n +token #8 PHP_CONSTANT_ENCAPSED_STRING \n +token #9 PHP_NOWDOC_TAG_END EOF +token #10 PHP_SEMICOLON ; +token #11 WHITESPACE \n +token #12 PHP_STRING highlight_string +token #13 PHP_TOKEN ( +token #14 PHP_VARIABLE $code +token #15 PHP_TOKEN ) +token #16 PHP_SEMICOLON ; +token #17 WHITESPACE \n +token #18 PHP_CLOSETAG ?> +token #19 T_INLINE_HTML \n--EXPECT--\n +token #20 T_INLINE_HTML < +token #21 T_INLINE_HTML code> +token #22 T_INLINE_HTML < +token #23 T_INLINE_HTML span style="color: #000000">\n +token #24 T_INLINE_HTML < +token #25 T_INLINE_HTML span style="color: #0000BB"><?php
  $x  +token #26 T_INLINE_HTML < +token #27 T_INLINE_HTML span style="color: #007700">= <<<'EOT'
+token #28 T_INLINE_HTML < +token #29 T_INLINE_HTML span style="color: #0000BB">some string    
+token #30 T_INLINE_HTML < +token #31 T_INLINE_HTML span style="color: #007700">EOT
   +token #32 T_INLINE_HTML < +token #33 T_INLINE_HTML span style="color: #0000BB">$y  +token #34 T_INLINE_HTML < +token #35 T_INLINE_HTML span style="color: #007700">=  +token #36 T_INLINE_HTML < +token #37 T_INLINE_HTML span style="color: #0000BB">2 +token #38 T_INLINE_HTML < +token #39 T_INLINE_HTML span style="color: #007700">;
+token #40 T_INLINE_HTML < +token #41 T_INLINE_HTML span style="color: #0000BB">?>\n\n\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_014.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_014.pass index 5d556ff0ad6e..4451ee65ff2c 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_014.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_014.pass @@ -6,38 +6,37 @@ token #4 WHITESPACE token #5 PHP_OPERATOR = token #6 WHITESPACE token #7 PHP_NOWDOC_TAG_START <<<'EOF'\n -token #8 PHP_CONSTANT_ENCAPSED_STRING \n -token #10 PHP_NOWDOC_TAG_END EOF -token #11 PHP_SEMICOLON ; -token #12 WHITESPACE \n -token #13 PHP_STRING highlight_string -token #14 PHP_TOKEN ( -token #15 PHP_VARIABLE $code -token #16 PHP_TOKEN ) -token #17 PHP_SEMICOLON ; -token #18 WHITESPACE \n -token #19 PHP_CLOSETAG ?> -token #20 T_INLINE_HTML \n--EXPECT--\n -token #21 T_INLINE_HTML < -token #22 T_INLINE_HTML code> -token #23 T_INLINE_HTML < -token #24 T_INLINE_HTML span style="color: #000000">\n -token #25 T_INLINE_HTML < -token #26 T_INLINE_HTML span style="color: #0000BB"><?php
  $x  -token #27 T_INLINE_HTML < -token #28 T_INLINE_HTML span style="color: #007700">= <<<'EOT'
-token #29 T_INLINE_HTML < -token #30 T_INLINE_HTML span style="color: #0000BB"> -token #31 T_INLINE_HTML < -token #32 T_INLINE_HTML span style="color: #007700">EOT
   -token #33 T_INLINE_HTML < -token #34 T_INLINE_HTML span style="color: #0000BB">$y  -token #35 T_INLINE_HTML < -token #36 T_INLINE_HTML span style="color: #007700">=  -token #37 T_INLINE_HTML < -token #38 T_INLINE_HTML span style="color: #0000BB">2 -token #39 T_INLINE_HTML < -token #40 T_INLINE_HTML span style="color: #007700">;
-token #41 T_INLINE_HTML < -token #42 T_INLINE_HTML span style="color: #0000BB">?>\n\n\n +token #8 PHP_CONSTANT_ENCAPSED_STRING \n +token #9 PHP_NOWDOC_TAG_END EOF +token #10 PHP_SEMICOLON ; +token #11 WHITESPACE \n +token #12 PHP_STRING highlight_string +token #13 PHP_TOKEN ( +token #14 PHP_VARIABLE $code +token #15 PHP_TOKEN ) +token #16 PHP_SEMICOLON ; +token #17 WHITESPACE \n +token #18 PHP_CLOSETAG ?> +token #19 T_INLINE_HTML \n--EXPECT--\n +token #20 T_INLINE_HTML < +token #21 T_INLINE_HTML code> +token #22 T_INLINE_HTML < +token #23 T_INLINE_HTML span style="color: #000000">\n +token #24 T_INLINE_HTML < +token #25 T_INLINE_HTML span style="color: #0000BB"><?php
  $x  +token #26 T_INLINE_HTML < +token #27 T_INLINE_HTML span style="color: #007700">= <<<'EOT'
+token #28 T_INLINE_HTML < +token #29 T_INLINE_HTML span style="color: #0000BB"> +token #30 T_INLINE_HTML < +token #31 T_INLINE_HTML span style="color: #007700">EOT
   +token #32 T_INLINE_HTML < +token #33 T_INLINE_HTML span style="color: #0000BB">$y  +token #34 T_INLINE_HTML < +token #35 T_INLINE_HTML span style="color: #007700">=  +token #36 T_INLINE_HTML < +token #37 T_INLINE_HTML span style="color: #0000BB">2 +token #38 T_INLINE_HTML < +token #39 T_INLINE_HTML span style="color: #007700">;
+token #40 T_INLINE_HTML < +token #41 T_INLINE_HTML span style="color: #0000BB">?>\n\n\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_015.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_015.pass index b9b165446354..2c29bfb82f3f 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_015.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_015.pass @@ -74,128 +74,131 @@ token #72 WHITESPACE token #73 PHP_OPERATOR = token #74 WHITESPACE token #75 PHP_NOWDOC_TAG_START <<<'EOF'\n -token #76 PHP_NOWDOC_TAG_END EOF;\n -token #77 PHP_STRING var_dump -token #78 PHP_TOKEN ( -token #79 PHP_VARIABLE $x -token #80 PHP_TOKEN ) -token #81 PHP_SEMICOLON ; -token #82 WHITESPACE \n -token #83 PHP_STRING trigger_error -token #84 PHP_TOKEN ( -token #85 PHP_CONSTANT_ENCAPSED_STRING "line" -token #86 PHP_TOKEN , -token #87 WHITESPACE -token #88 PHP_STRING E_USER_ERROR -token #89 PHP_TOKEN ) -token #90 PHP_SEMICOLON ; -token #91 WHITESPACE \n -token #92 PHP_VARIABLE $x -token #93 WHITESPACE -token #94 PHP_OPERATOR = +token #76 PHP_NOWDOC_TAG_END EOF +token #77 PHP_SEMICOLON ; +token #78 WHITESPACE \n +token #79 PHP_STRING var_dump +token #80 PHP_TOKEN ( +token #81 PHP_VARIABLE $x +token #82 PHP_TOKEN ) +token #83 PHP_SEMICOLON ; +token #84 WHITESPACE \n +token #85 PHP_STRING trigger_error +token #86 PHP_TOKEN ( +token #87 PHP_CONSTANT_ENCAPSED_STRING "line" +token #88 PHP_TOKEN , +token #89 WHITESPACE +token #90 PHP_STRING E_USER_ERROR +token #91 PHP_TOKEN ) +token #92 PHP_SEMICOLON ; +token #93 WHITESPACE \n +token #94 PHP_VARIABLE $x token #95 WHITESPACE -token #96 PHP_HEREDOC_TAG_START << -token #200 T_INLINE_HTML \n--EXPECT--\n6\nstring(0) ""\n10\nstring(0) ""\n14\nstring(4) "test"\n19\nstring(4) "test"\n24\nstring(20) "test1\ntest2\n\ntest3\n\n"\n34\nstring(20) "test1\ntest2\n\ntest3\n\n"\n44\nok\n +token #169 PHP_STRING E_USER_ERROR +token #170 PHP_TOKEN ) +token #171 PHP_SEMICOLON ; +token #172 WHITESPACE \n +token #173 PHP_VARIABLE $x +token #174 WHITESPACE +token #175 PHP_OPERATOR = +token #176 WHITESPACE +token #177 PHP_NOWDOC_TAG_START <<<'EOF'\n +token #178 PHP_CONSTANT_ENCAPSED_STRING test1\ntest2\n\ntest3\n\n\n +token #179 PHP_NOWDOC_TAG_END EOF +token #180 PHP_SEMICOLON ; +token #181 WHITESPACE \n +token #182 PHP_STRING var_dump +token #183 PHP_TOKEN ( +token #184 PHP_VARIABLE $x +token #185 PHP_TOKEN ) +token #186 PHP_SEMICOLON ; +token #187 WHITESPACE \n +token #188 PHP_STRING trigger_error +token #189 PHP_TOKEN ( +token #190 PHP_CONSTANT_ENCAPSED_STRING "line" +token #191 PHP_TOKEN , +token #192 WHITESPACE +token #193 PHP_STRING E_USER_ERROR +token #194 PHP_TOKEN ) +token #195 PHP_SEMICOLON ; +token #196 WHITESPACE \n +token #197 PHP_ECHO echo +token #198 WHITESPACE +token #199 PHP_CONSTANT_ENCAPSED_STRING "ok\n" +token #200 PHP_SEMICOLON ; +token #201 WHITESPACE \n +token #202 PHP_CLOSETAG ?> +token #203 T_INLINE_HTML \n--EXPECT--\n6\nstring(0) ""\n10\nstring(0) ""\n14\nstring(4) "test"\n19\nstring(4) "test"\n24\nstring(20) "test1\ntest2\n\ntest3\n\n"\n34\nstring(20) "test1\ntest2\n\ntest3\n\n"\n44\nok\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_01.pass new file mode 100644 index 000000000000..1a769b5fb52f --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_01.pass @@ -0,0 +1,26 @@ +token #0 PHP_OPENTAG +token #22 PHP_ENCAPSED_AND_WHITESPACE \nMy age is: +token #23 PHP_VARIABLE $age +token #24 PHP_CONSTANT_ENCAPSED_STRING
+token #25 PHP_CONSTANT_ENCAPSED_STRING \n +token #26 PHP_HEREDOC_TAG_END HEREDOC +token #27 PHP_SEMICOLON ; +token #28 WHITESPACE \n +token #29 PHP_VARIABLE $name +token #30 PHP_OPERATOR = +token #31 PHP_CONSTANT_ENCAPSED_STRING "Jun" +token #32 PHP_SEMICOLON ; +token #33 WHITESPACE \n\n +token #34 PHP_LINE_COMMENT // +token #35 PHP_LINE_COMMENT defferent indentation for body(spaces) ending marker(tabs)\n +token #36 PHP_LINE_COMMENT // +token #37 PHP_LINE_COMMENT allow this in the lexer but spaces and tabs MUST NOT be intermixed\n +token #38 PHP_VARIABLE $x +token #39 WHITESPACE +token #40 PHP_OPERATOR = +token #41 WHITESPACE +token #42 PHP_HEREDOC_TAG_START << +token #58 PHP_STRING field +token #59 PHP_CONSTANT_ENCAPSED_STRING \n +token #60 PHP_HEREDOC_TAG_END \t\tENDOFHEREDOC +token #61 PHP_SEMICOLON ; +token #62 WHITESPACE \n\n +token #63 PHP_LINE_COMMENT // +token #64 PHP_LINE_COMMENT body(tabs) ending marker(spaces)\n +token #65 PHP_VARIABLE $y +token #66 WHITESPACE +token #67 PHP_OPERATOR = +token #68 WHITESPACE +token #69 PHP_HEREDOC_TAG_START << +token #85 PHP_STRING field +token #86 PHP_CONSTANT_ENCAPSED_STRING \n +token #87 PHP_HEREDOC_TAG_END ENDOFHEREDOC +token #88 PHP_SEMICOLON ; +token #89 WHITESPACE \n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_03.pass new file mode 100644 index 000000000000..54676cfe9f10 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_03.pass @@ -0,0 +1,39 @@ +token #0 PHP_OPENTAG \nMy age is: $age
\n +token #20 PHP_NOWDOC_TAG_END NOWDOC +token #21 PHP_SEMICOLON ; +token #22 WHITESPACE \n +token #23 PHP_VARIABLE $name +token #24 PHP_OPERATOR = +token #25 PHP_CONSTANT_ENCAPSED_STRING "Jun" +token #26 PHP_SEMICOLON ; +token #27 WHITESPACE \n\n +token #28 PHP_LINE_COMMENT // +token #29 PHP_LINE_COMMENT defferent indentation for body(spaces) ending marker(tabs)\n +token #30 PHP_LINE_COMMENT // +token #31 PHP_LINE_COMMENT allow this in the lexer but spaces and tabs MUST NOT be intermixed\n +token #32 PHP_VARIABLE $x +token #33 WHITESPACE +token #34 PHP_OPERATOR = +token #35 WHITESPACE +token #36 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n +token #37 PHP_CONSTANT_ENCAPSED_STRING This is another nowdoc test.\n With another line in it. {$test} $test ${test} variable test.\n test. $object->field\n +token #38 PHP_NOWDOC_TAG_END \t\tENDOFNOWDOC +token #39 PHP_SEMICOLON ; +token #40 WHITESPACE \n\n +token #41 PHP_LINE_COMMENT // +token #42 PHP_LINE_COMMENT body(tabs) ending marker(spaces)\n +token #43 PHP_VARIABLE $y +token #44 WHITESPACE +token #45 PHP_OPERATOR = +token #46 WHITESPACE +token #47 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n +token #48 PHP_CONSTANT_ENCAPSED_STRING \t\tThis is another nowdoc test.\n\t\tWith another line in it. {$test} $test ${test} variable test.\n\t\ttest. $object->field\n +token #49 PHP_NOWDOC_TAG_END ENDOFNOWDOC +token #50 PHP_SEMICOLON ; +token #51 WHITESPACE \n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_03.pass new file mode 100644 index 000000000000..c1d137a42e52 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_03.pass @@ -0,0 +1,23 @@ +token #0 PHP_OPENTAG token #18 PHP_ENCAPSED_AND_WHITESPACE \nMy age is: token #19 PHP_VARIABLE $age token #20 PHP_CONSTANT_ENCAPSED_STRING
-token #21 PHP_HEREDOC_TAG_END \nHEREDOC -token #22 PHP_SEMICOLON ; -token #23 WHITESPACE \n -token #24 PHP_VARIABLE $name -token #25 PHP_OPERATOR = -token #26 PHP_CONSTANT_ENCAPSED_STRING "Honza" -token #27 PHP_SEMICOLON ; -token #28 WHITESPACE \n\n -token #29 PHP_VARIABLE $x -token #30 WHITESPACE -token #31 PHP_OPERATOR = -token #32 WHITESPACE -token #33 PHP_HEREDOC_TAG_START <<\n +token #43 PHP_OPERATOR = +token #44 WHITESPACE +token #45 PHP_HEREDOC_TAG_START <<\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_02.pass index a86a636535ac..53b4372a9152 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_02.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_02.pass @@ -5,8 +5,9 @@ token #3 WHITESPACE token #4 PHP_HEREDOC_TAG_START << -token #11 T_INLINE_HTML \n +token #7 PHP_CONSTANT_ENCAPSED_STRING \n +token #8 PHP_HEREDOC_TAG_END ABC +token #9 PHP_SEMICOLON ; +token #10 WHITESPACE \n +token #11 PHP_CLOSETAG ?> +token #12 T_INLINE_HTML \n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_03.pass index 8237f26689e0..34f85c7ae610 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_03.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_03.pass @@ -5,11 +5,12 @@ token #3 WHITESPACE token #4 PHP_HEREDOC_TAG_START <<\n +token #7 PHP_CONSTANT_ENCAPSED_STRING \n +token #8 PHP_HEREDOC_TAG_END HERE +token #9 WHITESPACE \n +token #10 PHP_TOKEN . +token #11 WHITESPACE +token #12 PHP_CONSTANT_ENCAPSED_STRING " where foo = bar" +token #13 PHP_SEMICOLON ; +token #14 WHITESPACE \n +token #15 PHP_CLOSETAG ?>\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue221484.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue221484.pass index cd16a2a4fc16..a5a129cf71f3 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue221484.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue221484.pass @@ -5,7 +5,8 @@ token #3 WHITESPACE token #4 PHP_HEREDOC_TAG_START <<\n +token #7 PHP_CONSTANT_ENCAPSED_STRING \n +token #8 PHP_HEREDOC_TAG_END ABC +token #9 PHP_SEMICOLON ; +token #10 WHITESPACE \n\n +token #11 PHP_CLOSETAG ?>\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_01.pass index 11fe4ff8f96f..ad650d623ca6 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_01.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_01.pass @@ -6,7 +6,8 @@ token #4 PHP_OPERATOR = token #5 WHITESPACE token #6 PHP_HEREDOC_TAG_START <<\n +token #8 PHP_CONSTANT_ENCAPSED_STRING \n +token #9 PHP_HEREDOC_TAG_END EOD +token #10 PHP_SEMICOLON ; +token #11 WHITESPACE \n\n +token #12 PHP_CLOSETAG ?>\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_02.pass index 53562925d0ca..8077249fc8e8 100644 --- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_02.pass +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_02.pass @@ -6,7 +6,8 @@ token #4 PHP_OPERATOR = token #5 WHITESPACE token #6 PHP_HEREDOC_TAG_START <<\n +token #8 PHP_CONSTANT_ENCAPSED_STRING \n +token #9 PHP_HEREDOC_TAG_END EOD +token #10 PHP_SEMICOLON ; +token #11 WHITESPACE \n\n +token #12 PHP_CLOSETAG ?>\n diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/functionCallTrailingCommas_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/functionCallTrailingCommas_01.pass similarity index 100% rename from php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/functionCallTrailingCommas_01.pass rename to php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/functionCallTrailingCommas_01.pass diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_01.pass new file mode 100644 index 000000000000..3e1b3428bdec --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_01.pass @@ -0,0 +1,73 @@ + + + + class + + + Foo + + + { + + + public + + + $test + + + = + + + <<< HEREDOC\n + + + spaces indentation\n + + + HEREDOC + + + ; + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_02.pass new file mode 100644 index 000000000000..e3bfece96281 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_02.pass @@ -0,0 +1,69 @@ + + + + class + + + Foo + + + { + + + public + + + $test + + + = + + + <<< HEREDOC\n + + + HEREDOC + + + ; + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_03.pass new file mode 100644 index 000000000000..955345aef2ce --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_03.pass @@ -0,0 +1,68 @@ + + + + $array + + + = + + + [ + + + <<< HEREDOC\n + + + HEREDOC + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_04.pass new file mode 100644 index 000000000000..e9a6457d3c8c --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_04.pass @@ -0,0 +1,68 @@ + + + + $array + + + = + + + [ + + + <<< HEREDOC\n + + + HEREDOC + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_01.pass new file mode 100644 index 000000000000..7d6d77b26a4a --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_01.pass @@ -0,0 +1,73 @@ + + + + class + + + Foo + + + { + + + public + + + $test + + + = + + + <<< HEREDOC\n + + + \ttab indentation\n\t + + + HEREDOC + + + ; + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_02.pass new file mode 100644 index 000000000000..2ab20f9105ea --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_02.pass @@ -0,0 +1,69 @@ + + + + class + + + Foo + + + { + + + public + + + $test + + + = + + + <<< HEREDOC\n + + + HEREDOC + + + ; + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_03.pass new file mode 100644 index 000000000000..13330222827a --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_03.pass @@ -0,0 +1,68 @@ + + + + $array + + + = + + + [ + + + <<< HEREDOC\n + + + HEREDOC + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_01.pass new file mode 100644 index 000000000000..57a06bae5b9f --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_01.pass @@ -0,0 +1,319 @@ + + + + $array + + + = + + + [ + + + <<< END\n + + + spaces\n\ttabs\nnospaces\n \tspaces tabs\n\t\t tabs spaces\n + + + END + + + , + + + $test + + + ] + + + ; + + + $array2 + + + = + + + [ + + + <<< END\n + + + spaces\n\ttabs\n \tspaces tabs\n\t\t tabs spaces\n + + + END + + + , + + + $test + + + [ + + + 0 + + + ] + + + ] + + + ; + + + $array3 + + + = + + + [ + + + <<< END\n + + + + + + $test + + + \n spaces + + + $test + + + \n\ttabs + + + { + + + $test + + + } + + + \n spaces tabs + + + ${ + + + test + + + } + + + \n + + + $test + + + \n\t\t tabs spaces\nnospaces test\n + + + END + + + , + + + $ + + + { + + + test + + + } + + + ] + + + ; + + + $test + + + = + + + <<< END\n + + + \t spaces tabs spaces\n \t + + + END + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_02.pass new file mode 100644 index 000000000000..913b02a1f082 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_02.pass @@ -0,0 +1,317 @@ + + + + $name + + + = + + + "Junichi" + + + ; + + + $age + + + = + + + 100 + + + ; + + + echo + + + <<<HEREDOC\n + + + Name: + + + $name + + + <br>\nMy age is: + + + $age + + + <br>\n + + + HEREDOC + + + ; + + + $name + + + = + + + "Jun" + + + ; + + + $x + + + = + + + <<<ENDOFHEREDOC\n + + + This is another heredoc test.\n With another line in it. + + + { + + + $test + + + } + + + + + + $test + + + + + + ${ + + + test + + + } + + + variable test.\n test. + + + $object + + + -> + + + field + + + \n\t\t + + + ENDOFHEREDOC + + + ; + + + $y + + + = + + + <<<ENDOFHEREDOC\n + + + \t\tThis is another heredoc test.\n\t\tWith another line in it. + + + { + + + $test + + + } + + + + + + $test + + + + + + ${ + + + test + + + } + + + variable test.\n\t\ttest. + + + $object + + + -> + + + field + + + \n + + + ENDOFHEREDOC + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_03.pass new file mode 100644 index 000000000000..6e1e372a5d13 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_03.pass @@ -0,0 +1,149 @@ + + + + $array + + + = + + + [ + + + <<< END\n + + + + + + $test + + + \n spaces + + + $test + + + \n\ttabs + + + { + + + $test + + + } + + + \n spaces tabs + + + ${ + + + test + + + } + + + \n + + + $test + + + \n\t\t tabs spaces\nnospaces test\n + + + END + + + , + + + $ + + + { + + + test + + + } + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_01.pass new file mode 100644 index 000000000000..c77830a612bc --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_01.pass @@ -0,0 +1,109 @@ + + + + test + + + ( + + + <<< HEREDOC\n + + + foo\n bar\nqux\n + + + HEREDOC + + + ) + + + ; + + + $array + + + = + + + [ + + + <<< END\n + + + foo\nbar\nbaz\n + + + END + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_02.pass new file mode 100644 index 000000000000..6f2cfc64c36a --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_02.pass @@ -0,0 +1,72 @@ + + + + $array + + + = + + + [ + + + <<< END\n + + + foo\nbar\nENDING\n + + + END + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_03.pass new file mode 100644 index 000000000000..10c07890e3d4 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_03.pass @@ -0,0 +1,72 @@ + + + + $array + + + = + + + [ + + + <<< END\n + + + foo END\n bar\n ENDING\n + + + END + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_04.pass new file mode 100644 index 000000000000..fec91b2a5241 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_04.pass @@ -0,0 +1,82 @@ + + + + $array + + + = + + + [ + + + <<< END\n + + + foo END\n + + + $test + + + bar\n ENDING\n + + + END + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/listReferenceAssignment_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/listReferenceAssignment_01.pass similarity index 100% rename from php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/listReferenceAssignment_01.pass rename to php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/listReferenceAssignment_01.pass diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_01.pass new file mode 100644 index 000000000000..29aa83e0aafb --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_01.pass @@ -0,0 +1,69 @@ + + + + class + + + Foo + + + { + + + public + + + $test + + + = + + + <<< 'NOWDOC'\n + + + spaces indentation\n + + + NOWDOC + + + ; + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_02.pass new file mode 100644 index 000000000000..e817ad9f20d8 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_02.pass @@ -0,0 +1,66 @@ + + + + class + + + Foo + + + { + + + public + + + $test + + + = + + + <<< 'NOWDOC'\n + + + NOWDOC + + + ; + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_03.pass new file mode 100644 index 000000000000..c737e957d79c --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_03.pass @@ -0,0 +1,65 @@ + + + + $array + + + = + + + [ + + + <<< 'NOWDOC'\n + + + NOWDOC + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_04.pass new file mode 100644 index 000000000000..ade3ba72e5aa --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_04.pass @@ -0,0 +1,65 @@ + + + + $array + + + = + + + [ + + + <<< 'NOWDOC'\n + + + NOWDOC + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_01.pass new file mode 100644 index 000000000000..0d533e46afa4 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_01.pass @@ -0,0 +1,69 @@ + + + + class + + + Foo + + + { + + + public + + + $test + + + = + + + <<< 'NOWDOC'\n + + + \ttab indentation\n + + + \tNOWDOC + + + ; + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_02.pass new file mode 100644 index 000000000000..1d38aa040ea8 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_02.pass @@ -0,0 +1,66 @@ + + + + class + + + Foo + + + { + + + public + + + $test + + + = + + + <<< 'NOWDOC'\n + + + \tNOWDOC + + + ; + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_03.pass new file mode 100644 index 000000000000..a1160e0637d3 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_03.pass @@ -0,0 +1,65 @@ + + + + $array + + + = + + + [ + + + <<< 'NOWDOC'\n + + + \tNOWDOC + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_01.pass new file mode 100644 index 000000000000..0fae0d3f8b49 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_01.pass @@ -0,0 +1,239 @@ + + + + $array + + + = + + + [ + + + <<< 'END'\n + + + spaces\n\ttabs\nnospaces\n \tspaces tabs\n\t\t tabs spaces\n + + + END + + + , + + + $test + + + ] + + + ; + + + $array2 + + + = + + + [ + + + <<< 'END'\n + + + spaces\n\ttabs\n \tspaces tabs\n\t\t tabs spaces\n + + + END + + + , + + + $test + + + [ + + + 0 + + + ] + + + ] + + + ; + + + $array3 + + + = + + + [ + + + <<< 'END'\n + + + $test\n spaces $test\n\ttabs {$test}\n spaces tabs ${test}\n$test\n\t\t tabs spaces\nnospaces test\n + + + END + + + , + + + $ + + + { + + + test + + + } + + + ] + + + ; + + + $test + + + = + + + <<< 'END'\n + + + \t spaces tabs spaces\n + + + \tEND + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_02.pass new file mode 100644 index 000000000000..489b3f13ddae --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_02.pass @@ -0,0 +1,151 @@ + + + + $name + + + = + + + "Junichi" + + + ; + + + $age + + + = + + + 100 + + + ; + + + echo + + + <<<'NOWDOC'\n + + + Name: $name<br>\nMy age is: $age<br>\n + + + NOWDOC + + + ; + + + $name + + + = + + + "Jun" + + + ; + + + $x + + + = + + + <<<'ENDOFNOWDOC'\n + + + This is another nowdoc test.\n With another line in it. {$test} $test ${test} variable test.\n test. $object->field\n + + + \t\tENDOFNOWDOC + + + ; + + + $y + + + = + + + <<<'ENDOFNOWDOC'\n + + + \t\tThis is another nowdoc test.\n\t\tWith another line in it. {$test} $test ${test} variable test.\n\t\ttest. $object->field\n + + + ENDOFNOWDOC + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_03.pass new file mode 100644 index 000000000000..578fb2b5d43d --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_03.pass @@ -0,0 +1,81 @@ + + + + $array + + + = + + + [ + + + <<< 'END'\n + + + $test\n spaces $test\n\ttabs {$test}\n spaces tabs ${test}\n$test\n\t\t tabs spaces\nnospaces test\n + + + END + + + , + + + $ + + + { + + + test + + + } + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_01.pass new file mode 100644 index 000000000000..4b40d141af27 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_01.pass @@ -0,0 +1,101 @@ + + + + test + + + ( + + + <<< 'NOWDOC'\n + + + foo\n bar\nqux\n + + + NOWDOC + + + ) + + + ; + + + $array + + + = + + + [ + + + <<< 'END'\n + + + foo\nbar\nbaz\n + + + END + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_02.pass new file mode 100644 index 000000000000..7b96f772cc2d --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_02.pass @@ -0,0 +1,68 @@ + + + + $array + + + = + + + [ + + + <<< 'END'\n + + + foo\nbar\nENDING\n + + + END + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_03.pass new file mode 100644 index 000000000000..a64601897e74 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_03.pass @@ -0,0 +1,68 @@ + + + + $array + + + = + + + [ + + + <<< 'END'\n + + + foo END\n bar\n ENDING\n + + + END + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_04.pass new file mode 100644 index 000000000000..2d5198d630b9 --- /dev/null +++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_04.pass @@ -0,0 +1,68 @@ + + + + $array + + + = + + + [ + + + <<< 'END'\n + + + foo END\n $test bar\n ENDING\n + + + END + + + , + + + 'qux' + + + ] + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php.editor/test/unit/data/testfiles/formatting/flexibleHeredoc_01.php b/php/php.editor/test/unit/data/testfiles/formatting/flexibleHeredoc_01.php new file mode 100644 index 000000000000..fcdc5331bfca --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/formatting/flexibleHeredoc_01.php @@ -0,0 +1,49 @@ + +My age is: $age
+HEREDOC; +$name="Jun"; + +// defferent indentation for body(spaces) ending marker(tabs) +// allow this in the lexer but spaces and tabs MUST NOT be intermixed +$x = <<field + ENDOFHEREDOC; + +// body(tabs) ending marker(spaces) +$y = <<field + ENDOFHEREDOC; diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_03.php new file mode 100644 index 000000000000..21eb41e7bcad --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_03.php @@ -0,0 +1,29 @@ + +My age is: $age
+NOWDOC; +$name="Jun"; + +// defferent indentation for body(spaces) ending marker(tabs) +// allow this in the lexer but spaces and tabs MUST NOT be intermixed +$x = <<<'ENDOFNOWDOC' + This is another nowdoc test. + With another line in it. {$test} $test ${test} variable test. + test. $object->field + ENDOFNOWDOC; + +// body(tabs) ending marker(spaces) +$y = <<<'ENDOFNOWDOC' + This is another nowdoc test. + With another line in it. {$test} $test ${test} variable test. + test. $object->field + ENDOFNOWDOC; diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_03.php new file mode 100644 index 000000000000..2c60e758c89a --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_03.php @@ -0,0 +1,29 @@ + ---EXPECTF-- -Notice: Undefined variable: ENDOFHEREDOC in %s on line %d -ENDOFHEREDOC ; - ENDOFHEREDOC; -ENDOFHEREDOC - ENDOFHEREDOC -; - -Notice: Undefined variable: ENDOFHEREDOC in %s on line %d -ENDOFHEREDOC ; - ENDOFHEREDOC; -ENDOFHEREDOC - ENDOFHEREDOC -; diff --git a/php/php.editor/test/unit/data/testfiles/parser/heredoc_010.php b/php/php.editor/test/unit/data/testfiles/parser/heredoc_010.php deleted file mode 100644 index 5aa0433bcff7..000000000000 --- a/php/php.editor/test/unit/data/testfiles/parser/heredoc_010.php +++ /dev/null @@ -1,32 +0,0 @@ ---TEST-- -Torture the T_END_HEREDOC rules with variable expansions (heredoc) ---FILE-- - ---EXPECT-- -ENDOFHEREDOC -ENDOFHEREDOC -ENDOFHEREDOC -ENDOFHEREDOC -ENDOFHEREDOC -ENDOFHEREDOC diff --git a/php/php.editor/test/unit/data/testfiles/parser/nowdoc_009.php b/php/php.editor/test/unit/data/testfiles/parser/nowdoc_009.php deleted file mode 100644 index ec8b78f010c8..000000000000 --- a/php/php.editor/test/unit/data/testfiles/parser/nowdoc_009.php +++ /dev/null @@ -1,40 +0,0 @@ ---TEST-- -Torture the T_END_NOWDOC rules (nowdoc) ---FILE-- - ---EXPECT-- -ENDOFNOWDOC ; - ENDOFNOWDOC; -ENDOFNOWDOC - ENDOFNOWDOC -$ENDOFNOWDOC; -ENDOFNOWDOC ; - ENDOFNOWDOC; -ENDOFNOWDOC - ENDOFNOWDOC -$ENDOFNOWDOC; - diff --git a/php/php.editor/test/unit/data/testfiles/parser/nowdoc_010.php b/php/php.editor/test/unit/data/testfiles/parser/nowdoc_010.php deleted file mode 100644 index 6f288151ce93..000000000000 --- a/php/php.editor/test/unit/data/testfiles/parser/nowdoc_010.php +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -Torture the T_END_NOWDOC rules with variable expansions (nowdoc) ---FILE-- - ---EXPECT-- -{$fooledYou}ENDOFNOWDOC{$fooledYou} -ENDOFNOWDOC{$fooledYou} -{$fooledYou}ENDOFNOWDOC -{$fooledYou}ENDOFNOWDOC{$fooledYou} -ENDOFNOWDOC{$fooledYou} -{$fooledYou}ENDOFNOWDOC - diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_01.php similarity index 100% rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_01.php rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_01.php diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_01.php.errors similarity index 100% rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_01.php.errors rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_01.php.errors diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_02.php similarity index 100% rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_02.php rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_02.php diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_02.php.errors similarity index 100% rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_02.php.errors rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_02.php.errors diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_03.php similarity index 100% rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_03.php rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_03.php diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_03.php.errors similarity index 100% rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_03.php.errors rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_03.php.errors diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_04.php b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_04.php similarity index 100% rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_04.php rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_04.php diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_04.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_04.php.errors similarity index 100% rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_04.php.errors rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_04.php.errors diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_01.php new file mode 100644 index 000000000000..eaa2308a7a1e --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_01.php @@ -0,0 +1,26 @@ + +My age is: $age
+HEREDOC; +$name="Jun"; + +// defferent indentation for body(spaces) ending marker(tabs) +// allow this in the lexer but spaces and tabs MUST NOT be intermixed +$x = <<field + ENDOFHEREDOC; + +// body(tabs) ending marker(spaces) +$y = <<field + ENDOFHEREDOC; diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_02.php.errors new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_02.php.errors @@ -0,0 +1 @@ + diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_03.php new file mode 100644 index 000000000000..21eb41e7bcad --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_03.php @@ -0,0 +1,29 @@ +, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??] 865-868:Syntax error + unexpected: identifier 'ING' + after: END_HEREDOC + expected: instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ?? +[[869,872]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: identifier 'END'] 869-872:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: identifier 'END' +[[872,873]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ','] 872-873:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ',' +[[879,880]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ]] 879-880:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ] diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_02.php new file mode 100644 index 000000000000..f2891f02f7e9 --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_02.php @@ -0,0 +1,25 @@ +, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??] 864-865:Syntax error + unexpected: { + after: END_HEREDOC + expected: instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ?? +[[870,871]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: }] 870-871:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: } +[[875,876]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ','] 875-876:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ',' +[[882,883]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ]] 882-883:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ] diff --git a/php/php.editor/test/unit/data/testfiles/parser/listReferenceAssignment_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php similarity index 100% rename from php/php.editor/test/unit/data/testfiles/parser/listReferenceAssignment_01.php rename to php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php.errors new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php.errors @@ -0,0 +1 @@ + diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_01.php new file mode 100644 index 000000000000..eb89827d1956 --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_01.php @@ -0,0 +1,26 @@ + +My age is: $age
+NOWDOC; +$name="Jun"; + +// defferent indentation for body(spaces) ending marker(tabs) +// allow this in the lexer but spaces and tabs MUST NOT be intermixed +$x = <<<'ENDOFNOWDOC' + This is another nowdoc test. + With another line in it. {$test} $test ${test} variable test. + test. $object->field + ENDOFNOWDOC; + +// body(tabs) ending marker(spaces) +$y = <<<'ENDOFNOWDOC' + This is another nowdoc test. + With another line in it. {$test} $test ${test} variable test. + test. $object->field + ENDOFNOWDOC; diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_02.php.errors new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_02.php.errors @@ -0,0 +1 @@ + diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_03.php new file mode 100644 index 000000000000..2c60e758c89a --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_03.php @@ -0,0 +1,29 @@ +, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??] 867-870:Syntax error + unexpected: identifier 'ING' + after: END_NOWDOC + expected: instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ?? +[[871,874]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: identifier 'END'] 871-874:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: identifier 'END' +[[874,875]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ','] 874-875:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ',' +[[881,882]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ]] 881-882:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ] diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_02.php new file mode 100644 index 000000000000..05d5139efae8 --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_02.php @@ -0,0 +1,25 @@ +, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??] 866-867:Syntax error + unexpected: { + after: END_NOWDOC + expected: instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ?? +[[872,873]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: }] 872-873:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: } +[[877,878]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ','] 877-878:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ',' +[[884,885]-POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ]] 884-885:POSSIBLE Syntax Error (check preceding valid syntax error) + unexpected: ] diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterTest.java index cb2ef9afabf3..642974c48fa4 100644 --- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterTest.java +++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterTest.java @@ -780,4 +780,15 @@ public void testIssue271062() throws Exception { reformatFileContents("testfiles/formatting/issue271062.php", options); } + // PHP 7.3 + public void testFlexibleHeredoc_01() throws Exception { + HashMap options = new HashMap<>(FmtOptions.getDefaults()); + reformatFileContents("testfiles/formatting/flexibleHeredoc_01.php", options); + } + + public void testFlexibleNowdoc_01() throws Exception { + HashMap options = new HashMap<>(FmtOptions.getDefaults()); + reformatFileContents("testfiles/formatting/flexibleNowdoc_01.php", options); + } + } diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest.java index 845a83926be2..00edfc3c2b9e 100644 --- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest.java +++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest.java @@ -127,13 +127,9 @@ public void testNowDoc_08() throws Exception { performTest("lexer/nowdoc_008"); } - public void testNowDoc_09() throws Exception { - performTest("lexer/nowdoc_009"); - } - - public void testNowDoc_10() throws Exception { - performTest("lexer/nowdoc_010"); - } + // 09, 10: old syntax tests + // we don't provide support for them any longer + // we can use the new syntax since PHP 7.3 public void testNowDoc_11() throws Exception { performTest("lexer/nowdoc_011"); @@ -187,13 +183,9 @@ public void testHereDoc53_08() throws Exception { performTest("lexer/heredoc_008"); } - public void testHereDoc53_09() throws Exception { - performTest("lexer/heredoc_009"); - } - - public void testHereDoc53_10() throws Exception { - performTest("lexer/heredoc_010"); - } + // 09, 10: old syntax tests + // we don't provide support for them any longer + // we can use the new syntax since PHP 7.3 public void testHereDoc53_11() throws Exception { performTest("lexer/heredoc_011"); diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest.java new file mode 100644 index 000000000000..a18bcf430458 --- /dev/null +++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest.java @@ -0,0 +1,149 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.netbeans.modules.php.editor.lexer; + +public class PHP73FeaturesTest extends PHPLexerTestBase { + + public PHP73FeaturesTest(String testName) { + super(testName); + } + + // HEREDOC Closing Marker Indentation + public void testFlexibleHeredocIndentationSpaces_01() throws Exception { + performTest("lexer/php73/heredoc_indent_spaces_01"); + } + + public void testFlexibleHeredocIndentationSpaces_02() throws Exception { + performTest("lexer/php73/heredoc_indent_spaces_02"); + } + + public void testFlexibleHeredocIndentationSpaces_03() throws Exception { + performTest("lexer/php73/heredoc_indent_spaces_03"); + } + + public void testFlexibleHeredocIndentationSpaces_04() throws Exception { + // no newline at EOF + performTest("lexer/php73/heredoc_indent_spaces_04"); + } + + public void testFlexibleHeredocIndentationTabs_01() throws Exception { + performTest("lexer/php73/heredoc_indent_tabs_01"); + } + + public void testFlexibleHeredocIndentationTabs_02() throws Exception { + performTest("lexer/php73/heredoc_indent_tabs_02"); + } + + public void testFlexibleHeredocIndentationTabs_03() throws Exception { + performTest("lexer/php73/heredoc_indent_tabs_03"); + } + + // HEREDOC Closing Marker New Line + public void testFlexibleHeredocNewLine_01() throws Exception { + performTest("lexer/php73/heredoc_new_line_01"); + } + + public void testFlexibleHeredocNewLine_02() throws Exception { + performTest("lexer/php73/heredoc_new_line_02"); + } + + public void testFlexibleHeredocNewLine_03() throws Exception { + performTest("lexer/php73/heredoc_new_line_03"); + } + + public void testFlexibleHeredocNewLine_04() throws Exception { + performTest("lexer/php73/heredoc_new_line_04"); + } + + // HEREDOC Mixed + public void testFlexibleHeredocMixed_01() throws Exception { + performTest("lexer/php73/heredoc_mixed_01"); + } + + public void testFlexibleHeredocMixed_02() throws Exception { + performTest("lexer/php73/heredoc_mixed_02"); + } + + public void testFlexibleHeredocMixed_03() throws Exception { + // no new line at EOF + performTest("lexer/php73/heredoc_mixed_03"); + } + + // NOWDOC Closing Marker Indentation + public void testFlexibleNowdocIndentationSpaces_01() throws Exception { + performTest("lexer/php73/nowdoc_indent_spaces_01"); + } + + public void testFlexibleNowdocIndentationSpaces_02() throws Exception { + performTest("lexer/php73/nowdoc_indent_spaces_02"); + } + + public void testFlexibleNowdocIndentationSpaces_03() throws Exception { + performTest("lexer/php73/nowdoc_indent_spaces_03"); + } + + public void testFlexibleNowdocIndentationSpaces_04() throws Exception { + // no newline at EOF + performTest("lexer/php73/nowdoc_indent_spaces_04"); + } + + public void testFlexibleNowdocIndentationTabs_01() throws Exception { + performTest("lexer/php73/nowdoc_indent_tabs_01"); + } + + public void testFlexibleNowdocIndentationTabs_02() throws Exception { + performTest("lexer/php73/nowdoc_indent_tabs_02"); + } + + public void testFlexibleNowdocIndentationTabs_03() throws Exception { + performTest("lexer/php73/nowdoc_indent_tabs_03"); + } + + // NOWDOC Closing Marker New Line + public void testFlexibleNowdocNewLine_01() throws Exception { + performTest("lexer/php73/nowdoc_new_line_01"); + } + + public void testFlexibleNowdocNewLine_02() throws Exception { + performTest("lexer/php73/nowdoc_new_line_02"); + } + + public void testFlexibleNowdocNewLine_03() throws Exception { + performTest("lexer/php73/nowdoc_new_line_03"); + } + + public void testFlexibleNowdocNewLine_04() throws Exception { + performTest("lexer/php73/nowdoc_new_line_04"); + } + + // NOWDOC Mixed + public void testFlexibleNowdocMixed_01() throws Exception { + performTest("lexer/php73/nowdoc_mixed_01"); + } + + public void testFlexibleNowdocMixed_02() throws Exception { + performTest("lexer/php73/nowdoc_mixed_02"); + } + + public void testFlexibleNowdocMixed_03() throws Exception { + // no new line at EOF + performTest("lexer/php73/nowdoc_mixed_03"); + } + +} diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest.java index 09d7fd3d17bb..8c5cf7888b4a 100644 --- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest.java +++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest.java @@ -161,13 +161,9 @@ public void testNowdoc_11() throws Exception { performTest("parser/nowdoc_008"); } - public void testNowdoc_12() throws Exception { - performTest("parser/nowdoc_009"); - } - - public void testNowdoc_13() throws Exception { - performTest("parser/nowdoc_010"); - } + // 12(nowdoc_009), 13(nowdoc_010): old syntax tests + // we don't provide support for them any longer + // we can use the new syntax since PHP 7.3 public void testNowdoc_14() throws Exception { performTest("parser/nowdoc_011"); @@ -229,13 +225,9 @@ public void testHereDoc_10() throws Exception { performTest("parser/heredoc_008"); } - public void testHereDoc_11() throws Exception { - performTest("parser/heredoc_009"); - } - - public void testHereDoc_12() throws Exception { - performTest("parser/heredoc_010"); - } + // 11(heredoc_009), 12(heredoc_010): old syntax tests + // we don't provide support for them any longer + // we can use the new syntax since PHP 7.3 public void testHereDoc_13() throws Exception { performTest("parser/heredoc_011"); @@ -873,11 +865,127 @@ public void testGroupUseTrailingCommas_04() throws Exception { // PHP 7.3 public void testFunctionCallTrailingCommas_01() throws Exception { - performTest("parser/functionCallTrailingCommas_01"); + performTest("parser/php73/functionCallTrailingCommas_01"); } public void testListReferenceAssignment_01() throws Exception { - performTest("parser/listReferenceAssignment_01"); + performTest("parser/php73/listReferenceAssignment_01"); + } + + public void testFlexibleHeredocIndentSpaces_01() throws Exception { + performTest("parser/php73/heredoc_indent_spaces_01"); + } + + public void testFlexibleHeredocIndentSpaces_02() throws Exception { + performTest("parser/php73/heredoc_indent_spaces_02"); + } + + public void testFlexibleHeredocIndentSpaces_03() throws Exception { + performTest("parser/php73/heredoc_indent_spaces_03"); + } + + public void testFlexibleHeredocIndentSpaces_04() throws Exception { + // no new line at EOF + performTest("parser/php73/heredoc_indent_spaces_04"); + } + + public void testFlexibleHeredocIndentTabs_01() throws Exception { + performTest("parser/php73/heredoc_indent_tabs_01"); + } + + public void testFlexibleHeredocIndentTabs_02() throws Exception { + performTest("parser/php73/heredoc_indent_tabs_02"); + } + + public void testFlexibleHeredocIndentTabs_03() throws Exception { + performTest("parser/php73/heredoc_indent_tabs_03"); + } + + public void testFlexibleHeredocNewLine_01() throws Exception { + performTest("parser/php73/heredoc_new_line_01"); + } + + public void testFlexibleHeredocNewLine_02() throws Exception { + performTest("parser/php73/heredoc_new_line_02"); + } + + public void testFlexibleHeredocNewLine_03() throws Exception { + performTest("parser/php73/heredoc_new_line_03"); + } + + public void testFlexibleHeredocNewLine_04() throws Exception { + performTest("parser/php73/heredoc_new_line_04"); + } + + public void testFlexibleHeredocMixed_01() throws Exception { + performTest("parser/php73/heredoc_mixed_01"); + } + + public void testFlexibleHeredocMixed_02() throws Exception { + performTest("parser/php73/heredoc_mixed_02"); + } + + public void testFlexibleHeredocMixed_03() throws Exception { + // no new line at EOF + performTest("parser/php73/heredoc_mixed_03"); + } + + public void testFlexibleNowdocIndentSpaces_01() throws Exception { + performTest("parser/php73/nowdoc_indent_spaces_01"); + } + + public void testFlexibleNowdocIndentSpaces_02() throws Exception { + performTest("parser/php73/nowdoc_indent_spaces_02"); + } + + public void testFlexibleNowdocIndentSpaces_03() throws Exception { + performTest("parser/php73/nowdoc_indent_spaces_03"); + } + + public void testFlexibleNowdocIndentSpaces_04() throws Exception { + // no new line at EOF + performTest("parser/php73/nowdoc_indent_spaces_04"); + } + + public void testFlexibleNowdocIndentTabs_01() throws Exception { + performTest("parser/php73/nowdoc_indent_tabs_01"); + } + + public void testFlexibleNowdocIndentTabs_02() throws Exception { + performTest("parser/php73/nowdoc_indent_tabs_02"); + } + + public void testFlexibleNowdocIndentTabs_03() throws Exception { + performTest("parser/php73/nowdoc_indent_tabs_03"); + } + + public void testFlexibleNowdocNewLine_01() throws Exception { + performTest("parser/php73/nowdoc_new_line_01"); + } + + public void testFlexibleNowdocNewLine_02() throws Exception { + performTest("parser/php73/nowdoc_new_line_02"); + } + + public void testFlexibleNowdocNewLine_03() throws Exception { + performTest("parser/php73/nowdoc_new_line_03"); + } + + public void testFlexibleNowdocNewLine_04() throws Exception { + performTest("parser/php73/nowdoc_new_line_04"); + } + + public void testFlexibleNowdocMixed_01() throws Exception { + performTest("parser/php73/nowdoc_mixed_01"); + } + + public void testFlexibleNowdocMixed_02() throws Exception { + performTest("parser/php73/nowdoc_mixed_02"); + } + + public void testFlexibleNowdocMixed_03() throws Exception { + // no new line at EOF + performTest("parser/php73/nowdoc_mixed_03"); } @Override diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/PhpParserErrorTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/PhpParserErrorTest.java index 7b9c8de21555..e984c35507d5 100644 --- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/PhpParserErrorTest.java +++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/PhpParserErrorTest.java @@ -781,23 +781,155 @@ public void testGroupUseTrailingCommas_04() throws Exception { // PHP 7.3 public void testFunctionCallTrailingCommas_01() throws Exception { - checkErrors("testfiles/parser/functionCallTrailingCommas_01.php"); + checkErrors("testfiles/parser/php73/functionCallTrailingCommas_01.php"); } public void testFunctionCallTrailingCommas_02() throws Exception { - checkErrors("testfiles/parser/functionCallTrailingCommas_02.php"); + checkErrors("testfiles/parser/php73/functionCallTrailingCommas_02.php"); } public void testFunctionCallTrailingCommas_03() throws Exception { - checkErrors("testfiles/parser/functionCallTrailingCommas_03.php"); + checkErrors("testfiles/parser/php73/functionCallTrailingCommas_03.php"); } public void testFunctionCallTrailingCommas_04() throws Exception { - checkErrors("testfiles/parser/functionCallTrailingCommas_04.php"); + checkErrors("testfiles/parser/php73/functionCallTrailingCommas_04.php"); } public void testListReferenceAssignment_01() throws Exception { - checkErrors("testfiles/parser/listReferenceAssignment_01.php"); + checkErrors("testfiles/parser/php73/listReferenceAssignment_01.php"); + } + + public void testFlexibleHeredocIndentSpaces_01() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_indent_spaces_01.php"); + } + + public void testFlexibleHeredocIndentSpaces_02() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_indent_spaces_02.php"); + } + + public void testFlexibleHeredocIndentSpaces_03() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_indent_spaces_03.php"); + } + + public void testFlexibleHeredocIndentSpaces_04() throws Exception { + // no new line at EOF + checkErrors("testfiles/parser/php73/heredoc_indent_spaces_04.php"); + } + + public void testFlexibleHeredocIndentTabs_01() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_indent_tabs_01.php"); + } + + public void testFlexibleHeredocIndentTabs_02() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_indent_tabs_02.php"); + } + + public void testFlexibleHeredocIndentTabs_03() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_indent_tabs_03.php"); + } + + public void testFlexibleHeredocNewLine_01() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_new_line_01.php"); + } + + public void testFlexibleHeredocNewLine_02() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_new_line_02.php"); + } + + public void testFlexibleHeredocNewLine_03() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_new_line_03.php"); + } + + public void testFlexibleHeredocNewLine_04() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_new_line_04.php"); + } + + public void testFlexibleHeredocNewLineError_01() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_new_line_error_01.php"); + } + + public void testFlexibleHeredocNewLineError_02() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_new_line_error_02.php"); + } + + public void testFlexibleHeredocMixed_01() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_mixed_01.php"); + } + + public void testFlexibleHeredocMixed_02() throws Exception { + checkErrors("testfiles/parser/php73/heredoc_mixed_02.php"); + } + + public void testFlexibleHeredocMixed_03() throws Exception { + // no new line at EOF + checkErrors("testfiles/parser/php73/heredoc_mixed_03.php"); + } + + public void testFlexibleNowdocIndentSpaces_01() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_indent_spaces_01.php"); + } + + public void testFlexibleNowdocIndentSpaces_02() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_indent_spaces_02.php"); + } + + public void testFlexibleNowdocIndentSpaces_03() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_indent_spaces_03.php"); + } + + public void testFlexibleNowdocIndentSpaces_04() throws Exception { + // no new line at EOF + checkErrors("testfiles/parser/php73/nowdoc_indent_spaces_04.php"); + } + + public void testFlexibleNowdocIndentTabs_01() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_indent_tabs_01.php"); + } + + public void testFlexibleNowdocIndentTabs_02() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_indent_tabs_02.php"); + } + + public void testFlexibleNowdocIndentTabs_03() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_indent_tabs_03.php"); + } + + public void testFlexibleNowdocNewLine_01() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_new_line_01.php"); + } + + public void testFlexibleNowdocNewLine_02() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_new_line_02.php"); + } + + public void testFlexibleNowdocNewLine_03() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_new_line_03.php"); + } + + public void testFlexibleNowdocNewLine_04() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_new_line_04.php"); + } + + public void testFlexibleNowdocNewLineError_01() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_new_line_error_01.php"); + } + + public void testFlexibleNowdocNewLineError_02() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_new_line_error_02.php"); + } + + public void testFlexibleNowdocMixed_01() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_mixed_01.php"); + } + + public void testFlexibleNowdocMixed_02() throws Exception { + checkErrors("testfiles/parser/php73/nowdoc_mixed_02.php"); + } + + public void testFlexibleNowdocMixed_03() throws Exception { + // no new line at EOF + checkErrors("testfiles/parser/php73/nowdoc_mixed_03.php"); } } diff --git a/php/php.editor/tools/ASTPHP5Scanner.flex b/php/php.editor/tools/ASTPHP5Scanner.flex index a2618c0e9992..78165c345e5f 100644 --- a/php/php.editor/tools/ASTPHP5Scanner.flex +++ b/php/php.editor/tools/ASTPHP5Scanner.flex @@ -264,6 +264,32 @@ import org.netbeans.modules.web.common.api.ByteStack; return symbol; } + private boolean isLabelChar(char c) { + return c == '_' + || (c >= 'a' && c <= 'z') + || (c >= 'A' && c <= 'Z') + || (c >= 0x7f && c <= 0xff); + } + + private boolean isEndHereOrNowdoc(String hereOrNowdoc) { + // check whether ID exists + String trimedText = yytext().trim(); + boolean isEnd = false; + if (trimedText.startsWith(hereOrNowdoc)) { + if (trimedText.length() == hereOrNowdoc.length()) { + isEnd = true; + } else if (trimedText.length() > hereOrNowdoc.length() + && !isLabelChar(trimedText.charAt(hereOrNowdoc.length()))) { + // e.g. + // $test = <<< END + // ENDING + // END + isEnd = true; + } + } + return isEnd; + } + public int[] getParamenters(){ return new int[]{zzMarkedPos, zzPushbackPos, zzCurrentPos, zzStartRead, zzEndRead, yyline}; } @@ -1167,51 +1193,55 @@ yybegin(ST_DOCBLOCK); yybegin(ST_NOWDOC); } -{LABEL}";"?[\r\n] { - int length = yylength() - 1; - yypushback(1); - - if (yytext().charAt(length - 1) == ';') { - length--; - yypushback(1); - } - if (length == nowdoc.length() && yytext().substring(0, length).equals(nowdoc)) { +{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? { + /* {TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */ + // there is no [\r\n] if it is the last line + // i.e. not [\r\n] but EOF, so check not [\r\n] but [\r\n]? + if (isEndHereOrNowdoc(nowdoc)) { + int indexOfNowdocId = yytext().indexOf(nowdoc); + int back = yylength() - indexOfNowdocId - nowdoc.length(); + yypushback(back); nowdoc = null; + nowdoc_len = 0; + nowdocBody.delete(0, nowdocBody.length()); + nowdocBodyStart = -1; + nowdocBodyLength = 0; yybegin(ST_IN_SCRIPTING); return createSymbol(ASTPHP5Symbols.T_END_NOWDOC); } else { + yypushback(1); // [\r\n] length yybegin(ST_NOWDOC); updateNowdocBodyInfo(); } } -{NOWDOC_CHARS}*{NEWLINE}+{LABEL}";"?[\n\r] { - /* {NOWDOC_CHARS}*{NEWLINE}+{LABEL}";"?[\n\r] */ - String text = yytext(); - - if (text.charAt(text.length() - 2)== ';') { - text = text.substring(0, text.length() - 2); - yypushback(1); - } else { - text = text.substring(0, text.length() - 1); + { + {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? { + /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */ + if (isEndHereOrNowdoc(nowdoc)) { + String yytext = yytext(); + int newlineLength = yytext.startsWith("\r\n") ? 2 : 1; + int back = yylength() - newlineLength; + yypushback(back); + updateNowdocBodyInfo(); + yybegin(ST_END_NOWDOC); + if (nowdocBodyLength > 0) { + return createFullNowdocBodySymbol(); + } + } else { + yypushback(1); + updateNowdocBodyInfo(); + } } - int textLength = text.length(); - if (textLength > nowdoc_len && text.substring(textLength - nowdoc_len, textLength).equals(nowdoc)) { - yypushback(nowdoc_len + 1); - updateNowdocBodyInfo(); - yybegin(ST_END_NOWDOC); - if (nowdocBodyLength > 0) { - return createFullNowdocBodySymbol(); - } - } else { - yypushback(1); + {NOWDOC_CHARS}|{NEWLINE} { + /* {NOWDOC_CHARS}|{NEWLINE} */ updateNowdocBodyInfo(); } } -{LABEL}";"?[\n\r] { +{TABS_AND_SPACES}{LABEL}";"? { /* {LABEL}";"?[\n\r] */ nowdoc=null; nowdoc_len=0; @@ -1219,8 +1249,8 @@ yybegin(ST_DOCBLOCK); nowdocBodyStart = -1; nowdocBodyLength = 0; yybegin(ST_IN_SCRIPTING); - int back = 1; - if (yytext().charAt(yylength() - 2)==';') { + int back = 0; + if (yytext().charAt(yylength() - 1)==';') { back++; } yypushback(back); @@ -1247,8 +1277,8 @@ yybegin(ST_DOCBLOCK); yybegin(ST_HEREDOC); } -{LABEL}";"?[\n\r] { - /* {LABEL}";"?[\n\r] */ +{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? { + /* {TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */ int trailingNewLineLength = 1; int labelLength = yylength() - trailingNewLineLength; int back = trailingNewLineLength; @@ -1258,9 +1288,10 @@ yybegin(ST_DOCBLOCK); labelLength--; back++; } - if (labelLength == heredoc.length() - && yytext.substring(labelLength - heredoc.length(), labelLength).equals(heredoc)) { - back = back + heredoc.length(); + + if (isEndHereOrNowdoc(heredoc)) { + int indexOfHeredocId = yytext().indexOf(heredoc); + back += labelLength - indexOfHeredocId; yypushback(back); yybegin(ST_END_HEREDOC); } else { @@ -1270,8 +1301,8 @@ yybegin(ST_DOCBLOCK); } { - {NEWLINE}{LABEL}";"?[\n\r] { - /* {NEWLINE}{LABEL}";"?[\n\r] */ + {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? { + /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */ int trailingNewLineLength = 1; int labelLength = yylength() - trailingNewLineLength; int back = trailingNewLineLength; @@ -1280,13 +1311,30 @@ yybegin(ST_DOCBLOCK); labelLength--; back++; } - if (labelLength > heredoc.length() - && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredoc)) { - back += heredoc.length(); + + if (isEndHereOrNowdoc(heredoc)) { + int indexOfHeredocId = yytext().indexOf(heredoc); + back += labelLength - indexOfHeredocId; yypushback(back); yybegin(ST_END_HEREDOC); } else { - yypushback(trailingNewLineLength); + int indexOfVariable1 = yytext().indexOf("$"); + int indexOfVariable2 = yytext().indexOf("{$"); + if (indexOfVariable1 > 0 && indexOfVariable2 == -1) { + yypushback(yylength() - indexOfVariable1); + updateHeredocBodyInfo(); + return createFullHeredocBodySymbol(); + } else if (indexOfVariable2 > 0 && indexOfVariable1 == -1) { + yypushback(yylength() - indexOfVariable2); + updateHeredocBodyInfo(); + return createFullHeredocBodySymbol(); + } else if (indexOfVariable1 > 0 && indexOfVariable2 > 0) { + yypushback(yylength() - Math.min(indexOfVariable1, indexOfVariable2)); + updateHeredocBodyInfo(); + return createFullHeredocBodySymbol(); + } else { + yypushback(trailingNewLineLength); + } } updateHeredocBodyInfo(); if (yystate() == ST_END_HEREDOC) { @@ -1321,14 +1369,14 @@ yybegin(ST_DOCBLOCK); } } -{LABEL}";"?[\n\r] { - /* {LABEL}";"?[\n\r] { */ +{TABS_AND_SPACES}{LABEL}";"? { + /* {TABS_AND_SPACES}{LABEL}";"? */ heredoc=null; resetHeredocBodyInfo(); yybegin(ST_IN_SCRIPTING); - int back = 1; + int back = 0; // mark just the label - if (yytext().charAt(yylength() - 2)==';') { + if (yytext().charAt(yylength() - 1)==';') { back++; } yypushback(back); diff --git a/php/php.editor/tools/Php5ColoringScanner.flex b/php/php.editor/tools/Php5ColoringScanner.flex index 44dcea34124d..23879167a358 100644 --- a/php/php.editor/tools/Php5ColoringScanner.flex +++ b/php/php.editor/tools/Php5ColoringScanner.flex @@ -211,6 +211,47 @@ import org.netbeans.modules.web.common.api.ByteStack; yybegin(state); } + private boolean isLabelChar(char c) { + return c == '_' + || (c >= 'a' && c <= 'z') + || (c >= 'A' && c <= 'Z') + || (c >= 0x7f && c <= 0xff); + } + + private boolean isEndNowdoc() { + String yytext = yytext().trim(); + int lastIndexOfNewline = yytext.lastIndexOf('\n'); + if (lastIndexOfNewline == -1) { + lastIndexOfNewline = yytext.lastIndexOf('\r'); + } + if (lastIndexOfNewline != -1) { + yytext = yytext.substring(lastIndexOfNewline); + } + return isEndHereOrNowdoc(yytext); + } + + private boolean isEndHeredoc() { + return isEndHereOrNowdoc(yytext()); + } + + private boolean isEndHereOrNowdoc(String text) { + // check whether ID exists + String trimedText = text.trim(); + boolean isEnd = false; + if (trimedText.startsWith(heredoc)) { + if (trimedText.length() == heredoc.length()) { + isEnd = true; + } else if (trimedText.length() > heredoc.length() + && !isLabelChar(trimedText.charAt(heredoc.length()))) { + // e.g. + // $test = <<< END + // ENDING + // END + isEnd = true; + } + } + return isEnd; + } // End user code @@ -1095,49 +1136,55 @@ PHP_TYPE_OBJECT=[o][b][j][e][c][t] yybegin(ST_PHP_NOWDOC); } -{LABEL}";"?[\r\n] { - int label_len = yylength() - 1; - - if (yytext().charAt(label_len-1)==';') { - label_len--; - } - - if (label_len==hereocLength && yytext().substring(0,label_len).equals(heredoc)) { +{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? { + /* {TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */ + // there is no [\r\n] if it is the last line + // i.e. not [\r\n] but EOF, so check not [\r\n] but [\r\n]? + if (isEndNowdoc()) { + int indexOfNowdocId = yytext().indexOf(heredoc); + int back = yylength() - indexOfNowdocId - heredoc.length(); + yypushback(back); heredoc=null; hereocLength=0; yybegin(ST_PHP_IN_SCRIPTING); return PHPTokenId.PHP_NOWDOC_TAG_END; } else { - return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; + yypushback(1); + yybegin(ST_PHP_NOWDOC); } } - -{NOWDOC_CHARS}*{NEWLINE}+{LABEL}";"?[\n\r] { - int label_len = yylength() - 1; - int back = 1; - - if (yytext().charAt(label_len-1)==';') { - label_len--; - back++; - } - if (label_len > hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) { - back = back + hereocLength; - yypushback(back); - yybegin(ST_PHP_END_NOWDOC); + { + {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? { + /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */ + if (isEndNowdoc()) { + String yytext = yytext(); + int trailingNewlineOffset = (yytext.endsWith("\n") || yytext.endsWith("\r")) ? 2 : 0; + int lastIndexOfNewline = yytext.lastIndexOf('\n', yylength() - trailingNewlineOffset); + if (lastIndexOfNewline == -1) { + lastIndexOfNewline = yytext.lastIndexOf('\r', yylength() - trailingNewlineOffset); + } + int back = yylength() - lastIndexOfNewline - 1; // -1 [\r\n] length + yypushback(back); + yybegin(ST_PHP_END_NOWDOC); + return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; + } else { + yypushback(1); // [\r\n] length + } } - else { - yypushback(1); + + {NOWDOC_CHARS}|{NEWLINE} { + /* {NOWDOC_CHARS}|{NEWLINE} */ + // retrun PHPTokenId when the closing marker is found } - return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; } -{LABEL}";"?[\n\r] { +{NEWLINE}*{TABS_AND_SPACES}{LABEL}";"? { heredoc=null; hereocLength=0; yybegin(ST_PHP_IN_SCRIPTING); - int back = 1; + int back = 0; // mark just the label - if (yytext().charAt(yylength() - 2)==';') { + if (yytext().charAt(yylength() - 1)==';') { back++; } yypushback(back); @@ -1163,17 +1210,19 @@ PHP_TYPE_OBJECT=[o][b][j][e][c][t] } { - {LABEL}";"?[\n\r] { + {TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? { int trailingNewLineLength = 1; int label_len = yylength() - trailingNewLineLength; int back = trailingNewLineLength; - if (yytext().charAt(label_len-1)==';') { + if (yytext().charAt(label_len - 1)==';') { label_len--; back++; } - if (label_len == hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) { - back = back + hereocLength; + + if (isEndHeredoc()) { + int indexOfHeredocId = yytext().indexOf(heredoc); + back += label_len - indexOfHeredocId; yypushback(back); yybegin(ST_PHP_END_HEREDOC); } else { @@ -1188,23 +1237,32 @@ PHP_TYPE_OBJECT=[o][b][j][e][c][t] } { - {NEWLINE}{LABEL}";"?[\n\r] { + {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? { + /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */ int trailingNewLineLength = 1; - int label_len = yylength() - trailingNewLineLength; - int back = trailingNewLineLength; - - if (yytext().charAt(label_len-1)==';') { - label_len--; - back++; - } - if (label_len > hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) { - back = back + hereocLength; + if (isEndHeredoc()) { + String yytext = yytext(); + int newlineLength = yytext.startsWith("\r\n") ? 2 : 1; + int back = yylength() - newlineLength; yypushback(back); yybegin(ST_PHP_END_HEREDOC); } else { - yypushback(trailingNewLineLength); - return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; + int indexOfVariable1 = yytext().indexOf("$"); + int indexOfVariable2 = yytext().indexOf("{$"); + if (indexOfVariable1 > 0 && indexOfVariable2 == -1) { + yypushback(yylength() - indexOfVariable1); + return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; + } else if (indexOfVariable2 > 0 && indexOfVariable1 == -1) { + yypushback(yylength() - indexOfVariable2); + return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; + } else if (indexOfVariable1 > 0 && indexOfVariable2 > 0) { + yypushback(yylength() - Math.min(indexOfVariable1, indexOfVariable2)); + return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE; + } else { + yypushback(trailingNewLineLength); + } } + return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; } {HEREDOC_CHARS} { @@ -1233,13 +1291,13 @@ PHP_TYPE_OBJECT=[o][b][j][e][c][t] return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING; } -{LABEL}";"?[\n\r] { +{TABS_AND_SPACES}{LABEL}";"? { heredoc=null; hereocLength=0; yybegin(ST_PHP_IN_SCRIPTING); - int back = 1; + int back = 0; // mark just the label - if (yytext().charAt(yylength() - 2)==';') { + if (yytext().charAt(yylength() - 1)==';') { back++; } yypushback(back);