UNPKG

34.8 kBJavaScriptView Raw
1'use strict';
2
3var hexcase = 0;
4var b64pad = '';
5var chrsz = 8;
6
7function hex_md5(s) {
8 return binl2hex(core_md5(str2binl(s), s.length * chrsz));
9}
10
11function b64_md5(s) {
12 return binl2b64(core_md5(str2binl(s), s.length * chrsz));
13}
14
15function str_md5(s) {
16 return binl2str(core_md5(str2binl(s), s.length * chrsz));
17}
18
19function hex_hmac_md5(key, data) {
20 return binl2hex(core_hmac_md5(key, data));
21}
22
23function b64_hmac_md5(key, data) {
24 return binl2b64(core_hmac_md5(key, data));
25}
26
27function str_hmac_md5(key, data) {
28 return binl2str(core_hmac_md5(key, data));
29}
30
31function md5_vm_test() {
32 return hex_md5('abc') == '900150983cd24fb0d6963f7d28e17f72';
33}
34
35function core_md5(x, len) {
36 x[len >> 5] |= 0x80 << len % 32;
37 x[(len + 64 >>> 9 << 4) + 14] = len;
38 var a = 1732584193;
39 var b = -271733879;
40 var c = -1732584194;
41 var d = 271733878;
42 for (var i = 0; i < x.length; i += 16) {
43 var olda = a;
44 var oldb = b;
45 var oldc = c;
46 var oldd = d;
47 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
48 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
49 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
50 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
51 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
52 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
53 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
54 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
55 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
56 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
57 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
58 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
59 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
60 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
61 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
62 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
63 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
64 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
65 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
66 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
67 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
68 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
69 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
70 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
71 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
72 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
73 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
74 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
75 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
76 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
77 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
78 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
79 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
80 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
81 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
82 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
83 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
84 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
85 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
86 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
87 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
88 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
89 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
90 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
91 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
92 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
93 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
94 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
95 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
96 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
97 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
98 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
99 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
100 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
101 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
102 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
103 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
104 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
105 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
106 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
107 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
108 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
109 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
110 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
111 a = safe_add(a, olda);
112 b = safe_add(b, oldb);
113 c = safe_add(c, oldc);
114 d = safe_add(d, oldd);
115 }
116 return Array(a, b, c, d);
117}
118
119function md5_cmn(q, a, b, x, s, t) {
120 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
121}
122
123function md5_ff(a, b, c, d, x, s, t) {
124 return md5_cmn(b & c | ~b & d, a, b, x, s, t);
125}
126
127function md5_gg(a, b, c, d, x, s, t) {
128 return md5_cmn(b & d | c & ~d, a, b, x, s, t);
129}
130
131function md5_hh(a, b, c, d, x, s, t) {
132 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
133}
134
135function md5_ii(a, b, c, d, x, s, t) {
136 return md5_cmn(c ^ (b | ~d), a, b, x, s, t);
137}
138
139function core_hmac_md5(key, data) {
140 var bkey = str2binl(key);
141 if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
142 var ipad = Array(16),
143 opad = Array(16);
144 for (var i = 0; i < 16; i++) {
145 ipad[i] = bkey[i] ^ 0x36363636;
146 opad[i] = bkey[i] ^ 0x5C5C5C5C;
147 }
148 var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
149 return core_md5(opad.concat(hash), 512 + 128);
150}
151
152function safe_add(x, y) {
153 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
154 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
155 return msw << 16 | lsw & 0xFFFF;
156}
157
158function bit_rol(num, cnt) {
159 return num << cnt | num >>> 32 - cnt;
160}
161
162function str2binl(str) {
163 var bin = Array();
164 var mask = (1 << chrsz) - 1;
165 for (var i = 0; i < str.length * chrsz; i += chrsz) {
166 bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32;
167 }return bin;
168}
169
170function binl2str(bin) {
171 var str = '';
172 var mask = (1 << chrsz) - 1;
173 for (var i = 0; i < bin.length * 32; i += chrsz) {
174 str += String.fromCharCode(bin[i >> 5] >>> i % 32 & mask);
175 }return str;
176}
177
178function binl2hex(binarray) {
179 var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef';
180 var str = '';
181 for (var i = 0; i < binarray.length * 4; i++) {
182 str += hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 0xF) + hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 & 0xF);
183 }
184 return str;
185}
186
187function binl2b64(binarray) {
188 var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
189 var str = '';
190 for (var i = 0; i < binarray.length * 4; i += 3) {
191 var triplet = (binarray[i >> 2] >> 8 * (i % 4) & 0xFF) << 16 | (binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4) & 0xFF) << 8 | binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4) & 0xFF;
192 for (var j = 0; j < 4; j++) {
193 if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;else str += tab.charAt(triplet >> 6 * (3 - j) & 0x3F);
194 }
195 }
196 return str;
197}
198
199module.exports = { hex_md5: hex_md5 };
200//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1kNS5qcyJdLCJuYW1lcyI6WyJoZXhjYXNlIiwiYjY0cGFkIiwiY2hyc3oiLCJoZXhfbWQ1IiwicyIsImJpbmwyaGV4IiwiY29yZV9tZDUiLCJzdHIyYmlubCIsImxlbmd0aCIsImI2NF9tZDUiLCJiaW5sMmI2NCIsInN0cl9tZDUiLCJiaW5sMnN0ciIsImhleF9obWFjX21kNSIsImtleSIsImRhdGEiLCJjb3JlX2htYWNfbWQ1IiwiYjY0X2htYWNfbWQ1Iiwic3RyX2htYWNfbWQ1IiwibWQ1X3ZtX3Rlc3QiLCJ4IiwibGVuIiwiYSIsImIiLCJjIiwiZCIsImkiLCJvbGRhIiwib2xkYiIsIm9sZGMiLCJvbGRkIiwibWQ1X2ZmIiwibWQ1X2dnIiwibWQ1X2hoIiwibWQ1X2lpIiwic2FmZV9hZGQiLCJBcnJheSIsIm1kNV9jbW4iLCJxIiwidCIsImJpdF9yb2wiLCJia2V5IiwiaXBhZCIsIm9wYWQiLCJoYXNoIiwiY29uY2F0IiwieSIsImxzdyIsIm1zdyIsIm51bSIsImNudCIsInN0ciIsImJpbiIsIm1hc2siLCJjaGFyQ29kZUF0IiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiYmluYXJyYXkiLCJoZXhfdGFiIiwiY2hhckF0IiwidGFiIiwidHJpcGxldCIsImoiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUlBLFVBQVUsQ0FBZDtBQUNBLElBQUlDLFNBQVMsRUFBYjtBQUNBLElBQUlDLFFBQVEsQ0FBWjs7QUFFQSxTQUFTQyxPQUFULENBQWtCQyxDQUFsQixFQUFxQjtBQUNuQixTQUFPQyxTQUFTQyxTQUFTQyxTQUFTSCxDQUFULENBQVQsRUFBc0JBLEVBQUVJLE1BQUYsR0FBV04sS0FBakMsQ0FBVCxDQUFQO0FBQ0Q7O0FBRUQsU0FBU08sT0FBVCxDQUFrQkwsQ0FBbEIsRUFBcUI7QUFDbkIsU0FBT00sU0FBU0osU0FBU0MsU0FBU0gsQ0FBVCxDQUFULEVBQXNCQSxFQUFFSSxNQUFGLEdBQVdOLEtBQWpDLENBQVQsQ0FB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a0QsT0FBT1MsSUFBSUQsTUFBSixDQUFZRSxXQUFXLEtBQUssSUFBSUMsQ0FBVCxDQUFaLEdBQTJCLElBQXRDLENBQVA7QUFDL0Q7QUFDRjtBQUNELFNBQU9YLEdBQVA7QUFDRDs7QUFFRFksT0FBT0MsT0FBUCxHQUFpQixFQUFFN0QsU0FBU0EsT0FBWCxFQUFqQiIsImZpbGUiOiJtZDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGV4Y2FzZSA9IDBcbnZhciBiNjRwYWQgPSAnJ1xudmFyIGNocnN6ID0gOFxuXG5mdW5jdGlvbiBoZXhfbWQ1IChzKSB7XG4gIHJldHVybiBiaW5sMmhleChjb3JlX21kNShzdHIyYmlubChzKSwgcy5sZW5ndGggKiBjaHJzeikpXG59XG5cbmZ1bmN0aW9uIGI2NF9tZDUgKHMpIHtcbiAgcmV0dXJuIGJpbmwyYjY0KGNvcmVfbWQ1KHN0cjJiaW5sKHMpLCBzLmxlbmd0aCAqIGNocnN6KSlcbn1cblxuZnVuY3Rpb24gc3RyX21kNSAocykge1xuICByZXR1cm4gYmlubDJzdHIoY29yZV9tZDUoc3RyMmJpbmwocyksIHMubGVuZ3RoICogY2hyc3opKVxufVxuXG5mdW5jdGlvbiBoZXhfaG1hY19tZDUgKGtleSwgZGF0YSkge1xuICByZXR1cm4gYmlubDJoZXgoY29yZV9obWFjX21kNShrZXksIGRhdGEpKVxufVxuXG5mdW5jdGlvbiBiNjRfaG1hY19tZDUgKGtleSwgZGF0YSkge1xuICByZXR1cm4gYmlubDJiNjQoY29yZV9obWFjX21kNShrZXksIGRhdGEpKVxufVxuXG5mdW5jdGlvbiBzdHJfaG1hY19tZDUgKGtleSwgZGF0YSkge1xuICByZXR1cm4gYmlubDJzdHIoY29yZV9obWFjX21kNShrZXksIGRhdGEpKVxufVxuXG5mdW5jdGlvbiBtZDVfdm1fdGVzdCAoKSB7XG4gIHJldHVybiBoZXhfbWQ1KCdhYmMnKSA9PSAnOTAwMTUwOTgzY2QyNGZiMGQ2OTYzZjdkMjhlMTdmNzInXG59XG5cbmZ1bmN0aW9uIGNvcmVfbWQ1ICh4LCBsZW4pIHtcbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCAoKGxlbikgJSAzMilcbiAgeFsoKChsZW4gKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gbGVuXG4gIHZhciBhID0gMTczMjU4NDE5M1xuICB2YXIgYiA9IC0yNzE3MzM4NzlcbiAgdmFyIGMgPSAtMTczMjU4NDE5NFxuICB2YXIgZCA9IDI3MTczMzg3OFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgdmFyIG9sZGEgPSBhXG4gICAgdmFyIG9sZGIgPSBiXG4gICAgdmFyIG9sZGMgPSBjXG4gICAgdmFyIG9sZGQgPSBkXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAwXSwgNywgLTY4MDg3NjkzNilcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4NilcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KVxuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMClcbiAgICBhID0gbWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KVxuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KVxuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSlcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKVxuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpXG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KVxuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKVxuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpXG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpXG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MClcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMClcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSArIDZdLCA5LCAtMTA2OTUwMTYzMilcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsIDY0MzcxNzcxMylcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArIDBdLCAyMCwgLTM3Mzg5NzMwMilcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKVxuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgMTBdLCA5LCAzODAxNjA4MylcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTQsIC02NjA0NzgzMzUpXG4gICAgYiA9IG1kNV9nZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNSwgNTY4NDQ2NDM4KVxuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgMTRdLCA5LCAtMTAxOTgwMzY5MClcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSlcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArIDhdLCAyMCwgMTE2MzUzMTUwMSlcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNSwgLTE0NDQ2ODE0NjcpXG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KVxuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgN10sIDE0LCAxNzM1MzI4NDczKVxuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgMTJdLCAyMCwgLTE5MjY2MDc3MzQpXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNCwgLTM3ODU1OClcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArIDhdLCAxMSwgLTIwMjI1NzQ0NjMpXG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE2LCAxODM5MDMwNTYyKVxuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgMTRdLCAyMywgLTM1MzA5NTU2KVxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgMV0sIDQsIC0xNTMwOTkyMDYwKVxuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgNF0sIDExLCAxMjcyODkzMzUzKVxuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgN10sIDE2LCAtMTU1NDk3NjMyKVxuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDQsIDY4MTI3OTE3NClcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArIDBdLCAxMSwgLTM1ODUzNzIyMilcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNiwgLTcyMjUyMTk3OSlcbiAgICBiID0gbWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArIDZdLCAyMywgNzYwMjkxODkpXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNCwgLTY0MDM2NDQ4NylcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArIDEyXSwgMTEsIC00MjE4MTU4MzUpXG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCA1MzA3NDI1MjApXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyAyXSwgMjMsIC05OTUzMzg2NTEpXG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyAwXSwgNiwgLTE5ODYzMDg0NClcbiAgICBkID0gbWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSlcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KVxuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpXG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpXG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KVxuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpXG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNzk5KVxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpXG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpXG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKVxuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSlcbiAgICBhID0gbWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKVxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpXG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSlcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSlcbiAgICBhID0gc2FmZV9hZGQoYSwgb2xkYSlcbiAgICBiID0gc2FmZV9hZGQoYiwgb2xkYilcbiAgICBjID0gc2FmZV9hZGQoYywgb2xkYylcbiAgICBkID0gc2FmZV9hZGQoZCwgb2xkZClcbiAgfVxuICByZXR1cm4gQXJyYXkoYSwgYiwgYywgZClcbn1cblxuZnVuY3Rpb24gbWQ1X2NtbiAocSwgYSwgYiwgeCwgcywgdCkge1xuICByZXR1cm4gc2FmZV9hZGQoYml0X3JvbChzYWZlX2FkZChzYWZlX2FkZChhLCBxKSwgc2FmZV9hZGQoeCwgdCkpLCBzKSwgYilcbn1cblxuZnVuY3Rpb24gbWQ1X2ZmIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVfY21uKChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KVxufVxuXG5mdW5jdGlvbiBtZDVfZ2cgKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNV9jbW4oKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpXG59XG5cbmZ1bmN0aW9uIG1kNV9oaCAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1X2NtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpXG59XG5cbmZ1bmN0aW9uIG1kNV9paSAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1X2NtbihjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdClcbn1cblxuZnVuY3Rpb24gY29yZV9obWFjX21kNSAoa2V5LCBkYXRhKSB7XG4gIHZhciBia2V5ID0gc3RyMmJpbmwoa2V5KVxuICBpZiAoYmtleS5sZW5ndGggPiAxNikgYmtleSA9IGNvcmVfbWQ1KGJrZXksIGtleS5sZW5ndGggKiBjaHJzeilcbiAgdmFyIGlwYWQgPSBBcnJheSgxNiksIG9wYWQgPSBBcnJheSgxNilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgaXBhZFtpXSA9IGJrZXlbaV0gXiAweDM2MzYzNjM2XG4gICAgb3BhZFtpXSA9IGJrZXlbaV0gXiAweDVDNUM1QzVDXG4gIH1cbiAgdmFyIGhhc2ggPSBjb3JlX21kNShpcGFkLmNvbmNhdChzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogY2hyc3opXG4gIHJldHVybiBjb3JlX21kNShvcGFkLmNvbmNhdChoYXNoKSwgNTEyICsgMTI4KVxufVxuXG5mdW5jdGlvbiBzYWZlX2FkZCAoeCwgeSkge1xuICB2YXIgbHN3ID0gKHggJiAweEZGRkYpICsgKHkgJiAweEZGRkYpXG4gIHZhciBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KVxuICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhGRkZGKVxufVxuXG5mdW5jdGlvbiBiaXRfcm9sIChudW0sIGNudCkge1xuICByZXR1cm4gKG51bSA8PCBjbnQpIHwgKG51bSA+Pj4gKDMyIC0gY250KSlcbn1cblxuZnVuY3Rpb24gc3RyMmJpbmwgKHN0cikge1xuICB2YXIgYmluID0gQXJyYXkoKVxuICB2YXIgbWFzayA9ICgxIDw8IGNocnN6KSAtIDFcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoICogY2hyc3o7IGkgKz0gY2hyc3opIGJpbltpID4+IDVdIHw9IChzdHIuY2hhckNvZGVBdChpIC8gY2hyc3opICYgbWFzaykgPDwgKGkgJSAzMilcbiAgcmV0dXJuIGJpblxufVxuXG5mdW5jdGlvbiBiaW5sMnN0ciAoYmluKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWFzayA9ICgxIDw8IGNocnN6KSAtIDFcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW4ubGVuZ3RoICogMzI7IGkgKz0gY2hyc3opIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChiaW5baSA+PiA1XSA+Pj4gKGkgJSAzMikpICYgbWFzaylcbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBiaW5sMmhleCAoYmluYXJyYXkpIHtcbiAgdmFyIGhleF90YWIgPSBoZXhjYXNlID8gJzAxMjM0NTY3ODlBQkNERUYnIDogJzAxMjM0NTY3ODlhYmNkZWYnXG4gIHZhciBzdHIgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJpbmFycmF5Lmxlbmd0aCAqIDQ7IGkrKykge1xuICAgIHN0ciArPSBoZXhfdGFiLmNoYXJBdCgoYmluYXJyYXlbaSA+PiAyXSA+PiAoKGkgJSA0KSAqIDggKyA0KSkgJiAweEYpICsgaGV4X3RhYi5jaGFyQXQoKGJpbmFycmF5W2kgPj4gMl0gPj4gKChpICUgNCkgKiA4KSkgJiAweEYpXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBiaW5sMmI2NCAoYmluYXJyYXkpIHtcbiAgdmFyIHRhYiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuICB2YXIgc3RyID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW5hcnJheS5sZW5ndGggKiA0OyBpICs9IDMpIHtcbiAgICB2YXIgdHJpcGxldCA9ICgoKGJpbmFycmF5W2kgPj4gMl0gPj4gOCAqIChpICUgNCkpICYgMHhGRikgPDwgMTYpIHwgKCgoYmluYXJyYXlbaSArIDEgPj4gMl0gPj4gOCAqICgoaSArIDEpICUgNCkpICYgMHhGRikgPDwgOCkgfCAoKGJpbmFycmF5W2kgKyAyID4+IDJdID4+IDggKiAoKGkgKyAyKSAlIDQpKSAmIDB4RkYpXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgIGlmIChpICogOCArIGogKiA2ID4gYmluYXJyYXkubGVuZ3RoICogMzIpIHN0ciArPSBiNjRwYWQ7IGVsc2Ugc3RyICs9IHRhYi5jaGFyQXQoKHRyaXBsZXQgPj4gNiAqICgzIC0gaikpICYgMHgzRilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgaGV4X21kNTogaGV4X21kNSB9XG4iXX0=
\No newline at end of file