js-beautify 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. data/.document +5 -0
  2. data/.gitmodules +4 -0
  3. data/Gemfile +13 -0
  4. data/Gemfile.lock +27 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +13 -0
  7. data/Rakefile +29 -0
  8. data/VERSION +1 -0
  9. data/bin/js-beautify +5 -0
  10. data/init.sh +3 -0
  11. data/js-beautify-copy/.gitmodules +3 -0
  12. data/js-beautify-copy/Makefile +71 -0
  13. data/js-beautify-copy/README.md +39 -0
  14. data/js-beautify-copy/attic/beautify-cl/beautify-cl.js +142 -0
  15. data/js-beautify-copy/attic/bin/beautify_js +80 -0
  16. data/js-beautify-copy/attic/opera-userscript/beautifier.js +1087 -0
  17. data/js-beautify-copy/attic/opera-userscript/make_opera_userscript.sh +42 -0
  18. data/js-beautify-copy/attic/qtscript/jsbeautify.cpp +121 -0
  19. data/js-beautify-copy/attic/qtscript/jsbeautify.pro +5 -0
  20. data/js-beautify-copy/attic/qtscript/jsbeautify.qrc +6 -0
  21. data/js-beautify-copy/attic/qtscript/readme.txt +28 -0
  22. data/js-beautify-copy/attic/readme.txt +2 -0
  23. data/js-beautify-copy/attic/unmaintained/bbedit/jsBeautify_BBED.scpt +522 -0
  24. data/js-beautify-copy/attic/unmaintained/c-sharp/JSBeautify.cs +801 -0
  25. data/js-beautify-copy/attic/v8/README.txt +40 -0
  26. data/js-beautify-copy/attic/v8/beautify.h +2390 -0
  27. data/js-beautify-copy/attic/v8/jsbeautify.cpp +215 -0
  28. data/js-beautify-copy/beautify-css.js +198 -0
  29. data/js-beautify-copy/beautify-html.js +514 -0
  30. data/js-beautify-copy/beautify.js +1293 -0
  31. data/js-beautify-copy/favicon.png +0 -0
  32. data/js-beautify-copy/index.html +401 -0
  33. data/js-beautify-copy/jquery/jquery.cookie.js +96 -0
  34. data/js-beautify-copy/jquery/jquery.js +167 -0
  35. data/js-beautify-copy/license.txt +24 -0
  36. data/js-beautify-copy/php/jsbeautifier.php +1599 -0
  37. data/js-beautify-copy/php/test.php +476 -0
  38. data/js-beautify-copy/python/MANIFEST.in +2 -0
  39. data/js-beautify-copy/python/js-beautify +7 -0
  40. data/js-beautify-copy/python/js-beautify-profile +16 -0
  41. data/js-beautify-copy/python/js-beautify-test +10 -0
  42. data/js-beautify-copy/python/jsbeautifier/__init__.py +1166 -0
  43. data/js-beautify-copy/python/jsbeautifier/tests/__init__.py +1 -0
  44. data/js-beautify-copy/python/jsbeautifier/tests/testindentation.py +43 -0
  45. data/js-beautify-copy/python/jsbeautifier/tests/testjsbeautifier.py +464 -0
  46. data/js-beautify-copy/python/jsbeautifier/unpackers/README.specs.mkd +25 -0
  47. data/js-beautify-copy/python/jsbeautifier/unpackers/__init__.py +67 -0
  48. data/js-beautify-copy/python/jsbeautifier/unpackers/evalbased.py +39 -0
  49. data/js-beautify-copy/python/jsbeautifier/unpackers/javascriptobfuscator.py +58 -0
  50. data/js-beautify-copy/python/jsbeautifier/unpackers/myobfuscate.py +86 -0
  51. data/js-beautify-copy/python/jsbeautifier/unpackers/packer.py +104 -0
  52. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/__init__.py +2 -0
  53. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-myobfuscate-input.js +1 -0
  54. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-myobfuscate-output.js +65 -0
  55. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-packer-62-input.js +1 -0
  56. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-packer-non62-input.js +1 -0
  57. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testjavascriptobfuscator.py +46 -0
  58. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testmyobfuscate.py +40 -0
  59. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testpacker.py +34 -0
  60. data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testurlencode.py +36 -0
  61. data/js-beautify-copy/python/jsbeautifier/unpackers/urlencode.py +34 -0
  62. data/js-beautify-copy/python/setup.py +17 -0
  63. data/js-beautify-copy/tests/beautify-tests.js +489 -0
  64. data/js-beautify-copy/tests/run-tests +17 -0
  65. data/js-beautify-copy/tests/sanitytest.js +128 -0
  66. data/js-beautify-copy/unpackers/javascriptobfuscator_unpacker.js +103 -0
  67. data/js-beautify-copy/unpackers/myobfuscate_unpacker.js +81 -0
  68. data/js-beautify-copy/unpackers/p_a_c_k_e_r_unpacker.js +61 -0
  69. data/js-beautify-copy/unpackers/urlencode_unpacker.js +51 -0
  70. data/lib/js-beautify.rb +0 -0
  71. data/test/helper.rb +18 -0
  72. data/test/test_js-beautify.rb +7 -0
  73. data/update.sh +23 -0
  74. metadata +173 -0
