https://github.com/mikesamuel/es5-lexer implements this. https://github.com/mikesamuel/es5-lexer/blob/master/src/disambiguate.js handles the disambiguation specifically. It is different from the above in two cases.
(1) The testcase at https://github.com/mikesamuel/es5-lexer/blob/master/tests/disambiguate_test.js#L121 shows that /= can't be disambiguated using *= because (a /= b) is really the same as (a = (a / b)) and there are operators whose precedence is between that of = and /. Instead of disambiguating (a /= b) to (a *= 1 / b) we disambiguate it to (a /= b) with a newline after the /=. Regular expression literals cannot contain line terminators outside of line continuations, so this is unambiguous. (2) It additionally disambiguates latin characters that are escaped in identifiers to remove any ambiguity between this and thi\u0073 as described at https://mail.mozilla.org/pipermail/es-discuss/2011-June/015389.html and tested at https://github.com/mikesamuel/es5-lexer/blob/master/tests/disambiguate_test.js#L59 Lexical tokens are defined at https://github.com/mikesamuel/es5-lexer/blob/master/src/tokens.js which has elements of a built in parser generator. The Makefile runs that in rhino to generate regular expressions so that the 600ms taken to build the horrible regexp for IdentifierName is not borne at load time. With that, the compiled bundle comes in at 4970B gzipped and it seems to perform relatively well. The test suite at tests/all_tests.html uses flags via https://github.com/mikesamuel/es5-lexer/blob/master/tests/test_targets.js to run the tests in three configurations - uncompiled, compiled via closure compiler, and compiled and disambiguated by itself. The disambiguated version doesn't seem to have any runtime cost, and the size overhead of disambiguating the compiled bundle, which uses regular expressions heavily is 9%. This uses a precise definition of IdentifierName including all the unicode letters, combining marks, and connecting punctuation, and accurately handles escape sequences by building a trie over all the valid escape sequences admitting none of the invalid ones. A large chunk of the download size, as seen below, is just the regular expression for identifier name. If we wanted to use a more restrictive definition of identifier name -- e.g. instead of allowing all the code points that ES5 does, we could allow only the intersection of those allowed by empirically testing the major interpreters to do var identifierStarts = []; for (var i = 0; i < 0x10000; ++i) { var ch = String.fromCharCode(i); try { if (eval("(function () { var " + ch + " = 42; return " + ch + "; })()") === 42) { identifierStarts.push(i); } } then we could probably make the download significantly smaller. As you can see from the compiled bundle below, almost the entire thing is one giant regex, most of which is IdentifierName: (function(global){var f=/^(?:(?:[^\0-#%-@[-^`{-\xa9\xab-\xb4\xb6-\xb9\xbb-\xbf\xd7\xf7\u0237-\u024f\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02ed\u02ef-\u0379\u037b-\u0385\u0387\u038b\u038d\u03a2\u03cf\u03f6\u03fc-\u03ff\u0482-\u0489\u04cf\u04f6\u04f7\u04fa-\u04ff\u0510-\u0530\u0557\u0558\u055a-\u0560\u0588-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u063f\u064b-\u066d\u0670\u06d4\u06d6-\u06e4\u06e7-\u06ed\u06f0-\u06f9\u06fd\u06fe\u0700-\u070f\u0711\u0730-\u074c\u0750-\u077f\u07a6-\u07b0\u07b2-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962-\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09bc\u09be-\u09db\u09de\u09e2-\u09ef\u09f2-\u0a04\u0a0b-\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a58\u0a5d\u0a5f-\u0a71\u0a75-\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abc\u0abe-\u0acf\u0ad1-\u0adf\u0ae2-\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a-\u0b3c\u0b3e-\u0b5b\u0b5e\u0b62-\u0b70\u0b72-\u0b82\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c5f\u0c62-\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cbc\u0cbe-\u0cdd\u0cdf\u0ce2-\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d5f\u0d62-\u0d84\u0d97-\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7-\u0e00\u0e31\u0e34-\u0e3f\u0e47-\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eb1\u0eb4-\u0ebc\u0ebe\u0ebf\u0ec5\u0ec7-\u0edb\u0ede-\u0eff\u0f01-\u0f3f\u0f48\u0f6b-\u0f87\u0f8c-\u0fff\u1022\u1028\u102b-\u104f\u1056-\u109f\u10c6-\u10cf\u10f9-\u10ff\u115a-\u115e\u11a3-\u11a7\u11fa-\u11ff\u1207\u1247\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1287\u1289\u128e\u128f\u12af\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12cf\u12d7\u12ef\u130f\u1311\u1316\u1317\u131f\u1347\u135b-\u139f\u13f5-\u1400\u166d\u166e\u1677-\u1680\u169b-\u169f\u16eb-\u16ed\u16f1-\u16ff\u170d\u1712-\u171f\u1732-\u173f\u1752-\u175f\u176d\u1771-\u177f\u17b4-\u17d6\u17d8-\u17db\u17dd-\u181f\u1878-\u187f\u18a9-\u18ff\u191d-\u194f\u196e\u196f\u1975-\u1cff\u1d6c-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u2070\u2072-\u207e\u2080-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u2132\u213a-\u213c\u2140-\u2144\u214a-\u215f\u2184-\u3004\u3008-\u3020\u302a-\u3030\u3036\u3037\u303d-\u3040\u3097-\u309c\u30a0\u30fb\u3100-\u3104\u312d-\u3130\u318f-\u319f\u31b8-\u31ef\u3200-\u33ff\u4db6-\u4dff\u9fa6-\u9fff\ua48d-\uabff\ud7a4-\uf8ff\ufa2e\ufa2f\ufa6b-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb1e\ufb29\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbb2-\ufbd2\ufd3e-\ufd4f\ufd90\ufd91\ufdc8-\ufdef\ufdfc-\ufe6f\ufe75\ufefd-\uff20\uff3b-\uff40\uff5b-\uff65\uffbf-\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd-\uffff]|\\u(?:0(?:0(?:24|5[\dAFaf]|7[\dAa]|[46][1-9A-Fa-f]|[Aa]{2}|[Bb][5Aa]|[CEce][\dA-Fa-f]|[DFdf][0-689A-Fa-f])|1[\dA-Fa-f]{2}|2(?:3[0-6]|[0-25-9ABab][\dA-Fa-f]|[Cc][016-9A-Fa-f]|[Dd][01]|[Ee][0-4Ee])|3(?:7[Aa]|8[689ACEFacef]|[9BDEbde][\dA-Fa-f]|[Aa][013-9A-Fa-f]|[Cc][\dA-Ea-e]|[Ff][0-57-9ABab])|4(?:8[01A-Fa-f]|[0-79ABDEabde][\dA-Fa-f]|[Cc][\dA-Ea-e]|[Ff][0-589])|5(?:5[0-69]|8[0-7]|[047Dd][\dA-Fa-f]|[36][1-9A-Fa-f]|[Ee][\dAa]|[Ff][0-2])|6(?:6[EFef]|[27][1-9A-Fa-f]|[34][\dAa]|[89A-Ca-c][\dA-Fa-f]|[Dd][0-35]|[Ee][56EFef]|[Ff][A-CFa-cf])|7(?:1[02-9A-Fa-f]|4[D-Fd-f]|[289][\dA-Fa-f]|[Aa][0-5]|[Bb]1)|9(?:0[4-9A-Fa-f]|3[\dDd]|5[089A-Fa-f]|8[5-9A-CFa-cf]|9[03-9A-Fa-f]|[12][\dA-Fa-f]|[6EFef][01]|[Aa][0-8A-Fa-f]|[Bb][026-9Dd]|[Dd][CDFcdf])|[Aa](?:0[5-9AFaf]|1[03-9A-Fa-f]|3[^\D147]|5[9A-CEa-ce]|7[2-4]|8[5-9A-DFa-df]|9[013-9A-Fa-f]|[2Aa][0-8A-Fa-f]|[Bb][0235-9Dd]|[Dd]0|[Ee][01])|[Bb](?:0[5-9A-CFa-cf]|1[03-9A-Fa-f]|2[0-8A-Fa-f]|3[0235-9Dd]|5[CDFcdf]|6[01]|71|8[35-9AEFaef]|9[02-59ACEFacef]|[Aa][3489AEFaef]|[Bb][^\D6])|[Cc](?:3[^\D4]|[08][5-9A-CEFa-cef]|[19][02-9A-Fa-f]|[2Aa][0-8A-Fa-f]|[6Ee][01]|[Bb][0-35-9Dd]|[Dd][Ee])|[Dd](?:0[5-9A-CEFa-cef]|1[02-9A-Fa-f]|2[0-8A-Fa-f]|3\d|6[01]|8[5-9A-Fa-f]|9[0-6A-Fa-f]|[Aa][\dA-Fa-f]|[Bb][013-9ABDabd]|[Cc][0-6])|[Ee](?:0[1-9A-Fa-f]|3[023]|4[0-6]|8[12478ADad]|9[4-79A-Fa-f]|[12][\dA-Fa-f]|[Aa][1-357ABD-Fabd-f]|[Bb][023Dd]|[Cc][0-46]|[Dd][CDcd])|[Ff](?:00|4[0-79A-Fa-f]|5[\dA-Fa-f]|6[\dAa]|8[89ABab]))|1(?:0(?:2[013-79Aa]|[01ABDEabde][\dA-Fa-f]|[5Cc][0-5]|[Ff][0-8])|1(?:5[\dFf]|[0-46-9B-Eb-e][\dA-Fa-f]|[Aa][0-289A-Fa-f]|[Ff]\d)|2(?:[0Dd][0-689A-Fa-f]|[1-3679Ff][\dA-Fa-f]|[458][0-68A-Da-d]|[AEae][\dA-Ea-e]|[BCbc][02-589A-Ea-e])|3(?:0[\dA-Ea-e]|1[02-589A-Ea-e]|4[0-689A-Fa-f]|5[\dAa]|[23A-Ea-e][\dA-Fa-f]|[Ff][0-4])|4(?:0[1-9A-Fa-f]|[1-9A-Fa-f][\dA-Fa-f])|5[\dA-Fa-f]{2}|6(?:6[\dA-CFa-cf]|7[0-6]|8[1-9A-Fa-f]|9[\dAa]|[0-5A-Da-d][\dA-Fa-f]|[Ee][\dAEFaef]|[Ff]0)|7(?:70|[06][\dA-CEFa-cef]|[135][01]|[2489Aa][\dA-Fa-f]|[Bb][0-3]|[Dd][7Cc])|8(?:7[0-7]|[2-689][\dA-Fa-f]|[Aa][0-8])|9(?:1[\dA-Ca-c]|6[\dA-Da-d]|7[0-4]|[05][\dA-Fa-f])|[Dd](?:6[\dABab]|[0-5][\dA-Fa-f])|[Ee](?:9[\dABab]|[0-8A-Ea-e][\dA-Fa-f]|[Ff]\d)|[Ff](?:5[0-79BDFbdf]|7[\dA-Da-d]|[023689Aa][\dA-Fa-f]|[14][0-589A-Da-d]|[Bb][^\W5DF-Z_df-z]|[CFcf][2-46-9A-Ca-c]|[Dd][0-36-9ABab]|[Ee][\dA-Ca-c]))|2(?:07[1Ff]|1(?:0[27A-Fa-f]|1[0-359A-Da-d]|2[468A-DFa-df]|3[013-9D-Fd-f]|4[5-9]|8[0-3]|[67][\dA-Fa-f]))|3(?:0(?:0[5-7]|2[1-9]|3[1-589A-Ca-c]|9[0-6D-Fd-f]|[4Aa][1-9A-Fa-f]|[5-8B-Eb-e][\dA-Fa-f]|[Ff][\dAC-Fac-f])|1(?:0[5-9A-Fa-f]|2[\dA-Ca-c]|3[1-9A-Fa-f]|8[\dA-Ea-e]|[14-7AFaf][\dA-Fa-f]|[Bb][0-7])|[4-9A-Fa-f][\dA-Fa-f]{2})|4(?:[\dA-CEFa-cef][\dA-Fa-f]{2}|[Dd](?:[\dAa][\dA-Fa-f]|[Bb][0-5]))|9(?:[\dA-Ea-e][\dA-Fa-f]{2}|[Ff](?:\d[\dA-Fa-f]|[Aa][0-5]))|[5-8BCbc][\dA-Fa-f]{3}|[Aa](?:4(?:8[\dA-Ca-c]|[0-7][\dA-Fa-f])|[0-3C-Fc-f][\dA-Fa-f]{2})|[Dd](?:7(?:\d[\dA-Fa-f]|[Aa][0-3])|[0-6][\dA-Fa-f]{2})|[Ff](?:[9Cc][\dA-Fa-f]{2}|[Aa](?:2[\dA-Da-d]|6[\dAa]|[013-5][\dA-Fa-f])|[Bb](?:0[0-6]|1[3-7DFdf]|2[0-8A-Fa-f]|3[0-689A-CEa-ce]|4[^\W25G-Z_g-z]|[5-9AEFaef][\dA-Fa-f]|[Bb][01]|[Dd][3-9A-Fa-f])|[Dd](?:3[\dA-Da-d]|9[2-9A-Fa-f]|[0-25-8ABab][\dA-Fa-f]|[Cc][0-7]|[Ff][\dABab])|[Ee](?:7[^\W5G-Z_g-z]|[89A-Ea-e][\dA-Fa-f]|[Ff][\dA-Ca-c])|[Ff](?:6[6-9A-Fa-f]|[24][1-9A-Fa-f]|[35][\dAa]|[7-9Aa][\dA-Fa-f]|[Bb][\dA-Ea-e]|[Cc][2-7A-Fa-f]|[Dd][2-7A-Ca-c]))))(?:[^\0-#%-\/:-@[-^`{-\xa9\xab-\xb4\xb6-\xb9\xbb-\xbf\xd7\xf7\u0237-\u024f\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02ed\u02ef-\u02ff\u0358-\u035c\u0370-\u0379\u037b-\u0385\u0387\u038b\u038d\u03a2\u03cf\u03f6\u03fc-\u03ff\u0482\u0487-\u0489\u04cf\u04f6\u04f7\u04fa-\u04ff\u0510-\u0530\u0557\u0558\u055a-\u0560\u0588-\u0590\u05a2\u05ba\u05be\u05c0\u05c3\u05c5-\u05cf\u05eb-\u05ef\u05f3-\u060f\u0616-\u0620\u063b-\u063f\u0659-\u065f\u066a-\u066d\u06d4\u06dd\u06de\u06e9\u06fd\u06fe\u0700-\u070f\u074b\u074c\u0750-\u077f\u07b2-\u0900\u093a\u093b\u094e\u094f\u0955-\u0957\u0964\u0965\u0970-\u0980\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09ce-\u09d6\u09d8-\u09db\u09de\u09e4\u09e5\u09f2-\u0a00\u0a04\u0a0b-\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43-\u0a46\u0a49\u0a4a\u0a4e-\u0a58\u0a5d\u0a5f-\u0a65\u0a75-\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1-\u0adf\u0ae4\u0ae5\u0af0-\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b44-\u0b46\u0b49\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b62-\u0b65\u0b70\u0b72-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce-\u0bd6\u0bd8-\u0be6\u0bf0-\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c3d\u0c45\u0c49\u0c4e-\u0c54\u0c57-\u0c5f\u0c62-\u0c65\u0c70-\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce2-\u0ce5\u0cf0-\u0d01\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d3d\u0d44\u0d45\u0d49\u0d4e-\u0d56\u0d58-\u0d5f\u0d62-\u0d65\u0d70-\u0d81\u0d84\u0d97-\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5\u0dd7\u0de0-\u0df1\u0df4-\u0e00\u0e3b-\u0e3f\u0e4f\u0e5a-\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ede-\u0eff\u0f01-\u0f17\u0f1a-\u0f1f\u0f2a-\u0f34\u0f36\u0f38\u0f3a-\u0f3d\u0f48\u0f6b-\u0f70\u0f85\u0f8c-\u0f8f\u0f98\u0fbd-\u0fc5\u0fc7-\u0fff\u1022\u1028\u102b\u1033-\u1035\u103a-\u103f\u104a-\u104f\u105a-\u109f\u10c6-\u10cf\u10f9-\u10ff\u115a-\u115e\u11a3-\u11a7\u11fa-\u11ff\u1207\u1247\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1287\u1289\u128e\u128f\u12af\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12cf\u12d7\u12ef\u130f\u1311\u1316\u1317\u131f\u1347\u135b-\u1368\u1372-\u139f\u13f5-\u1400\u166d\u166e\u1677-\u1680\u169b-\u169f\u16eb-\u16ed\u16f1-\u16ff\u170d\u1715-\u171f\u1735-\u173f\u1754-\u175f\u176d\u1771\u1774-\u177f\u17b4\u17b5\u17d4-\u17d6\u17d8-\u17db\u17de\u17df\u17ea-\u180a\u180e\u180f\u181a-\u181f\u1878-\u187f\u18aa-\u18ff\u191d-\u191f\u192c-\u192f\u193c-\u1945\u196e\u196f\u1975-\u1cff\u1d6c-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u200b\u200e-\u203e\u2041-\u2053\u2055-\u2070\u2072-\u207e\u2080-\u20cf\u20dd-\u20e0\u20e2-\u20e4\u20eb-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u2132\u213a-\u213c\u2140-\u2144\u214a-\u215f\u2184-\u3004\u3008-\u3020\u3030\u3036\u3037\u303d-\u3040\u3097\u3098\u309b\u309c\u30a0\u3100-\u3104\u312d-\u3130\u318f-\u319f\u31b8-\u31ef\u3200-\u33ff\u4db6-\u4dff\u9fa6-\u9fff\ua48d-\uabff\ud7a4-\uf8ff\ufa2e\ufa2f\ufa6b-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb29\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbb2-\ufbd2\ufd3e-\ufd4f\ufd90\ufd91\ufdc8-\ufdef\ufdfc-\ufdff\ufe10-\ufe1f\ufe24-\ufe32\ufe35-\ufe4c\ufe50-\ufe6f\ufe75\ufefd-\uff0f\uff1a-\uff20\uff3b-\uff3e\uff40\uff5b-\uff64\uffbf-\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd-\uffff]|\\u(?:0(?:0(?:24|3\d|5[\dAFaf]|7[\dAa]|[46][1-9A-Fa-f]|[Aa]{2}|[Bb][5Aa]|[CEce][\dA-Fa-f]|[DFdf][0-689A-Fa-f])|1[\dA-Fa-f]{2}|2(?:3[0-6]|[0-25-9ABab][\dA-Fa-f]|[Cc][016-9A-Fa-f]|[Dd][01]|[Ee][0-4Ee])|3(?:5[0-7D-Fd-f]|7[Aa]|8[689ACEFacef]|[0-469BDEbde][\dA-Fa-f]|[Aa][013-9A-Fa-f]|[Cc][\dA-Ea-e]|[Ff][0-57-9ABab])|4(?:8[013-6A-Fa-f]|[0-79ABDEabde][\dA-Fa-f]|[Cc][\dA-Ea-e]|[Ff][0-589])|5(?:5[0-69]|8[0-7]|[047Dd][\dA-Fa-f]|[369][1-9A-Fa-f]|[Aa][013-9A-Fa-f]|[Bb][\dB-DFb-df]|[Cc][124]|[Ee][\dAa]|[Ff][0-2])|6(?:1[0-5]|2[1-9A-Fa-f]|3[\dAa]|5[0-8]|6[\dEFef]|[47-9A-Ca-c][\dA-Fa-f]|[Dd][0-35-9A-CFa-cf]|[Ee][0-8A-Fa-f]|[Ff][\dA-CFa-cf])|7(?:4[\dAD-Fad-f]|[1-389Aa][\dA-Fa-f]|[Bb][01])|9(?:0[1-9A-Fa-f]|3[\dC-Fc-f]|4[\dA-Da-d]|5[0-489A-Fa-f]|8[1-35-9A-CFa-cf]|9[03-9A-Fa-f]|[12][\dA-Fa-f]|[6Ee][0-36-9A-Fa-f]|[Aa][0-8A-Fa-f]|[Bb][026-9C-Fc-f]|[Cc][0-478B-Db-d]|[Dd][7CDFcdf]|[Ff][01])|[Aa](?:0[1-35-9AFaf]|1[03-9A-Fa-f]|3[0235689CEFcef]|4[0-278B-Db-d]|5[9A-CEa-ce]|6[6-9A-Fa-f]|7[0-4]|8[1-35-9A-DFa-df]|9[013-9A-Fa-f]|[2Aa][0-8A-Fa-f]|[Bb][0235-9C-Fc-f]|[Cc][0-57-9B-Db-d]|[Dd]0|[Ee][0-36-9A-Fa-f])|[Bb](?:0[1-35-9A-CFa-cf]|1[03-9A-Fa-f]|2[0-8A-Fa-f]|3[0235-9C-Fc-f]|4[0-378B-Db-d]|5[67CDFcdf]|6[016-9A-Fa-f]|71|8[235-9AEFaef]|9[02-59ACEFacef]|[Aa][3489AEFaef]|[Bb][0-57-9EFef]|[Cc][0-26-8A-Da-d]|[Dd]7|[Ee][7-9A-Fa-f])|[Cc](?:0[^\W04DG-Z_dg-z]|3[0-35-9EFef]|5[56]|8[235-9A-CEFa-cef]|[19][02-9A-Fa-f]|[2Aa][0-8A-Fa-f]|[4Cc][0-46-8A-Da-d]|[6Ee][016-9A-Fa-f]|[Bb][0-35-9C-Fc-f]|[Dd][56Ee])|[Dd](?:0[235-9A-CEFa-cef]|1[02-9A-Fa-f]|2[0-8A-Fa-f]|3[\dEFef]|4[0-36-8A-Da-d]|57|6[016-9A-Fa-f]|8[235-9A-Fa-f]|9[0-6A-Fa-f]|[Aa][\dA-Fa-f]|[Bb][013-9ABDabd]|[Cc][0-6AFaf]|[Dd][0-4689A-Fa-f]|[Ff][23])|[Ee](?:0[1-9A-Fa-f]|3[\dAa]|4[\dA-Ea-e]|5\d|8[12478ADad]|9[4-79A-Fa-f]|[12][\dA-Fa-f]|[Aa][1-357ABD-Fabd-f]|[Bb][\dB-Db-d]|[Cc][0-4689A-Da-d]|[Dd][\dCDcd])|[Ff](?:00|1[89]|2\d|3[579EFef]|6[\dAa]|7[1-9A-Fa-f]|8[0-46-9ABab]|[49][0-79A-Fa-f]|[5Aa][\dA-Fa-f]|[Bb][\dA-Ca-c]|[Cc]6))|1(?:0(?:2[013-79AC-Fac-f]|3[0-26-9]|[01ABDEabde][\dA-Fa-f]|[45]\d|[Cc][0-5]|[Ff][0-8])|1(?:5[\dFf]|[0-46-9B-Eb-e][\dA-Fa-f]|[Aa][0-289A-Fa-f]|[Ff]\d)|2(?:[0Dd][0-689A-Fa-f]|[1-3679Ff][\dA-Fa-f]|[458][0-68A-Da-d]|[AEae][\dA-Ea-e]|[BCbc][02-589A-Ea-e])|3(?:0[\dA-Ea-e]|1[02-589A-Ea-e]|4[0-689A-Fa-f]|5[\dAa]|6[9A-Fa-f]|7[01]|[23A-Ea-e][\dA-Fa-f]|[Ff][0-4])|4(?:0[1-9A-Fa-f]|[1-9A-Fa-f][\dA-Fa-f])|5[\dA-Fa-f]{2}|6(?:6[\dA-CFa-cf]|7[0-6]|8[1-9A-Fa-f]|9[\dAa]|[0-5A-Da-d][\dA-Fa-f]|[Ee][\dAEFaef]|[Ff]0)|7(?:5[0-3]|7[023]|[06][\dA-CEFa-cef]|[13][0-4]|[2489ACac][\dA-Fa-f]|[Bb][0-36-9A-Fa-f]|[Dd][0-37CDcd]|[Ee]\d)|8(?:0[B-Db-d]|7[0-7]|[1Aa]\d|[2-689][\dA-Fa-f])|9(?:1[\dA-Ca-c]|4[6-9A-Fa-f]|6[\dA-Da-d]|7[0-4]|[05][\dA-Fa-f]|[23][\dABab])|[Dd](?:6[\dABab]|[0-5][\dA-Fa-f])|[Ee](?:9[\dABab]|[0-8A-Ea-e][\dA-Fa-f]|[Ff]\d)|[Ff](?:5[0-79BDFbdf]|7[\dA-Da-d]|[023689Aa][\dA-Fa-f]|[14][0-589A-Da-d]|[Bb][^\W5DF-Z_df-z]|[CFcf][2-46-9A-Ca-c]|[Dd][0-36-9ABab]|[Ee][\dA-Ca-c]))|2(?:0(?:0[CDcd]|3[Ff]|40|54|7[1Ff]|[Dd][\dA-Ca-c]|[Ee][15-9Aa])|1(?:0[27A-Fa-f]|1[0-359A-Da-d]|2[468A-DFa-df]|3[013-9D-Fd-f]|4[5-9]|8[0-3]|[67][\dA-Fa-f]))|3(?:0(?:0[5-7]|3[1-589A-Ca-c]|9[0-69AD-Fad-f]|[24Aa][1-9A-Fa-f]|[5-8B-Fb-f][\dA-Fa-f])|1(?:0[5-9A-Fa-f]|2[\dA-Ca-c]|3[1-9A-Fa-f]|8[\dA-Ea-e]|[14-7AFaf][\dA-Fa-f]|[Bb][0-7])|[4-9A-Fa-f][\dA-Fa-f]{2})|4(?:[\dA-CEFa-cef][\dA-Fa-f]{2}|[Dd](?:[\dAa][\dA-Fa-f]|[Bb][0-5]))|9(?:[\dA-Ea-e][\dA-Fa-f]{2}|[Ff](?:\d[\dA-Fa-f]|[Aa][0-5]))|[5-8BCbc][\dA-Fa-f]{3}|[Aa](?:4(?:8[\dA-Ca-c]|[0-7][\dA-Fa-f])|[0-3C-Fc-f][\dA-Fa-f]{2})|[Dd](?:7(?:\d[\dA-Fa-f]|[Aa][0-3])|[0-6][\dA-Fa-f]{2})|[Ff](?:[9Cc][\dA-Fa-f]{2}|[Aa](?:2[\dA-Da-d]|6[\dAa]|[013-5][\dA-Fa-f])|[Bb](?:0[0-6]|1[3-7D-Fd-f]|2[0-8A-Fa-f]|3[0-689A-CEa-ce]|4[^\W25G-Z_g-z]|[5-9AEFaef][\dA-Fa-f]|[Bb][01]|[Dd][3-9A-Fa-f])|[Dd](?:3[\dA-Da-d]|9[2-9A-Fa-f]|[0-25-8ABab][\dA-Fa-f]|[Cc][0-7]|[Ff][\dABab])|[Ee](?:2[0-3]|3[34]|4[D-Fd-f]|7[^\W5G-Z_g-z]|[089A-Ea-e][\dA-Fa-f]|[Ff][\dA-Ca-c])|[Ff](?:1\d|3[\dAFaf]|5[\dAa]|6[5-9A-Fa-f]|[24][1-9A-Fa-f]|[7-9Aa][\dA-Fa-f]|[Bb][\dA-Ea-e]|[Cc][2-7A-Fa-f]|[Dd][2-7A-Ca-c]))))*|0[Xx][\dA-Fa-f]+|(?:(?:0[0-7]*(?![89])|[1-9]\d*)(?:\.\d*)?|\.\d+)(?:[Ee][+-]?\d+)?|[(),.:;?[\]{}]|&&|\|\||\+\+|--|(?:[%&*+^|~-]|>{1,3}|<<?|[!=]=?)=?|"(?:[^\n\r"\\\u2028\u2029]|\\(?:\r\n?|[^\r89ux]|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2}))*"|'(?:[^\n\r'\\\u2028\u2029]|\\(?:\r\n?|[^\r89ux]|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2}))*'|\/\*[\S\s]*?\*\/|\/\/.*|[\t\x0b\f \xa0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]+|\r\n?|[\n\u2028\u2029])/, g=/^(?:[\s\xa0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]|\/[*\/])/;function h(b){var a=b.length,c=b.charAt(a-1);return c==="+"||c==="-"||c==="."||c==="/"?a===1:/^(?:break|case|continue|delete|do|else|finally|in|instanceof|return|throw|try|typeof|void)\b$|[%&(*,:-?[^{-~]$/.test(b)};var i=/^\/(?![*\/])(?:[^\n\r\/[\\\u2028\u2029]|\[(?:[^\n\r\\\]\u2028\u2029]|\\(?:\r\n?|[^\rux]|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2}))+]|\\(?:\r\n?|[^\rux]|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2}))*\/[gim]*/,j=/^\/=?/,k=/[\t\x0b\f \xa0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/,l=/[!%&(--:-?[\]^{-~]/;var m={'"':'\\"',"\\":"\\\\","\n":"\\n","\r":"\\r","\u2028":"\\u2028","\u2029":"\\u2029"};function n(b){return m[b]}function o(b){return String.fromCharCode(parseInt(b.substring(2),16))};global.es5Lexer={makeScanner:function(b){var a=b,c;return function(){var b,e;return a?(b=a.match(f)||a.match(!c||h(c)?i:j),e=b[0],g.test(e)||(c=e),a=a.substring(e.length),e):null}},classifyToken:function(b){var a=b[0];return a==='"'||a==="'"?3:a==="/"?(a=b[1],a==="/"||a==="*"?0:b.length>2?5:6):a==="."?b.length===1?6:4:"0"<=a&&a<="9"?4:k.test(a)?1:l.test(b)?6:a<" "||a==="\u2028"||a==="\u2029"?2:7},isLineTerminator:function(b){return/(?:^|\/\*.*)[\n\r\u2028\u2029]/.test(b)},disambiguateTokenStream:function(b){var a= [];return function(){var c,d,e;return a[0]?a.shift():!(c=b())?b=null:(d=c[0])==="/"&&(e=c[1])!=="/"&&e!=="*"?(d=c.length)>2?(d=c.lastIndexOf("/"),a.push(".","constructor","("),c.indexOf("/",1)<d?a.push('"'+c.substring(1,d).replace(/[\n\r"\u2028\u2029]|\\(?![\n\r\u2028\u2029])/g,n)+'"',",",'"'+c.substring(d+1)+'"',")"):a.push(c,")"),"/./"):d==1?(a.push("1","/"),c==="/"?"*":"*="):(a.push("\n"),c):c.indexOf("\\u00")>=0&&"'"!==d&&'"'!==d?c.replace(/\\u00[\da-f]{2}/gi,o):c}},TokenType:{COMMENT:0,WHITE_SPACE:1, LINE_TERMINATOR_SEQUENCE:2,MAX_IGNORABLE:2,STRING_LITERAL:3,NUMERIC_LITERAL:4,REGEXP_LITERAL:5,PUNCTUATOR:6,IDENTIFIER_NAME:7}}}(this))
