md5.js
42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/script/game/md5.js';
var __require = nodeEnv ? function (request) {
return cc.require(request);
} : function (request) {
return __quick_compile_project__.require(request, __filename);
};
function __define (exports, require, module) {
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, 'd47eb8KOPRE5KRU6y0lCjUT', 'md5');
// script/game/md5.js
"use strict";
/*
* JavaScript MD5
* https://github.com/blueimp/JavaScript-MD5
*
* Copyright 2011, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* https://opensource.org/licenses/MIT
*
* Based on
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/
/* global define */
;
(function ($) {
'use strict';
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safeAdd(x, y) {
var lsw = (x & 0xffff) + (y & 0xffff);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return msw << 16 | lsw & 0xffff;
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function bitRotateLeft(num, cnt) {
return num << cnt | num >>> 32 - cnt;
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5cmn(q, a, b, x, s, t) {
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
}
function md5ff(a, b, c, d, x, s, t) {
return md5cmn(b & c | ~b & d, a, b, x, s, t);
}
function md5gg(a, b, c, d, x, s, t) {
return md5cmn(b & d | c & ~d, a, b, x, s, t);
}
function md5hh(a, b, c, d, x, s, t) {
return md5cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5ii(a, b, c, d, x, s, t) {
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
}
/*
* Calculate the MD5 of an array of little-endian words, and a bit length.
*/
function binlMD5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << len % 32;
x[(len + 64 >>> 9 << 4) + 14] = len;
var i;
var olda;
var oldb;
var oldc;
var oldd;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for (i = 0; i < x.length; i += 16) {
olda = a;
oldb = b;
oldc = c;
oldd = d;
a = md5ff(a, b, c, d, x[i], 7, -680876936);
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
b = md5gg(b, c, d, a, x[i], 20, -373897302);
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
d = md5hh(d, a, b, c, x[i], 11, -358537222);
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
a = md5ii(a, b, c, d, x[i], 6, -198630844);
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
a = safeAdd(a, olda);
b = safeAdd(b, oldb);
c = safeAdd(c, oldc);
d = safeAdd(d, oldd);
}
return [a, b, c, d];
}
/*
* Convert an array of little-endian words to a string
*/
function binl2rstr(input) {
var i;
var output = '';
var length32 = input.length * 32;
for (i = 0; i < length32; i += 8) {
output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff);
}
return output;
}
/*
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*/
function rstr2binl(input) {
var i;
var output = [];
output[(input.length >> 2) - 1] = undefined;
for (i = 0; i < output.length; i += 1) {
output[i] = 0;
}
var length8 = input.length * 8;
for (i = 0; i < length8; i += 8) {
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;
}
return output;
}
/*
* Calculate the MD5 of a raw string
*/
function rstrMD5(s) {
return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
}
/*
* Calculate the HMAC-MD5, of a key and some data (raw strings)
*/
function rstrHMACMD5(key, data) {
var i;
var bkey = rstr2binl(key);
var ipad = [];
var opad = [];
var hash;
ipad[15] = opad[15] = undefined;
if (bkey.length > 16) {
bkey = binlMD5(bkey, key.length * 8);
}
for (i = 0; i < 16; i += 1) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5c5c5c5c;
}
hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
}
/*
* Convert a raw string to a hex string
*/
function rstr2hex(input) {
var hexTab = '0123456789abcdef';
var output = '';
var x;
var i;
for (i = 0; i < input.length; i += 1) {
x = input.charCodeAt(i);
output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f);
}
return output;
}
/*
* Encode a string as utf-8
*/
function str2rstrUTF8(input) {
return unescape(encodeURIComponent(input));
}
/*
* Take string arguments and return either raw or hex encoded strings
*/
function rawMD5(s) {
return rstrMD5(str2rstrUTF8(s));
}
function hexMD5(s) {
return rstr2hex(rawMD5(s));
}
function rawHMACMD5(k, d) {
return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
}
function hexHMACMD5(k, d) {
return rstr2hex(rawHMACMD5(k, d));
}
function md5(string, key, raw) {
if (!key) {
if (!raw) {
return hexMD5(string);
}
return rawMD5(string);
}
if (!raw) {
return hexHMACMD5(key, string);
}
return rawHMACMD5(key, string);
}
if (typeof define === 'function' && define.amd) {
define(function () {
return md5;
});
} else if (typeof module === 'object' && module.exports) {
module.exports = md5;
} else {
$.md5 = md5;
}
})(void 0);
cc._RF.pop();
}
if (nodeEnv) {
__define(__module.exports, __require, __module);
}
else {
__quick_compile_project__.registerModuleFunc(__filename, function () {
__define(__module.exports, __require, __module);
});
}
})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvZ2FtZS9tZDUuanMiXSwibmFtZXMiOlsiJCIsInNhZmVBZGQiLCJ4IiwieSIsImxzdyIsIm1zdyIsImJpdFJvdGF0ZUxlZnQiLCJudW0iLCJjbnQiLCJtZDVjbW4iLCJxIiwiYSIsImIiLCJzIiwidCIsIm1kNWZmIiwiYyIsImQiLCJtZDVnZyIsIm1kNWhoIiwibWQ1aWkiLCJiaW5sTUQ1IiwibGVuIiwiaSIsIm9sZGEiLCJvbGRiIiwib2xkYyIsIm9sZGQiLCJsZW5ndGgiLCJiaW5sMnJzdHIiLCJpbnB1dCIsIm91dHB1dCIsImxlbmd0aDMyIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwicnN0cjJiaW5sIiwidW5kZWZpbmVkIiwibGVuZ3RoOCIsImNoYXJDb2RlQXQiLCJyc3RyTUQ1IiwicnN0ckhNQUNNRDUiLCJrZXkiLCJkYXRhIiwiYmtleSIsImlwYWQiLCJvcGFkIiwiaGFzaCIsImNvbmNhdCIsInJzdHIyaGV4IiwiaGV4VGFiIiwiY2hhckF0Iiwic3RyMnJzdHJVVEY4IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyYXdNRDUiLCJoZXhNRDUiLCJyYXdITUFDTUQ1IiwiayIsImhleEhNQUNNRDUiLCJtZDUiLCJzdHJpbmciLCJyYXciLCJkZWZpbmUiLCJhbWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBO0FBRUE7O0FBQUMsQ0FBQyxVQUFVQSxDQUFWLEVBQWE7QUFDYjtBQUVBOzs7OztBQUlBLFdBQVNDLE9BQVQsQ0FBa0JDLENBQWxCLEVBQXFCQyxDQUFyQixFQUF3QjtBQUN0QixRQUFJQyxHQUFHLEdBQUcsQ0FBQ0YsQ0FBQyxHQUFHLE1BQUwsS0FBZ0JDLENBQUMsR0FBRyxNQUFwQixDQUFWO0FBQ0EsUUFBSUUsR0FBRyxHQUFHLENBQUNILENBQUMsSUFBSSxFQUFOLEtBQWFDLENBQUMsSUFBSSxFQUFs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LEVBQUl4QyxDQUFKLENBQVgsQ0FBZjtBQUNEOztBQUVELFdBQVMwQyxHQUFULENBQWNDLE1BQWQsRUFBc0JuQixHQUF0QixFQUEyQm9CLEdBQTNCLEVBQWdDO0FBQzlCLFFBQUksQ0FBQ3BCLEdBQUwsRUFBVTtBQUNSLFVBQUksQ0FBQ29CLEdBQUwsRUFBVTtBQUNSLGVBQU9OLE1BQU0sQ0FBQ0ssTUFBRCxDQUFiO0FBQ0Q7O0FBQ0QsYUFBT04sTUFBTSxDQUFDTSxNQUFELENBQWI7QUFDRDs7QUFDRCxRQUFJLENBQUNDLEdBQUwsRUFBVTtBQUNSLGFBQU9ILFVBQVUsQ0FBQ2pCLEdBQUQsRUFBTW1CLE1BQU4sQ0FBakI7QUFDRDs7QUFDRCxXQUFPSixVQUFVLENBQUNmLEdBQUQsRUFBTW1CLE1BQU4sQ0FBakI7QUFDRDs7QUFFRCxNQUFJLE9BQU9FLE1BQVAsS0FBa0IsVUFBbEIsSUFBZ0NBLE1BQU0sQ0FBQ0MsR0FBM0MsRUFBZ0Q7QUFDOUNELElBQUFBLE1BQU0sQ0FBQyxZQUFZO0FBQ2pCLGFBQU9ILEdBQVA7QUFDRCxLQUZLLENBQU47QUFHRCxHQUpELE1BSU8sSUFBSSxPQUFPSyxNQUFQLEtBQWtCLFFBQWxCLElBQThCQSxNQUFNLENBQUNDLE9BQXpDLEVBQWtEO0FBQ3ZERCxJQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUJOLEdBQWpCO0FBQ0QsR0FGTSxNQUVBO0FBQ0wzRCxJQUFBQSxDQUFDLENBQUMyRCxHQUFGLEdBQVFBLEdBQVI7QUFDRDtBQUNGLENBbFFBIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogSmF2YVNjcmlwdCBNRDVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL0phdmFTY3JpcHQtTUQ1XG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIEJhc2VkIG9uXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlXG4gKiBEaWdlc3QgQWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIFJGQyAxMzIxLlxuICogVmVyc2lvbiAyLjIgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDA5XG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBtb3JlIGluZm8uXG4gKi9cblxuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG47KGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0J1xuXG4gIC8qXG4gICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxuICAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gICovXG4gIGZ1bmN0aW9uIHNhZmVBZGQgKHgsIHkpIHtcbiAgICB2YXIgbHN3ID0gKHggJiAweGZmZmYpICsgKHkgJiAweGZmZmYpXG4gICAgdmFyIG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpXG4gICAgcmV0dXJuIChtc3cgPDwgMTYpIHwgKGxzdyAmIDB4ZmZmZilcbiAgfVxuXG4gIC8qXG4gICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRvIHRoZSBsZWZ0LlxuICAqL1xuICBmdW5jdGlvbiBiaXRSb3RhdGVMZWZ0IChudW0sIGNudCkge1xuICAgIHJldHVybiAobnVtIDw8IGNudCkgfCAobnVtID4+PiAoMzIgLSBjbnQpKVxuICB9XG5cbiAgLypcbiAgKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmb3VyIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxuICAqL1xuICBmdW5jdGlvbiBtZDVjbW4gKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4gc2FmZUFkZChiaXRSb3RhdGVMZWZ0KHNhZmVBZGQoc2FmZUFkZChhLCBxKSwgc2FmZUFkZCh4LCB0KSksIHMpLCBiKVxuICB9XG4gIGZ1bmN0aW9uIG1kNWZmIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIG1kNWNtbigoYiAmIGMpIHwgKH5iICYgZCksIGEsIGIsIHgsIHMsIHQpXG4gIH1cbiAgZnVuY3Rpb24gbWQ1Z2cgKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4gbWQ1Y21uKChiICYgZCkgfCAoYyAmIH5kKSwgYSwgYiwgeCwgcywgdClcbiAgfVxuICBmdW5jdGlvbiBtZDVoaCAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiBtZDVjbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KVxuICB9XG4gIGZ1bmN0aW9uIG1kNWlpIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIG1kNWNtbihjIF4gKGIgfCB+ZCksIGEsIGIsIHgsIHMsIHQpXG4gIH1cblxuICAvKlxuICAqIENhbGN1bGF0ZSB0aGUgTUQ1IG9mIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMsIGFuZCBhIGJpdCBsZW5ndGguXG4gICovXG4gIGZ1bmN0aW9uIGJpbmxNRDUgKHgsIGxlbikge1xuICAgIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gICAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCAobGVuICUgMzIpXG4gICAgeFsoKGxlbiArIDY0KSA+Pj4gOSA8PCA0KSArIDE0XSA9IGxlblxuXG4gICAgdmFyIGlcbiAgICB2YXIgb2xkYVxuICAgIHZhciBvbGRiXG4gICAgdmFyIG9sZGNcbiAgICB2YXIgb2xkZFxuICAgIHZhciBhID0gMTczMjU4NDE5M1xuICAgIHZhciBiID0gLTI3MTczMzg3OVxuICAgIHZhciBjID0gLTE3MzI1ODQxOTRcbiAgICB2YXIgZCA9IDI3MTczMzg3OFxuXG4gICAgZm9yIChpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgICBvbGRhID0gYVxuICAgICAgb2xkYiA9IGJcbiAgICAgIG9sZGMgPSBjXG4gICAgICBvbGRkID0gZFxuXG4gICAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpXSwgNywgLTY4MDg3NjkzNilcbiAgICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxXSwgMTIsIC0zODk1NjQ1ODYpXG4gICAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE3LCA2MDYxMDU4MTkpXG4gICAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMClcbiAgICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA0XSwgNywgLTE3NjQxODg5NylcbiAgICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA1XSwgMTIsIDEyMDAwODA0MjYpXG4gICAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSlcbiAgICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyA3XSwgMjIsIC00NTcwNTk4MylcbiAgICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNywgMTc3MDAzNTQxNilcbiAgICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KVxuICAgICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTcsIC00MjA2MylcbiAgICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxMV0sIDIyLCAtMTk5MDQwNDE2MilcbiAgICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpXG4gICAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMTNdLCAxMiwgLTQwMzQxMTAxKVxuICAgICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTcsIC0xNTAyMDAyMjkwKVxuICAgICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpXG5cbiAgICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMClcbiAgICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyA2XSwgOSwgLTEwNjk1MDE2MzIpXG4gICAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgNjQzNzE3NzEzKVxuICAgICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaV0sIDIwLCAtMzczODk3MzAyKVxuICAgICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKVxuICAgICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgOSwgMzgwMTYwODMpXG4gICAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSlcbiAgICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpXG4gICAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgOV0sIDUsIDU2ODQ0NjQzOClcbiAgICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sIDksIC0xMDE5ODAzNjkwKVxuICAgICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSlcbiAgICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA4XSwgMjAsIDExNjM1MzE1MDEpXG4gICAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCA1LCAtMTQ0NDY4MTQ2NylcbiAgICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KVxuICAgICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNCwgMTczNTMyODQ3MylcbiAgICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNClcblxuICAgICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KVxuICAgICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDhdLCAxMSwgLTIwMjI1NzQ0NjMpXG4gICAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNiwgMTgzOTAzMDU2MilcbiAgICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpXG4gICAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMV0sIDQsIC0xNTMwOTkyMDYwKVxuICAgICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDRdLCAxMSwgMTI3Mjg5MzM1MylcbiAgICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpXG4gICAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApXG4gICAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMTNdLCA0LCA2ODEyNzkxNzQpXG4gICAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpXG4gICAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgM10sIDE2LCAtNzIyNTIxOTc5KVxuICAgICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDZdLCAyMywgNzYwMjkxODkpXG4gICAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpXG4gICAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgMTJdLCAxMSwgLTQyMTgxNTgzNSlcbiAgICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCA1MzA3NDI1MjApXG4gICAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKVxuXG4gICAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpXSwgNiwgLTE5ODYzMDg0NClcbiAgICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyA3XSwgMTAsIDExMjY4OTE0MTUpXG4gICAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpXG4gICAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpXG4gICAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgMTJdLCA2LCAxNzAwNDg1NTcxKVxuICAgICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDNdLCAxMCwgLTE4OTQ5ODY2MDYpXG4gICAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpXG4gICAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMV0sIDIxLCAtMjA1NDkyMjc5OSlcbiAgICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNiwgMTg3MzMxMzM1OSlcbiAgICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpXG4gICAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE1LCAtMTU2MDE5ODM4MClcbiAgICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAxMzA5MTUxNjQ5KVxuICAgICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKVxuICAgICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDExXSwgMTAsIC0xMTIwMjEwMzc5KVxuICAgICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNSwgNzE4Nzg3MjU5KVxuICAgICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSlcblxuICAgICAgYSA9IHNhZmVBZGQoYSwgb2xkYSlcbiAgICAgIGIgPSBzYWZlQWRkKGIsIG9sZGIpXG4gICAgICBjID0gc2FmZUFkZChjLCBvbGRjKVxuICAgICAgZCA9IHNhZmVBZGQoZCwgb2xkZClcbiAgICB9XG4gICAgcmV0dXJuIFthLCBiLCBjLCBkXVxuICB9XG5cbiAgLypcbiAgKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYSBzdHJpbmdcbiAgKi9cbiAgZnVuY3Rpb24gYmlubDJyc3RyIChpbnB1dCkge1xuICAgIHZhciBpXG4gICAgdmFyIG91dHB1dCA9ICcnXG4gICAgdmFyIGxlbmd0aDMyID0gaW5wdXQubGVuZ3RoICogMzJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoMzI7IGkgKz0gOCkge1xuICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGlucHV0W2kgPj4gNV0gPj4+IChpICUgMzIpKSAmIDB4ZmYpXG4gICAgfVxuICAgIHJldHVybiBvdXRwdXRcbiAgfVxuXG4gIC8qXG4gICogQ29udmVydCBhIHJhdyBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICAqIENoYXJhY3RlcnMgPjI1NSBoYXZlIHRoZWlyIGhpZ2gtYnl0ZSBzaWxlbnRseSBpZ25vcmVkLlxuICAqL1xuICBmdW5jdGlvbiByc3RyMmJpbmwgKGlucHV0KSB7XG4gICAgdmFyIGlcbiAgICB2YXIgb3V0cHV0ID0gW11cbiAgICBvdXRwdXRbKGlucHV0Lmxlbmd0aCA+PiAyKSAtIDFdID0gdW5kZWZpbmVkXG4gICAgZm9yIChpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgb3V0cHV0W2ldID0gMFxuICAgIH1cbiAgICB2YXIgbGVuZ3RoOCA9IGlucHV0Lmxlbmd0aCAqIDhcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoODsgaSArPSA4KSB7XG4gICAgICBvdXRwdXRbaSA+PiA1XSB8PSAoaW5wdXQuY2hhckNvZGVBdChpIC8gOCkgJiAweGZmKSA8PCAoaSAlIDMyKVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0XG4gIH1cblxuICAvKlxuICAqIENhbGN1bGF0ZSB0aGUgTUQ1IG9mIGEgcmF3IHN0cmluZ1xuICAqL1xuICBmdW5jdGlvbiByc3RyTUQ1IChzKSB7XG4gICAgcmV0dXJuIGJpbmwycnN0cihiaW5sTUQ1KHJzdHIyYmlubChzKSwgcy5sZW5ndGggKiA4KSlcbiAgfVxuXG4gIC8qXG4gICogQ2FsY3VsYXRlIHRoZSBITUFDLU1ENSwgb2YgYSBrZXkgYW5kIHNvbWUgZGF0YSAocmF3IHN0cmluZ3MpXG4gICovXG4gIGZ1bmN0aW9uIHJzdHJITUFDTUQ1IChrZXksIGRhdGEpIHtcbiAgICB2YXIgaVxuICAgIHZhciBia2V5ID0gcnN0cjJiaW5sKGtleSlcbiAgICB2YXIgaXBhZCA9IFtdXG4gICAgdmFyIG9wYWQgPSBbXVxuICAgIHZhciBoYXNoXG4gICAgaXBhZFsxNV0gPSBvcGFkWzE1XSA9IHVuZGVmaW5lZFxuICAgIGlmIChia2V5Lmxlbmd0aCA+IDE2KSB7XG4gICAgICBia2V5ID0gYmlubE1ENShia2V5LCBrZXkubGVuZ3RoICogOClcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDEpIHtcbiAgICAgIGlwYWRbaV0gPSBia2V5W2ldIF4gMHgzNjM2MzYzNlxuICAgICAgb3BhZFtpXSA9IGJrZXlbaV0gXiAweDVjNWM1YzVjXG4gICAgfVxuICAgIGhhc2ggPSBiaW5sTUQ1KGlwYWQuY29uY2F0KHJzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogOClcbiAgICByZXR1cm4gYmlubDJyc3RyKGJpbmxNRDUob3BhZC5jb25jYXQoaGFzaCksIDUxMiArIDEyOCkpXG4gIH1cblxuICAvKlxuICAqIENvbnZlcnQgYSByYXcgc3RyaW5nIHRvIGEgaGV4IHN0cmluZ1xuICAqL1xuICBmdW5jdGlvbiByc3RyMmhleCAoaW5wdXQpIHtcbiAgICB2YXIgaGV4VGFiID0gJzAxMjM0NTY3ODlhYmNkZWYnXG4gICAgdmFyIG91dHB1dCA9ICcnXG4gICAgdmFyIHhcbiAgICB2YXIgaVxuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgeCA9IGlucHV0LmNoYXJDb2RlQXQoaSlcbiAgICAgIG91dHB1dCArPSBoZXhUYWIuY2hhckF0KCh4ID4+PiA0KSAmIDB4MGYpICsgaGV4VGFiLmNoYXJBdCh4ICYgMHgwZilcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dFxuICB9XG5cbiAgLypcbiAgKiBFbmNvZGUgYSBzdHJpbmcgYXMgdXRmLThcbiAgKi9cbiAgZnVuY3Rpb24gc3RyMnJzdHJVVEY4IChpbnB1dCkge1xuICAgIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpKVxuICB9XG5cbiAgLypcbiAgKiBUYWtlIHN0cmluZyBhcmd1bWVudHMgYW5kIHJldHVybiBlaXRoZXIgcmF3IG9yIGhleCBlbmNvZGVkIHN0cmluZ3NcbiAgKi9cbiAgZnVuY3Rpb24gcmF3TUQ1IChzKSB7XG4gICAgcmV0dXJuIHJzdHJNRDUoc3RyMnJzdHJVVEY4KHMpKVxuICB9XG4gIGZ1bmN0aW9uIGhleE1ENSAocykge1xuICAgIHJldHVybiByc3RyMmhleChyYXdNRDUocykpXG4gIH1cbiAgZnVuY3Rpb24gcmF3SE1BQ01ENSAoaywgZCkge1xuICAgIHJldHVybiByc3RySE1BQ01ENShzdHIycnN0clVURjgoayksIHN0cjJyc3RyVVRGOChkKSlcbiAgfVxuICBmdW5jdGlvbiBoZXhITUFDTUQ1IChrLCBkKSB7XG4gICAgcmV0dXJuIHJzdHIyaGV4KHJhd0hNQUNNRDUoaywgZCkpXG4gIH1cblxuICBmdW5jdGlvbiBtZDUgKHN0cmluZywga2V5LCByYXcpIHtcbiAgICBpZiAoIWtleSkge1xuICAgICAgaWYgKCFyYXcpIHtcbiAgICAgICAgcmV0dXJuIGhleE1ENShzdHJpbmcpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF3TUQ1KHN0cmluZylcbiAgICB9XG4gICAgaWYgKCFyYXcpIHtcbiAgICAgIHJldHVybiBoZXhITUFDTUQ1KGtleSwgc3RyaW5nKVxuICAgIH1cbiAgICByZXR1cm4gcmF3SE1BQ01ENShrZXksIHN0cmluZylcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG1kNVxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IG1kNVxuICB9IGVsc2Uge1xuICAgICQubWQ1ID0gbWQ1XG4gIH1cbn0pKHRoaXMpXG4iXX0=