@@ -0,0 +1,25 @@
1
+ # UNPACKERS SPECIFICATIONS
2
+
3
+ Nothing very difficult: an unpacker is a submodule placed in the directory
4
+ where this file was found. Each unpacker must define three symbols:
5
+
6
+ * `PRIORITY` : integer number expressing the priority in applying this
7
+ unpacker. Lower number means higher priority.
8
+ Makes sense only if a source file has been packed with
9
+ more than one packer.
10
+ * `detect(source)` : returns `True` if source is packed, otherwise, `False`.
11
+ * `unpack(source)` : takes a `source` string and unpacks it. Must always return
12
+ valid JavaScript. That is to say, your code should look
13
+ like:
14
+
15
+ ```
16
+ if detect(source):
17
+ return do_your_fancy_things_with(source)
18
+ else:
19
+ return source
20
+ ```
21
+
22
+ *You can safely define any other symbol in your module, as it will be ignored.*
23
+
24
+ `__init__` code will automatically load new unpackers, without any further step
25
+ to be accomplished. Simply drop it in this directory.
@@ -0,0 +1,67 @@
1
+ #
2
+ # General code for JSBeautifier unpackers infrastructure. See README.specs
3
+ # written by Stefano Sanfilippo <a.little.coder@gmail.com>
4
+ #
5
+
6
+ """General code for JSBeautifier unpackers infrastructure."""
7
+
8
+ import pkgutil
9
+ import re
10
+ from jsbeautifier.unpackers import evalbased
11
+
12
+ # NOTE: AT THE MOMENT, IT IS DEACTIVATED FOR YOUR SECURITY: it runs js!
13
+ BLACKLIST = ['jsbeautifier.unpackers.evalbased']
14
+
15
+ class UnpackingError(Exception):
16
+ """Badly packed source or general error. Argument is a
17
+ meaningful description."""
18
+ pass
19
+
20
+ def getunpackers():
21
+ """Scans the unpackers dir, finds unpackers and add them to UNPACKERS list.
22
+ An unpacker will be loaded only if it is a valid python module (name must
23
+ adhere to naming conventions) and it is not blacklisted (i.e. inserted
24
+ into BLACKLIST."""
25
+ path = __path__
26
+ prefix = __name__ + '.'
27
+ unpackers = []
28
+ interface = ['unpack', 'detect', 'PRIORITY']
29
+ for _importer, modname, _ispkg in pkgutil.iter_modules(path, prefix):
30
+ if 'tests' not in modname and modname not in BLACKLIST:
31
+ try:
32
+ module = __import__(modname, fromlist=interface)
33
+ except ImportError:
34
+ raise UnpackingError('Bad unpacker: %s' % modname)
35
+ else:
36
+ unpackers.append(module)
37
+
38
+ return sorted(unpackers, key = lambda mod: mod.PRIORITY)
39
+
40
+ UNPACKERS = getunpackers()
41
+
42
+ def run(source, evalcode=False):
43
+ """Runs the applicable unpackers and return unpacked source as a string."""
44
+ for unpacker in [mod for mod in UNPACKERS if mod.detect(source)]:
45
+ source = unpacker.unpack(source)
46
+ if evalcode and evalbased.detect(source):
47
+ source = evalbased.unpack(source)
48
+ return source
49
+
50
+ def filtercomments(source):
51
+ """NOT USED: strips trailing comments and put them at the top."""
52
+ trailing_comments = []
53
+ comment = True
54
+
55
+ while comment:
56
+ if re.search(r'^\s*\/\*', source):
57
+ comment = source[0, source.index('*/') + 2]
58
+ elif re.search(r'^\s*\/\/', source):
59
+ comment = re.search(r'^\s*\/\/', source).group(0)
60
+ else:
61
+ comment = None
62
+
63
+ if comment:
64
+ source = re.sub(r'^\s+', '', source[len(comment):])
65
+ trailing_comments.append(comment)
66
+
67
+ return '\n'.join(trailing_comments) + source
@@ -0,0 +1,39 @@
1
+ #
2
+ # Unpacker for eval() based packers, a part of javascript beautifier
3
+ # by Einar Lielmanis <einar@jsbeautifier.org>
4
+ #
5
+ # written by Stefano Sanfilippo <a.little.coder@gmail.com>
6
+ #
7
+ # usage:
8
+ #
9
+ # if detect(some_string):
10
+ # unpacked = unpack(some_string)
11
+ #
12
+
13
+ """Unpacker for eval() based packers: runs JS code and returns result.
14
+ Works only if a JS interpreter (e.g. Mozilla's Rhino) is installed and
15
+ properly set up on host."""
16
+
17
+ from subprocess import PIPE, Popen
18
+
19
+ PRIORITY = 3
20
+
21
+ def detect(source):
22
+ """Detects if source is likely to be eval() packed."""
23
+ return source.strip().lower().startswith('eval(function(')
24
+
25
+ def unpack(source):
26
+ """Runs source and return resulting code."""
27
+ return jseval('print %s;' % source[4:]) if detect(source) else source
28
+
29
+ # In case of failure, we'll just return the original, without crashing on user.
30
+ def jseval(script):
31
+ """Run code in the JS interpreter and return output."""
32
+ try:
33
+ interpreter = Popen(['js'], stdin=PIPE, stdout=PIPE)
34
+ except OSError:
35
+ return script
36
+ result, errors = interpreter.communicate(script)
37
+ if interpreter.poll() or errors:
38
+ return script
39
+ return result
@@ -0,0 +1,58 @@
1
+ #
2
+ # simple unpacker/deobfuscator for scripts messed up with
3
+ # javascriptobfuscator.com
4
+ #
5
+ # written by Einar Lielmanis <einar@jsbeautifier.org>
6
+ # rewritten in Python by Stefano Sanfilippo <a.little.coder@gmail.com>
7
+ #
8
+ # Will always return valid javascript: if `detect()` is false, `code` is
9
+ # returned, unmodified.
10
+ #
11
+ # usage:
12
+ #
13
+ # if javascriptobfuscator.detect(some_string):
14
+ # some_string = javascriptobfuscator.unpack(some_string)
15
+ #
16
+
17
+ """deobfuscator for scripts messed up with JavascriptObfuscator.com"""
18
+
19
+ import re
20
+
21
+ PRIORITY = 1
22
+
23
+ def smartsplit(code):
24
+ """Split `code` at " symbol, only if it is not escaped."""
25
+ strings = []
26
+ pos = 0
27
+ while pos < len(code):
28
+ if code[pos] == '"':
29
+ word = '' # new word
30
+ pos += 1
31
+ while pos < len(code):
32
+ if code[pos] == '"':
33
+ break
34
+ if code[pos] == '\\':
35
+ word += '\\'
36
+ pos += 1
37
+ word += code[pos]
38
+ pos += 1
39
+ strings.append('"%s"' % word)
40
+ pos += 1
41
+ return strings
42
+
43
+ def detect(code):
44
+ """Detects if `code` is JavascriptObfuscator.com packed."""
45
+ # prefer `is not` idiom, so that a true boolean is returned
46
+ return (re.search(r'^var _0x[a-f0-9]+ ?\= ?\[', code) is not None)
47
+
48
+ def unpack(code):
49
+ """Unpacks JavascriptObfuscator.com packed code."""
50
+ if detect(code):
51
+ matches = re.search(r'var (_0x[a-f\d]+) ?\= ?\[(.*?)\];', code)
52
+ if matches:
53
+ variable = matches.group(1)
54
+ dictionary = smartsplit(matches.group(2))
55
+ code = code[len(matches.group(0)):]
56
+ for key, value in enumerate(dictionary):
57
+ code = code.replace(r'%s[%s]' % (variable, key), value)
58
+ return code
@@ -0,0 +1,86 @@
1
+ #
2
+ # deobfuscator for scripts messed up with myobfuscate.com
3
+ # by Einar Lielmanis <einar@jsbeautifier.org>
4
+ #
5
+ # written by Stefano Sanfilippo <a.little.coder@gmail.com>
6
+ #
7
+ # usage:
8
+ #
9
+ # if detect(some_string):
10
+ # unpacked = unpack(some_string)
11
+ #
12
+
13
+ # CAVEAT by Einar Lielmanis
14
+
15
+ #
16
+ # You really don't want to obfuscate your scripts there: they're tracking
17
+ # your unpackings, your script gets turned into something like this,
18
+ # as of 2011-08-26:
19
+ #
20
+ # var _escape = 'your_script_escaped';
21
+ # var _111 = document.createElement('script');
22
+ # _111.src = 'http://api.www.myobfuscate.com/?getsrc=ok' +
23
+ # '&ref=' + encodeURIComponent(document.referrer) +
24
+ # '&url=' + encodeURIComponent(document.URL);
25
+ # var 000 = document.getElementsByTagName('head')[0];
26
+ # 000.appendChild(_111);
27
+ # document.write(unescape(_escape));
28
+ #
29
+
30
+ """Deobfuscator for scripts messed up with MyObfuscate.com"""
31
+
32
+ import re
33
+ import base64
34
+
35
+ # Python 2 retrocompatibility
36
+ # pylint: disable=F0401
37
+ # pylint: disable=E0611
38
+ try:
39
+ from urllib import unquote
40
+ except ImportError:
41
+ from urllib.parse import unquote
42
+
43
+ from jsbeautifier.unpackers import UnpackingError
44
+
45
+ PRIORITY = 1
46
+
47
+ CAVEAT = """//
48
+ // Unpacker warning: be careful when using myobfuscate.com for your projects:
49
+ // scripts obfuscated by the free online version call back home.
50
+ //
51
+
52
+ """
53
+
54
+ SIGNATURE = (r'["\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F'
55
+ r'\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65'
56
+ r'\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75'
57
+ r'\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B'
58
+ r'\x2F\x3D","","\x63\x68\x61\x72\x41\x74","\x69\x6E\x64\x65\x78'
59
+ r'\x4F\x66","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","'
60
+ r'\x6C\x65\x6E\x67\x74\x68"]')
61
+
62
+ def detect(source):
63
+ """Detects MyObfuscate.com packer."""
64
+ return SIGNATURE in source
65
+
66
+ def unpack(source):
67
+ """Unpacks js code packed with MyObfuscate.com"""
68
+ if not detect(source):
69
+ return source
70
+ payload = unquote(_filter(source))
71
+ match = re.search(r"^var _escape\='<script>(.*)<\/script>'",
72
+ payload, re.DOTALL)
73
+ polished = match.group(1) if match else source
74
+ return CAVEAT + polished
75
+
76
+ def _filter(source):
77
+ """Extracts and decode payload (original file) from `source`"""
78
+ try:
79
+ varname = re.search(r'eval\(\w+\(\w+\((\w+)\)\)\);', source).group(1)
80
+ reverse = re.search(r"var +%s *\= *'(.*)';" % varname, source).group(1)
81
+ except AttributeError:
82
+ raise UnpackingError('Malformed MyObfuscate data.')
83
+ try:
84
+ return base64.b64decode(reverse[::-1].encode('utf8')).decode('utf8')
85
+ except TypeError:
86
+ raise UnpackingError('MyObfuscate payload is not base64-encoded.')
@@ -0,0 +1,104 @@
1
+ #
2
+ # Unpacker for Dean Edward's p.a.c.k.e.r, a part of javascript beautifier
3
+ # by Einar Lielmanis <einar@jsbeautifier.org>
4
+ #
5
+ # written by Stefano Sanfilippo <a.little.coder@gmail.com>
6
+ #
7
+ # usage:
8
+ #
9
+ # if detect(some_string):
10
+ # unpacked = unpack(some_string)
11
+ #
12
+
13
+ """Unpacker for Dean Edward's p.a.c.k.e.r"""
14
+
15
+ import re
16
+ import string
17
+ from jsbeautifier.unpackers import UnpackingError
18
+
19
+ PRIORITY = 1
20
+
21
+ def detect(source):
22
+ """Detects whether `source` is P.A.C.K.E.R. coded."""
23
+ return source.replace(' ', '').startswith('eval(function(p,a,c,k,e,r')
24
+
25
+ def unpack(source):
26
+ """Unpacks P.A.C.K.E.R. packed js code."""
27
+ payload, symtab, radix, count = _filterargs(source)
28
+
29
+ if count != len(symtab):
30
+ raise UnpackingError('Malformed p.a.c.k.e.r. symtab.')
31
+
32
+ try:
33
+ unbase = Unbaser(radix)
34
+ except TypeError:
35
+ raise UnpackingError('Unknown p.a.c.k.e.r. encoding.')
36
+
37
+ def lookup(match):
38
+ """Look up symbols in the synthetic symtab."""
39
+ word = match.group(0)
40
+ return symtab[unbase(word)] or word
41
+
42
+ source = re.sub(r'\b\w+\b', lookup, payload)
43
+ return _replacestrings(source)
44
+
45
+ def _filterargs(source):
46
+ """Juice from a source file the four args needed by decoder."""
47
+ argsregex = (r"}\('(.*)', *(\d+), *(\d+), *'(.*)'\."
48
+ r"split\('\|'\), *(\d+), *(.*)\)\)")
49
+ args = re.search(argsregex, source, re.DOTALL).groups()
50
+
51
+ try:
52
+ return args[0], args[3].split('|'), int(args[1]), int(args[2])
53
+ except ValueError:
54
+ raise UnpackingError('Corrupted p.a.c.k.e.r. data.')
55
+
56
+ def _replacestrings(source):
57
+ """Strip string lookup table (list) and replace values in source."""
58
+ match = re.search(r'var *(_\w+)\=\["(.*?)"\];', source, re.DOTALL)
59
+
60
+ if match:
61
+ varname, strings = match.groups()
62
+ startpoint = len(match.group(0))
63
+ lookup = strings.split('","')
64
+ variable = '%s[%%d]' % varname
65
+ for index, value in enumerate(lookup):
66
+ source = source.replace(variable % index, '"%s"' % value)
67
+ return source[startpoint:]
68
+ return source
69
+
70
+
71
+ class Unbaser(object):
72
+ """Functor for a given base. Will efficiently convert
73
+ strings to natural numbers."""
74
+ ALPHABET = {
75
+ 62 : '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
76
+ 95 : (' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
77
+ '[\]^_`abcdefghijklmnopqrstuvwxyz{|}~')
78
+ }
79
+
80
+ def __init__(self, base):
81
+ self.base = base
82
+
83
+ # If base can be handled by int() builtin, let it do it for us
84
+ if 2 <= base <= 36:
85
+ self.unbase = lambda string: int(string, base)
86
+ else:
87
+ # Build conversion dictionary cache
88
+ try:
89
+ self.dictionary = dict((cipher, index) for
90
+ index, cipher in enumerate(self.ALPHABET[base]))
91
+ except KeyError:
92
+ raise TypeError('Unsupported base encoding.')
93
+
94
+ self.unbase = self._dictunbaser
95
+
96
+ def __call__(self, string):
97
+ return self.unbase(string)
98
+
99
+ def _dictunbaser(self, string):
100
+ """Decodes a value to an integer."""
101
+ ret = 0
102
+ for index, cipher in enumerate(string[::-1]):
103
+ ret += (self.base ** index) * self.dictionary[cipher]
104
+ return ret
@@ -0,0 +1,2 @@
1
+ # Empty file :)
2
+ # pylint: disable=C0111
@@ -0,0 +1 @@
1
+ var OO0=["\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B\x2F\x3D","","\x63\x68\x61\x72\x41\x74","\x69\x6E\x64\x65\x78\x4F\x66","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","\x6C\x65\x6E\x67\x74\x68"];function _1OO(_0IO){var _011=OO0[0];var lOO,O10,_0ll,OlO,_01O,IOO,I01,_001,_11O=0,Ol0=OO0[1];do{OlO=_011[OO0[3]](_0IO[OO0[2]](_11O++));_01O=_011[OO0[3]](_0IO[OO0[2]](_11O++));IOO=_011[OO0[3]](_0IO[OO0[2]](_11O++));I01=_011[OO0[3]](_0IO[OO0[2]](_11O++));_001=OlO<<18|_01O<<12|IOO<<6|I01;lOO=_001>>16&0xff;O10=_001>>8&0xff;_0ll=_001&0xff;if(IOO==64){Ol0+=String[OO0[4]](lOO);}else{if(I01==64){Ol0+=String[OO0[4]](lOO,O10);}else{Ol0+=String[OO0[4]](lOO,O10,_0ll);};};} while(_11O<_0IO[OO0[5]]);return Ol0;};function O0I(O11){var OO1=OO0[1],_11O=0;for(_11O=O11[OO0[5]]-1;_11O>=0;_11O--){OO1+=O11[OO0[2]](_11O);};return OO1;};var _0OO='=sTKpUGchN2cl9FKlBXYjNXZuVHKlRXaydnL05WZtV3YvR2Op80TPhCZslGaDRmblBHch5SMwwmC70FMblyJkFWZodCKl1WYOdWYUlnQzRnbl1WZsVEdldmL05WZtV3YvRGI9ASMwwGIyFmdKsTKMJVVuQnbl1Wdj9GZoQnbl52bw12bDlkUVVGZvNmbltyJ9wmc1ZyJrkiclJnclZWZy5CduVWb1N2bkhCduVmbvBXbvNUSSVVZk92YuV2Kn0jZlJnJnsyJr9WPjJ3c0V2Z/8SbvNmLlRXYjNXdmJ2b51mLpBXYv8iOwRHdodCI9AyYyNnLP90TKsTKnQHcpJ3YzdCK05WZtVGbFVGdhVmcj5CduVWb1N2bkBSPg80TPBichZ3OnU0MlQHcpJ3Yz9yQzUSQwUCR3USQwUCR3UCMyUCMyUCMyUCMyUSQwUiQzUCdwITJuJXd0VmcwITJwITJwITJwITJwITJwITJwITJwITJBBTJCNTJ5ITJlNHbhZGMyUyQyUyNyUyNyUCOyUCdjVGc4VmL0BjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlEEMlI0MlkjMlUWdyRHMyUyQyUyNyUSY3ITJ4ITJ0NWZwhXZuQHMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiQzUSOyUSZzxWYmBjMlMkMlcjMlQ2YidjMlgjMlQ3YlBHel5CdwITJwITJwITJwITJwITJwITJwITJwITJBBTJCNTJ5ITJlVnc0BjMlMkMlcjMlMmYhdjMlgjMlQ3YlBHel5CdwITJwITJwITJwITJwITJwITJwITJwITJBBTJCNTJ5ITJyITJ5ITJhBjMlMkMlY0MlgjMlgGdpd3XzRnchR3cf5iUfV0XL91QfF0XQJjMlAjMlMkMlE2XoRXa391c0JXY0NHOyUibvlGdj5Wdm9FdzVGduQHMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUCR3UCMyUiQzUSOyUyNyUSY3ITJwITJDJTJ0FGa3hjMlgGdpd3XzRnchR3cf5iUfV0XL91QfF0XQBjMl4mc1RXZyBjMlI0NlAjMlkjMlQXYodHOyUibvlGdj5WdmBjMlQ0MlAjMlE2XoRXa391c0JXY0NHMyUichZHMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUSQwUiQzUSOyUyNyUSMENTJhBjMlIXY2djMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlEEMlMkMlIjMlkjMlkjMlQ0NlI0NlMkMlAzQyUSOyUyNyUyQ3UyNyUCOyUCdpxGcz5yNyUSYDdTJDdTJyFmd3ITJDJTJzMkMlMzQyUyNyUSMENTJyAjMlAzNyUCOyUCR3UCcwITJuJXd0VmcCNTJ5ITJEVTJjJUNls2QyUSOyUyNyUyZ3ITJDJTJ3ITJiNUNlMUNlMUNlMUNlcjMlsSOyUyY4ITJltyNyUiYDVTJDVTJDVTJDVTJ3ITJ4ITJwhXRnVmUwITJ3Vmb4ITJlNWYsBXZy5CcENTJwljMlQUNlMmQ1Uya4ITJmlWOyUSLtMGOyUSZslGa3J0MlQ0NlEDRzUyYCNTJEdTJ3ITJrc3Q1UyQ1UyQ1UyQ1UyNyUibyVHdlJnQ3USOyUCOyUibvlGdj5WdmR0MlUmQzUCR1UCR3UCR1USZCVTJyBjMl4mc1RXZyJ0NlkjMlUGOyUibvlGdj5WdmJUNlQ0MlsmQzUyYDdTJDdTJEVTJjJUNlsGRzUCR1UyYCVTJyljMl0SLjhjMlUGbph2dCdTJ5ITJ5ITJn5WayR3UDJTJvUUNl8COyUSZjFGbwVmcucjMlcjMlEjMlgjMlYWaCNTJn5WayR3UENTJlJ0NlkjMlI3QyUSZDJTJrNkMlM2QyUSYDJTJwhjMl42bpR3YuVnZ4ITJsFmdlJjMlgjMlQ3YlBHel5CdwITJwITJwITJwITJwITJwITJwITJwITJBBTJCNTJ5ITJ3ITJrNWYw5WduI1XF91SfN0XB9FU3ITJwITJDJTJrNWYw5WduI1XF91SfN0XB9FU4ITJu9Wa0Nmb1Z2X0NXZ05CdwITJwITJwITJwITJwITJwITJwITJwITJBBTJBBTJCNTJ5ITJlVnc0BjMlMkMlcjMlIHMyUyQyUSZwITJDJTJrBjMlMkMlMGMyUyQyUSYwITJDJTJwhjMl42bpR3YuVnZwITJ4ITJwITJsFmdldjMlgjMlQ3YlBHel5CdwITJwITJwITJwITJwITJwITJwITJwITJBBTJCNTJ5ITJlVnc0BjMlMkMlcjMlI3QyUSZDJTJrNkMlM2QyUSYDJTJwhjMl42bpR3YuVnZ4ITJsFmdldjMlgjMlQ3YlBHel5CdwITJwITJwITJwITJwITJwITJwITJwITJBBTJCNTJ5ITJlNHbhZGMyUyQyUyNyUiYwITJENTJwITJhBjMlIXY2djMlgjMlQ3YlBHel5CdwITJwITJwITJwITJwITJwITJwITJwITJBBTJCNTJ5ITJlNHbhZGMyUyQyUyNyUyNyUCOyUCdjVGc4VmL0BjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlEEMlI0MlkjMlIjMlQ3YlRXZk5iUfV0XL91QfF0XQJjMlAjMlMkMlQ3YlRXZk5iUfV0XL91QfF0XQhjMl42bpR3YuVnZfR3clRnL0BjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlEEMlI0MlkjMlgjMlQ3clRVe0lmbhNFMyUydl5GMyUyQ3UyQ3UCMyUCdzVGdflHdp5WYzBjMlQ0MlAjMlQHMyUichZHMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiQ3UCMyUSOyUCdzVGdflHdp5WYzhjMlAjMl42bpR3YuVnZwITJBNTJzR3clR3XuVncwITJwITJwITJwITJBBTJBBTJDJTJEdTJwITJwITJwITJwITJBBTJCNTJ0FGa3BjMlQ0MlQ0MlQ0MlAjMlkjMlgGdn5WZs5Cdhh2dwITJDJTJwgjMlIHdzJWdz5ic0NHMyUibyVHdlJHMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiQ3UCMyUSOyUCdhh2dwITJDJTJyR3c4ITJwITJu9Wa0Nmb1ZGMyUSQzUCa0l2dfNHdyFGdz9FMyUCMyUCMyUCMyUSQwUSQwUyQyUCR3UCMyUCMyUCMyUCMyUSQwUiQzUic0NHMyUibyVHdlJHMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUCR3UCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUCR3UCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiLyV2c1BjMl42bwITJn5WaoNXYyNGMyUiZvBjMlQWYlR3culGMyUyQyUCbh5WanlmcvBjMlUGa0BjMl4mc1RXZyBjMlQ3c1pGMyUCbsdjMlU2dwITJuQWZslWYmBjMlQXawITJDJTJsxWZ3BjMl8yLwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJBBTJCdTJwITJ5ITJy9mcyVGOyUCMyUCajRXYjBjMlQ0NlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlEEMlQ0NlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlEEMlI0MlU2YyV3bz9FZlt2YhBnb1BjMlQ0MlAjMlIHdzBjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlEEMlI0NlAjMlkjMlU2YyV3bz9FZlt2YhBnb1BjMlYjMlYjMlAjMlcjMlcmbpJHdzdjMlAjMlQ0MlQ0MlAjMlU2YyV3bz9FZlt2YhBnb1BjMlY2blBXe0hjMlAjMlYWawITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJBBTJ5ITJ3ITJCNTJ3ITJwITJrAjMlkjMlQDOyUyZulmc0NnY1NnLyR3cwITJrAjMlcjMlAjMlQ0MlAjMlU2YyV3bz9FZlt2YhBnb1djMlgjMlwWY2VGMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiQ3UCMyUSeyRHMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSQwUiQ3UCMyUSOyUSOyUic0NHOyUCdjVGdlRmLS9VRft0XD9VQfBFOyUCMyUiZpBjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlEEMlI0MlcjMlcjMlAjMlQ0MlAjMlU2YyV3bz9FZlt2YhBnb1BjMlIXY2BjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlEEMlI0NlAjMlkjMlIHdzhjMlAjMl42bpR3YuVnZwITJBNTJrNWYw5WdwITJwITJwITJwITJBBTJBBTJDJTJEdTJwITJwITJwITJwITJBBTJCNTJwITJ5ITJ3ITJ4ITJu9Wa0Nmb1ZGOyUCOyUCbhZXZ3ITJwITJDJTJ5ITJ3ITJ3ITJwITJDJTJn9yKwITJvgjMlU2YhxGclJnL5ITJ4ITJlNXYDJXZ39GTvRnLyR3c4ITJoRXa391c0JXY0N3XuI1XF91SfN0XB9FUwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJBBTJDdTJDdTJwITJ5ITJ3ITJ4ITJu9Wa0Nmb1ZGOyUCbhZXZ3ITJwITJDJTJ5ITJ3ITJ3ITJwITJDJTJn9yKwITJvgjMlU2YhxGclJnL5ITJ4ITJlNXYDJXZ39GTvRnLyR3c4ITJoRXa391c0JXY0N3XuI1XF91SfN0XB9FUwITJuJXd0VmcwITJwITJwITJwITJwITJwITJwITJwITJBBTJCdTJwITJ5ITJyR3c4ITJwITJu9Wa0Nmb1ZGMyUSQzUCdjVGdlRGMyUCMyUCMyUCMyUSQwUiQ3UCMyUCRzUCMyUiUfV0XL91QfF0XQBjMlIXY2FEMlEEMl8yLBBTJv8SQwUCR3UCMyUyLvEEMlI0MlkjMlcmbpJHdz9VZt92c4ITJrNWYw5WduI1XF91SfN0XB9FUwITJENTJwITJkV2ajFGcuVHMyUichZHMyUCMyUCMyUCMyUCMyUyLvEEMlI0NlAjMlkjMlkjMlcmbpJHdz9VZt92c4ITJ0NWZ0VGZuI1XF91SfN0XB9FU4ITJwITJmlGMyUyLvEEMl8yLBBTJBNTJldWYzVHMyUyLvEEMl8yLBBTJuMncvN3clJHct92YwITJkV2chJWLsFmdlBjMlIXZoR3bwITJm9GMyUSZsBXdvNGMyUSYwITJ0FWZmVGZwITJuF2YwITJ0lGMyUyQyUSesxWY05WZkl2Yul2bDBjMl8yLBBTJv8SQwUSRzUyZy9mLyVWamlGd1FWZiNnaAJXYulWZDNTJwITJzlmbh1GbllGTwITJyFmbpVEMyUSeiBjMl4WZ0RXaydHMyUyLvEEMlIXZpZWa0VXYlJGMyUCdwlmcjNXY2FmawITJm9GMyUCdyFGcwITJhBjMlMkMlInLl5yauMmLh5CcwITJzdjMlQmchdHZFBjMl4WYlREMyUicvZGMyUiclt2YhBnbVBjMl8yLBBTJv8SRzUCdwlmcjN3QzUyJ9UGchN2cl9FIyFmd';eval(_1OO(O0I(_0OO)));
@@ -0,0 +1,65 @@
1
+ //
2
+ // Unpacker warning: be careful when using myobfuscate.com for your projects:
3
+ // scripts obfuscated by the free online version call back home.
4
+ //
5
+
6
+ //
7
+ // Unpacker for Dean Edward's p.a.c.k.e.r, a part of javascript beautifier
8
+ // written by Einar Lielmanis <einar@jsbeautifier.org>
9
+ //
10
+ // Coincidentally, it can defeat a couple of other eval-based compressors.
11
+ //
12
+ // usage:
13
+ //
14
+ // if (P_A_C_K_E_R.detect(some_string)) {
15
+ // var unpacked = P_A_C_K_E_R.unpack(some_string);
16
+ // }
17
+ //
18
+ //
19
+
20
+ var P_A_C_K_E_R = {
21
+ detect: function (str) {
22
+ return P_A_C_K_E_R._starts_with(str.toLowerCase().replace(/ +/g, ''), 'eval(function(') ||
23
+ P_A_C_K_E_R._starts_with(str.toLowerCase().replace(/ +/g, ''), 'eval((function(') ;
24
+ },
25
+
26
+ unpack: function (str) {
27
+ var unpacked_source = '';
28
+ if (P_A_C_K_E_R.detect(str)) {
29
+ try {
30
+ eval('unpacked_source = ' + str.substring(4) + ';')
31
+ if (typeof unpacked_source == 'string' && unpacked_source) {
32
+ str = unpacked_source;
33
+ }
34
+ } catch (error) {
35
+ // well, it failed. we'll just return the original, instead of crashing on user.
36
+ }
37
+ }
38
+ return str;
39
+ },
40
+
41
+ _starts_with: function (str, what) {
42
+ return str.substr(0, what.length) === what;
43
+ },
44
+
45
+ run_tests: function (sanity_test) {
46
+ var t = sanity_test || new SanityTest();
47
+ t.test_function(P_A_C_K_E_R.detect, "P_A_C_K_E_R.detect");
48
+ t.expect('', false);
49
+ t.expect('var a = b', false);
50
+ t.expect('eval(function(p,a,c,k,e,r', true);
51
+ t.expect('eval ( function(p, a, c, k, e, r', true);
52
+
53
+ t.test_function(P_A_C_K_E_R.unpack, 'P_A_C_K_E_R.unpack');
54
+ t.expect("eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('0 2=1',3,3,'var||a'.split('|'),0,{}))",
55
+ 'var a=1');
56
+
57
+ var starts_with_a = function(what) { return P_A_C_K_E_R._starts_with(what, 'a'); }
58
+ t.test_function(starts_with_a, "P_A_C_K_E_R._starts_with(?, a)");
59
+ t.expect('abc', true);
60
+ t.expect('bcd', false);
61
+ t.expect('a', true);
62
+ t.expect('', false);
63
+ return t;
64
+ }
65
+ }