diff --git a/README.md b/README.md index d8500ab..1f8b983 100644 --- a/README.md +++ b/README.md @@ -116,8 +116,16 @@ encoding method is choosen. `encryptionNamespace` is used to make multiple instances with different `encryptionSecret` and/or different `encryptionSecret` possible. - var ls1 = new SecureLS({encodingType: 'des', encryptionSecret: 'my-secret-key-1'}); - var ls2 = new SecureLS({encodingType: 'aes', encryptionSecret: 'my-secret-key-2'}); + var ls1 = new SecureLS({ + encodingType: 'des', + encryptionSecret: 'my-secret-key-1', + encryptionNamespace: 'user-1' + }); + var ls2 = new SecureLS({ + encodingType: 'aes', + encryptionSecret: 'my-secret-key-2', + encryptionNamespace: 'user-2' + }); **Examples:** diff --git a/dist/secure-ls.d.ts b/dist/secure-ls.d.ts index db6e1f6..55abe9f 100644 --- a/dist/secure-ls.d.ts +++ b/dist/secure-ls.d.ts @@ -4,7 +4,13 @@ import * as LZString from 'lz-string'; import {CipherHelper, Encoder} from 'crypto-js'; declare class SecureLS { - constructor(config?: { isCompression?: boolean, encodingType?: string, encryptionSecret?: string , encryptionNamespace?: string }); + constructor(config?: { + isCompression?: boolean, + encodingType?: string, + encryptionSecret?: string, + encryptionNamespace?: string, + storage?: Storage + }); getEncryptionSecret(): string; get(key: string, isAllKeysData?: boolean): any; getDataFromLocalStorage(key: string): string | null; @@ -14,7 +20,7 @@ declare class SecureLS { remove(key: string): void; removeAll(): void; clear(): void; - resetAllKeys(): []; + resetAllKeys(): string[]; processData(data: any | string, isAllKeysData: boolean): string; setMetaData(): void; getMetaData(): { keys: string[] }; @@ -26,6 +32,7 @@ declare class SecureLS { DES: CipherHelper; RABBIT: CipherHelper; RC4: CipherHelper; + ls: Storage; enc: { Latin1: Encoder; _Utf8: Encoder; @@ -38,4 +45,4 @@ declare namespace SecureLS{ encode(e: string): string; decode(e: string): string; } -} \ No newline at end of file +} diff --git a/dist/secure-ls.js b/dist/secure-ls.js index cbe1793..02b0d65 100644 --- a/dist/secure-ls.js +++ b/dist/secure-ls.js @@ -70,31 +70,31 @@ return /******/ (function(modules) { // webpackBootstrap var _constants2 = _interopRequireDefault(_constants); - var _encUtf = __webpack_require__(8); + var _encUtf = __webpack_require__(3); var _encUtf2 = _interopRequireDefault(_encUtf); - var _Base = __webpack_require__(9); + var _Base = __webpack_require__(4); var _Base2 = _interopRequireDefault(_Base); - var _lzString = __webpack_require__(10); + var _lzString = __webpack_require__(5); var _lzString2 = _interopRequireDefault(_lzString); - var _aes = __webpack_require__(11); + var _aes = __webpack_require__(6); var _aes2 = _interopRequireDefault(_aes); - var _tripledes = __webpack_require__(16); + var _tripledes = __webpack_require__(14); var _tripledes2 = _interopRequireDefault(_tripledes); - var _rabbit = __webpack_require__(17); + var _rabbit = __webpack_require__(15); var _rabbit2 = _interopRequireDefault(_rabbit); - var _rc = __webpack_require__(18); + var _rc = __webpack_require__(16); var _rc2 = _interopRequireDefault(_rc); @@ -122,13 +122,26 @@ return /******/ (function(modules) { // webpackBootstrap isCompression: true, encodingType: _constants2.default.EncrytionTypes.BASE64, encryptionSecret: config.encryptionSecret, - encryptionNamespace: config.encryptionNamespace + encryptionNamespace: config.encryptionNamespace, + storage: config.storage || localStorage }; this.config.isCompression = typeof config.isCompression !== 'undefined' ? config.isCompression : true; this.config.encodingType = typeof config.encodingType !== 'undefined' || config.encodingType === '' ? config.encodingType.toLowerCase() : _constants2.default.EncrytionTypes.BASE64; - this.ls = localStorage; + this.ls = this.config.storage; this.init(); + + // If a serious encryption is used only one password is allowed for the local storage encryption. + // To make multiple passwords possible a namespace must be set. + // This notifies users that using no namespace may cause issues with multiple passwords. + if (!this._isBase64 && typeof this.config.encryptionNamespace === 'undefined') { + this.utils.warn(this.WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED); + } + // If a serious encryption is wanted a user should pass a password, because the is no default secure password. + // Warn the user if no password is passed + if (!this._isBase64 && (typeof this.config.encryptionSecret === 'undefined' || !this.config.encryptionSecret.length)) { + this.utils.warn(this.WarningEnum.INSECURE_PASSWORD); + } } _createClass(SecureLS, [{ @@ -182,31 +195,22 @@ return /******/ (function(modules) { // webpackBootstrap } }, { key: 'getEncryptionSecret', - value: function getEncryptionSecret(key) { - var metaData = this.getMetaData(); - var obj = this.utils.getObjectFromKey(metaData.keys, key); - - if (!obj) { - return; - } - + value: function getEncryptionSecret() { if (this._isAES || this._isDES || this._isRabbit || this._isRC4) { if (typeof this.config.encryptionSecret === 'undefined') { - this.utils.encryptionSecret = obj.s; - if (!this.utils.encryptionSecret) { - this.utils.encryptionSecret = this.utils.generateSecretKey(); + this.utils.encryptionSecret = ''; this.setMetaData(); } } else { - this.utils.encryptionSecret = this.config.encryptionSecret || obj.s || ''; + this.utils.encryptionSecret = this.config.encryptionSecret || ''; } } } }, { key: 'get', value: function get(key, isAllKeysData) { - var decodedData = '', + var decodedData = void 0, jsonData = '', deCompressedData = void 0, bytes = void 0, @@ -230,11 +234,10 @@ return /******/ (function(modules) { // webpackBootstrap } decodedData = deCompressedData; // saves else - if (this._isBase64 || isAllKeysData) { - // meta data always Base64 + if (this._isBase64) { decodedData = _Base2.default.decode(deCompressedData); } else { - this.getEncryptionSecret(key); + this.getEncryptionSecret(); if (this._isAES) { bytes = _aes2.default.decrypt(deCompressedData.toString(), this.utils.encryptionSecret); } else if (this._isDES) { @@ -266,21 +269,17 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'getAllKeys', value: function getAllKeys() { - var data = this.getMetaData(); - - return this.utils.extractKeyNames(data) || []; + return this.getMetaData().keys || []; } }, { key: 'set', value: function set(key, data) { - var dataToStore = ''; - if (!this.utils.is(key)) { this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED); return; } - this.getEncryptionSecret(key); + this.getEncryptionSecret(); // add key(s) to Array if not already added, only for keys other than meta key if (!(String(key) === String(this.utils.metaKey))) { @@ -289,10 +288,8 @@ return /******/ (function(modules) { // webpackBootstrap this.setMetaData(); } } - - dataToStore = this.processData(data); // Store the data to localStorage - this.setDataToLocalStorage(key, dataToStore); + this.setDataToLocalStorage(key, this.processData(data)); } }, { key: 'setDataToLocalStorage', @@ -364,7 +361,7 @@ return /******/ (function(modules) { // webpackBootstrap // Encode Based on encoding type // If not set, default to Base64 for securing data encodedData = jsonData; - if (this._isBase64 || isAllKeysData) { + if (this._isBase64) { encodedData = _Base2.default.encode(jsonData); } else { if (this._isAES) { @@ -401,7 +398,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'getMetaData', value: function getMetaData() { - return this.get(this.getMetaKey(), true) || {}; + return this.get(this.getMetaKey(), true) || { keys: [] }; } }, { key: 'getMetaKey', @@ -427,14 +424,6 @@ return /******/ (function(modules) { // webpackBootstrap var _constants2 = _interopRequireDefault(_constants); - var _WordArray = __webpack_require__(3); - - var _WordArray2 = _interopRequireDefault(_WordArray); - - var _pbkdf = __webpack_require__(4); - - var _pbkdf2 = _interopRequireDefault(_pbkdf); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var utils = { @@ -452,12 +441,6 @@ return /******/ (function(modules) { // webpackBootstrap reason = reason ? reason : _constants2.default.WarningEnum.DEFAULT_TEXT; console.warn(_constants2.default.WarningTypes[reason]); }, - generateSecretKey: function generateSecretKey() { - var salt = _WordArray2.default.random(128 / 8); - var key128Bits = (0, _pbkdf2.default)(this.secretPhrase, salt, { keySize: 128 / 32 }); - - return key128Bits && key128Bits.toString(); - }, getObjectFromKey: function getObjectFromKey(data, key) { if (!data || !data.length) { return {}; @@ -475,15 +458,6 @@ return /******/ (function(modules) { // webpackBootstrap return obj; }, - extractKeyNames: function extractKeyNames(data) { - if (!data || !data.keys || !data.keys.length) { - return []; - } - - return data.keys.map(function (keyData) { - return keyData.k; - }); - }, getAllKeys: function getAllKeys() { return this.allKeys; }, @@ -491,7 +465,7 @@ return /******/ (function(modules) { // webpackBootstrap var isKeyAlreadyPresent = false; for (var i = 0; i < this.allKeys.length; i++) { - if (String(this.allKeys[i].k) === String(key)) { + if (String(this.allKeys[i]) === String(key)) { isKeyAlreadyPresent = true; // found break; } @@ -500,17 +474,14 @@ return /******/ (function(modules) { // webpackBootstrap return isKeyAlreadyPresent; }, addToKeysList: function addToKeysList(key) { - this.allKeys.push({ - k: key, - s: this.encryptionSecret - }); + this.allKeys.push(key); }, removeFromKeysList: function removeFromKeysList(key) { var i = void 0, index = -1; for (i = 0; i < this.allKeys.length; i++) { - if (this.allKeys[i].k === key) { + if (this.allKeys[i] === key) { index = i; break; } @@ -532,12 +503,17 @@ return /******/ (function(modules) { // webpackBootstrap var WarningEnum = { KEY_NOT_PROVIDED: 'keyNotProvided', + ENCRYPTION_NAMESPACE_NOT_PROVIDED: 'encryptionNameSpaceNotProvided', + INSECURE_PASSWORD: 'insecurePassword', META_KEY_REMOVE: 'metaKeyRemove', DEFAULT_TEXT: 'defaultText' }; var WarningTypes = {}; + WarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!'; + WarningTypes[WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED] = 'Secure LS: If no encryption namespace is provided, only\none password per domain and local storage will be usable!'; + WarningTypes[WarningEnum.INSECURE_PASSWORD] = 'Secure LS: You are using an insecure password!\nChoose a strong password to encrypt your data!'; WarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!'; WarningTypes[WarningEnum.META_KEY_REMOVE] = 'Secure LS: Meta key can not be removed\nunless all keys created by Secure LS are removed!'; WarningTypes[WarningEnum.DEFAULT_TEXT] = 'Unexpected output'; @@ -560,1956 +536,1826 @@ return /******/ (function(modules) { // webpackBootstrap /* 3 */ /***/ function(module, exports) { - "use strict"; + 'use strict'; /* - ES6 compatible port of CryptoJS - WordArray for PBKDF2 password key generation + ES6 compatible port of CryptoJS - encoding Source: https://github.com/brix/crypto-js LICENSE: MIT */ + var enc = {}; - var CryptoJSWordArray = {}; - - CryptoJSWordArray.random = function (nBytes) { - var words = []; - var r = function r(mw) { - var mz = 0x3ade68b1; - var mask = 0xffffffff; - - return function () { - mz = 0x9069 * (mz & 0xFFFF) + (mz >> 0x10) & mask; - mw = 0x4650 * (mw & 0xFFFF) + (mw >> 0x10) & mask; - var result = (mz << 0x10) + mw & mask; - - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > 0.5 ? 1 : -1); - }; - }; + enc.Latin1 = { + stringify: function stringify(wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var latin1Chars = [], + i = void 0, + bite = void 0; - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); + // Convert + for (i = 0; i < sigBytes; i++) { + bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } - rcache = _r() * 0x3ade67b7; - words.push(_r() * 0x100000000 | 0); + return latin1Chars.join(''); } - - return new this.Set(words, nBytes); }; - CryptoJSWordArray.Set = function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes !== undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; + enc._Utf8 = { + stringify: function stringify(wordArray) { + try { + return decodeURIComponent(escape(enc.Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } } }; - module.exports = CryptoJSWordArray; + module.exports = enc; /***/ }, /* 4 */ -/***/ function(module, exports, __webpack_require__) { +/***/ function(module, exports) { - ;(function (root, factory, undef) { - if (true) { - // CommonJS - module.exports = exports = factory(__webpack_require__(5), __webpack_require__(6), __webpack_require__(7)); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } - }(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; + 'use strict'; - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); + var Base64 = { + _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', + encode: function encode(e) { + var t = ''; + var n = void 0, + r = void 0, + i = void 0, + s = void 0, + o = void 0, + u = void 0, + a = void 0; + var f = 0; - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); + e = Base64._utf8Encode(e); + while (f < e.length) { + n = e.charCodeAt(f++); + r = e.charCodeAt(f++); + i = e.charCodeAt(f++); + s = n >> 2; + o = (n & 3) << 4 | r >> 4; + u = (r & 15) << 2 | i >> 6; + a = i & 63; + if (isNaN(r)) { + u = a = 64; + } else if (isNaN(i)) { + a = 64; + } + t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a); + } + return t; + }, + decode: function decode(e) { + var t = ''; + var n = void 0, + r = void 0, + i = void 0; + var s = void 0, + o = void 0, + u = void 0, + a = void 0; + var f = 0; - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; + e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ''); + while (f < e.length) { + s = this._keyStr.indexOf(e.charAt(f++)); + o = this._keyStr.indexOf(e.charAt(f++)); + u = this._keyStr.indexOf(e.charAt(f++)); + a = this._keyStr.indexOf(e.charAt(f++)); + n = s << 2 | o >> 4; + r = (o & 15) << 4 | u >> 2; + i = (u & 3) << 6 | a; + t = t + String.fromCharCode(n); + if (u !== 64) { + t = t + String.fromCharCode(r); + } + if (a !== 64) { + t = t + String.fromCharCode(i); + } + } + t = Base64._utf8Decode(t); + return t; + }, + _utf8Encode: function _utf8Encode(e) { + e = e.replace(/\r\n/g, '\n'); + var t = ''; - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); + for (var n = 0; n < e.length; n++) { + var r = e.charCodeAt(n); - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; + if (r < 128) { + t += String.fromCharCode(r); + } else if (r > 127 && r < 2048) { + t += String.fromCharCode(r >> 6 | 192); + t += String.fromCharCode(r & 63 | 128); + } else { + t += String.fromCharCode(r >> 12 | 224); + t += String.fromCharCode(r >> 6 & 63 | 128); + t += String.fromCharCode(r & 63 | 128); + } + } + return t; + }, + _utf8Decode: function _utf8Decode(e) { + var t = ''; + var n = 0; + var r = void 0, + c2 = void 0, + c3 = void 0; - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); + r = c2 = 0; + while (n < e.length) { + r = e.charCodeAt(n); + if (r < 128) { + t += String.fromCharCode(r); + n++; + } else if (r > 191 && r < 224) { + c2 = e.charCodeAt(n + 1); + t += String.fromCharCode((r & 31) << 6 | c2 & 63); + n += 2; + } else { + c2 = e.charCodeAt(n + 1); + c3 = e.charCodeAt(n + 2); + t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63); + n += 3; + } + } + return t; + } + }; - // Shortcut - var intermediateWords = intermediate.words; + module.exports = Base64; + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;// Copyright (c) 2013 Pieroxy + // This work is free. You can redistribute it and/or modify it + // under the terms of the WTFPL, Version 2 + // For more information see LICENSE.txt or http://www.wtfpl.net/ + // + // For more information, the home page: + // http://pieroxy.net/blog/pages/lz-string/testing.html + // + // LZ-based compression algorithm, version 1.4.4 + var LZString = (function() { - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } + // private property + var f = String.fromCharCode; + var keyStrBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var keyStrUriSafe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$"; + var baseReverseDic = {}; - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - - })); - -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { - - ;(function (root, factory) { - if (true) { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } - }(this, function () { - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /* - * Local polyfil of Object.create - */ - var create = Object.create || (function () { - function F() {}; - - return function (obj) { - var subtype; - - F.prototype = obj; - - subtype = new F(); + function getBaseValue(alphabet, character) { + if (!baseReverseDic[alphabet]) { + baseReverseDic[alphabet] = {}; + for (var i=0 ; i>> 8; + buf[i*2+1] = current_value % 256; + } + return buf; + }, - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - var subtype = create(this); + //decompress from uint8array (UCS-2 big endian format) + decompressFromUint8Array:function (compressed) { + if (compressed===null || compressed===undefined){ + return LZString.decompress(compressed); + } else { + var buf=new Array(compressed.length/2); // 2 bytes per character + for (var i=0, TotalLen=buf.length; i> 1; + } + } else { + value = 1; + for (i=0 ; i> 1; + } + } + context_enlargeIn--; + if (context_enlargeIn == 0) { + context_enlargeIn = Math.pow(2, context_numBits); + context_numBits++; + } + delete context_dictionaryToCreate[context_w]; + } else { + value = context_dictionary[context_w]; + for (i=0 ; i> 1; + } + + + } + context_enlargeIn--; + if (context_enlargeIn == 0) { + context_enlargeIn = Math.pow(2, context_numBits); + context_numBits++; + } + // Add wc to the dictionary. + context_dictionary[context_wc] = context_dictSize++; + context_w = String(context_c); + } + } + + // Output the code for w. + if (context_w !== "") { + if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) { + if (context_w.charCodeAt(0)<256) { + for (i=0 ; i> 1; + } + } else { + value = 1; + for (i=0 ; i> 1; + } + } + context_enlargeIn--; + if (context_enlargeIn == 0) { + context_enlargeIn = Math.pow(2, context_numBits); + context_numBits++; + } + delete context_dictionaryToCreate[context_w]; + } else { + value = context_dictionary[context_w]; + for (i=0 ; i> 1; + } + + + } + context_enlargeIn--; + if (context_enlargeIn == 0) { + context_enlargeIn = Math.pow(2, context_numBits); + context_numBits++; + } + } + + // Mark the end of the stream + value = 2; + for (i=0 ; i> 1; + } + + // Flush the last char + while (true) { + context_data_val = (context_data_val << 1); + if (context_data_position == bitsPerChar-1) { + context_data.push(getCharFromInt(context_data_val)); + break; + } + else context_data_position++; + } + return context_data.join(''); + }, + + decompress: function (compressed) { + if (compressed == null) return ""; + if (compressed == "") return null; + return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); }); + }, + + _decompress: function (length, resetValue, getNextValue) { + var dictionary = [], + next, + enlargeIn = 4, + dictSize = 4, + numBits = 3, + entry = "", + result = [], + i, + w, + bits, resb, maxpower, power, + c, + data = {val:getNextValue(0), position:resetValue, index:1}; + + for (i = 0; i < 3; i += 1) { + dictionary[i] = i; + } + + bits = 0; + maxpower = Math.pow(2,2); + power=1; + while (power!=maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb>0 ? 1 : 0) * power; + power <<= 1; + } + + switch (next = bits) { + case 0: + bits = 0; + maxpower = Math.pow(2,8); + power=1; + while (power!=maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb>0 ? 1 : 0) * power; + power <<= 1; + } + c = f(bits); + break; + case 1: + bits = 0; + maxpower = Math.pow(2,16); + power=1; + while (power!=maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb>0 ? 1 : 0) * power; + power <<= 1; + } + c = f(bits); + break; + case 2: + return ""; + } + dictionary[3] = c; + w = c; + result.push(c); + while (true) { + if (data.index > length) { + return ""; + } + + bits = 0; + maxpower = Math.pow(2,numBits); + power=1; + while (power!=maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb>0 ? 1 : 0) * power; + power <<= 1; + } + + switch (c = bits) { + case 0: + bits = 0; + maxpower = Math.pow(2,8); + power=1; + while (power!=maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb>0 ? 1 : 0) * power; + power <<= 1; + } + + dictionary[dictSize++] = f(bits); + c = dictSize-1; + enlargeIn--; + break; + case 1: + bits = 0; + maxpower = Math.pow(2,16); + power=1; + while (power!=maxpower) { + resb = data.val & data.position; + data.position >>= 1; + if (data.position == 0) { + data.position = resetValue; + data.val = getNextValue(data.index++); + } + bits |= (resb>0 ? 1 : 0) * power; + power <<= 1; + } + dictionary[dictSize++] = f(bits); + c = dictSize-1; + enlargeIn--; + break; + case 2: + return result.join(''); + } - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, + if (enlargeIn == 0) { + enlargeIn = Math.pow(2, numBits); + numBits++; + } - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); + if (dictionary[c]) { + entry = dictionary[c]; + } else { + if (c === dictSize) { + entry = w + w.charAt(0); + } else { + return null; + } + } + result.push(entry); + + // Add w+entry[0] to the dictionary. + dictionary[dictSize++] = w + entry.charAt(0); + enlargeIn--; + + w = entry; + + if (enlargeIn == 0) { + enlargeIn = Math.pow(2, numBits); + numBits++; + } + + } + } + }; + return LZString; + })(); + + if (true) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = function () { return LZString; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if( typeof module !== 'undefined' && module != null ) { + module.exports = LZString + } + + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + ;(function (root, factory, undef) { + if (true) { + // CommonJS + module.exports = exports = factory(__webpack_require__(7), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10), __webpack_require__(13)); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } + }(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; } - }; - }()); + } - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; - if (sigBytes != undefined) { - this.sigBytes = sigBytes; + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; + + // Compute next counter + if (!x) { + x = xi = 1; } else { - this.sigBytes = words.length * 4; + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; } - }, + } + }()); - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + // Skip reset of nRounds has been set before and key did not change + if (this._nRounds && this._keyPriorReset === this._key) { + return; + } - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; + var key = this._keyPriorReset = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6; + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + var t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } - // Clamp excess bits - this.clamp(); + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; } } - this.sigBytes += thatSigBytes; - - // Chainable - return this; }, - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); }, - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; - return clone; + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; }, - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); + // Key schedule row counter + var ksRow = 4; - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; } - return new WordArray.init(words, nBytes); - } - }); + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); /** - * Hex encoding strategy. + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, + C.AES = BlockCipher._createHelper(AES); + }()); - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } + return CryptoJS.AES; - return new WordArray.init(words, hexStrLength / 2); - } - }; + })); + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + ;(function (root, factory) { + if (true) { + // CommonJS + module.exports = exports = factory(); + } + else if (typeof define === "function" && define.amd) { + // AMD + define([], factory); + } + else { + // Global (browser) + root.CryptoJS = factory(); + } + }(this, function () { - /** - * Latin1 encoding strategy. + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined) { + /* + * Local polyfil of Object.create */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; + var create = Object.create || (function () { + function F() {}; - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } + return function (obj) { + var subtype; - return latin1Chars.join(''); - }, + F.prototype = obj; - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; + subtype = new F(); - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } + F.prototype = null; - return new WordArray.init(words, latin1StrLength); - } - }; + return subtype; + }; + }()) /** - * UTF-8 encoding strategy. + * CryptoJS namespace. */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, + var C = {}; - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; + /** + * Library namespace. + */ + var C_lib = C.lib = {}; /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + * Base object for prototypal inheritance. */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, + var Base = C_lib.Base = (function () { - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; + // Augment + if (overrides) { + subtype.mixIn(overrides); + } - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } - // Count words ready - var nWordsReady = nBlocksReady * blockSize; + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + // Reference supertype + subtype.$super = this; - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; } + }, - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); + }; + }()); /** - * Abstract hasher template. + * An array of 32-bit words. * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - + var WordArray = C_lib.WordArray = Base.extend({ /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. + * Initializes a newly created word array. * - * @return {Hasher} This hasher. + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. * * @example * - * hasher.update('message'); - * hasher.update(wordArray); + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, + init: function (words, sigBytes) { + words = this.words = words || []; - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; }, - blockSize: 512/32, - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. + * Converts this word array to a string. * - * @return {Function} The shortcut function. + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex * - * @static + * @return {string} The stringified word array. * * @example * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; + toString: function (encoder) { + return (encoder || Hex).stringify(this); }, /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. + * Concatenates a word array to this word array. * - * @return {Function} The shortcut function. + * @param {WordArray} wordArray The word array to append. * - * @static + * @return {WordArray} This word array. * * @example * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + * wordArray1.concat(wordArray2); */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - - })); - -/***/ }, -/* 6 */ -/***/ function(module, exports, __webpack_require__) { - - ;(function (root, factory) { - if (true) { - // CommonJS - module.exports = exports = factory(__webpack_require__(5)); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } - }(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; + // Clamp excess bits + this.clamp(); - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; } + this.sigBytes += thatSigBytes; - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; + // Chainable + return this; }, - _doFinalize: function () { + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); + var words = this.words; + var sigBytes = this.sigBytes; - // Return final computed hash - return this._hash; + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); }, + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); return clone; - } - }); + }, - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); + var r = (function (m_w) { + var m_w = m_w; + var m_z = 0x3ade68b1; + var mask = 0xffffffff; + return function () { + m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; + m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; + var result = ((m_z << 0x10) + m_w) & mask; + result /= 0x100000000; + result += 0.5; + return result * (Math.random() > .5 ? 1 : -1); + } + }); - return CryptoJS.SHA1; + for (var i = 0, rcache; i < nBytes; i += 4) { + var _r = r((rcache || Math.random()) * 0x100000000); - })); - -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - - ;(function (root, factory) { - if (true) { - // CommonJS - module.exports = exports = factory(__webpack_require__(5)); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } - }(this, function (CryptoJS) { + rcache = _r() * 0x3ade67b7; + words.push((_r() * 0x100000000) | 0); + } - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; + return new WordArray.init(words, nBytes); + } + }); /** - * HMAC algorithm. + * Encoder namespace. */ - var HMAC = C_algo.HMAC = Base.extend({ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { /** - * Initializes a newly created HMAC. + * Converts a word array to a hex string. * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static * * @example * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); } - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; + return hexChars.join(''); + }, - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; - // Clamp excess bits - key.clamp(); + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); + return new WordArray.init(words, hexStrLength / 2); + } + }; + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - // Set initial values - this.reset(); + return latin1Chars.join(''); }, /** - * Resets this HMAC to its initial state. + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static * * @example * - * hmacHasher.reset(); + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); */ - reset: function () { + parse: function (latin1Str) { // Shortcut - var hasher = this._hasher; + var latin1StrLength = latin1Str.length; - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { /** - * Updates this HMAC with a message. + * Converts a word array to a UTF-8 string. * - * @param {WordArray|string} messageUpdate The message to append. + * @param {WordArray} wordArray The word array. * - * @return {HMAC} This HMAC instance. + * @return {string} The UTF-8 string. + * + * @static * * @example * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } }, /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. + * Converts a UTF-8 string to a word array. * - * @param {WordArray|string} messageUpdate (Optional) A final message update. + * @param {string} utf8Str The UTF-8 string. * - * @return {WordArray} The HMAC. + * @return {WordArray} The word array. + * + * @static * * @example * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); } - }); - }()); - - - })); - -/***/ }, -/* 8 */ -/***/ function(module, exports) { - - 'use strict'; - - /* - ES6 compatible port of CryptoJS - encoding - - Source: https://github.com/brix/crypto-js - LICENSE: MIT - */ - var enc = {}; - - enc.Latin1 = { - stringify: function stringify(wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var latin1Chars = [], - i = void 0, - bite = void 0; - - // Convert - for (i = 0; i < sigBytes; i++) { - bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - } - }; - - enc._Utf8 = { - stringify: function stringify(wordArray) { - try { - return decodeURIComponent(escape(enc.Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - } - }; - - module.exports = enc; - -/***/ }, -/* 9 */ -/***/ function(module, exports) { - - 'use strict'; - - var Base64 = { - _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', - encode: function encode(e) { - var t = ''; - var n = void 0, - r = void 0, - i = void 0, - s = void 0, - o = void 0, - u = void 0, - a = void 0; - var f = 0; - - e = Base64._utf8Encode(e); - while (f < e.length) { - n = e.charCodeAt(f++); - r = e.charCodeAt(f++); - i = e.charCodeAt(f++); - s = n >> 2; - o = (n & 3) << 4 | r >> 4; - u = (r & 15) << 2 | i >> 6; - a = i & 63; - if (isNaN(r)) { - u = a = 64; - } else if (isNaN(i)) { - a = 64; - } - t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a); - } - return t; - }, - decode: function decode(e) { - var t = ''; - var n = void 0, - r = void 0, - i = void 0; - var s = void 0, - o = void 0, - u = void 0, - a = void 0; - var f = 0; + }; - e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ''); - while (f < e.length) { - s = this._keyStr.indexOf(e.charAt(f++)); - o = this._keyStr.indexOf(e.charAt(f++)); - u = this._keyStr.indexOf(e.charAt(f++)); - a = this._keyStr.indexOf(e.charAt(f++)); - n = s << 2 | o >> 4; - r = (o & 15) << 4 | u >> 2; - i = (u & 3) << 6 | a; - t = t + String.fromCharCode(n); - if (u !== 64) { - t = t + String.fromCharCode(r); - } - if (a !== 64) { - t = t + String.fromCharCode(i); - } - } - t = Base64._utf8Decode(t); - return t; - }, - _utf8Encode: function _utf8Encode(e) { - e = e.replace(/\r\n/g, '\n'); - var t = ''; + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, - for (var n = 0; n < e.length; n++) { - var r = e.charCodeAt(n); + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } - if (r < 128) { - t += String.fromCharCode(r); - } else if (r > 127 && r < 2048) { - t += String.fromCharCode(r >> 6 | 192); - t += String.fromCharCode(r & 63 | 128); - } else { - t += String.fromCharCode(r >> 12 | 224); - t += String.fromCharCode(r >> 6 & 63 | 128); - t += String.fromCharCode(r & 63 | 128); - } - } - return t; - }, - _utf8Decode: function _utf8Decode(e) { - var t = ''; - var n = 0; - var r = void 0, - c2 = void 0, - c3 = void 0; + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, - r = c2 = 0; - while (n < e.length) { - r = e.charCodeAt(n); - if (r < 128) { - t += String.fromCharCode(r); - n++; - } else if (r > 191 && r < 224) { - c2 = e.charCodeAt(n + 1); - t += String.fromCharCode((r & 31) << 6 | c2 & 63); - n += 2; - } else { - c2 = e.charCodeAt(n + 1); - c3 = e.charCodeAt(n + 2); - t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - n += 3; - } - } - return t; - } - }; + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; - module.exports = Base64; - -/***/ }, -/* 10 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;// Copyright (c) 2013 Pieroxy - // This work is free. You can redistribute it and/or modify it - // under the terms of the WTFPL, Version 2 - // For more information see LICENSE.txt or http://www.wtfpl.net/ - // - // For more information, the home page: - // http://pieroxy.net/blog/pages/lz-string/testing.html - // - // LZ-based compression algorithm, version 1.4.4 - var LZString = (function() { + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } - // private property - var f = String.fromCharCode; - var keyStrBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - var keyStrUriSafe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$"; - var baseReverseDic = {}; + // Count words ready + var nWordsReady = nBlocksReady * blockSize; - function getBaseValue(alphabet, character) { - if (!baseReverseDic[alphabet]) { - baseReverseDic[alphabet] = {}; - for (var i=0 ; i>> 8; - buf[i*2+1] = current_value % 256; - } - return buf; - }, + _minBufferSize: 0 + }); - //decompress from uint8array (UCS-2 big endian format) - decompressFromUint8Array:function (compressed) { - if (compressed===null || compressed===undefined){ - return LZString.decompress(compressed); - } else { - var buf=new Array(compressed.length/2); // 2 bytes per character - for (var i=0, TotalLen=buf.length; i> 1; - } - } else { - value = 1; - for (i=0 ; i> 1; - } - } - context_enlargeIn--; - if (context_enlargeIn == 0) { - context_enlargeIn = Math.pow(2, context_numBits); - context_numBits++; - } - delete context_dictionaryToCreate[context_w]; - } else { - value = context_dictionary[context_w]; - for (i=0 ; i> 1; - } + // Perform concrete-hasher logic + var hash = this._doFinalize(); + return hash; + }, - } - context_enlargeIn--; - if (context_enlargeIn == 0) { - context_enlargeIn = Math.pow(2, context_numBits); - context_numBits++; - } - // Add wc to the dictionary. - context_dictionary[context_wc] = context_dictSize++; - context_w = String(context_c); - } - } + blockSize: 512/32, - // Output the code for w. - if (context_w !== "") { - if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) { - if (context_w.charCodeAt(0)<256) { - for (i=0 ; i> 1; - } - } else { - value = 1; - for (i=0 ; i> 1; - } - } - context_enlargeIn--; - if (context_enlargeIn == 0) { - context_enlargeIn = Math.pow(2, context_numBits); - context_numBits++; - } - delete context_dictionaryToCreate[context_w]; - } else { - value = context_dictionary[context_w]; - for (i=0 ; i> 1; - } + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + return C; + }(Math)); - } - context_enlargeIn--; - if (context_enlargeIn == 0) { - context_enlargeIn = Math.pow(2, context_numBits); - context_numBits++; - } - } - // Mark the end of the stream - value = 2; - for (i=0 ; i> 1; - } + return CryptoJS; - // Flush the last char - while (true) { - context_data_val = (context_data_val << 1); - if (context_data_position == bitsPerChar-1) { - context_data.push(getCharFromInt(context_data_val)); - break; - } - else context_data_position++; - } - return context_data.join(''); - }, + })); + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + ;(function (root, factory) { + if (true) { + // CommonJS + module.exports = exports = factory(__webpack_require__(7)); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } + }(this, function (CryptoJS) { - decompress: function (compressed) { - if (compressed == null) return ""; - if (compressed == "") return null; - return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); }); - }, + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; - _decompress: function (length, resetValue, getNextValue) { - var dictionary = [], - next, - enlargeIn = 4, - dictSize = 4, - numBits = 3, - entry = "", - result = [], - i, - w, - bits, resb, maxpower, power, - c, - data = {val:getNextValue(0), position:resetValue, index:1}; + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; - for (i = 0; i < 3; i += 1) { - dictionary[i] = i; - } + // Clamp excess bits + wordArray.clamp(); - bits = 0; - maxpower = Math.pow(2,2); - power=1; - while (power!=maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue(data.index++); - } - bits |= (resb>0 ? 1 : 0) * power; - power <<= 1; - } + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - switch (next = bits) { - case 0: - bits = 0; - maxpower = Math.pow(2,8); - power=1; - while (power!=maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue(data.index++); - } - bits |= (resb>0 ? 1 : 0) * power; - power <<= 1; - } - c = f(bits); - break; - case 1: - bits = 0; - maxpower = Math.pow(2,16); - power=1; - while (power!=maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue(data.index++); - } - bits |= (resb>0 ? 1 : 0) * power; - power <<= 1; - } - c = f(bits); - break; - case 2: - return ""; - } - dictionary[3] = c; - w = c; - result.push(c); - while (true) { - if (data.index > length) { - return ""; - } + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - bits = 0; - maxpower = Math.pow(2,numBits); - power=1; - while (power!=maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue(data.index++); - } - bits |= (resb>0 ? 1 : 0) * power; - power <<= 1; - } + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } - switch (c = bits) { - case 0: - bits = 0; - maxpower = Math.pow(2,8); - power=1; - while (power!=maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue(data.index++); - } - bits |= (resb>0 ? 1 : 0) * power; - power <<= 1; - } + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } - dictionary[dictSize++] = f(bits); - c = dictSize-1; - enlargeIn--; - break; - case 1: - bits = 0; - maxpower = Math.pow(2,16); - power=1; - while (power!=maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue(data.index++); - } - bits |= (resb>0 ? 1 : 0) * power; - power <<= 1; - } - dictionary[dictSize++] = f(bits); - c = dictSize-1; - enlargeIn--; - break; - case 2: - return result.join(''); - } + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } - if (enlargeIn == 0) { - enlargeIn = Math.pow(2, numBits); - numBits++; - } + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } - if (dictionary[c]) { - entry = dictionary[c]; - } else { - if (c === dictSize) { - entry = w + w.charAt(0); - } else { - return null; - } - } - result.push(entry); + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); - // Add w+entry[0] to the dictionary. - dictionary[dictSize++] = w + entry.charAt(0); - enlargeIn--; + }, - w = entry; + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; - if (enlargeIn == 0) { - enlargeIn = Math.pow(2, numBits); - numBits++; - } + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } + }()); - } - } - }; - return LZString; - })(); - if (true) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function () { return LZString; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if( typeof module !== 'undefined' && module != null ) { - module.exports = LZString - } - + return CryptoJS.enc.Base64; + + })); /***/ }, -/* 11 */ +/* 9 */ /***/ function(module, exports, __webpack_require__) { - ;(function (root, factory, undef) { + ;(function (root, factory) { if (true) { // CommonJS - module.exports = exports = factory(__webpack_require__(5), __webpack_require__(12), __webpack_require__(13), __webpack_require__(14), __webpack_require__(15)); + module.exports = exports = factory(__webpack_require__(7)); } else if (typeof define === "function" && define.amd) { // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); + define(["./core"], factory); } else { // Global (browser) @@ -2517,236 +2363,272 @@ return /******/ (function(modules) { // webpackBootstrap } }(this, function (CryptoJS) { - (function () { + (function (Math) { // Shortcuts var C = CryptoJS; var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; var C_algo = C.algo; - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; + // Constants table + var T = []; - // Compute lookup tables + // Compute constants (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; } }()); - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - /** - * AES block cipher algorithm. + * MD5 hash algorithm. */ - var AES = C_algo.AES = BlockCipher.extend({ + var MD5 = C_algo.MD5 = Hasher.extend({ _doReset: function () { - // Skip reset of nRounds has been set before and key did not change - if (this._nRounds && this._keyPriorReset === this._key) { - return; + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); } // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6; + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } + data.sigBytes = (dataWords.length + 1) * 4; - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } + // Hash final blocks + this._process(); - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; + // Shortcuts + var hash = this._hash; + var H = hash.words; - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; + // Return final computed hash + return hash; }, - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); - // Key schedule row counter - var ksRow = 4; + return clone; + } + }); - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } - keySize: 256/32 - }); + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); /** - * Shortcut functions to the cipher's object interface. + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static * * @example * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + * var hmac = CryptoJS.HmacMD5(message, key); */ - C.AES = BlockCipher._createHelper(AES); - }()); + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); - return CryptoJS.AES; + return CryptoJS.MD5; })); /***/ }, -/* 12 */ +/* 10 */ /***/ function(module, exports, __webpack_require__) { - ;(function (root, factory) { + ;(function (root, factory, undef) { if (true) { // CommonJS - module.exports = exports = factory(__webpack_require__(5)); + module.exports = exports = factory(__webpack_require__(7), __webpack_require__(11), __webpack_require__(12)); } else if (typeof define === "function" && define.amd) { // AMD - define(["./core"], factory); + define(["./core", "./sha1", "./hmac"], factory); } else { // Global (browser) @@ -2758,131 +2640,128 @@ return /******/ (function(modules) { // webpackBootstrap // Shortcuts var C = CryptoJS; var C_lib = C.lib; + var Base = C_lib.Base; var WordArray = C_lib.WordArray; - var C_enc = C.enc; + var C_algo = C.algo; + var MD5 = C_algo.MD5; /** - * Base64 encoding strategy. + * This key derivation function is meant to conform with EVP_BytesToKey. + * www.openssl.org/docs/crypto/EVP_BytesToKey.html */ - var Base64 = C_enc.Base64 = { + var EvpKDF = C_algo.EvpKDF = Base.extend({ /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example + * Configuration options. * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hash algorithm to use. Default: MD5 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: MD5, + iterations: 1 + }), - return base64Chars.join(''); + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.EvpKDF.create(); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); }, /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. + * Derives a key from a password. * - * @return {WordArray} The word array. + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. * - * @static + * @return {WordArray} The derived key. * * @example * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); + * var key = kdf.compute(password, salt); */ - parse: function (base64Str) { + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init hasher + var hasher = cfg.hasher.create(); + + // Initial values + var derivedKey = WordArray.create(); + // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - var reverseMap = this._reverseMap; + var derivedKeyWords = derivedKey.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } + // Generate key + while (derivedKeyWords.length < keySize) { + if (block) { + hasher.update(block); + } + var block = hasher.update(password).finalize(salt); + hasher.reset(); - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; + // Iterations + for (var i = 1; i < iterations; i++) { + block = hasher.finalize(block); + hasher.reset(); } - } - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); + derivedKey.concat(block); + } + derivedKey.sigBytes = keySize * 4; - }, + return derivedKey; + } + }); - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.EvpKDF(password, salt); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.EvpKDF = function (password, salt, cfg) { + return EvpKDF.create(cfg).compute(password, salt); }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } }()); - return CryptoJS.enc.Base64; + return CryptoJS.EvpKDF; })); /***/ }, -/* 13 */ +/* 11 */ /***/ function(module, exports, __webpack_require__) { ;(function (root, factory) { if (true) { // CommonJS - module.exports = exports = factory(__webpack_require__(5)); + module.exports = exports = factory(__webpack_require__(7)); } else if (typeof define === "function" && define.amd) { // AMD @@ -2894,7 +2773,7 @@ return /******/ (function(modules) { // webpackBootstrap } }(this, function (CryptoJS) { - (function (Math) { + (function () { // Shortcuts var C = CryptoJS; var C_lib = C.lib; @@ -2902,140 +2781,65 @@ return /******/ (function(modules) { // webpackBootstrap var Hasher = C_lib.Hasher; var C_algo = C.algo; - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); + // Reusable object + var W = []; /** - * MD5 hash algorithm. + * SHA-1 hash algorithm. */ - var MD5 = C_algo.MD5 = Hasher.extend({ + var SHA1 = C_algo.SHA1 = Hasher.extend({ _doReset: function () { this._hash = new WordArray.init([ 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 + 0x98badcfe, 0x10325476, + 0xc3d2e1f0 ]); }, _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts + // Shortcut var H = this._hash.words; - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working varialbes + // Working variables var a = H[0]; var b = H[1]; var c = H[2]; var d = H[3]; + var e = H[4]; // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); + for (var i = 0; i < 80; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + W[i] = (n << 1) | (n >>> 31); + } - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); + var t = ((a << 5) | (a >>> 27)) + e + W[i]; + if (i < 20) { + t += ((b & c) | (~b & d)) + 0x5a827999; + } else if (i < 40) { + t += (b ^ c ^ d) + 0x6ed9eba1; + } else if (i < 60) { + t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; + } else /* if (i < 80) */ { + t += (b ^ c ^ d) - 0x359d3e2a; + } + + e = d; + d = c; + c = (b << 30) | (b >>> 2); + b = a; + a = t; + } // Intermediate hash value H[0] = (H[0] + a) | 0; H[1] = (H[1] + b) | 0; H[2] = (H[2] + c) | 0; H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; }, _doFinalize: function () { @@ -3048,38 +2852,15 @@ return /******/ (function(modules) { // webpackBootstrap // Add padding dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; // Hash final blocks this._process(); - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - // Return final computed hash - return hash; + return this._hash; }, clone: function () { @@ -3090,26 +2871,6 @@ return /******/ (function(modules) { // webpackBootstrap } }); - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - /** * Shortcut function to the hasher's object interface. * @@ -3121,10 +2882,10 @@ return /******/ (function(modules) { // webpackBootstrap * * @example * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); + * var hash = CryptoJS.SHA1('message'); + * var hash = CryptoJS.SHA1(wordArray); */ - C.MD5 = Hasher._createHelper(MD5); + C.SHA1 = Hasher._createHelper(SHA1); /** * Shortcut function to the HMAC's object interface. @@ -3138,28 +2899,28 @@ return /******/ (function(modules) { // webpackBootstrap * * @example * - * var hmac = CryptoJS.HmacMD5(message, key); + * var hmac = CryptoJS.HmacSHA1(message, key); */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); + C.HmacSHA1 = Hasher._createHmacHelper(SHA1); + }()); - return CryptoJS.MD5; + return CryptoJS.SHA1; })); /***/ }, -/* 14 */ +/* 12 */ /***/ function(module, exports, __webpack_require__) { - ;(function (root, factory, undef) { + ;(function (root, factory) { if (true) { // CommonJS - module.exports = exports = factory(__webpack_require__(5), __webpack_require__(6), __webpack_require__(7)); + module.exports = exports = factory(__webpack_require__(7)); } else if (typeof define === "function" && define.amd) { // AMD - define(["./core", "./sha1", "./hmac"], factory); + define(["./core"], factory); } else { // Global (browser) @@ -3172,127 +2933,138 @@ return /******/ (function(modules) { // webpackBootstrap var C = CryptoJS; var C_lib = C.lib; var Base = C_lib.Base; - var WordArray = C_lib.WordArray; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; var C_algo = C.algo; - var MD5 = C_algo.MD5; /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html + * HMAC algorithm. */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ + var HMAC = C_algo.HMAC = Base.extend({ /** - * Configuration options. + * Initializes a newly created HMAC. * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 + * @param {Hasher} hasher The hash algorithm to use. + * @param {WordArray|string} key The secret key. + * + * @example + * + * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), + init: function (hasher, key) { + // Init hasher + hasher = this._hasher = new hasher.init(); + + // Convert string to WordArray, else assume WordArray already + if (typeof key == 'string') { + key = Utf8.parse(key); + } + + // Shortcuts + var hasherBlockSize = hasher.blockSize; + var hasherBlockSizeBytes = hasherBlockSize * 4; + + // Allow arbitrary length keys + if (key.sigBytes > hasherBlockSizeBytes) { + key = hasher.finalize(key); + } + + // Clamp excess bits + key.clamp(); + + // Clone key for inner and outer pads + var oKey = this._oKey = key.clone(); + var iKey = this._iKey = key.clone(); + + // Shortcuts + var oKeyWords = oKey.words; + var iKeyWords = iKey.words; + + // XOR keys with pad constants + for (var i = 0; i < hasherBlockSize; i++) { + oKeyWords[i] ^= 0x5c5c5c5c; + iKeyWords[i] ^= 0x36363636; + } + oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; + + // Set initial values + this.reset(); + }, /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * Resets this HMAC to its initial state. * * @example * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); + * hmacHasher.reset(); */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); + reset: function () { + // Shortcut + var hasher = this._hasher; + + // Reset + hasher.reset(); + hasher.update(this._iKey); }, /** - * Derives a key from a password. + * Updates this HMAC with a message. * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. + * @param {WordArray|string} messageUpdate The message to append. * - * @return {WordArray} The derived key. + * @return {HMAC} This HMAC instance. * * @example * - * var key = kdf.compute(password, salt); + * hmacHasher.update('message'); + * hmacHasher.update(wordArray); */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; + update: function (messageUpdate) { + this._hasher.update(messageUpdate); - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); + // Chainable + return this; + }, - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } + /** + * Finalizes the HMAC computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The HMAC. + * + * @example + * + * var hmac = hmacHasher.finalize(); + * var hmac = hmacHasher.finalize('message'); + * var hmac = hmacHasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Shortcut + var hasher = this._hasher; - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; + // Compute HMAC + var innerHash = hasher.finalize(messageUpdate); + hasher.reset(); + var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - return derivedKey; + return hmac; } }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; }()); - return CryptoJS.EvpKDF; - })); /***/ }, -/* 15 */ +/* 13 */ /***/ function(module, exports, __webpack_require__) { ;(function (root, factory) { if (true) { // CommonJS - module.exports = exports = factory(__webpack_require__(5)); + module.exports = exports = factory(__webpack_require__(7)); } else if (typeof define === "function" && define.amd) { // AMD @@ -4166,13 +3938,13 @@ return /******/ (function(modules) { // webpackBootstrap })); /***/ }, -/* 16 */ +/* 14 */ /***/ function(module, exports, __webpack_require__) { ;(function (root, factory, undef) { if (true) { // CommonJS - module.exports = exports = factory(__webpack_require__(5), __webpack_require__(12), __webpack_require__(13), __webpack_require__(14), __webpack_require__(15)); + module.exports = exports = factory(__webpack_require__(7), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10), __webpack_require__(13)); } else if (typeof define === "function" && define.amd) { // AMD @@ -4941,13 +4713,13 @@ return /******/ (function(modules) { // webpackBootstrap })); /***/ }, -/* 17 */ +/* 15 */ /***/ function(module, exports, __webpack_require__) { ;(function (root, factory, undef) { if (true) { // CommonJS - module.exports = exports = factory(__webpack_require__(5), __webpack_require__(12), __webpack_require__(13), __webpack_require__(14), __webpack_require__(15)); + module.exports = exports = factory(__webpack_require__(7), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10), __webpack_require__(13)); } else if (typeof define === "function" && define.amd) { // AMD @@ -5138,13 +4910,13 @@ return /******/ (function(modules) { // webpackBootstrap })); /***/ }, -/* 18 */ +/* 16 */ /***/ function(module, exports, __webpack_require__) { ;(function (root, factory, undef) { if (true) { // CommonJS - module.exports = exports = factory(__webpack_require__(5), __webpack_require__(12), __webpack_require__(13), __webpack_require__(14), __webpack_require__(15)); + module.exports = exports = factory(__webpack_require__(7), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10), __webpack_require__(13)); } else if (typeof define === "function" && define.amd) { // AMD diff --git a/dist/secure-ls.js.map b/dist/secure-ls.js.map index 876038d..37b7a7c 100644 --- a/dist/secure-ls.js.map +++ b/dist/secure-ls.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 3860d4f6a753344d5f1f","webpack:///./src/index.js","webpack:///./src/utils.js","webpack:///./src/constants.js","webpack:///./src/WordArray.js","webpack:///./~/crypto-js/pbkdf2.js","webpack:///./~/crypto-js/core.js","webpack:///./~/crypto-js/sha1.js","webpack:///./~/crypto-js/hmac.js","webpack:///./src/enc-utf8.js","webpack:///./src/Base64.js","webpack:///./~/lz-string/libs/lz-string.js","webpack:///./~/crypto-js/aes.js","webpack:///./~/crypto-js/enc-base64.js","webpack:///./~/crypto-js/md5.js","webpack:///./~/crypto-js/evpkdf.js","webpack:///./~/crypto-js/cipher-core.js","webpack:///./~/crypto-js/tripledes.js","webpack:///./~/crypto-js/rabbit.js","webpack:///./~/crypto-js/rc4.js"],"names":["SecureLS","config","_name","utils","constants","Base64","LZString","AES","DES","RABBIT","RC4","enc","isCompression","encodingType","EncrytionTypes","BASE64","encryptionSecret","encryptionNamespace","toLowerCase","ls","localStorage","init","metaData","getMetaData","WarningEnum","WarningTypes","_isBase64","_isBase64EncryptionType","_isAES","_isAESEncryptionType","_isDES","_isDESEncryptionType","_isRabbit","_isRabbitEncryptionType","_isRC4","_isRC4EncryptionType","_isCompression","_isDataCompressionEnabled","allKeys","keys","resetAllKeys","key","obj","getObjectFromKey","s","generateSecretKey","setMetaData","isAllKeysData","decodedData","jsonData","deCompressedData","bytes","data","is","warn","KEY_NOT_PROVIDED","getDataFromLocalStorage","decompressFromUTF16","decode","getEncryptionSecret","decrypt","toString","_Utf8","JSON","parse","e","Error","getItem","extractKeyNames","dataToStore","String","metaKey","isKeyPresent","addToKeysList","processData","setDataToLocalStorage","setItem","getAllKeys","length","META_KEY_REMOVE","removeFromKeysList","removeItem","i","clear","undefined","encodedData","compressedData","stringify","encode","encrypt","compressToUTF16","getMetaKey","get","secretPhrase","reason","DEFAULT_TEXT","console","salt","CryptoJSWordArray","random","key128Bits","keySize","k","map","keyData","isKeyAlreadyPresent","push","index","splice","module","exports","nBytes","words","r","mw","mz","mask","result","Math","rcache","_r","Set","sigBytes","Latin1","wordArray","latin1Chars","bite","fromCharCode","join","decodeURIComponent","escape","_keyStr","t","n","o","u","a","f","_utf8Encode","charCodeAt","isNaN","charAt","replace","indexOf","_utf8Decode","c2","c3"],"mappings":"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AL,GAAgBA,QAAhB;AACD,IAFD,MAEO;AACL,UAAKA,QAAL,GAAgBV,MAAMlC,MAAN,GAAe,CAA/B;AACD;AACF,EARD;;AAUA+B,QAAOC,OAAP,GAAiBZ,iBAAjB,C;;;;;;AC9CA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B,wBAAuB,OAAO;AAC9B,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,wDAAuD,aAAa;AACpE,wDAAuD,+BAA+B;AACtF;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,gBAAgB;AAChD;AACA;;AAEA;AACA;;AAEA;AACA,qCAAoC,sBAAsB;AAC1D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC,iBAAgB,iBAAiB;AACjC,iBAAgB,OAAO;AACvB;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,wDAAuD,aAAa;AACpE,wDAAuD,+BAA+B;AACtF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;AChJD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,yBAAwB,OAAO;AAC/B;AACA,0BAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA,0BAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA,eAAc;;AAEd;AACA;AACA;AACA,yBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;;AAEd;AACA;AACA;AACA,0BAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA,oBAAmB,MAAM;AACzB,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,qBAAoB,MAAM;AAC1B,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,QAAQ;AAC5B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,kBAAkB;AAClD;AACA;AACA;AACA,eAAc;AACd;AACA,iCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;;AAEd,qCAAoC,YAAY;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,cAAc;AAC1C;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,kBAAkB;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,cAAc;AAC1C;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,qBAAqB;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA,qBAAoB,QAAQ;AAC5B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sCAAqC,sBAAsB;AAC3D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA,OAAM;;AAEN;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAU;;AAEV;;AAEA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACvvBD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA4B,QAAQ;AACpC;AACA;AACA,mBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAkB;AAClB;AACA,mBAAkB;AAClB;AACA,mBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC,iBAAgB,iBAAiB;AACjC;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACrJD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,KAAK;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAM;AACN,GAAE;;;AAGF,EAAC,G;;;;;;;;AC9ID;;;;;;AAMA,KAAIvF,MAAM,EAAV;;AAEAA,KAAIgH,MAAJ,GAAa;AACXpC,cAAW,mBAACqC,SAAD,EAAe;AACxB;AACA,SAAIZ,QAAQY,UAAUZ,KAAtB;AACA,SAAIU,WAAWE,UAAUF,QAAzB;AACA,SAAIG,cAAc,EAAlB;A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IAAG;AACH;AACA;AACA;AACA,+BAA8B;AAC9B,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,uBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA,uBAAsB,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,uBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA,uBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,qBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,qBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,qBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,mBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,4EAA2E,qCAAqC,EAAE;AAClH,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,gBAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA,kDAAsB,iBAAiB,EAAE;AACzC,EAAC;AACD;AACA;;;;;;;ACpfA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAwB,SAAS;AACjC;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iCAAgC,gBAAgB;AAChD;AACA;AACA,mBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,mBAAmB;AACtD;;AAEA;AACA;AACA,mBAAkB;AAClB;AACA;;AAEA;AACA;AACA,mBAAkB;AAClB;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACvOD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6BAA4B,cAAc;AAC1C;AACA;AACA;;AAEA;;AAEA,iCAAgC,sCAAsC;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAoC,gBAAgB;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,WAAU;;AAEV;AACA;;AAEA;AACA;AACA;AACA,uBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACtID,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,yBAAwB,QAAQ;AAChC;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA,6BAA4B,QAAQ;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA4B,OAAO;AACnC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC,iBAAgB,iBAAiB;AACjC;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;AC3QD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B,wBAAuB,OAAO;AAC9B,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,wDAAuD,aAAa;AACpE,wDAAuD,+BAA+B;AACtF;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC,gBAAgB;AAChD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC,iBAAgB,iBAAiB;AACjC,iBAAgB,OAAO;AACvB;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,wDAAuD,aAAa;AACpE,wDAAuD,+BAA+B;AACtF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACnID,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,wBAAuB,UAAU;AACjC;AACA;;AAEA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA,+EAA8E,kBAAkB;AAChG;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA,+EAA8E,kBAAkB;AAChG;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA,yGAAwG,kBAAkB;AAC1H;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAU;;AAEV;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA,WAAU;AACV,OAAM;;AAEN;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,MAAM;AAC9B,yBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,MAAM;AAC9B,yBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAc;AACd;AACA;;AAEA;AACA,6BAA4B,eAAe;AAC3C;AACA;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6BAA4B,mBAAmB;AAC/C;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,wBAAuB,KAAK;AAC5B,wBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc;AACd;;AAEA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA,OAAM;;AAEN;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B,oBAAmB,UAAU;AAC7B,oBAAmB,UAAU;AAC7B,oBAAmB,UAAU;AAC7B,oBAAmB,OAAO;AAC1B,oBAAmB,KAAK;AACxB,oBAAmB,QAAQ;AAC3B,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,aAAa;AACjC;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0CAAyC,qCAAqC;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,UAAU;AACjC;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,iBAAiB;AACrC,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,kHAAiH,SAAS;AAC1H,kHAAiH,0CAA0C;AAC3J;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,oBAAoB;AACxC,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,uHAAsH,0CAA0C;AAChK,oHAAmH,0CAA0C;AAC7J;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,qBAAoB,oBAAoB;AACxC,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;AAC3B,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC,4BAA4B;;AAElE;AACA;AACA;;AAEA;AACA,0CAAyC,+BAA+B;AACxE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,IAAI;AAC3B;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,iBAAiB;AACrC,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0HAAyH,kCAAkC;AAC3J;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,oBAAoB;AACxC,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,+HAA8H,kCAAkC;AAChK,4HAA2H,kCAAkC;AAC7J;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAM;AACN,GAAE;;;AAGF,EAAC,G;;;;;;AC12BD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,QAAQ;AACpC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,cAAc;AAChD;AACA;;AAEA;AACA;;AAEA;AACA,iCAAgC,QAAQ;AACxC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAgC,OAAO;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,QAAQ;AACpC;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC,YAAY;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;;AAEA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,WAAU;;AAEV;;AAEA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACjwBD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA4B,OAAO;AACnC;AACA;;AAEA;AACA,6BAA4B,OAAO;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC,OAAO;AACvC;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,OAAO;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA,yBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAwB,OAAO;AAC/B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;AC/LD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,SAAS;AACrC;AACA;;AAEA;AACA,oCAAmC,SAAS;AAC5C;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA,WAAU;;AAEV;AACA;;AAEA;AACA,yCAAwC,OAAO;AAC/C;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G","file":"secure-ls.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"SecureLS\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SecureLS\"] = factory();\n\telse\n\t\troot[\"SecureLS\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 3860d4f6a753344d5f1f\n **/","import utils from './utils';\nimport constants from './constants';\nimport enc from './enc-utf8';\n\nimport Base64 from './Base64';\nimport LZString from 'lz-string/libs/lz-string';\nimport AES from 'crypto-js/aes';\nimport DES from 'crypto-js/tripledes';\nimport RABBIT from 'crypto-js/rabbit';\nimport RC4 from 'crypto-js/rc4';\n\nexport default class SecureLS {\n constructor(config) {\n config = config || {};\n this._name = 'secure-ls';\n this.utils = utils;\n this.constants = constants;\n this.Base64 = Base64;\n this.LZString = LZString;\n this.AES = AES;\n this.DES = DES;\n this.RABBIT = RABBIT;\n this.RC4 = RC4;\n this.enc = enc;\n\n this.config = {\n isCompression: true,\n encodingType: constants.EncrytionTypes.BASE64,\n encryptionSecret: config.encryptionSecret,\n encryptionNamespace: config.encryptionNamespace\n };\n this.config.isCompression = typeof config.isCompression !== 'undefined' ?\n config.isCompression :\n true;\n this.config.encodingType = (typeof config.encodingType !== 'undefined' || config.encodingType === '') ?\n config.encodingType.toLowerCase() :\n constants.EncrytionTypes.BASE64;\n\n this.ls = localStorage;\n this.init();\n };\n\n init() {\n let metaData = this.getMetaData();\n\n this.WarningEnum = this.constants.WarningEnum;\n this.WarningTypes = this.constants.WarningTypes;\n this.EncrytionTypes = this.constants.EncrytionTypes;\n\n this._isBase64 = this._isBase64EncryptionType();\n this._isAES = this._isAESEncryptionType();\n this._isDES = this._isDESEncryptionType();\n this._isRabbit = this._isRabbitEncryptionType();\n this._isRC4 = this._isRC4EncryptionType();\n this._isCompression = this._isDataCompressionEnabled();\n\n // fill the already present keys to the list of keys being used by secure-ls\n this.utils.allKeys = metaData.keys || this.resetAllKeys();\n };\n\n _isBase64EncryptionType() {\n return Base64 &&\n (typeof this.config.encodingType === 'undefined' ||\n this.config.encodingType === this.constants.EncrytionTypes.BASE64);\n };\n\n _isAESEncryptionType() {\n return AES &&\n (this.config.encodingType === this.constants.EncrytionTypes.AES);\n };\n\n _isDESEncryptionType() {\n return DES &&\n (this.config.encodingType === this.constants.EncrytionTypes.DES);\n };\n\n _isRabbitEncryptionType() {\n return RABBIT &&\n (this.config.encodingType === this.constants.EncrytionTypes.RABBIT);\n };\n\n _isRC4EncryptionType() {\n return RC4 &&\n (this.config.encodingType === this.constants.EncrytionTypes.RC4);\n };\n\n _isDataCompressionEnabled() {\n return this.config.isCompression;\n }\n\n getEncryptionSecret(key) {\n let metaData = this.getMetaData();\n let obj = this.utils.getObjectFromKey(metaData.keys, key);\n\n if (!obj) {\n return;\n }\n\n if (this._isAES ||\n this._isDES ||\n this._isRabbit ||\n this._isRC4\n ) {\n if (typeof this.config.encryptionSecret === 'undefined') {\n this.utils.encryptionSecret = obj.s;\n\n if (!this.utils.encryptionSecret) {\n this.utils.encryptionSecret = this.utils.generateSecretKey();\n this.setMetaData();\n }\n } else {\n this.utils.encryptionSecret = this.config.encryptionSecret || obj.s || '';\n }\n }\n }\n\n get(key, isAllKeysData) {\n let decodedData = '',\n jsonData = '',\n deCompressedData,\n bytes,\n data;\n\n if (!this.utils.is(key)) {\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n return jsonData;\n }\n\n data = this.getDataFromLocalStorage(key);\n\n if (!data) {\n return jsonData;\n }\n\n deCompressedData = data; // saves else\n if (this._isCompression || isAllKeysData) { // meta data always compressed\n deCompressedData = LZString.decompressFromUTF16(data);\n }\n\n decodedData = deCompressedData; // saves else\n if (this._isBase64 || isAllKeysData) { // meta data always Base64\n decodedData = Base64.decode(deCompressedData);\n } else {\n this.getEncryptionSecret(key);\n if (this._isAES) {\n bytes = AES.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n } else if (this._isDES) {\n bytes = DES.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n } else if (this._isRabbit) {\n bytes = RABBIT.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n } else if (this._isRC4) {\n bytes = RC4.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n }\n\n if (bytes) {\n decodedData = bytes.toString(enc._Utf8);\n }\n }\n\n try {\n jsonData = JSON.parse(decodedData);\n } catch (e) {\n throw new Error('Could not parse JSON');\n }\n\n return jsonData;\n };\n\n getDataFromLocalStorage(key) {\n return this.ls.getItem(key, true);\n };\n\n getAllKeys() {\n let data = this.getMetaData();\n\n return this.utils.extractKeyNames(data) || [];\n };\n\n set(key, data) {\n let dataToStore = '';\n\n if (!this.utils.is(key)) {\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n return;\n }\n\n this.getEncryptionSecret(key);\n\n // add key(s) to Array if not already added, only for keys other than meta key\n if (!(String(key) === String(this.utils.metaKey))) {\n if (!this.utils.isKeyPresent(key)) {\n this.utils.addToKeysList(key);\n this.setMetaData();\n }\n }\n\n dataToStore = this.processData(data);\n // Store the data to localStorage\n this.setDataToLocalStorage(key, dataToStore);\n };\n\n setDataToLocalStorage(key, data) {\n this.ls.setItem(key, data);\n };\n\n remove(key) {\n if (!this.utils.is(key)) {\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n return;\n }\n\n if (key === this.utils.metaKey && this.getAllKeys().length) {\n this.utils.warn(this.WarningEnum.META_KEY_REMOVE);\n return;\n }\n\n if (this.utils.isKeyPresent(key)) {\n this.utils.removeFromKeysList(key);\n this.setMetaData();\n }\n this.ls.removeItem(key);\n };\n\n removeAll() {\n let keys, i;\n\n keys = this.getAllKeys();\n for (i = 0; i < keys.length; i++) {\n this.ls.removeItem(keys[i]);\n }\n this.ls.removeItem(this.utils.metaKey);\n\n this.resetAllKeys();\n };\n\n clear() {\n this.ls.clear();\n this.resetAllKeys();\n };\n\n resetAllKeys() {\n this.utils.allKeys = [];\n return [];\n }\n\n processData(data, isAllKeysData) {\n if (data === null || data === undefined || data === '') {\n return '';\n }\n\n let jsonData, encodedData, compressedData;\n\n try {\n jsonData = JSON.stringify(data);\n } catch (e) {\n throw new Error('Could not stringify data.');\n }\n\n // Encode Based on encoding type\n // If not set, default to Base64 for securing data\n encodedData = jsonData;\n if (this._isBase64 || isAllKeysData) {\n encodedData = Base64.encode(jsonData);\n } else {\n if (this._isAES) {\n encodedData = AES.encrypt(jsonData, this.utils.encryptionSecret);\n } else if (this._isDES) {\n encodedData = DES.encrypt(jsonData, this.utils.encryptionSecret);\n } else if (this._isRabbit) {\n encodedData = RABBIT.encrypt(jsonData, this.utils.encryptionSecret);\n } else if (this._isRC4) {\n encodedData = RC4.encrypt(jsonData, this.utils.encryptionSecret);\n }\n\n encodedData = encodedData && encodedData.toString();\n }\n\n // Compress data if set to true\n compressedData = encodedData;\n if (this._isCompression || isAllKeysData) {\n compressedData = LZString.compressToUTF16(encodedData);\n }\n\n return compressedData;\n };\n\n setMetaData() {\n let dataToStore = this.processData({\n keys: this.utils.allKeys\n }, true);\n\n // Store the data to localStorage\n this.setDataToLocalStorage(this.getMetaKey(), dataToStore);\n };\n\n getMetaData() {\n return this.get(this.getMetaKey(), true) || {};\n };\n\n getMetaKey() {\n return this.utils.metaKey + (this.config.encryptionNamespace ? '__' + this.config.encryptionNamespace : '');\n }\n\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/index.js\n **/","import constants from './constants';\nimport CryptoJSWordArray from './WordArray';\nimport PBKDF2 from 'crypto-js/pbkdf2';\n\nlet utils = {\n metaKey: '_secure__ls__metadata',\n encryptionSecret: '',\n secretPhrase: 's3cr3t$#@135^&*246',\n allKeys: [],\n is: function (key) {\n if (key) {\n return true;\n }\n return false;\n },\n warn: function (reason) {\n reason = reason ? reason : constants.WarningEnum.DEFAULT_TEXT;\n console.warn(constants.WarningTypes[reason]);\n },\n generateSecretKey: function () {\n let salt = CryptoJSWordArray.random(128 / 8);\n let key128Bits = PBKDF2(this.secretPhrase, salt, {keySize: 128 / 32 });\n\n return key128Bits && key128Bits.toString();\n },\n getObjectFromKey: function (data, key) {\n if (!data || !data.length) {\n return {};\n }\n\n let i, obj = {};\n\n for (i = 0; i < data.length; i++) {\n if (data[i].k === key) {\n obj = data[i];\n break;\n }\n }\n\n return obj;\n },\n extractKeyNames: function (data) {\n if (!data || !data.keys || !data.keys.length) {\n return [];\n }\n\n return data.keys.map(keyData => {\n return keyData.k;\n });\n },\n getAllKeys: function () {\n return this.allKeys;\n },\n isKeyPresent: function (key) {\n let isKeyAlreadyPresent = false;\n\n for (let i = 0; i < this.allKeys.length; i++) {\n if (String(this.allKeys[i].k) === String(key)) {\n isKeyAlreadyPresent = true; // found\n break;\n }\n }\n\n return isKeyAlreadyPresent;\n },\n addToKeysList: function (key) {\n this.allKeys.push({\n k: key,\n s: this.encryptionSecret\n });\n },\n removeFromKeysList: function (key) {\n let i, index = -1;\n\n for (i = 0; i < this.allKeys.length; i++) {\n if (this.allKeys[i].k === key) {\n index = i;\n break;\n }\n }\n if (index !== -1) {\n this.allKeys.splice(index, 1);\n }\n return index;\n }\n};\n\nmodule.exports = utils;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/utils.js\n **/","let WarningEnum = {\n KEY_NOT_PROVIDED: 'keyNotProvided',\n META_KEY_REMOVE: 'metaKeyRemove',\n DEFAULT_TEXT: 'defaultText'\n};\n\nlet WarningTypes = {};\n\nWarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!';\nWarningTypes[WarningEnum.META_KEY_REMOVE] = `Secure LS: Meta key can not be removed\nunless all keys created by Secure LS are removed!`;\nWarningTypes[WarningEnum.DEFAULT_TEXT] = `Unexpected output`;\n\nlet constants = {\n WarningEnum: WarningEnum,\n WarningTypes: WarningTypes,\n EncrytionTypes: {\n BASE64: 'base64',\n AES: 'aes',\n DES: 'des',\n RABBIT: 'rabbit',\n RC4: 'rc4'\n }\n};\n\nmodule.exports = constants;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/constants.js\n **/","/*\n ES6 compatible port of CryptoJS - WordArray for PBKDF2 password key generation\n\n Source: https://github.com/brix/crypto-js\n LICENSE: MIT\n */\n\nlet CryptoJSWordArray = {};\n\nCryptoJSWordArray.random = function (nBytes) {\n let words = [];\n let r = (function (mw) {\n let mz = 0x3ade68b1;\n let mask = 0xffffffff;\n\n return function () {\n mz = (0x9069 * (mz & 0xFFFF) + (mz >> 0x10)) & mask;\n mw = (0x4650 * (mw & 0xFFFF) + (mw >> 0x10)) & mask;\n let result = ((mz << 0x10) + mw) & mask;\n\n result /= 0x100000000;\n result += 0.5;\n return result * (Math.random() > 0.5 ? 1 : -1);\n };\n });\n\n for (let i = 0, rcache; i < nBytes; i += 4) {\n let _r = r((rcache || Math.random()) * 0x100000000);\n\n rcache = _r() * 0x3ade67b7;\n words.push((_r() * 0x100000000) | 0);\n }\n\n return new this.Set(words, nBytes);\n};\n\nCryptoJSWordArray.Set = function (words, sigBytes) {\n words = this.words = words || [];\n\n if (sigBytes !== undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 8;\n }\n};\n\nmodule.exports = CryptoJSWordArray;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/WordArray.js\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA1 = C_algo.SHA1;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA1\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA1,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/pbkdf2.js\n ** module id = 4\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t /*\n\t * Local polyfil of Object.create\n\t */\n\t var create = Object.create || (function () {\n\t function F() {};\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }())\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t var r = (function (m_w) {\n\t var m_w = m_w;\n\t var m_z = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\n\t return function () {\n\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t var result = ((m_z << 0x10) + m_w) & mask;\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > .5 ? 1 : -1);\n\t }\n\t });\n\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t rcache = _r() * 0x3ade67b7;\n\t words.push((_r() * 0x100000000) | 0);\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t var processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/core.js\n ** module id = 5\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/sha1.js\n ** module id = 6\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/hmac.js\n ** module id = 7\n ** module chunks = 0\n **/","/*\n ES6 compatible port of CryptoJS - encoding\n\n Source: https://github.com/brix/crypto-js\n LICENSE: MIT\n */\nlet enc = {};\n\nenc.Latin1 = {\n stringify: (wordArray) => {\n // Shortcuts\n let words = wordArray.words;\n let sigBytes = wordArray.sigBytes;\n let latin1Chars = [], i, bite;\n\n // Convert\n for (i = 0; i < sigBytes; i++) {\n bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n\n return latin1Chars.join('');\n }\n};\n\nenc._Utf8 = {\n stringify: (wordArray) => {\n try {\n return decodeURIComponent(escape(enc.Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n }\n};\n\nmodule.exports = enc;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/enc-utf8.js\n **/","let Base64 = {\n _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n encode: function (e) {\n let t = '';\n let n, r, i, s, o, u, a;\n let f = 0;\n\n e = Base64._utf8Encode(e);\n while (f < e.length) {\n n = e.charCodeAt(f++);\n r = e.charCodeAt(f++);\n i = e.charCodeAt(f++);\n s = n >> 2;\n o = (n & 3) << 4 | r >> 4;\n u = (r & 15) << 2 | i >> 6;\n a = i & 63;\n if (isNaN(r)) {\n u = a = 64;\n } else if (isNaN(i)) {\n a = 64;\n }\n t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a);\n }\n return t;\n },\n decode: function (e) {\n let t = '';\n let n, r, i;\n let s, o, u, a;\n let f = 0;\n\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n while (f < e.length) {\n s = this._keyStr.indexOf(e.charAt(f++));\n o = this._keyStr.indexOf(e.charAt(f++));\n u = this._keyStr.indexOf(e.charAt(f++));\n a = this._keyStr.indexOf(e.charAt(f++));\n n = s << 2 | o >> 4;\n r = (o & 15) << 4 | u >> 2;\n i = (u & 3) << 6 | a;\n t = t + String.fromCharCode(n);\n if (u !== 64) {\n t = t + String.fromCharCode(r);\n }\n if (a !== 64) {\n t = t + String.fromCharCode(i);\n }\n }\n t = Base64._utf8Decode(t);\n return t;\n },\n _utf8Encode: function (e) {\n e = e.replace(/\\r\\n/g, '\\n');\n let t = '';\n\n for (let n = 0; n < e.length; n++) {\n let r = e.charCodeAt(n);\n\n if (r < 128) {\n t += String.fromCharCode(r);\n } else if (r > 127 && r < 2048) {\n t += String.fromCharCode(r >> 6 | 192);\n t += String.fromCharCode(r & 63 | 128);\n } else {\n t += String.fromCharCode(r >> 12 | 224);\n t += String.fromCharCode(r >> 6 & 63 | 128);\n t += String.fromCharCode(r & 63 | 128);\n }\n }\n return t;\n },\n _utf8Decode: function (e) {\n let t = '';\n let n = 0;\n let r, c2, c3;\n\n r = c2 = 0;\n while (n < e.length) {\n r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n n++;\n } else if (r > 191 && r < 224) {\n c2 = e.charCodeAt(n + 1);\n t += String.fromCharCode((r & 31) << 6 | c2 & 63);\n n += 2;\n } else {\n c2 = e.charCodeAt(n + 1);\n c3 = e.charCodeAt(n + 2);\n t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);\n n += 3;\n }\n }\n return t;\n }\n};\n\nmodule.exports = Base64;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/Base64.js\n **/","// Copyright (c) 2013 Pieroxy \n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lz-string/libs/lz-string.js\n ** module id = 10\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/aes.js\n ** module id = 11\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/enc-base64.js\n ** module id = 12\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/md5.js\n ** module id = 13\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t var block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/evpkdf.js\n ** module id = 14\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t var block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t var modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t var modeCreator = mode.createDecryptor;\n\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t var wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/cipher-core.js\n ** module id = 15\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n\t this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n\t this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/tripledes.js\n ** module id = 16\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/rabbit.js\n ** module id = 17\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/rc4.js\n ** module id = 18\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap bf370437de99da2168ab","webpack:///./src/index.js","webpack:///./src/utils.js","webpack:///./src/constants.js","webpack:///./src/enc-utf8.js","webpack:///./src/Base64.js","webpack:///./~/lz-string/libs/lz-string.js","webpack:///./~/crypto-js/aes.js","webpack:///./~/crypto-js/core.js","webpack:///./~/crypto-js/enc-base64.js","webpack:///./~/crypto-js/md5.js","webpack:///./~/crypto-js/evpkdf.js","webpack:///./~/crypto-js/sha1.js","webpack:///./~/crypto-js/hmac.js","webpack:///./~/crypto-js/cipher-core.js","webpack:///./~/crypto-js/tripledes.js","webpack:///./~/crypto-js/rabbit.js","webpack:///./~/crypto-js/rc4.js"],"names":["SecureLS","config","_name","utils","constants","Base64","LZString","AES","DES","RABBIT","RC4","enc","isCompression","encodingType","EncrytionTypes","BASE64","encryptionSecret","encryptionNamespace","storage","localStorage","toLowerCase","ls","init","_isBase64","warn","WarningEnum","ENCRYPTION_NAMESPACE_NOT_PROVIDED","length","INSECURE_PASSWORD","metaData","getMetaData","WarningTypes","_isBase64EncryptionType","_isAES","_isAESEncryptionType","_isDES","_isDESEncryptionType","_isRabbit","_isRabbitEncryptionType","_isRC4","_isRC4EncryptionType","_isCompression","_isDataCompressionEnabled","allKeys","keys","resetAllKeys","setMetaData","key","isAllKeysData","decodedData","jsonData","deCompressedData","bytes","data","is","KEY_NOT_PROVIDED","getDataFromLocalStorage","decompressFromUTF16","decode","getEncryptionSecret","decrypt","toString","_Utf8","JSON","parse","e","Error","getItem","String","metaKey","isKeyPresent","addToKeysList","setDataToLocalStorage","processData","setItem","getAllKeys","META_KEY_REMOVE","removeFromKeysList","removeItem","i","clear","undefined","encodedData","compressedData","stringify","encode","encrypt","compressToUTF16","dataToStore","getMetaKey","get","secretPhrase","reason","DEFAULT_TEXT","console","getObjectFromKey","obj","k","isKeyAlreadyPresent","push","index","splice","module","exports","Latin1","wordArray","words","sigBytes","latin1Chars","bite","fromCharCode","join","decodeURIComponent","escape","_keyStr","t","n","r","s","o","u","a","f","_utf8Encode","charCodeAt","isNaN","charAt","replace","indexOf","_utf8Decode","c2","c3"],"mappings":"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;AACzE,IAAG;AACH;AACA;AACA;AACA,+BAA8B;AAC9B,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,uBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA,uBAAsB,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,uBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA,uBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,qBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,qBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,qBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,mBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,4EAA2E,qCAAqC,EAAE;AAClH,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,gBAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA,kDAAsB,iBAAiB,EAAE;AACzC,EAAC;AACD;AACA;;;;;;;ACpfA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAwB,SAAS;AACjC;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iCAAgC,gBAAgB;AAChD;AACA;AACA,mBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,mBAAmB;AACtD;;AAEA;AACA;AACA,mBAAkB;AAClB;AACA;;AAEA;AACA;AACA,mBAAkB;AAClB;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACvOD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,yBAAwB,OAAO;AAC/B;AACA,0BAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA,0BAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA,eAAc;;AAEd;AACA;AACA;AACA,yBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;;AAEd;AACA;AACA;AACA,0BAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA,oBAAmB,MAAM;AACzB,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,qBAAoB,MAAM;AAC1B,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,QAAQ;AAC5B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,kBAAkB;AAClD;AACA;AACA;AACA,eAAc;AACd;AACA,iCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;;AAEd,qCAAoC,YAAY;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,cAAc;AAC1C;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,kBAAkB;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,cAAc;AAC1C;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,qBAAqB;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA,qBAAoB,QAAQ;AAC5B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sCAAqC,sBAAsB;AAC3D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA,OAAM;;AAEN;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAU;;AAEV;;AAEA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACvvBD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6BAA4B,cAAc;AAC1C;AACA;AACA;;AAEA;;AAEA,iCAAgC,sCAAsC;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAoC,gBAAgB;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,WAAU;;AAEV;AACA;;AAEA;AACA;AACA;AACA,uBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACtID,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,yBAAwB,QAAQ;AAChC;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA,6BAA4B,QAAQ;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA4B,OAAO;AACnC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC,iBAAgB,iBAAiB;AACjC;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;AC3QD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B,wBAAuB,OAAO;AAC9B,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,wDAAuD,aAAa;AACpE,wDAAuD,+BAA+B;AACtF;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC,gBAAgB;AAChD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC,iBAAgB,iBAAiB;AACjC,iBAAgB,OAAO;AACvB;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,wDAAuD,aAAa;AACpE,wDAAuD,+BAA+B;AACtF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACnID,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA4B,QAAQ;AACpC;AACA;AACA,mBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAkB;AAClB;AACA,mBAAkB;AAClB;AACA,mBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB,iBAAiB;AACjC,iBAAgB,iBAAiB;AACjC;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACrJD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,KAAK;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAM;AACN,GAAE;;;AAGF,EAAC,G;;;;;;AC9ID,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,wBAAuB,UAAU;AACjC;AACA;;AAEA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA,+EAA8E,kBAAkB;AAChG;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA,+EAA8E,kBAAkB;AAChG;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA,yGAAwG,kBAAkB;AAC1H;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAU;;AAEV;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA,WAAU;AACV,OAAM;;AAEN;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,MAAM;AAC9B,yBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,MAAM;AAC9B,yBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAc;AACd;AACA;;AAEA;AACA,6BAA4B,eAAe;AAC3C;AACA;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6BAA4B,mBAAmB;AAC/C;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,wBAAuB,KAAK;AAC5B,wBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc;AACd;;AAEA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA,OAAM;;AAEN;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B,oBAAmB,UAAU;AAC7B,oBAAmB,UAAU;AAC7B,oBAAmB,UAAU;AAC7B,oBAAmB,OAAO;AAC1B,oBAAmB,KAAK;AACxB,oBAAmB,QAAQ;AAC3B,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,aAAa;AACjC;AACA,sBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0CAAyC,qCAAqC;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,UAAU;AACjC;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,iBAAiB;AACrC,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,kHAAiH,SAAS;AAC1H,kHAAiH,0CAA0C;AAC3J;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,oBAAoB;AACxC,qBAAoB,UAAU;AAC9B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,uHAAsH,0CAA0C;AAChK,oHAAmH,0CAA0C;AAC7J;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,qBAAoB,oBAAoB;AACxC,qBAAoB,UAAU;AAC9B;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;AAC3B,qBAAoB,iBAAiB;AACrC;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC,4BAA4B;;AAElE;AACA;AACA;;AAEA;AACA,0CAAyC,+BAA+B;AACxE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,IAAI;AAC3B;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,iBAAiB;AACrC,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0HAAyH,kCAAkC;AAC3J;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,WAAU;;AAEV;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B,qBAAoB,oBAAoB;AACxC,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;AAC3B;AACA,sBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,+HAA8H,kCAAkC;AAChK,4HAA2H,kCAAkC;AAC7J;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAM;AACN,GAAE;;;AAGF,EAAC,G;;;;;;AC12BD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,QAAQ;AACpC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,cAAc;AAChD;AACA;;AAEA;AACA;;AAEA;AACA,iCAAgC,QAAQ;AACxC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAgC,OAAO;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,QAAQ;AACpC;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC,YAAY;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;;AAEA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;AACA;AACA,WAAU;;AAEV;;AAEA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;ACjwBD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA4B,OAAO;AACnC;AACA;;AAEA;AACA,6BAA4B,OAAO;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC,OAAO;AACvC;AACA;AACA;AACA,WAAU;;AAEV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,OAAO;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;;AAEV;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA,yBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAwB,OAAO;AAC/B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G;;;;;;AC/LD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B,SAAS;AACrC;AACA;;AAEA;AACA,oCAAmC,SAAS;AAC5C;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU;;AAEV;AACA;AACA,WAAU;;AAEV;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA,WAAU;;AAEV;AACA;;AAEA;AACA,yCAAwC,OAAO;AAC/C;AACA;AACA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA,EAAC,G","file":"secure-ls.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"SecureLS\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SecureLS\"] = factory();\n\telse\n\t\troot[\"SecureLS\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap bf370437de99da2168ab\n **/","import utils from './utils';\r\nimport constants from './constants';\r\nimport enc from './enc-utf8';\r\n\r\nimport Base64 from './Base64';\r\nimport LZString from 'lz-string/libs/lz-string';\r\nimport AES from 'crypto-js/aes';\r\nimport DES from 'crypto-js/tripledes';\r\nimport RABBIT from 'crypto-js/rabbit';\r\nimport RC4 from 'crypto-js/rc4';\r\n\r\nexport default class SecureLS {\r\n constructor(config) {\r\n config = config || {};\r\n this._name = 'secure-ls';\r\n this.utils = utils;\r\n this.constants = constants;\r\n this.Base64 = Base64;\r\n this.LZString = LZString;\r\n this.AES = AES;\r\n this.DES = DES;\r\n this.RABBIT = RABBIT;\r\n this.RC4 = RC4;\r\n this.enc = enc;\r\n\r\n this.config = {\r\n isCompression: true,\r\n encodingType: constants.EncrytionTypes.BASE64,\r\n encryptionSecret: config.encryptionSecret,\r\n encryptionNamespace: config.encryptionNamespace,\r\n storage: config.storage || localStorage\r\n };\r\n this.config.isCompression = typeof config.isCompression !== 'undefined' ?\r\n config.isCompression :\r\n true;\r\n this.config.encodingType = (typeof config.encodingType !== 'undefined' || config.encodingType === '') ?\r\n config.encodingType.toLowerCase() :\r\n constants.EncrytionTypes.BASE64;\r\n\r\n this.ls = this.config.storage;\r\n this.init();\r\n\r\n // If a serious encryption is used only one password is allowed for the local storage encryption.\r\n // To make multiple passwords possible a namespace must be set.\r\n // This notifies users that using no namespace may cause issues with multiple passwords.\r\n if (!this._isBase64 && typeof this.config.encryptionNamespace === 'undefined') {\r\n this.utils.warn(this.WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED);\r\n }\r\n // If a serious encryption is wanted a user should pass a password, because the is no default secure password.\r\n // Warn the user if no password is passed\r\n if (\r\n !this._isBase64 &&\r\n (\r\n typeof this.config.encryptionSecret === 'undefined' ||\r\n !this.config.encryptionSecret.length\r\n )\r\n ) {\r\n this.utils.warn(this.WarningEnum.INSECURE_PASSWORD);\r\n }\r\n };\r\n\r\n init() {\r\n let metaData = this.getMetaData();\r\n\r\n this.WarningEnum = this.constants.WarningEnum;\r\n this.WarningTypes = this.constants.WarningTypes;\r\n this.EncrytionTypes = this.constants.EncrytionTypes;\r\n\r\n this._isBase64 = this._isBase64EncryptionType();\r\n this._isAES = this._isAESEncryptionType();\r\n this._isDES = this._isDESEncryptionType();\r\n this._isRabbit = this._isRabbitEncryptionType();\r\n this._isRC4 = this._isRC4EncryptionType();\r\n this._isCompression = this._isDataCompressionEnabled();\r\n\r\n // fill the already present keys to the list of keys being used by secure-ls\r\n this.utils.allKeys = metaData.keys || this.resetAllKeys();\r\n };\r\n\r\n _isBase64EncryptionType() {\r\n return Base64 &&\r\n (typeof this.config.encodingType === 'undefined' ||\r\n this.config.encodingType === this.constants.EncrytionTypes.BASE64);\r\n };\r\n\r\n _isAESEncryptionType() {\r\n return AES &&\r\n (this.config.encodingType === this.constants.EncrytionTypes.AES);\r\n };\r\n\r\n _isDESEncryptionType() {\r\n return DES &&\r\n (this.config.encodingType === this.constants.EncrytionTypes.DES);\r\n };\r\n\r\n _isRabbitEncryptionType() {\r\n return RABBIT &&\r\n (this.config.encodingType === this.constants.EncrytionTypes.RABBIT);\r\n };\r\n\r\n _isRC4EncryptionType() {\r\n return RC4 &&\r\n (this.config.encodingType === this.constants.EncrytionTypes.RC4);\r\n };\r\n\r\n _isDataCompressionEnabled() {\r\n return this.config.isCompression;\r\n }\r\n\r\n getEncryptionSecret() {\r\n if (\r\n this._isAES ||\r\n this._isDES ||\r\n this._isRabbit ||\r\n this._isRC4\r\n ) {\r\n if (typeof this.config.encryptionSecret === 'undefined') {\r\n if (!this.utils.encryptionSecret) {\r\n this.utils.encryptionSecret = '';\r\n this.setMetaData();\r\n }\r\n } else {\r\n this.utils.encryptionSecret = this.config.encryptionSecret || '';\r\n }\r\n }\r\n }\r\n\r\n get(key, isAllKeysData) {\r\n let decodedData,\r\n jsonData = '',\r\n deCompressedData,\r\n bytes,\r\n data;\r\n\r\n if (!this.utils.is(key)) {\r\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\r\n return jsonData;\r\n }\r\n\r\n data = this.getDataFromLocalStorage(key);\r\n\r\n if (!data) {\r\n return jsonData;\r\n }\r\n\r\n deCompressedData = data; // saves else\r\n if (this._isCompression || isAllKeysData) { // meta data always compressed\r\n deCompressedData = LZString.decompressFromUTF16(data);\r\n }\r\n\r\n decodedData = deCompressedData; // saves else\r\n if (this._isBase64) {\r\n decodedData = Base64.decode(deCompressedData);\r\n } else {\r\n this.getEncryptionSecret();\r\n if (this._isAES) {\r\n bytes = AES.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\r\n } else if (this._isDES) {\r\n bytes = DES.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\r\n } else if (this._isRabbit) {\r\n bytes = RABBIT.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\r\n } else if (this._isRC4) {\r\n bytes = RC4.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\r\n }\r\n\r\n if (bytes) {\r\n decodedData = bytes.toString(enc._Utf8);\r\n }\r\n }\r\n\r\n try {\r\n jsonData = JSON.parse(decodedData);\r\n } catch (e) {\r\n throw new Error('Could not parse JSON');\r\n }\r\n\r\n return jsonData;\r\n };\r\n\r\n getDataFromLocalStorage(key) {\r\n return this.ls.getItem(key, true);\r\n };\r\n\r\n getAllKeys() {\r\n return this.getMetaData().keys || [];\r\n };\r\n\r\n set(key, data) {\r\n if (!this.utils.is(key)) {\r\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\r\n return;\r\n }\r\n\r\n this.getEncryptionSecret();\r\n\r\n // add key(s) to Array if not already added, only for keys other than meta key\r\n if (!(String(key) === String(this.utils.metaKey))) {\r\n if (!this.utils.isKeyPresent(key)) {\r\n this.utils.addToKeysList(key);\r\n this.setMetaData();\r\n }\r\n }\r\n // Store the data to localStorage\r\n this.setDataToLocalStorage(key, this.processData(data));\r\n };\r\n\r\n setDataToLocalStorage(key, data) {\r\n this.ls.setItem(key, data);\r\n };\r\n\r\n remove(key) {\r\n if (!this.utils.is(key)) {\r\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\r\n return;\r\n }\r\n\r\n if (key === this.utils.metaKey && this.getAllKeys().length) {\r\n this.utils.warn(this.WarningEnum.META_KEY_REMOVE);\r\n return;\r\n }\r\n\r\n if (this.utils.isKeyPresent(key)) {\r\n this.utils.removeFromKeysList(key);\r\n this.setMetaData();\r\n }\r\n this.ls.removeItem(key);\r\n };\r\n\r\n removeAll() {\r\n let keys, i;\r\n\r\n keys = this.getAllKeys();\r\n for (i = 0; i < keys.length; i++) {\r\n this.ls.removeItem(keys[i]);\r\n }\r\n this.ls.removeItem(this.utils.metaKey);\r\n\r\n this.resetAllKeys();\r\n };\r\n\r\n clear() {\r\n this.ls.clear();\r\n this.resetAllKeys();\r\n };\r\n\r\n resetAllKeys() {\r\n this.utils.allKeys = [];\r\n return [];\r\n }\r\n\r\n processData(data, isAllKeysData) {\r\n if (data === null || data === undefined || data === '') {\r\n return '';\r\n }\r\n\r\n let jsonData, encodedData, compressedData;\r\n\r\n try {\r\n jsonData = JSON.stringify(data);\r\n } catch (e) {\r\n throw new Error('Could not stringify data.');\r\n }\r\n\r\n // Encode Based on encoding type\r\n // If not set, default to Base64 for securing data\r\n encodedData = jsonData;\r\n if (this._isBase64) {\r\n encodedData = Base64.encode(jsonData);\r\n } else {\r\n if (this._isAES) {\r\n encodedData = AES.encrypt(jsonData, this.utils.encryptionSecret);\r\n } else if (this._isDES) {\r\n encodedData = DES.encrypt(jsonData, this.utils.encryptionSecret);\r\n } else if (this._isRabbit) {\r\n encodedData = RABBIT.encrypt(jsonData, this.utils.encryptionSecret);\r\n } else if (this._isRC4) {\r\n encodedData = RC4.encrypt(jsonData, this.utils.encryptionSecret);\r\n }\r\n\r\n encodedData = encodedData && encodedData.toString();\r\n }\r\n\r\n // Compress data if set to true\r\n compressedData = encodedData;\r\n if (this._isCompression || isAllKeysData) {\r\n compressedData = LZString.compressToUTF16(encodedData);\r\n }\r\n\r\n return compressedData;\r\n };\r\n\r\n setMetaData() {\r\n let dataToStore = this.processData({\r\n keys: this.utils.allKeys\r\n }, true);\r\n\r\n // Store the data to localStorage\r\n this.setDataToLocalStorage(this.getMetaKey(), dataToStore);\r\n };\r\n\r\n getMetaData() {\r\n return this.get(this.getMetaKey(), true) || {keys: []};\r\n };\r\n\r\n getMetaKey() {\r\n return this.utils.metaKey + (this.config.encryptionNamespace ? '__' + this.config.encryptionNamespace : '');\r\n }\r\n\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/index.js\n **/","import constants from './constants';\r\n\r\nlet utils = {\r\n metaKey: '_secure__ls__metadata',\r\n encryptionSecret: '',\r\n secretPhrase: 's3cr3t$#@135^&*246',\r\n allKeys: [],\r\n is: function (key) {\r\n if (key) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n warn: function (reason) {\r\n reason = reason ? reason : constants.WarningEnum.DEFAULT_TEXT;\r\n console.warn(constants.WarningTypes[reason]);\r\n },\r\n getObjectFromKey: function (data, key) {\r\n if (!data || !data.length) {\r\n return {};\r\n }\r\n\r\n let i, obj = {};\r\n\r\n for (i = 0; i < data.length; i++) {\r\n if (data[i].k === key) {\r\n obj = data[i];\r\n break;\r\n }\r\n }\r\n\r\n return obj;\r\n },\r\n getAllKeys: function () {\r\n return this.allKeys;\r\n },\r\n isKeyPresent: function (key) {\r\n let isKeyAlreadyPresent = false;\r\n\r\n for (let i = 0; i < this.allKeys.length; i++) {\r\n if (String(this.allKeys[i]) === String(key)) {\r\n isKeyAlreadyPresent = true; // found\r\n break;\r\n }\r\n }\r\n\r\n return isKeyAlreadyPresent;\r\n },\r\n addToKeysList: function (key) {\r\n this.allKeys.push(key);\r\n },\r\n removeFromKeysList: function (key) {\r\n let i, index = -1;\r\n\r\n for (i = 0; i < this.allKeys.length; i++) {\r\n if (this.allKeys[i] === key) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n if (index !== -1) {\r\n this.allKeys.splice(index, 1);\r\n }\r\n return index;\r\n }\r\n};\r\n\r\nmodule.exports = utils;\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/utils.js\n **/","let WarningEnum = {\r\n KEY_NOT_PROVIDED: 'keyNotProvided',\r\n ENCRYPTION_NAMESPACE_NOT_PROVIDED: 'encryptionNameSpaceNotProvided',\r\n INSECURE_PASSWORD: 'insecurePassword',\r\n META_KEY_REMOVE: 'metaKeyRemove',\r\n DEFAULT_TEXT: 'defaultText'\r\n};\r\n\r\nlet WarningTypes = {};\r\n\r\nWarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!';\r\nWarningTypes[WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED] = `Secure LS: If no encryption namespace is provided, only\r\none password per domain and local storage will be usable!`;\r\nWarningTypes[WarningEnum.INSECURE_PASSWORD] = `Secure LS: You are using an insecure password!\r\nChoose a strong password to encrypt your data!`;\r\nWarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!';\r\nWarningTypes[WarningEnum.META_KEY_REMOVE] = `Secure LS: Meta key can not be removed\r\nunless all keys created by Secure LS are removed!`;\r\nWarningTypes[WarningEnum.DEFAULT_TEXT] = `Unexpected output`;\r\n\r\nlet constants = {\r\n WarningEnum: WarningEnum,\r\n WarningTypes: WarningTypes,\r\n EncrytionTypes: {\r\n BASE64: 'base64',\r\n AES: 'aes',\r\n DES: 'des',\r\n RABBIT: 'rabbit',\r\n RC4: 'rc4'\r\n }\r\n};\r\n\r\nmodule.exports = constants;\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/constants.js\n **/","/*\r\n ES6 compatible port of CryptoJS - encoding\r\n\r\n Source: https://github.com/brix/crypto-js\r\n LICENSE: MIT\r\n */\r\nlet enc = {};\r\n\r\nenc.Latin1 = {\r\n stringify: (wordArray) => {\r\n // Shortcuts\r\n let words = wordArray.words;\r\n let sigBytes = wordArray.sigBytes;\r\n let latin1Chars = [], i, bite;\r\n\r\n // Convert\r\n for (i = 0; i < sigBytes; i++) {\r\n bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\r\n latin1Chars.push(String.fromCharCode(bite));\r\n }\r\n\r\n return latin1Chars.join('');\r\n }\r\n};\r\n\r\nenc._Utf8 = {\r\n stringify: (wordArray) => {\r\n try {\r\n return decodeURIComponent(escape(enc.Latin1.stringify(wordArray)));\r\n } catch (e) {\r\n throw new Error('Malformed UTF-8 data');\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = enc;\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/enc-utf8.js\n **/","let Base64 = {\r\n _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\r\n encode: function (e) {\r\n let t = '';\r\n let n, r, i, s, o, u, a;\r\n let f = 0;\r\n\r\n e = Base64._utf8Encode(e);\r\n while (f < e.length) {\r\n n = e.charCodeAt(f++);\r\n r = e.charCodeAt(f++);\r\n i = e.charCodeAt(f++);\r\n s = n >> 2;\r\n o = (n & 3) << 4 | r >> 4;\r\n u = (r & 15) << 2 | i >> 6;\r\n a = i & 63;\r\n if (isNaN(r)) {\r\n u = a = 64;\r\n } else if (isNaN(i)) {\r\n a = 64;\r\n }\r\n t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a);\r\n }\r\n return t;\r\n },\r\n decode: function (e) {\r\n let t = '';\r\n let n, r, i;\r\n let s, o, u, a;\r\n let f = 0;\r\n\r\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\r\n while (f < e.length) {\r\n s = this._keyStr.indexOf(e.charAt(f++));\r\n o = this._keyStr.indexOf(e.charAt(f++));\r\n u = this._keyStr.indexOf(e.charAt(f++));\r\n a = this._keyStr.indexOf(e.charAt(f++));\r\n n = s << 2 | o >> 4;\r\n r = (o & 15) << 4 | u >> 2;\r\n i = (u & 3) << 6 | a;\r\n t = t + String.fromCharCode(n);\r\n if (u !== 64) {\r\n t = t + String.fromCharCode(r);\r\n }\r\n if (a !== 64) {\r\n t = t + String.fromCharCode(i);\r\n }\r\n }\r\n t = Base64._utf8Decode(t);\r\n return t;\r\n },\r\n _utf8Encode: function (e) {\r\n e = e.replace(/\\r\\n/g, '\\n');\r\n let t = '';\r\n\r\n for (let n = 0; n < e.length; n++) {\r\n let r = e.charCodeAt(n);\r\n\r\n if (r < 128) {\r\n t += String.fromCharCode(r);\r\n } else if (r > 127 && r < 2048) {\r\n t += String.fromCharCode(r >> 6 | 192);\r\n t += String.fromCharCode(r & 63 | 128);\r\n } else {\r\n t += String.fromCharCode(r >> 12 | 224);\r\n t += String.fromCharCode(r >> 6 & 63 | 128);\r\n t += String.fromCharCode(r & 63 | 128);\r\n }\r\n }\r\n return t;\r\n },\r\n _utf8Decode: function (e) {\r\n let t = '';\r\n let n = 0;\r\n let r, c2, c3;\r\n\r\n r = c2 = 0;\r\n while (n < e.length) {\r\n r = e.charCodeAt(n);\r\n if (r < 128) {\r\n t += String.fromCharCode(r);\r\n n++;\r\n } else if (r > 191 && r < 224) {\r\n c2 = e.charCodeAt(n + 1);\r\n t += String.fromCharCode((r & 31) << 6 | c2 & 63);\r\n n += 2;\r\n } else {\r\n c2 = e.charCodeAt(n + 1);\r\n c3 = e.charCodeAt(n + 2);\r\n t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);\r\n n += 3;\r\n }\r\n }\r\n return t;\r\n }\r\n};\r\n\r\nmodule.exports = Base64;\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/Base64.js\n **/","// Copyright (c) 2013 Pieroxy \n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lz-string/libs/lz-string.js\n ** module id = 5\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/aes.js\n ** module id = 6\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t /*\n\t * Local polyfil of Object.create\n\t */\n\t var create = Object.create || (function () {\n\t function F() {};\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }())\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t var r = (function (m_w) {\n\t var m_w = m_w;\n\t var m_z = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\n\t return function () {\n\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t var result = ((m_z << 0x10) + m_w) & mask;\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > .5 ? 1 : -1);\n\t }\n\t });\n\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t rcache = _r() * 0x3ade67b7;\n\t words.push((_r() * 0x100000000) | 0);\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t var processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/core.js\n ** module id = 7\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/enc-base64.js\n ** module id = 8\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/md5.js\n ** module id = 9\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t var block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/evpkdf.js\n ** module id = 10\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/sha1.js\n ** module id = 11\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/hmac.js\n ** module id = 12\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t var block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t var modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t var modeCreator = mode.createDecryptor;\n\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t var wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/cipher-core.js\n ** module id = 13\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n\t this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n\t this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/tripledes.js\n ** module id = 14\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/rabbit.js\n ** module id = 15\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/rc4.js\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/secure-ls.min.js b/dist/secure-ls.min.js index 41a39a6..4abf9fe 100644 --- a/dist/secure-ls.min.js +++ b/dist/secure-ls.min.js @@ -1,3 +1,3 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("SecureLS",[],e):"object"==typeof exports?exports.SecureLS=e():t.SecureLS=e()}(this,function(){return function(t){function e(i){if(r[i])return r[i].exports;var n=r[i]={exports:{},id:i,loaded:!1};return t[i].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var r=0;r>16)&r,t=18e3*(65535&t)+(t>>16)&r;var i=(e<<16)+t&r;return i/=4294967296,i+=.5,i*(Math.random()>.5?1:-1)}},n=0;n>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(var o=0;o>>2]=r[o>>>2];return this.sigBytes+=n,this},clamp:function(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var r,i=[],n=function(e){var e=e,r=987654321,i=4294967295;return function(){r=36969*(65535&r)+(r>>16)&i,e=18e3*(65535&e)+(e>>16)&i;var n=(r<<16)+e&i;return n/=4294967296,n+=.5,n*(t.random()>.5?1:-1)}},o=0;o>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new s.init(r,e/2)}},u=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new s.init(r,e)}},h=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return u.parse(unescape(encodeURIComponent(t)))}},f=n.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=h.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r=this._data,i=r.words,n=r.sigBytes,o=this.blockSize,a=4*o,c=n/a;c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*o,h=t.min(4*u,n);if(u){for(var f=0;f>>31}var f=(i<<5|i>>>27)+c+s[u];f+=u<20?(n&o|~n&a)+1518500249:u<40?(n^o^a)+1859775393:u<60?(n&o|n&a|o&a)-1894007588:(n^o^a)-899497514,c=a,a=o,o=n<<30|n>>>2,n=i,i=f}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+a|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[(i+64>>>9<<4)+14]=Math.floor(r/4294967296),e[(i+64>>>9<<4)+15]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=n._createHelper(a),e.HmacSHA1=n._createHmacHelper(a)}(),t.SHA1})},function(t,e,r){!function(i,n){t.exports=e=n(r(5))}(this,function(t){!function(){var e=t,r=e.lib,i=r.Base,n=e.enc,o=n.Utf8,s=e.algo;s.HMAC=i.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=o.parse(e));var r=t.blockSize,i=4*r;e.sigBytes>i&&(e=t.finalize(e)),e.clamp();for(var n=this._oKey=e.clone(),s=this._iKey=e.clone(),a=n.words,c=s.words,u=0;u>>2]>>>24-n%4*8&255,i.push(String.fromCharCode(o));return i.join("")}},r._Utf8={stringify:function(t){try{return decodeURIComponent(escape(r.Latin1.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}}},t.exports=r},function(t,e){"use strict";var r={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(t){var e="",i=void 0,n=void 0,o=void 0,s=void 0,a=void 0,c=void 0,u=void 0,h=0;for(t=r._utf8Encode(t);h>2,a=(3&i)<<4|n>>4,c=(15&n)<<2|o>>6,u=63&o,isNaN(n)?c=u=64:isNaN(o)&&(u=64),e=e+this._keyStr.charAt(s)+this._keyStr.charAt(a)+this._keyStr.charAt(c)+this._keyStr.charAt(u);return e},decode:function(t){var e="",i=void 0,n=void 0,o=void 0,s=void 0,a=void 0,c=void 0,u=void 0,h=0;for(t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");h>4,n=(15&a)<<4|c>>2,o=(3&c)<<6|u,e+=String.fromCharCode(i),64!==c&&(e+=String.fromCharCode(n)),64!==u&&(e+=String.fromCharCode(o));return e=r._utf8Decode(e)},_utf8Encode:function(t){t=t.replace(/\r\n/g,"\n");for(var e="",r=0;r127&&i<2048?(e+=String.fromCharCode(i>>6|192),e+=String.fromCharCode(63&i|128)):(e+=String.fromCharCode(i>>12|224),e+=String.fromCharCode(i>>6&63|128),e+=String.fromCharCode(63&i|128))}return e},_utf8Decode:function(t){var e="",r=0,i=void 0,n=void 0,o=void 0;for(i=n=0;r191&&i<224?(n=t.charCodeAt(r+1),e+=String.fromCharCode((31&i)<<6|63&n),r+=2):(n=t.charCodeAt(r+1),o=t.charCodeAt(r+2),e+=String.fromCharCode((15&i)<<12|(63&n)<<6|63&o),r+=3);return e}};t.exports=r},function(t,e,r){var i,n=function(){function t(t,e){if(!n[t]){n[t]={};for(var r=0;r>>8,r[2*i+1]=s%256}return r},decompressFromUint8Array:function(t){if(null===t||void 0===t)return o.decompress(t);for(var r=new Array(t.length/2),i=0,n=r.length;i>=1}else{for(n=1,i=0;i>=1}f--,0==f&&(f=Math.pow(2,p),p++),delete a[h]}else for(n=s[h],i=0;i>=1;f--,0==f&&(f=Math.pow(2,p),p++),s[u]=l++,h=String(c)}if(""!==h){if(Object.prototype.hasOwnProperty.call(a,h)){if(h.charCodeAt(0)<256){for(i=0;i>=1}else{for(n=1,i=0;i>=1}f--,0==f&&(f=Math.pow(2,p),p++),delete a[h]}else for(n=s[h],i=0;i>=1;f--,0==f&&(f=Math.pow(2,p),p++)}for(n=2,i=0;i>=1;for(;;){if(y<<=1,v==e-1){d.push(r(y));break}v++}return d.join("")},decompress:function(t){return null==t?"":""==t?null:o._decompress(t.length,32768,function(e){return t.charCodeAt(e)})},_decompress:function(t,r,i){var n,o,s,a,c,u,h,f,l=[],p=4,d=4,y=3,v="",_=[],g={val:i(0),position:r,index:1};for(o=0;o<3;o+=1)l[o]=o;for(a=0,u=Math.pow(2,2),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;switch(n=a){case 0:for(a=0,u=Math.pow(2,8),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;f=e(a);break;case 1:for(a=0,u=Math.pow(2,16),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;f=e(a);break;case 2:return""}for(l[3]=f,s=f,_.push(f);;){if(g.index>t)return"";for(a=0,u=Math.pow(2,y),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;switch(f=a){case 0:for(a=0,u=Math.pow(2,8),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;l[d++]=e(a),f=d-1,p--;break;case 1:for(a=0,u=Math.pow(2,16),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;l[d++]=e(a),f=d-1,p--;break;case 2:return _.join("")}if(0==p&&(p=Math.pow(2,y),y++),l[f])v=l[f];else{if(f!==d)return null;v=s+s.charAt(0)}_.push(v),l[d++]=s+v.charAt(0),p--,s=v,0==p&&(p=Math.pow(2,y),y++)}}};return o}();i=function(){return n}.call(e,r,e,t),!(void 0!==i&&(t.exports=i))},function(t,e,r){!function(i,n,o){t.exports=e=n(r(5),r(12),r(13),r(14),r(15))}(this,function(t){return function(){var e=t,r=e.lib,i=r.BlockCipher,n=e.algo,o=[],s=[],a=[],c=[],u=[],h=[],f=[],l=[],p=[],d=[];!function(){for(var t=[],e=0;e<256;e++)e<128?t[e]=e<<1:t[e]=e<<1^283;for(var r=0,i=0,e=0;e<256;e++){var n=i^i<<1^i<<2^i<<3^i<<4;n=n>>>8^255&n^99,o[r]=n,s[n]=r;var y=t[r],v=t[y],_=t[v],g=257*t[n]^16843008*n;a[r]=g<<24|g>>>8,c[r]=g<<16|g>>>16,u[r]=g<<8|g>>>24,h[r]=g;var g=16843009*_^65537*v^257*y^16843008*r;f[n]=g<<24|g>>>8,l[n]=g<<16|g>>>16,p[n]=g<<8|g>>>24,d[n]=g,r?(r=y^t[t[t[_^y]]],i^=t[t[i]]):r=i=1}}();var y=[0,1,2,4,8,16,32,64,128,27,54],v=n.AES=i.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=this._nRounds=r+6,n=4*(i+1),s=this._keySchedule=[],a=0;a6&&a%r==4&&(c=o[c>>>24]<<24|o[c>>>16&255]<<16|o[c>>>8&255]<<8|o[255&c]):(c=c<<8|c>>>24,c=o[c>>>24]<<24|o[c>>>16&255]<<16|o[c>>>8&255]<<8|o[255&c],c^=y[a/r|0]<<24),s[a]=s[a-r]^c}for(var u=this._invKeySchedule=[],h=0;h>>24]]^l[o[c>>>16&255]]^p[o[c>>>8&255]]^d[o[255&c]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,a,c,u,h,o)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,f,l,p,d,s);var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,a){for(var c=this._nRounds,u=t[e]^r[0],h=t[e+1]^r[1],f=t[e+2]^r[2],l=t[e+3]^r[3],p=4,d=1;d>>24]^n[h>>>16&255]^o[f>>>8&255]^s[255&l]^r[p++],v=i[h>>>24]^n[f>>>16&255]^o[l>>>8&255]^s[255&u]^r[p++],_=i[f>>>24]^n[l>>>16&255]^o[u>>>8&255]^s[255&h]^r[p++],g=i[l>>>24]^n[u>>>16&255]^o[h>>>8&255]^s[255&f]^r[p++];u=y,h=v,f=_,l=g}var y=(a[u>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&l])^r[p++],v=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[l>>>8&255]<<8|a[255&u])^r[p++],_=(a[f>>>24]<<24|a[l>>>16&255]<<16|a[u>>>8&255]<<8|a[255&h])^r[p++],g=(a[l>>>24]<<24|a[u>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^r[p++];t[e]=y,t[e+1]=v,t[e+2]=_,t[e+3]=g},keySize:8});e.AES=i._createHelper(v)}(),t.AES})},function(t,e,r){!function(i,n){t.exports=e=n(r(5))}(this,function(t){return function(){function e(t,e,r){for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|c)<<24-o%4*8,o++}return n.create(i,o)}var r=t,i=r.lib,n=i.WordArray,o=r.enc;o.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp();for(var n=[],o=0;o>>2]>>>24-o%4*8&255,a=e[o+1>>>2]>>>24-(o+1)%4*8&255,c=e[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|a<<8|c,h=0;h<4&&o+.75*h>>6*(3-h)&63));var f=i.charAt(64);if(f)for(;n.length%4;)n.push(f);return n.join("")},parse:function(t){var r=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var o=0;o>>32-o)+e}function i(t,e,r,i,n,o,s){var a=t+(e&i|r&~i)+n+s;return(a<>>32-o)+e}function n(t,e,r,i,n,o,s){var a=t+(e^r^i)+n+s;return(a<>>32-o)+e}function o(t,e,r,i,n,o,s){var a=t+(r^(e|~i))+n+s;return(a<>>32-o)+e}var s=t,a=s.lib,c=a.WordArray,u=a.Hasher,h=s.algo,f=[];!function(){for(var t=0;t<64;t++)f[t]=4294967296*e.abs(e.sin(t+1))|0}();var l=h.MD5=u.extend({_doReset:function(){this._hash=new c.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var s=0;s<16;s++){var a=e+s,c=t[a];t[a]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var u=this._hash.words,h=t[e+0],l=t[e+1],p=t[e+2],d=t[e+3],y=t[e+4],v=t[e+5],_=t[e+6],g=t[e+7],S=t[e+8],m=t[e+9],k=t[e+10],B=t[e+11],E=t[e+12],C=t[e+13],x=t[e+14],A=t[e+15],w=u[0],b=u[1],D=u[2],T=u[3];w=r(w,b,D,T,h,7,f[0]),T=r(T,w,b,D,l,12,f[1]),D=r(D,T,w,b,p,17,f[2]),b=r(b,D,T,w,d,22,f[3]),w=r(w,b,D,T,y,7,f[4]),T=r(T,w,b,D,v,12,f[5]),D=r(D,T,w,b,_,17,f[6]),b=r(b,D,T,w,g,22,f[7]),w=r(w,b,D,T,S,7,f[8]),T=r(T,w,b,D,m,12,f[9]),D=r(D,T,w,b,k,17,f[10]),b=r(b,D,T,w,B,22,f[11]),w=r(w,b,D,T,E,7,f[12]),T=r(T,w,b,D,C,12,f[13]),D=r(D,T,w,b,x,17,f[14]),b=r(b,D,T,w,A,22,f[15]),w=i(w,b,D,T,l,5,f[16]),T=i(T,w,b,D,_,9,f[17]),D=i(D,T,w,b,B,14,f[18]),b=i(b,D,T,w,h,20,f[19]),w=i(w,b,D,T,v,5,f[20]),T=i(T,w,b,D,k,9,f[21]),D=i(D,T,w,b,A,14,f[22]),b=i(b,D,T,w,y,20,f[23]),w=i(w,b,D,T,m,5,f[24]),T=i(T,w,b,D,x,9,f[25]),D=i(D,T,w,b,d,14,f[26]),b=i(b,D,T,w,S,20,f[27]),w=i(w,b,D,T,C,5,f[28]),T=i(T,w,b,D,p,9,f[29]),D=i(D,T,w,b,g,14,f[30]),b=i(b,D,T,w,E,20,f[31]),w=n(w,b,D,T,v,4,f[32]),T=n(T,w,b,D,S,11,f[33]),D=n(D,T,w,b,B,16,f[34]),b=n(b,D,T,w,x,23,f[35]),w=n(w,b,D,T,l,4,f[36]),T=n(T,w,b,D,y,11,f[37]),D=n(D,T,w,b,g,16,f[38]),b=n(b,D,T,w,k,23,f[39]),w=n(w,b,D,T,C,4,f[40]),T=n(T,w,b,D,h,11,f[41]),D=n(D,T,w,b,d,16,f[42]),b=n(b,D,T,w,_,23,f[43]),w=n(w,b,D,T,m,4,f[44]),T=n(T,w,b,D,E,11,f[45]),D=n(D,T,w,b,A,16,f[46]),b=n(b,D,T,w,p,23,f[47]),w=o(w,b,D,T,h,6,f[48]),T=o(T,w,b,D,g,10,f[49]),D=o(D,T,w,b,x,15,f[50]),b=o(b,D,T,w,v,21,f[51]),w=o(w,b,D,T,E,6,f[52]),T=o(T,w,b,D,d,10,f[53]),D=o(D,T,w,b,k,15,f[54]),b=o(b,D,T,w,l,21,f[55]),w=o(w,b,D,T,S,6,f[56]),T=o(T,w,b,D,A,10,f[57]),D=o(D,T,w,b,_,15,f[58]),b=o(b,D,T,w,C,21,f[59]),w=o(w,b,D,T,y,6,f[60]),T=o(T,w,b,D,B,10,f[61]),D=o(D,T,w,b,p,15,f[62]),b=o(b,D,T,w,m,21,f[63]),u[0]=u[0]+w|0,u[1]=u[1]+b|0,u[2]=u[2]+D|0,u[3]=u[3]+T|0},_doFinalize:function(){var t=this._data,r=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;r[n>>>5]|=128<<24-n%32;var o=e.floor(i/4294967296),s=i;r[(n+64>>>9<<4)+15]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[(n+64>>>9<<4)+14]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),t.sigBytes=4*(r.length+1),this._process();for(var a=this._hash,c=a.words,u=0;u<4;u++){var h=c[u];c[u]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return a},clone:function(){var t=u.clone.call(this);return t._hash=this._hash.clone(),t}});s.MD5=u._createHelper(l),s.HmacMD5=u._createHmacHelper(l)}(Math),t.MD5})},function(t,e,r){!function(i,n,o){t.exports=e=n(r(5),r(6),r(7))}(this,function(t){return function(){var e=t,r=e.lib,i=r.Base,n=r.WordArray,o=e.algo,s=o.MD5,a=o.EvpKDF=i.extend({cfg:i.extend({keySize:4,hasher:s,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,i=r.hasher.create(),o=n.create(),s=o.words,a=r.keySize,c=r.iterations;s.length>>2];t.sigBytes-=e}},_=(i.BlockCipher=f.extend({cfg:f.cfg.extend({mode:d,padding:v}),reset:function(){f.reset.call(this);var t=this.cfg,e=t.iv,r=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var i=r.createEncryptor;else{var i=r.createDecryptor;this._minBufferSize=1}this._mode=i.call(r,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else{var e=this._process(!0);t.unpad(e)}return e},blockSize:4}),i.CipherParams=n.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),g=r.format={},S=g.OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;if(r)var i=o.create([1398893684,1701076831]).concat(r).concat(e);else var i=e;return i.toString(c)},parse:function(t){var e=c.parse(t),r=e.words;if(1398893684==r[0]&&1701076831==r[1]){var i=o.create(r.slice(2,4));r.splice(0,4),e.sigBytes-=16}return _.create({ciphertext:e,salt:i})}},m=i.SerializableCipher=n.extend({cfg:n.extend({format:S}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),o=n.finalize(e),s=n.cfg;return _.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=t.createDecryptor(r,i).finalize(e.ciphertext);return n},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),k=r.kdf={},B=k.OpenSSL={execute:function(t,e,r,i){i||(i=o.random(8));var n=h.create({keySize:e+r}).compute(t,i),s=o.create(n.words.slice(e),4*r);return n.sigBytes=4*e,_.create({key:n,iv:s,salt:i})}},E=i.PasswordBasedCipher=m.extend({cfg:m.cfg.extend({kdf:B}),encrypt:function(t,e,r,i){i=this.cfg.extend(i); -var n=i.kdf.execute(r,t.keySize,t.ivSize);i.iv=n.iv;var o=m.encrypt.call(this,t,e,n.key,i);return o.mixIn(n),o},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);i.iv=n.iv;var o=m.decrypt.call(this,t,e,n.key,i);return o}})}()})},function(t,e,r){!function(i,n,o){t.exports=e=n(r(5),r(12),r(13),r(14),r(15))}(this,function(t){return function(){function e(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<>>5]>>>31-n%32&1}for(var o=this._subKeys=[],s=0;s<16;s++){for(var a=o[s]=[],f=h[s],i=0;i<24;i++)a[i/6|0]|=r[(u[i]-1+f)%28]<<31-i%6,a[4+(i/6|0)]|=r[28+(u[i+24]-1+f)%28]<<31-i%6;a[0]=a[0]<<1|a[0]>>>31;for(var i=1;i<7;i++)a[i]=a[i]>>>4*(i-1)+3;a[7]=a[7]<<5|a[7]>>>27}for(var l=this._invSubKeys=[],i=0;i<16;i++)l[i]=o[15-i]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,i,n){this._lBlock=t[i],this._rBlock=t[i+1],e.call(this,4,252645135),e.call(this,16,65535),r.call(this,2,858993459),r.call(this,8,16711935),e.call(this,1,1431655765);for(var o=0;o<16;o++){for(var s=n[o],a=this._lBlock,c=this._rBlock,u=0,h=0;h<8;h++)u|=f[h][((c^s[h])&l[h])>>>0];this._lBlock=c,this._rBlock=a^u}var p=this._lBlock;this._lBlock=this._rBlock,this._rBlock=p,e.call(this,1,1431655765),r.call(this,8,16711935),r.call(this,2,858993459),e.call(this,16,65535),e.call(this,4,252645135),t[i]=this._lBlock,t[i+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});i.DES=s._createHelper(p);var d=a.TripleDES=s.extend({_doReset:function(){var t=this._key,e=t.words;this._des1=p.createEncryptor(o.create(e.slice(0,2))),this._des2=p.createEncryptor(o.create(e.slice(2,4))),this._des3=p.createEncryptor(o.create(e.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});i.TripleDES=s._createHelper(d)}(),t.TripleDES})},function(t,e,r){!function(i,n,o){t.exports=e=n(r(5),r(12),r(13),r(14),r(15))}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,r=0;r<8;r++)a[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,u=((4294901760&i)*i|0)+((65535&i)*i|0);c[r]=s^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var r=t,i=r.lib,n=i.StreamCipher,o=r.algo,s=[],a=[],c=[],u=o.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,r=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],o=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;i<4;i++)e.call(this);for(var i=0;i<8;i++)o[i]^=n[i+4&7];if(r){var s=r.words,a=s[0],c=s[1],u=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),f=u>>>16|4294901760&h,l=h<<16|65535&u;o[0]^=u,o[1]^=f,o[2]^=h,o[3]^=l,o[4]^=u,o[5]^=f,o[6]^=h,o[7]^=l;for(var i=0;i<4;i++)e.call(this)}},_doProcessBlock:function(t,r){var i=this._X;e.call(this),s[0]=i[0]^i[5]>>>16^i[3]<<16,s[1]=i[2]^i[7]>>>16^i[5]<<16,s[2]=i[4]^i[1]>>>16^i[7]<<16,s[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)s[n]=16711935&(s[n]<<8|s[n]>>>24)|4278255360&(s[n]<<24|s[n]>>>8),t[r+n]^=s[n]},blockSize:4,ivSize:2});r.Rabbit=n._createHelper(u)}(),t.Rabbit})},function(t,e,r){!function(i,n,o){t.exports=e=n(r(5),r(12),r(13),r(14),r(15))}(this,function(t){return function(){function e(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){e=(e+1)%256,r=(r+t[e])%256;var o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}var r=t,i=r.lib,n=i.StreamCipher,o=r.algo,s=o.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;for(var n=0,o=0;n<256;n++){var s=n%r,a=e[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+a)%256;var c=i[n];i[n]=i[o],i[o]=c}this._i=this._j=0},_doProcessBlock:function(t,r){t[r]^=e.call(this)},keySize:8,ivSize:0});r.RC4=n._createHelper(s);var a=o.RC4Drop=s.extend({cfg:s.cfg.extend({drop:192}),_doReset:function(){s._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)e.call(this)}});r.RC4Drop=n._createHelper(a)}(),t.RC4})}])}); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("SecureLS",[],e):"object"==typeof exports?exports.SecureLS=e():t.SecureLS=e()}(this,function(){return function(t){function e(i){if(r[i])return r[i].exports;var n=r[i]={exports:{},id:i,loaded:!1};return t[i].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var r=0;r>>2]>>>24-n%4*8&255,i.push(String.fromCharCode(o));return i.join("")}},r._Utf8={stringify:function(t){try{return decodeURIComponent(escape(r.Latin1.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}}},t.exports=r},function(t,e){"use strict";var r={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(t){var e="",i=void 0,n=void 0,o=void 0,s=void 0,a=void 0,c=void 0,u=void 0,h=0;for(t=r._utf8Encode(t);h>2,a=(3&i)<<4|n>>4,c=(15&n)<<2|o>>6,u=63&o,isNaN(n)?c=u=64:isNaN(o)&&(u=64),e=e+this._keyStr.charAt(s)+this._keyStr.charAt(a)+this._keyStr.charAt(c)+this._keyStr.charAt(u);return e},decode:function(t){var e="",i=void 0,n=void 0,o=void 0,s=void 0,a=void 0,c=void 0,u=void 0,h=0;for(t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");h>4,n=(15&a)<<4|c>>2,o=(3&c)<<6|u,e+=String.fromCharCode(i),64!==c&&(e+=String.fromCharCode(n)),64!==u&&(e+=String.fromCharCode(o));return e=r._utf8Decode(e)},_utf8Encode:function(t){t=t.replace(/\r\n/g,"\n");for(var e="",r=0;r127&&i<2048?(e+=String.fromCharCode(i>>6|192),e+=String.fromCharCode(63&i|128)):(e+=String.fromCharCode(i>>12|224),e+=String.fromCharCode(i>>6&63|128),e+=String.fromCharCode(63&i|128))}return e},_utf8Decode:function(t){var e="",r=0,i=void 0,n=void 0,o=void 0;for(i=n=0;r191&&i<224?(n=t.charCodeAt(r+1),e+=String.fromCharCode((31&i)<<6|63&n),r+=2):(n=t.charCodeAt(r+1),o=t.charCodeAt(r+2),e+=String.fromCharCode((15&i)<<12|(63&n)<<6|63&o),r+=3);return e}};t.exports=r},function(t,e,r){var i,n=function(){function t(t,e){if(!n[t]){n[t]={};for(var r=0;r>>8,r[2*i+1]=s%256}return r},decompressFromUint8Array:function(t){if(null===t||void 0===t)return o.decompress(t);for(var r=new Array(t.length/2),i=0,n=r.length;i>=1}else{for(n=1,i=0;i>=1}f--,0==f&&(f=Math.pow(2,p),p++),delete a[h]}else for(n=s[h],i=0;i>=1;f--,0==f&&(f=Math.pow(2,p),p++),s[u]=l++,h=String(c)}if(""!==h){if(Object.prototype.hasOwnProperty.call(a,h)){if(h.charCodeAt(0)<256){for(i=0;i>=1}else{for(n=1,i=0;i>=1}f--,0==f&&(f=Math.pow(2,p),p++),delete a[h]}else for(n=s[h],i=0;i>=1;f--,0==f&&(f=Math.pow(2,p),p++)}for(n=2,i=0;i>=1;for(;;){if(y<<=1,v==e-1){d.push(r(y));break}v++}return d.join("")},decompress:function(t){return null==t?"":""==t?null:o._decompress(t.length,32768,function(e){return t.charCodeAt(e)})},_decompress:function(t,r,i){var n,o,s,a,c,u,h,f,l=[],p=4,d=4,y=3,v="",_=[],g={val:i(0),position:r,index:1};for(o=0;o<3;o+=1)l[o]=o;for(a=0,u=Math.pow(2,2),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;switch(n=a){case 0:for(a=0,u=Math.pow(2,8),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;f=e(a);break;case 1:for(a=0,u=Math.pow(2,16),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;f=e(a);break;case 2:return""}for(l[3]=f,s=f,_.push(f);;){if(g.index>t)return"";for(a=0,u=Math.pow(2,y),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;switch(f=a){case 0:for(a=0,u=Math.pow(2,8),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;l[d++]=e(a),f=d-1,p--;break;case 1:for(a=0,u=Math.pow(2,16),h=1;h!=u;)c=g.val&g.position,g.position>>=1,0==g.position&&(g.position=r,g.val=i(g.index++)),a|=(c>0?1:0)*h,h<<=1;l[d++]=e(a),f=d-1,p--;break;case 2:return _.join("")}if(0==p&&(p=Math.pow(2,y),y++),l[f])v=l[f];else{if(f!==d)return null;v=s+s.charAt(0)}_.push(v),l[d++]=s+v.charAt(0),p--,s=v,0==p&&(p=Math.pow(2,y),y++)}}};return o}();i=function(){return n}.call(e,r,e,t),!(void 0!==i&&(t.exports=i))},function(t,e,r){!function(i,n,o){t.exports=e=n(r(7),r(8),r(9),r(10),r(13))}(this,function(t){return function(){var e=t,r=e.lib,i=r.BlockCipher,n=e.algo,o=[],s=[],a=[],c=[],u=[],h=[],f=[],l=[],p=[],d=[];!function(){for(var t=[],e=0;e<256;e++)e<128?t[e]=e<<1:t[e]=e<<1^283;for(var r=0,i=0,e=0;e<256;e++){var n=i^i<<1^i<<2^i<<3^i<<4;n=n>>>8^255&n^99,o[r]=n,s[n]=r;var y=t[r],v=t[y],_=t[v],g=257*t[n]^16843008*n;a[r]=g<<24|g>>>8,c[r]=g<<16|g>>>16,u[r]=g<<8|g>>>24,h[r]=g;var g=16843009*_^65537*v^257*y^16843008*r;f[n]=g<<24|g>>>8,l[n]=g<<16|g>>>16,p[n]=g<<8|g>>>24,d[n]=g,r?(r=y^t[t[t[_^y]]],i^=t[t[i]]):r=i=1}}();var y=[0,1,2,4,8,16,32,64,128,27,54],v=n.AES=i.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=this._nRounds=r+6,n=4*(i+1),s=this._keySchedule=[],a=0;a6&&a%r==4&&(c=o[c>>>24]<<24|o[c>>>16&255]<<16|o[c>>>8&255]<<8|o[255&c]):(c=c<<8|c>>>24,c=o[c>>>24]<<24|o[c>>>16&255]<<16|o[c>>>8&255]<<8|o[255&c],c^=y[a/r|0]<<24),s[a]=s[a-r]^c}for(var u=this._invKeySchedule=[],h=0;h>>24]]^l[o[c>>>16&255]]^p[o[c>>>8&255]]^d[o[255&c]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,a,c,u,h,o)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,f,l,p,d,s);var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,a){for(var c=this._nRounds,u=t[e]^r[0],h=t[e+1]^r[1],f=t[e+2]^r[2],l=t[e+3]^r[3],p=4,d=1;d>>24]^n[h>>>16&255]^o[f>>>8&255]^s[255&l]^r[p++],v=i[h>>>24]^n[f>>>16&255]^o[l>>>8&255]^s[255&u]^r[p++],_=i[f>>>24]^n[l>>>16&255]^o[u>>>8&255]^s[255&h]^r[p++],g=i[l>>>24]^n[u>>>16&255]^o[h>>>8&255]^s[255&f]^r[p++];u=y,h=v,f=_,l=g}var y=(a[u>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&l])^r[p++],v=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[l>>>8&255]<<8|a[255&u])^r[p++],_=(a[f>>>24]<<24|a[l>>>16&255]<<16|a[u>>>8&255]<<8|a[255&h])^r[p++],g=(a[l>>>24]<<24|a[u>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^r[p++];t[e]=y,t[e+1]=v,t[e+2]=_,t[e+3]=g},keySize:8});e.AES=i._createHelper(v)}(),t.AES})},function(t,e,r){!function(r,i){t.exports=e=i()}(this,function(){var t=t||function(t,e){var r=Object.create||function(){function t(){}return function(e){var r;return t.prototype=e,r=new t,t.prototype=null,r}}(),i={},n=i.lib={},o=n.Base=function(){return{extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),s=n.WordArray=o.extend({init:function(t,r){t=this.words=t||[],r!=e?this.sigBytes=r:this.sigBytes=4*t.length},toString:function(t){return(t||c).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,n=t.sigBytes;if(this.clamp(),i%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(var o=0;o>>2]=r[o>>>2];return this.sigBytes+=n,this},clamp:function(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var r,i=[],n=function(e){var e=e,r=987654321,i=4294967295;return function(){r=36969*(65535&r)+(r>>16)&i,e=18e3*(65535&e)+(e>>16)&i;var n=(r<<16)+e&i;return n/=4294967296,n+=.5,n*(t.random()>.5?1:-1)}},o=0;o>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new s.init(r,e/2)}},u=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new s.init(r,e)}},h=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return u.parse(unescape(encodeURIComponent(t)))}},f=n.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=h.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r=this._data,i=r.words,n=r.sigBytes,o=this.blockSize,a=4*o,c=n/a;c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*o,h=t.min(4*u,n);if(u){for(var f=0;f>>6-s%4*2;i[o>>>2]|=(a|c)<<24-o%4*8,o++}return n.create(i,o)}var r=t,i=r.lib,n=i.WordArray,o=r.enc;o.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp();for(var n=[],o=0;o>>2]>>>24-o%4*8&255,a=e[o+1>>>2]>>>24-(o+1)%4*8&255,c=e[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|a<<8|c,h=0;h<4&&o+.75*h>>6*(3-h)&63));var f=i.charAt(64);if(f)for(;n.length%4;)n.push(f);return n.join("")},parse:function(t){var r=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var o=0;o>>32-o)+e}function i(t,e,r,i,n,o,s){var a=t+(e&i|r&~i)+n+s;return(a<>>32-o)+e}function n(t,e,r,i,n,o,s){var a=t+(e^r^i)+n+s;return(a<>>32-o)+e}function o(t,e,r,i,n,o,s){var a=t+(r^(e|~i))+n+s;return(a<>>32-o)+e}var s=t,a=s.lib,c=a.WordArray,u=a.Hasher,h=s.algo,f=[];!function(){for(var t=0;t<64;t++)f[t]=4294967296*e.abs(e.sin(t+1))|0}();var l=h.MD5=u.extend({_doReset:function(){this._hash=new c.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var s=0;s<16;s++){var a=e+s,c=t[a];t[a]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var u=this._hash.words,h=t[e+0],l=t[e+1],p=t[e+2],d=t[e+3],y=t[e+4],v=t[e+5],_=t[e+6],g=t[e+7],S=t[e+8],m=t[e+9],k=t[e+10],E=t[e+11],B=t[e+12],C=t[e+13],A=t[e+14],x=t[e+15],w=u[0],b=u[1],D=u[2],T=u[3];w=r(w,b,D,T,h,7,f[0]),T=r(T,w,b,D,l,12,f[1]),D=r(D,T,w,b,p,17,f[2]),b=r(b,D,T,w,d,22,f[3]),w=r(w,b,D,T,y,7,f[4]),T=r(T,w,b,D,v,12,f[5]),D=r(D,T,w,b,_,17,f[6]),b=r(b,D,T,w,g,22,f[7]),w=r(w,b,D,T,S,7,f[8]),T=r(T,w,b,D,m,12,f[9]),D=r(D,T,w,b,k,17,f[10]),b=r(b,D,T,w,E,22,f[11]),w=r(w,b,D,T,B,7,f[12]),T=r(T,w,b,D,C,12,f[13]),D=r(D,T,w,b,A,17,f[14]),b=r(b,D,T,w,x,22,f[15]),w=i(w,b,D,T,l,5,f[16]),T=i(T,w,b,D,_,9,f[17]),D=i(D,T,w,b,E,14,f[18]),b=i(b,D,T,w,h,20,f[19]),w=i(w,b,D,T,v,5,f[20]),T=i(T,w,b,D,k,9,f[21]),D=i(D,T,w,b,x,14,f[22]),b=i(b,D,T,w,y,20,f[23]),w=i(w,b,D,T,m,5,f[24]),T=i(T,w,b,D,A,9,f[25]),D=i(D,T,w,b,d,14,f[26]),b=i(b,D,T,w,S,20,f[27]),w=i(w,b,D,T,C,5,f[28]),T=i(T,w,b,D,p,9,f[29]),D=i(D,T,w,b,g,14,f[30]),b=i(b,D,T,w,B,20,f[31]),w=n(w,b,D,T,v,4,f[32]),T=n(T,w,b,D,S,11,f[33]),D=n(D,T,w,b,E,16,f[34]),b=n(b,D,T,w,A,23,f[35]),w=n(w,b,D,T,l,4,f[36]),T=n(T,w,b,D,y,11,f[37]),D=n(D,T,w,b,g,16,f[38]),b=n(b,D,T,w,k,23,f[39]),w=n(w,b,D,T,C,4,f[40]),T=n(T,w,b,D,h,11,f[41]),D=n(D,T,w,b,d,16,f[42]),b=n(b,D,T,w,_,23,f[43]),w=n(w,b,D,T,m,4,f[44]),T=n(T,w,b,D,B,11,f[45]),D=n(D,T,w,b,x,16,f[46]),b=n(b,D,T,w,p,23,f[47]),w=o(w,b,D,T,h,6,f[48]),T=o(T,w,b,D,g,10,f[49]),D=o(D,T,w,b,A,15,f[50]),b=o(b,D,T,w,v,21,f[51]),w=o(w,b,D,T,B,6,f[52]),T=o(T,w,b,D,d,10,f[53]),D=o(D,T,w,b,k,15,f[54]),b=o(b,D,T,w,l,21,f[55]),w=o(w,b,D,T,S,6,f[56]),T=o(T,w,b,D,x,10,f[57]),D=o(D,T,w,b,_,15,f[58]),b=o(b,D,T,w,C,21,f[59]),w=o(w,b,D,T,y,6,f[60]),T=o(T,w,b,D,E,10,f[61]),D=o(D,T,w,b,p,15,f[62]),b=o(b,D,T,w,m,21,f[63]),u[0]=u[0]+w|0,u[1]=u[1]+b|0,u[2]=u[2]+D|0,u[3]=u[3]+T|0},_doFinalize:function(){var t=this._data,r=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;r[n>>>5]|=128<<24-n%32;var o=e.floor(i/4294967296),s=i;r[(n+64>>>9<<4)+15]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[(n+64>>>9<<4)+14]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),t.sigBytes=4*(r.length+1),this._process();for(var a=this._hash,c=a.words,u=0;u<4;u++){var h=c[u];c[u]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return a},clone:function(){var t=u.clone.call(this);return t._hash=this._hash.clone(),t}});s.MD5=u._createHelper(l),s.HmacMD5=u._createHmacHelper(l)}(Math),t.MD5})},function(t,e,r){!function(i,n,o){t.exports=e=n(r(7),r(11),r(12))}(this,function(t){return function(){var e=t,r=e.lib,i=r.Base,n=r.WordArray,o=e.algo,s=o.MD5,a=o.EvpKDF=i.extend({cfg:i.extend({keySize:4,hasher:s,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,i=r.hasher.create(),o=n.create(),s=o.words,a=r.keySize,c=r.iterations;s.length>>31}var f=(i<<5|i>>>27)+c+s[u];f+=u<20?(n&o|~n&a)+1518500249:u<40?(n^o^a)+1859775393:u<60?(n&o|n&a|o&a)-1894007588:(n^o^a)-899497514,c=a,a=o,o=n<<30|n>>>2,n=i,i=f}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+a|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[(i+64>>>9<<4)+14]=Math.floor(r/4294967296),e[(i+64>>>9<<4)+15]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=n._createHelper(a),e.HmacSHA1=n._createHmacHelper(a)}(),t.SHA1})},function(t,e,r){!function(i,n){t.exports=e=n(r(7))}(this,function(t){!function(){var e=t,r=e.lib,i=r.Base,n=e.enc,o=n.Utf8,s=e.algo;s.HMAC=i.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=o.parse(e));var r=t.blockSize,i=4*r;e.sigBytes>i&&(e=t.finalize(e)),e.clamp();for(var n=this._oKey=e.clone(),s=this._iKey=e.clone(),a=n.words,c=s.words,u=0;u>>2];t.sigBytes-=e}},_=(i.BlockCipher=f.extend({cfg:f.cfg.extend({mode:d,padding:v}),reset:function(){f.reset.call(this);var t=this.cfg,e=t.iv,r=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var i=r.createEncryptor;else{var i=r.createDecryptor;this._minBufferSize=1}this._mode=i.call(r,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else{var e=this._process(!0);t.unpad(e)}return e},blockSize:4}),i.CipherParams=n.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),g=r.format={},S=g.OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;if(r)var i=o.create([1398893684,1701076831]).concat(r).concat(e);else var i=e;return i.toString(c)},parse:function(t){var e=c.parse(t),r=e.words;if(1398893684==r[0]&&1701076831==r[1]){var i=o.create(r.slice(2,4));r.splice(0,4),e.sigBytes-=16}return _.create({ciphertext:e,salt:i})}},m=i.SerializableCipher=n.extend({cfg:n.extend({format:S}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),o=n.finalize(e),s=n.cfg;return _.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=t.createDecryptor(r,i).finalize(e.ciphertext);return n},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),k=r.kdf={},E=k.OpenSSL={execute:function(t,e,r,i){i||(i=o.random(8));var n=h.create({keySize:e+r}).compute(t,i),s=o.create(n.words.slice(e),4*r);return n.sigBytes=4*e,_.create({key:n,iv:s,salt:i})}},B=i.PasswordBasedCipher=m.extend({cfg:m.cfg.extend({kdf:E}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=i.kdf.execute(r,t.keySize,t.ivSize);i.iv=n.iv;var o=m.encrypt.call(this,t,e,n.key,i);return o.mixIn(n),o},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);i.iv=n.iv;var o=m.decrypt.call(this,t,e,n.key,i);return o}})}()})},function(t,e,r){!function(i,n,o){t.exports=e=n(r(7),r(8),r(9),r(10),r(13))}(this,function(t){return function(){function e(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<>>5]>>>31-n%32&1}for(var o=this._subKeys=[],s=0;s<16;s++){for(var a=o[s]=[],f=h[s],i=0;i<24;i++)a[i/6|0]|=r[(u[i]-1+f)%28]<<31-i%6,a[4+(i/6|0)]|=r[28+(u[i+24]-1+f)%28]<<31-i%6;a[0]=a[0]<<1|a[0]>>>31;for(var i=1;i<7;i++)a[i]=a[i]>>>4*(i-1)+3;a[7]=a[7]<<5|a[7]>>>27}for(var l=this._invSubKeys=[],i=0;i<16;i++)l[i]=o[15-i]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,i,n){this._lBlock=t[i],this._rBlock=t[i+1],e.call(this,4,252645135),e.call(this,16,65535),r.call(this,2,858993459),r.call(this,8,16711935),e.call(this,1,1431655765);for(var o=0;o<16;o++){for(var s=n[o],a=this._lBlock,c=this._rBlock,u=0,h=0;h<8;h++)u|=f[h][((c^s[h])&l[h])>>>0];this._lBlock=c,this._rBlock=a^u}var p=this._lBlock;this._lBlock=this._rBlock,this._rBlock=p,e.call(this,1,1431655765),r.call(this,8,16711935),r.call(this,2,858993459),e.call(this,16,65535),e.call(this,4,252645135),t[i]=this._lBlock,t[i+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});i.DES=s._createHelper(p);var d=a.TripleDES=s.extend({_doReset:function(){var t=this._key,e=t.words;this._des1=p.createEncryptor(o.create(e.slice(0,2))),this._des2=p.createEncryptor(o.create(e.slice(2,4))),this._des3=p.createEncryptor(o.create(e.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});i.TripleDES=s._createHelper(d)}(),t.TripleDES})},function(t,e,r){!function(i,n,o){t.exports=e=n(r(7),r(8),r(9),r(10),r(13))}(this,function(t){return function(){function e(){for(var t=this._X,e=this._C,r=0;r<8;r++)a[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(var r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,u=((4294901760&i)*i|0)+((65535&i)*i|0);c[r]=s^u}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var r=t,i=r.lib,n=i.StreamCipher,o=r.algo,s=[],a=[],c=[],u=o.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,r=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],o=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;i<4;i++)e.call(this);for(var i=0;i<8;i++)o[i]^=n[i+4&7];if(r){var s=r.words,a=s[0],c=s[1],u=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),f=u>>>16|4294901760&h,l=h<<16|65535&u;o[0]^=u,o[1]^=f,o[2]^=h,o[3]^=l,o[4]^=u,o[5]^=f,o[6]^=h,o[7]^=l;for(var i=0;i<4;i++)e.call(this)}},_doProcessBlock:function(t,r){var i=this._X;e.call(this),s[0]=i[0]^i[5]>>>16^i[3]<<16,s[1]=i[2]^i[7]>>>16^i[5]<<16,s[2]=i[4]^i[1]>>>16^i[7]<<16,s[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)s[n]=16711935&(s[n]<<8|s[n]>>>24)|4278255360&(s[n]<<24|s[n]>>>8),t[r+n]^=s[n]},blockSize:4,ivSize:2});r.Rabbit=n._createHelper(u)}(),t.Rabbit})},function(t,e,r){!function(i,n,o){t.exports=e=n(r(7),r(8),r(9),r(10),r(13))}(this,function(t){return function(){function e(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){e=(e+1)%256,r=(r+t[e])%256;var o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}var r=t,i=r.lib,n=i.StreamCipher,o=r.algo,s=o.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;for(var n=0,o=0;n<256;n++){var s=n%r,a=e[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+a)%256;var c=i[n];i[n]=i[o],i[o]=c}this._i=this._j=0},_doProcessBlock:function(t,r){t[r]^=e.call(this)},keySize:8,ivSize:0});r.RC4=n._createHelper(s);var a=o.RC4Drop=s.extend({cfg:s.cfg.extend({drop:192}),_doReset:function(){s._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)e.call(this)}});r.RC4Drop=n._createHelper(a)}(),t.RC4})}])}); //# sourceMappingURL=secure-ls.min.js.map \ No newline at end of file diff --git a/dist/secure-ls.min.js.map b/dist/secure-ls.min.js.map index 32ed62f..d8a580e 100644 --- a/dist/secure-ls.min.js.map +++ b/dist/secure-ls.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///secure-ls.min.js","webpack:///webpack/bootstrap 6c511215f8f76b5cfa14","webpack:///./src/index.js","webpack:///./src/utils.js","webpack:///./src/constants.js","webpack:///./src/WordArray.js","webpack:///./~/crypto-js/pbkdf2.js","webpack:///./~/crypto-js/core.js","webpack:///./~/crypto-js/sha1.js","webpack:///./~/crypto-js/hmac.js","webpack:///./src/enc-utf8.js","webpack:///./src/Base64.js","webpack:///./~/lz-string/libs/lz-string.js","webpack:///./~/crypto-js/aes.js","webpack:///./~/crypto-js/enc-base64.js","webpack:///./~/crypto-js/md5.js","webpack:///./~/crypto-js/evpkdf.js","webpack:///./~/crypto-js/cipher-core.js","webpack:///./~/crypto-js/tripledes.js","webpack:///./~/crypto-js/rabbit.js","webpack:///./~/crypto-js/rc4.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","Object","defineProperty","value","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","_utils","_utils2","_constants","_constants2","_encUtf","_encUtf2","_Base","_Base2","_lzString","_lzString2","_aes","_aes2","_tripledes","_tripledes2","_rabbit","_rabbit2","_rc","_rc2","SecureLS","config","_name","utils","constants","Base64","LZString","AES","DES","RABBIT","RC4","enc","isCompression","encodingType","EncrytionTypes","BASE64","encryptionSecret","encryptionNamespace","toLowerCase","ls","localStorage","init","metaData","getMetaData","WarningEnum","WarningTypes","_isBase64","_isBase64EncryptionType","_isAES","_isAESEncryptionType","_isDES","_isDESEncryptionType","_isRabbit","_isRabbitEncryptionType","_isRC4","_isRC4EncryptionType","_isCompression","_isDataCompressionEnabled","allKeys","keys","resetAllKeys","getObjectFromKey","s","generateSecretKey","setMetaData","isAllKeysData","decodedData","jsonData","deCompressedData","bytes","data","is","warn","KEY_NOT_PROVIDED","getDataFromLocalStorage","decompressFromUTF16","decode","getEncryptionSecret","decrypt","toString","_Utf8","JSON","parse","e","Error","getItem","extractKeyNames","dataToStore","String","metaKey","isKeyPresent","addToKeysList","processData","setDataToLocalStorage","setItem","getAllKeys","META_KEY_REMOVE","removeFromKeysList","removeItem","clear","undefined","encodedData","compressedData","stringify","encode","encrypt","compressToUTF16","getMetaKey","get","_WordArray","_WordArray2","_pbkdf","_pbkdf2","secretPhrase","reason","DEFAULT_TEXT","console","salt","CryptoJSWordArray","random","key128Bits","keySize","k","map","keyData","isKeyAlreadyPresent","push","index","splice","nBytes","rcache","words","r","mw","mz","mask","result","Math","_r","Set","sigBytes","undef","CryptoJS","C","C_lib","lib","Base","WordArray","C_algo","algo","SHA1","HMAC","PBKDF2","extend","cfg","hasher","iterations","compute","password","hmac","create","derivedKey","blockIndex","derivedKeyWords","blockIndexWords","block","update","finalize","reset","blockWords","blockWordsLength","intermediate","intermediateWords","j","concat","F","subtype","overrides","mixIn","hasOwnProperty","$super","apply","arguments","properties","propertyName","clone","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","ceil","slice","m_w","m_z","C_enc","hexChars","bite","join","hexStr","hexStrLength","parseInt","substr","Latin1","latin1Chars","fromCharCode","latin1Str","latin1StrLength","charCodeAt","Utf8","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","BufferedBlockAlgorithm","_data","_nDataBytes","_append","_process","doFlush","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","max","_minBufferSize","nWordsReady","nBytesReady","min","offset","_doProcessBlock","processedWords","Hasher","_doReset","messageUpdate","hash","_doFinalize","_createHelper","message","_createHmacHelper","W","_hash","M","H","a","b","d","n","t","nBitsTotal","nBitsLeft","floor","HmacSHA1","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","_keyStr","o","u","f","_utf8Encode","isNaN","charAt","replace","indexOf","_utf8Decode","c2","c3","__WEBPACK_AMD_DEFINE_RESULT__","getBaseValue","alphabet","character","baseReverseDic","keyStrBase64","keyStrUriSafe","compressToBase64","input","res","_compress","decompressFromBase64","_decompress","compressed","compressToUint8Array","uncompressed","compress","buf","Uint8Array","TotalLen","current_value","decompressFromUint8Array","decompress","Array","forEach","compressToEncodedURIComponent","decompressFromEncodedURIComponent","bitsPerChar","getCharFromInt","ii","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","pow","resetValue","getNextValue","next","w","bits","resb","maxpower","power","dictionary","enlargeIn","dictSize","numBits","entry","val","position","BlockCipher","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","x","xi","sx","x2","x4","x8","RCON","_nRounds","_keyPriorReset","_key","keyWords","nRounds","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","encryptBlock","_doCryptBlock","decryptBlock","s0","s1","s2","s3","round","t0","t1","t2","t3","parseLoop","base64Str","base64StrLength","reverseMap","bits1","bits2","_map","base64Chars","byte1","byte2","byte3","triplet","paddingChar","_reverseMap","paddingIndex","FF","GG","HH","II","T","abs","sin","MD5","offset_i","M_offset_i","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","nBitsTotalH","nBitsTotalL","H_i","HmacMD5","EvpKDF","Cipher","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","process","dataUpdate","finalProcessedData","ivSize","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","cipher","ciphertext","C_mode","StreamCipher","finalProcessedBlocks","mode","BlockCipherMode","iv","Encryptor","Decryptor","_cipher","_iv","CBC","xorBlock","_prevBlock","processBlock","thisBlock","C_pad","pad","Pkcs7","nPaddingBytes","paddingWord","paddingWords","padding","unpad","CipherParams","modeCreator","_mode","cipherParams","formatter","C_format","format","OpenSSLFormatter","OpenSSL","openSSLStr","ciphertextWords","encryptor","cipherCfg","algorithm","_parse","plaintext","C_kdf","kdf","OpenSSLKdf","execute","derivedParams","exchangeLR","_lBlock","_rBlock","exchangeRL","PC1","PC2","BIT_SHIFTS","SBOX_P","0","268435456","536870912","805306368","1073741824","1342177280","1610612736","1879048192","2147483648","2415919104","2684354560","2952790016","3221225472","3489660928","3758096384","4026531840","134217728","402653184","671088640","939524096","1207959552","1476395008","1744830464","2013265920","2281701376","2550136832","2818572288","3087007744","3355443200","3623878656","3892314112","4160749568","1","268435457","536870913","805306369","1073741825","1342177281","1610612737","1879048193","2147483649","2415919105","2684354561","2952790017","3221225473","3489660929","3758096385","4026531841","134217729","402653185","671088641","939524097","1207959553","1476395009","1744830465","2013265921","2281701377","2550136833","2818572289","3087007745","3355443201","3623878657","3892314113","4160749569","16777216","33554432","50331648","67108864","83886080","100663296","117440512","150994944","167772160","184549376","201326592","218103808","234881024","251658240","8388608","25165824","41943040","58720256","75497472","92274688","109051904","125829120","142606336","159383552","176160768","192937984","209715200","226492416","243269632","260046848","285212672","301989888","318767104","335544320","352321536","369098752","385875968","419430400","436207616","452984832","469762048","486539264","503316480","520093696","276824064","293601280","310378496","327155712","343932928","360710144","377487360","394264576","411041792","427819008","444596224","461373440","478150656","494927872","511705088","528482304","1048576","2097152","3145728","4194304","5242880","6291456","7340032","9437184","10485760","11534336","12582912","13631488","14680064","15728640","524288","1572864","2621440","3670016","4718592","5767168","6815744","7864320","8912896","9961472","11010048","12058624","13107200","14155776","15204352","16252928","17825792","18874368","19922944","20971520","22020096","23068672","24117248","26214400","27262976","28311552","29360128","30408704","31457280","32505856","17301504","18350080","19398656","20447232","21495808","22544384","23592960","24641536","25690112","26738688","27787264","28835840","29884416","30932992","31981568","33030144","65536","131072","196608","262144","327680","393216","458752","589824","655360","720896","786432","851968","917504","983040","32768","98304","163840","229376","294912","360448","425984","491520","557056","622592","688128","753664","819200","884736","950272","1015808","1114112","1179648","1245184","1310720","1376256","1441792","1507328","1638400","1703936","1769472","1835008","1900544","1966080","2031616","1081344","1146880","1212416","1277952","1343488","1409024","1474560","1540096","1605632","1671168","1736704","1802240","1867776","1933312","1998848","2064384","4096","8192","12288","16384","20480","24576","28672","36864","40960","45056","49152","53248","57344","61440","2048","6144","10240","14336","18432","22528","26624","30720","34816","38912","43008","47104","51200","55296","59392","63488","69632","73728","77824","81920","86016","90112","94208","102400","106496","110592","114688","118784","122880","126976","67584","71680","75776","79872","83968","88064","92160","96256","100352","104448","108544","112640","116736","120832","124928","129024","256","512","768","1024","1280","1536","1792","2304","2560","2816","3072","3328","3584","3840","128","384","640","896","1152","1408","1664","1920","2176","2432","2688","2944","3200","3456","3712","3968","4352","4608","4864","5120","5376","5632","5888","6400","6656","6912","7168","7424","7680","7936","4224","4480","4736","4992","5248","5504","5760","6016","6272","6528","6784","7040","7296","7552","7808","8064","16","32","48","64","80","96","112","144","160","176","192","208","224","240","8","24","40","56","72","88","104","120","136","152","168","184","200","216","232","248","272","288","304","320","336","352","368","400","416","432","448","464","480","496","264","280","296","312","328","344","360","376","392","408","424","440","456","472","488","504","2","3","4","5","6","7","9","10","11","12","13","14","15","2147483650","2147483651","2147483652","2147483653","2147483654","2147483655","2147483656","2147483657","2147483658","2147483659","2147483660","2147483661","2147483662","2147483663","17","18","19","20","21","22","23","25","26","27","28","29","30","31","2147483664","2147483665","2147483666","2147483667","2147483668","2147483669","2147483670","2147483671","2147483672","2147483673","2147483674","2147483675","2147483676","2147483677","2147483678","2147483679","SBOX_MASK","keyBits","keyBitPos","subKeys","_subKeys","nSubKey","subKey","bitShift","invSubKeys","_invSubKeys","lBlock","rBlock","TripleDES","_des1","_des2","_des3","nextState","X","_X","_C","C_","_b","gx","ga","gb","gh","gl","G","S","Rabbit","K","IV","IV_0","IV_1","i0","i2","i1","i3","generateKeystreamWord","_S","_i","_j","keystreamWord","keySigBytes","keyByteIndex","keyByte","RC4Drop","drop"],"mappings":"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","file":"secure-ls.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"SecureLS\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SecureLS\"] = factory();\n\telse\n\t\troot[\"SecureLS\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"SecureLS\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SecureLS\"] = factory();\n\telse\n\t\troot[\"SecureLS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _utils = __webpack_require__(1);\n\t\n\tvar _utils2 = _interopRequireDefault(_utils);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tvar _constants2 = _interopRequireDefault(_constants);\n\t\n\tvar _encUtf = __webpack_require__(8);\n\t\n\tvar _encUtf2 = _interopRequireDefault(_encUtf);\n\t\n\tvar _Base = __webpack_require__(9);\n\t\n\tvar _Base2 = _interopRequireDefault(_Base);\n\t\n\tvar _lzString = __webpack_require__(10);\n\t\n\tvar _lzString2 = _interopRequireDefault(_lzString);\n\t\n\tvar _aes = __webpack_require__(11);\n\t\n\tvar _aes2 = _interopRequireDefault(_aes);\n\t\n\tvar _tripledes = __webpack_require__(16);\n\t\n\tvar _tripledes2 = _interopRequireDefault(_tripledes);\n\t\n\tvar _rabbit = __webpack_require__(17);\n\t\n\tvar _rabbit2 = _interopRequireDefault(_rabbit);\n\t\n\tvar _rc = __webpack_require__(18);\n\t\n\tvar _rc2 = _interopRequireDefault(_rc);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar SecureLS = function () {\n\t function SecureLS(config) {\n\t _classCallCheck(this, SecureLS);\n\t\n\t config = config || {};\n\t this._name = 'secure-ls';\n\t this.utils = _utils2.default;\n\t this.constants = _constants2.default;\n\t this.Base64 = _Base2.default;\n\t this.LZString = _lzString2.default;\n\t this.AES = _aes2.default;\n\t this.DES = _tripledes2.default;\n\t this.RABBIT = _rabbit2.default;\n\t this.RC4 = _rc2.default;\n\t this.enc = _encUtf2.default;\n\t\n\t this.config = {\n\t isCompression: true,\n\t encodingType: _constants2.default.EncrytionTypes.BASE64,\n\t encryptionSecret: config.encryptionSecret,\n\t encryptionNamespace: config.encryptionNamespace\n\t };\n\t this.config.isCompression = typeof config.isCompression !== 'undefined' ? config.isCompression : true;\n\t this.config.encodingType = typeof config.encodingType !== 'undefined' || config.encodingType === '' ? config.encodingType.toLowerCase() : _constants2.default.EncrytionTypes.BASE64;\n\t\n\t this.ls = localStorage;\n\t this.init();\n\t }\n\t\n\t _createClass(SecureLS, [{\n\t key: 'init',\n\t value: function init() {\n\t var metaData = this.getMetaData();\n\t\n\t this.WarningEnum = this.constants.WarningEnum;\n\t this.WarningTypes = this.constants.WarningTypes;\n\t this.EncrytionTypes = this.constants.EncrytionTypes;\n\t\n\t this._isBase64 = this._isBase64EncryptionType();\n\t this._isAES = this._isAESEncryptionType();\n\t this._isDES = this._isDESEncryptionType();\n\t this._isRabbit = this._isRabbitEncryptionType();\n\t this._isRC4 = this._isRC4EncryptionType();\n\t this._isCompression = this._isDataCompressionEnabled();\n\t\n\t // fill the already present keys to the list of keys being used by secure-ls\n\t this.utils.allKeys = metaData.keys || this.resetAllKeys();\n\t }\n\t }, {\n\t key: '_isBase64EncryptionType',\n\t value: function _isBase64EncryptionType() {\n\t return _Base2.default && (typeof this.config.encodingType === 'undefined' || this.config.encodingType === this.constants.EncrytionTypes.BASE64);\n\t }\n\t }, {\n\t key: '_isAESEncryptionType',\n\t value: function _isAESEncryptionType() {\n\t return _aes2.default && this.config.encodingType === this.constants.EncrytionTypes.AES;\n\t }\n\t }, {\n\t key: '_isDESEncryptionType',\n\t value: function _isDESEncryptionType() {\n\t return _tripledes2.default && this.config.encodingType === this.constants.EncrytionTypes.DES;\n\t }\n\t }, {\n\t key: '_isRabbitEncryptionType',\n\t value: function _isRabbitEncryptionType() {\n\t return _rabbit2.default && this.config.encodingType === this.constants.EncrytionTypes.RABBIT;\n\t }\n\t }, {\n\t key: '_isRC4EncryptionType',\n\t value: function _isRC4EncryptionType() {\n\t return _rc2.default && this.config.encodingType === this.constants.EncrytionTypes.RC4;\n\t }\n\t }, {\n\t key: '_isDataCompressionEnabled',\n\t value: function _isDataCompressionEnabled() {\n\t return this.config.isCompression;\n\t }\n\t }, {\n\t key: 'getEncryptionSecret',\n\t value: function getEncryptionSecret(key) {\n\t var metaData = this.getMetaData();\n\t var obj = this.utils.getObjectFromKey(metaData.keys, key);\n\t\n\t if (!obj) {\n\t return;\n\t }\n\t\n\t if (this._isAES || this._isDES || this._isRabbit || this._isRC4) {\n\t if (typeof this.config.encryptionSecret === 'undefined') {\n\t this.utils.encryptionSecret = obj.s;\n\t\n\t if (!this.utils.encryptionSecret) {\n\t this.utils.encryptionSecret = this.utils.generateSecretKey();\n\t this.setMetaData();\n\t }\n\t } else {\n\t this.utils.encryptionSecret = this.config.encryptionSecret || obj.s || '';\n\t }\n\t }\n\t }\n\t }, {\n\t key: 'get',\n\t value: function get(key, isAllKeysData) {\n\t var decodedData = '',\n\t jsonData = '',\n\t deCompressedData = void 0,\n\t bytes = void 0,\n\t data = void 0;\n\t\n\t if (!this.utils.is(key)) {\n\t this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n\t return jsonData;\n\t }\n\t\n\t data = this.getDataFromLocalStorage(key);\n\t\n\t if (!data) {\n\t return jsonData;\n\t }\n\t\n\t deCompressedData = data; // saves else\n\t if (this._isCompression || isAllKeysData) {\n\t // meta data always compressed\n\t deCompressedData = _lzString2.default.decompressFromUTF16(data);\n\t }\n\t\n\t decodedData = deCompressedData; // saves else\n\t if (this._isBase64 || isAllKeysData) {\n\t // meta data always Base64\n\t decodedData = _Base2.default.decode(deCompressedData);\n\t } else {\n\t this.getEncryptionSecret(key);\n\t if (this._isAES) {\n\t bytes = _aes2.default.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n\t } else if (this._isDES) {\n\t bytes = _tripledes2.default.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n\t } else if (this._isRabbit) {\n\t bytes = _rabbit2.default.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n\t } else if (this._isRC4) {\n\t bytes = _rc2.default.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n\t }\n\t\n\t if (bytes) {\n\t decodedData = bytes.toString(_encUtf2.default._Utf8);\n\t }\n\t }\n\t\n\t try {\n\t jsonData = JSON.parse(decodedData);\n\t } catch (e) {\n\t throw new Error('Could not parse JSON');\n\t }\n\t\n\t return jsonData;\n\t }\n\t }, {\n\t key: 'getDataFromLocalStorage',\n\t value: function getDataFromLocalStorage(key) {\n\t return this.ls.getItem(key, true);\n\t }\n\t }, {\n\t key: 'getAllKeys',\n\t value: function getAllKeys() {\n\t var data = this.getMetaData();\n\t\n\t return this.utils.extractKeyNames(data) || [];\n\t }\n\t }, {\n\t key: 'set',\n\t value: function set(key, data) {\n\t var dataToStore = '';\n\t\n\t if (!this.utils.is(key)) {\n\t this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n\t return;\n\t }\n\t\n\t this.getEncryptionSecret(key);\n\t\n\t // add key(s) to Array if not already added, only for keys other than meta key\n\t if (!(String(key) === String(this.utils.metaKey))) {\n\t if (!this.utils.isKeyPresent(key)) {\n\t this.utils.addToKeysList(key);\n\t this.setMetaData();\n\t }\n\t }\n\t\n\t dataToStore = this.processData(data);\n\t // Store the data to localStorage\n\t this.setDataToLocalStorage(key, dataToStore);\n\t }\n\t }, {\n\t key: 'setDataToLocalStorage',\n\t value: function setDataToLocalStorage(key, data) {\n\t this.ls.setItem(key, data);\n\t }\n\t }, {\n\t key: 'remove',\n\t value: function remove(key) {\n\t if (!this.utils.is(key)) {\n\t this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n\t return;\n\t }\n\t\n\t if (key === this.utils.metaKey && this.getAllKeys().length) {\n\t this.utils.warn(this.WarningEnum.META_KEY_REMOVE);\n\t return;\n\t }\n\t\n\t if (this.utils.isKeyPresent(key)) {\n\t this.utils.removeFromKeysList(key);\n\t this.setMetaData();\n\t }\n\t this.ls.removeItem(key);\n\t }\n\t }, {\n\t key: 'removeAll',\n\t value: function removeAll() {\n\t var keys = void 0,\n\t i = void 0;\n\t\n\t keys = this.getAllKeys();\n\t for (i = 0; i < keys.length; i++) {\n\t this.ls.removeItem(keys[i]);\n\t }\n\t this.ls.removeItem(this.utils.metaKey);\n\t\n\t this.resetAllKeys();\n\t }\n\t }, {\n\t key: 'clear',\n\t value: function clear() {\n\t this.ls.clear();\n\t this.resetAllKeys();\n\t }\n\t }, {\n\t key: 'resetAllKeys',\n\t value: function resetAllKeys() {\n\t this.utils.allKeys = [];\n\t return [];\n\t }\n\t }, {\n\t key: 'processData',\n\t value: function processData(data, isAllKeysData) {\n\t if (data === null || data === undefined || data === '') {\n\t return '';\n\t }\n\t\n\t var jsonData = void 0,\n\t encodedData = void 0,\n\t compressedData = void 0;\n\t\n\t try {\n\t jsonData = JSON.stringify(data);\n\t } catch (e) {\n\t throw new Error('Could not stringify data.');\n\t }\n\t\n\t // Encode Based on encoding type\n\t // If not set, default to Base64 for securing data\n\t encodedData = jsonData;\n\t if (this._isBase64 || isAllKeysData) {\n\t encodedData = _Base2.default.encode(jsonData);\n\t } else {\n\t if (this._isAES) {\n\t encodedData = _aes2.default.encrypt(jsonData, this.utils.encryptionSecret);\n\t } else if (this._isDES) {\n\t encodedData = _tripledes2.default.encrypt(jsonData, this.utils.encryptionSecret);\n\t } else if (this._isRabbit) {\n\t encodedData = _rabbit2.default.encrypt(jsonData, this.utils.encryptionSecret);\n\t } else if (this._isRC4) {\n\t encodedData = _rc2.default.encrypt(jsonData, this.utils.encryptionSecret);\n\t }\n\t\n\t encodedData = encodedData && encodedData.toString();\n\t }\n\t\n\t // Compress data if set to true\n\t compressedData = encodedData;\n\t if (this._isCompression || isAllKeysData) {\n\t compressedData = _lzString2.default.compressToUTF16(encodedData);\n\t }\n\t\n\t return compressedData;\n\t }\n\t }, {\n\t key: 'setMetaData',\n\t value: function setMetaData() {\n\t var dataToStore = this.processData({\n\t keys: this.utils.allKeys\n\t }, true);\n\t\n\t // Store the data to localStorage\n\t this.setDataToLocalStorage(this.getMetaKey(), dataToStore);\n\t }\n\t }, {\n\t key: 'getMetaData',\n\t value: function getMetaData() {\n\t return this.get(this.getMetaKey(), true) || {};\n\t }\n\t }, {\n\t key: 'getMetaKey',\n\t value: function getMetaKey() {\n\t return this.utils.metaKey + (this.config.encryptionNamespace ? '__' + this.config.encryptionNamespace : '');\n\t }\n\t }]);\n\t\n\t return SecureLS;\n\t}();\n\t\n\texports.default = SecureLS;\n\t;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tvar _constants2 = _interopRequireDefault(_constants);\n\t\n\tvar _WordArray = __webpack_require__(3);\n\t\n\tvar _WordArray2 = _interopRequireDefault(_WordArray);\n\t\n\tvar _pbkdf = __webpack_require__(4);\n\t\n\tvar _pbkdf2 = _interopRequireDefault(_pbkdf);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar utils = {\n\t metaKey: '_secure__ls__metadata',\n\t encryptionSecret: '',\n\t secretPhrase: 's3cr3t$#@135^&*246',\n\t allKeys: [],\n\t is: function is(key) {\n\t if (key) {\n\t return true;\n\t }\n\t return false;\n\t },\n\t warn: function warn(reason) {\n\t reason = reason ? reason : _constants2.default.WarningEnum.DEFAULT_TEXT;\n\t console.warn(_constants2.default.WarningTypes[reason]);\n\t },\n\t generateSecretKey: function generateSecretKey() {\n\t var salt = _WordArray2.default.random(128 / 8);\n\t var key128Bits = (0, _pbkdf2.default)(this.secretPhrase, salt, { keySize: 128 / 32 });\n\t\n\t return key128Bits && key128Bits.toString();\n\t },\n\t getObjectFromKey: function getObjectFromKey(data, key) {\n\t if (!data || !data.length) {\n\t return {};\n\t }\n\t\n\t var i = void 0,\n\t obj = {};\n\t\n\t for (i = 0; i < data.length; i++) {\n\t if (data[i].k === key) {\n\t obj = data[i];\n\t break;\n\t }\n\t }\n\t\n\t return obj;\n\t },\n\t extractKeyNames: function extractKeyNames(data) {\n\t if (!data || !data.keys || !data.keys.length) {\n\t return [];\n\t }\n\t\n\t return data.keys.map(function (keyData) {\n\t return keyData.k;\n\t });\n\t },\n\t getAllKeys: function getAllKeys() {\n\t return this.allKeys;\n\t },\n\t isKeyPresent: function isKeyPresent(key) {\n\t var isKeyAlreadyPresent = false;\n\t\n\t for (var i = 0; i < this.allKeys.length; i++) {\n\t if (String(this.allKeys[i].k) === String(key)) {\n\t isKeyAlreadyPresent = true; // found\n\t break;\n\t }\n\t }\n\t\n\t return isKeyAlreadyPresent;\n\t },\n\t addToKeysList: function addToKeysList(key) {\n\t this.allKeys.push({\n\t k: key,\n\t s: this.encryptionSecret\n\t });\n\t },\n\t removeFromKeysList: function removeFromKeysList(key) {\n\t var i = void 0,\n\t index = -1;\n\t\n\t for (i = 0; i < this.allKeys.length; i++) {\n\t if (this.allKeys[i].k === key) {\n\t index = i;\n\t break;\n\t }\n\t }\n\t if (index !== -1) {\n\t this.allKeys.splice(index, 1);\n\t }\n\t return index;\n\t }\n\t};\n\t\n\tmodule.exports = utils;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar WarningEnum = {\n\t KEY_NOT_PROVIDED: 'keyNotProvided',\n\t META_KEY_REMOVE: 'metaKeyRemove',\n\t DEFAULT_TEXT: 'defaultText'\n\t};\n\t\n\tvar WarningTypes = {};\n\t\n\tWarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!';\n\tWarningTypes[WarningEnum.META_KEY_REMOVE] = 'Secure LS: Meta key can not be removed\\nunless all keys created by Secure LS are removed!';\n\tWarningTypes[WarningEnum.DEFAULT_TEXT] = 'Unexpected output';\n\t\n\tvar constants = {\n\t WarningEnum: WarningEnum,\n\t WarningTypes: WarningTypes,\n\t EncrytionTypes: {\n\t BASE64: 'base64',\n\t AES: 'aes',\n\t DES: 'des',\n\t RABBIT: 'rabbit',\n\t RC4: 'rc4'\n\t }\n\t};\n\t\n\tmodule.exports = constants;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\t/*\n\t ES6 compatible port of CryptoJS - WordArray for PBKDF2 password key generation\n\t\n\t Source: https://github.com/brix/crypto-js\n\t LICENSE: MIT\n\t */\n\t\n\tvar CryptoJSWordArray = {};\n\t\n\tCryptoJSWordArray.random = function (nBytes) {\n\t var words = [];\n\t var r = function r(mw) {\n\t var mz = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\t\n\t return function () {\n\t mz = 0x9069 * (mz & 0xFFFF) + (mz >> 0x10) & mask;\n\t mw = 0x4650 * (mw & 0xFFFF) + (mw >> 0x10) & mask;\n\t var result = (mz << 0x10) + mw & mask;\n\t\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > 0.5 ? 1 : -1);\n\t };\n\t };\n\t\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\t\n\t rcache = _r() * 0x3ade67b7;\n\t words.push(_r() * 0x100000000 | 0);\n\t }\n\t\n\t return new this.Set(words, nBytes);\n\t};\n\t\n\tCryptoJSWordArray.Set = function (words, sigBytes) {\n\t words = this.words = words || [];\n\t\n\t if (sigBytes !== undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t};\n\t\n\tmodule.exports = CryptoJSWordArray;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5), __webpack_require__(6), __webpack_require__(7));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var Base = C_lib.Base;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var C_algo = C.algo;\n\t\t var SHA1 = C_algo.SHA1;\n\t\t var HMAC = C_algo.HMAC;\n\t\n\t\t /**\n\t\t * Password-Based Key Derivation Function 2 algorithm.\n\t\t */\n\t\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t\t * @property {Hasher} hasher The hasher to use. Default: SHA1\n\t\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t\t */\n\t\t cfg: Base.extend({\n\t\t keySize: 128/32,\n\t\t hasher: SHA1,\n\t\t iterations: 1\n\t\t }),\n\t\n\t\t /**\n\t\t * Initializes a newly created key derivation function.\n\t\t *\n\t\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t\t */\n\t\t init: function (cfg) {\n\t\t this.cfg = this.cfg.extend(cfg);\n\t\t },\n\t\n\t\t /**\n\t\t * Computes the Password-Based Key Derivation Function 2.\n\t\t *\n\t\t * @param {WordArray|string} password The password.\n\t\t * @param {WordArray|string} salt A salt.\n\t\t *\n\t\t * @return {WordArray} The derived key.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var key = kdf.compute(password, salt);\n\t\t */\n\t\t compute: function (password, salt) {\n\t\t // Shortcut\n\t\t var cfg = this.cfg;\n\t\n\t\t // Init HMAC\n\t\t var hmac = HMAC.create(cfg.hasher, password);\n\t\n\t\t // Initial values\n\t\t var derivedKey = WordArray.create();\n\t\t var blockIndex = WordArray.create([0x00000001]);\n\t\n\t\t // Shortcuts\n\t\t var derivedKeyWords = derivedKey.words;\n\t\t var blockIndexWords = blockIndex.words;\n\t\t var keySize = cfg.keySize;\n\t\t var iterations = cfg.iterations;\n\t\n\t\t // Generate key\n\t\t while (derivedKeyWords.length < keySize) {\n\t\t var block = hmac.update(salt).finalize(blockIndex);\n\t\t hmac.reset();\n\t\n\t\t // Shortcuts\n\t\t var blockWords = block.words;\n\t\t var blockWordsLength = blockWords.length;\n\t\n\t\t // Iterations\n\t\t var intermediate = block;\n\t\t for (var i = 1; i < iterations; i++) {\n\t\t intermediate = hmac.finalize(intermediate);\n\t\t hmac.reset();\n\t\n\t\t // Shortcut\n\t\t var intermediateWords = intermediate.words;\n\t\n\t\t // XOR intermediate with block\n\t\t for (var j = 0; j < blockWordsLength; j++) {\n\t\t blockWords[j] ^= intermediateWords[j];\n\t\t }\n\t\t }\n\t\n\t\t derivedKey.concat(block);\n\t\t blockIndexWords[0]++;\n\t\t }\n\t\t derivedKey.sigBytes = keySize * 4;\n\t\n\t\t return derivedKey;\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Computes the Password-Based Key Derivation Function 2.\n\t\t *\n\t\t * @param {WordArray|string} password The password.\n\t\t * @param {WordArray|string} salt A salt.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t\t *\n\t\t * @return {WordArray} The derived key.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var key = CryptoJS.PBKDF2(password, salt);\n\t\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t\t */\n\t\t C.PBKDF2 = function (password, salt, cfg) {\n\t\t return PBKDF2.create(cfg).compute(password, salt);\n\t\t };\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.PBKDF2;\n\t\n\t}));\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory();\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\troot.CryptoJS = factory();\n\t\t}\n\t}(this, function () {\n\t\n\t\t/**\n\t\t * CryptoJS core components.\n\t\t */\n\t\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t\t /*\n\t\t * Local polyfil of Object.create\n\t\t */\n\t\t var create = Object.create || (function () {\n\t\t function F() {};\n\t\n\t\t return function (obj) {\n\t\t var subtype;\n\t\n\t\t F.prototype = obj;\n\t\n\t\t subtype = new F();\n\t\n\t\t F.prototype = null;\n\t\n\t\t return subtype;\n\t\t };\n\t\t }())\n\t\n\t\t /**\n\t\t * CryptoJS namespace.\n\t\t */\n\t\t var C = {};\n\t\n\t\t /**\n\t\t * Library namespace.\n\t\t */\n\t\t var C_lib = C.lib = {};\n\t\n\t\t /**\n\t\t * Base object for prototypal inheritance.\n\t\t */\n\t\t var Base = C_lib.Base = (function () {\n\t\n\t\n\t\t return {\n\t\t /**\n\t\t * Creates a new object that inherits from this object.\n\t\t *\n\t\t * @param {Object} overrides Properties to copy into the new object.\n\t\t *\n\t\t * @return {Object} The new object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var MyType = CryptoJS.lib.Base.extend({\n\t\t * field: 'value',\n\t\t *\n\t\t * method: function () {\n\t\t * }\n\t\t * });\n\t\t */\n\t\t extend: function (overrides) {\n\t\t // Spawn\n\t\t var subtype = create(this);\n\t\n\t\t // Augment\n\t\t if (overrides) {\n\t\t subtype.mixIn(overrides);\n\t\t }\n\t\n\t\t // Create default initializer\n\t\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t\t subtype.init = function () {\n\t\t subtype.$super.init.apply(this, arguments);\n\t\t };\n\t\t }\n\t\n\t\t // Initializer's prototype is the subtype object\n\t\t subtype.init.prototype = subtype;\n\t\n\t\t // Reference supertype\n\t\t subtype.$super = this;\n\t\n\t\t return subtype;\n\t\t },\n\t\n\t\t /**\n\t\t * Extends this object and runs the init method.\n\t\t * Arguments to create() will be passed to init().\n\t\t *\n\t\t * @return {Object} The new object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var instance = MyType.create();\n\t\t */\n\t\t create: function () {\n\t\t var instance = this.extend();\n\t\t instance.init.apply(instance, arguments);\n\t\n\t\t return instance;\n\t\t },\n\t\n\t\t /**\n\t\t * Initializes a newly created object.\n\t\t * Override this method to add some logic when your objects are created.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var MyType = CryptoJS.lib.Base.extend({\n\t\t * init: function () {\n\t\t * // ...\n\t\t * }\n\t\t * });\n\t\t */\n\t\t init: function () {\n\t\t },\n\t\n\t\t /**\n\t\t * Copies properties into this object.\n\t\t *\n\t\t * @param {Object} properties The properties to mix in.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * MyType.mixIn({\n\t\t * field: 'value'\n\t\t * });\n\t\t */\n\t\t mixIn: function (properties) {\n\t\t for (var propertyName in properties) {\n\t\t if (properties.hasOwnProperty(propertyName)) {\n\t\t this[propertyName] = properties[propertyName];\n\t\t }\n\t\t }\n\t\n\t\t // IE won't copy toString using the loop above\n\t\t if (properties.hasOwnProperty('toString')) {\n\t\t this.toString = properties.toString;\n\t\t }\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a copy of this object.\n\t\t *\n\t\t * @return {Object} The clone.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var clone = instance.clone();\n\t\t */\n\t\t clone: function () {\n\t\t return this.init.prototype.extend(this);\n\t\t }\n\t\t };\n\t\t }());\n\t\n\t\t /**\n\t\t * An array of 32-bit words.\n\t\t *\n\t\t * @property {Array} words The array of 32-bit words.\n\t\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t\t */\n\t\t var WordArray = C_lib.WordArray = Base.extend({\n\t\t /**\n\t\t * Initializes a newly created word array.\n\t\t *\n\t\t * @param {Array} words (Optional) An array of 32-bit words.\n\t\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t\t */\n\t\t init: function (words, sigBytes) {\n\t\t words = this.words = words || [];\n\t\n\t\t if (sigBytes != undefined) {\n\t\t this.sigBytes = sigBytes;\n\t\t } else {\n\t\t this.sigBytes = words.length * 4;\n\t\t }\n\t\t },\n\t\n\t\t /**\n\t\t * Converts this word array to a string.\n\t\t *\n\t\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t\t *\n\t\t * @return {string} The stringified word array.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var string = wordArray + '';\n\t\t * var string = wordArray.toString();\n\t\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t\t */\n\t\t toString: function (encoder) {\n\t\t return (encoder || Hex).stringify(this);\n\t\t },\n\t\n\t\t /**\n\t\t * Concatenates a word array to this word array.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array to append.\n\t\t *\n\t\t * @return {WordArray} This word array.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * wordArray1.concat(wordArray2);\n\t\t */\n\t\t concat: function (wordArray) {\n\t\t // Shortcuts\n\t\t var thisWords = this.words;\n\t\t var thatWords = wordArray.words;\n\t\t var thisSigBytes = this.sigBytes;\n\t\t var thatSigBytes = wordArray.sigBytes;\n\t\n\t\t // Clamp excess bits\n\t\t this.clamp();\n\t\n\t\t // Concat\n\t\t if (thisSigBytes % 4) {\n\t\t // Copy one byte at a time\n\t\t for (var i = 0; i < thatSigBytes; i++) {\n\t\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t\t }\n\t\t } else {\n\t\t // Copy one word at a time\n\t\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t\t }\n\t\t }\n\t\t this.sigBytes += thatSigBytes;\n\t\n\t\t // Chainable\n\t\t return this;\n\t\t },\n\t\n\t\t /**\n\t\t * Removes insignificant bits.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * wordArray.clamp();\n\t\t */\n\t\t clamp: function () {\n\t\t // Shortcuts\n\t\t var words = this.words;\n\t\t var sigBytes = this.sigBytes;\n\t\n\t\t // Clamp\n\t\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t\t words.length = Math.ceil(sigBytes / 4);\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a copy of this word array.\n\t\t *\n\t\t * @return {WordArray} The clone.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var clone = wordArray.clone();\n\t\t */\n\t\t clone: function () {\n\t\t var clone = Base.clone.call(this);\n\t\t clone.words = this.words.slice(0);\n\t\n\t\t return clone;\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a word array filled with random bytes.\n\t\t *\n\t\t * @param {number} nBytes The number of random bytes to generate.\n\t\t *\n\t\t * @return {WordArray} The random word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t\t */\n\t\t random: function (nBytes) {\n\t\t var words = [];\n\t\n\t\t var r = (function (m_w) {\n\t\t var m_w = m_w;\n\t\t var m_z = 0x3ade68b1;\n\t\t var mask = 0xffffffff;\n\t\n\t\t return function () {\n\t\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t\t var result = ((m_z << 0x10) + m_w) & mask;\n\t\t result /= 0x100000000;\n\t\t result += 0.5;\n\t\t return result * (Math.random() > .5 ? 1 : -1);\n\t\t }\n\t\t });\n\t\n\t\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t\t var _r = r((rcache || Math.random()) * 0x100000000);\n\t\n\t\t rcache = _r() * 0x3ade67b7;\n\t\t words.push((_r() * 0x100000000) | 0);\n\t\t }\n\t\n\t\t return new WordArray.init(words, nBytes);\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Encoder namespace.\n\t\t */\n\t\t var C_enc = C.enc = {};\n\t\n\t\t /**\n\t\t * Hex encoding strategy.\n\t\t */\n\t\t var Hex = C_enc.Hex = {\n\t\t /**\n\t\t * Converts a word array to a hex string.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array.\n\t\t *\n\t\t * @return {string} The hex string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t\t */\n\t\t stringify: function (wordArray) {\n\t\t // Shortcuts\n\t\t var words = wordArray.words;\n\t\t var sigBytes = wordArray.sigBytes;\n\t\n\t\t // Convert\n\t\t var hexChars = [];\n\t\t for (var i = 0; i < sigBytes; i++) {\n\t\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t hexChars.push((bite >>> 4).toString(16));\n\t\t hexChars.push((bite & 0x0f).toString(16));\n\t\t }\n\t\n\t\t return hexChars.join('');\n\t\t },\n\t\n\t\t /**\n\t\t * Converts a hex string to a word array.\n\t\t *\n\t\t * @param {string} hexStr The hex string.\n\t\t *\n\t\t * @return {WordArray} The word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t\t */\n\t\t parse: function (hexStr) {\n\t\t // Shortcut\n\t\t var hexStrLength = hexStr.length;\n\t\n\t\t // Convert\n\t\t var words = [];\n\t\t for (var i = 0; i < hexStrLength; i += 2) {\n\t\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t\t }\n\t\n\t\t return new WordArray.init(words, hexStrLength / 2);\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * Latin1 encoding strategy.\n\t\t */\n\t\t var Latin1 = C_enc.Latin1 = {\n\t\t /**\n\t\t * Converts a word array to a Latin1 string.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array.\n\t\t *\n\t\t * @return {string} The Latin1 string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t\t */\n\t\t stringify: function (wordArray) {\n\t\t // Shortcuts\n\t\t var words = wordArray.words;\n\t\t var sigBytes = wordArray.sigBytes;\n\t\n\t\t // Convert\n\t\t var latin1Chars = [];\n\t\t for (var i = 0; i < sigBytes; i++) {\n\t\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t latin1Chars.push(String.fromCharCode(bite));\n\t\t }\n\t\n\t\t return latin1Chars.join('');\n\t\t },\n\t\n\t\t /**\n\t\t * Converts a Latin1 string to a word array.\n\t\t *\n\t\t * @param {string} latin1Str The Latin1 string.\n\t\t *\n\t\t * @return {WordArray} The word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t\t */\n\t\t parse: function (latin1Str) {\n\t\t // Shortcut\n\t\t var latin1StrLength = latin1Str.length;\n\t\n\t\t // Convert\n\t\t var words = [];\n\t\t for (var i = 0; i < latin1StrLength; i++) {\n\t\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t\t }\n\t\n\t\t return new WordArray.init(words, latin1StrLength);\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * UTF-8 encoding strategy.\n\t\t */\n\t\t var Utf8 = C_enc.Utf8 = {\n\t\t /**\n\t\t * Converts a word array to a UTF-8 string.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array.\n\t\t *\n\t\t * @return {string} The UTF-8 string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t\t */\n\t\t stringify: function (wordArray) {\n\t\t try {\n\t\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t\t } catch (e) {\n\t\t throw new Error('Malformed UTF-8 data');\n\t\t }\n\t\t },\n\t\n\t\t /**\n\t\t * Converts a UTF-8 string to a word array.\n\t\t *\n\t\t * @param {string} utf8Str The UTF-8 string.\n\t\t *\n\t\t * @return {WordArray} The word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t\t */\n\t\t parse: function (utf8Str) {\n\t\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * Abstract buffered block algorithm template.\n\t\t *\n\t\t * The property blockSize must be implemented in a concrete subtype.\n\t\t *\n\t\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t\t */\n\t\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t\t /**\n\t\t * Resets this block algorithm's data buffer to its initial state.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * bufferedBlockAlgorithm.reset();\n\t\t */\n\t\t reset: function () {\n\t\t // Initial values\n\t\t this._data = new WordArray.init();\n\t\t this._nDataBytes = 0;\n\t\t },\n\t\n\t\t /**\n\t\t * Adds new data to this block algorithm's buffer.\n\t\t *\n\t\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * bufferedBlockAlgorithm._append('data');\n\t\t * bufferedBlockAlgorithm._append(wordArray);\n\t\t */\n\t\t _append: function (data) {\n\t\t // Convert string to WordArray, else assume WordArray already\n\t\t if (typeof data == 'string') {\n\t\t data = Utf8.parse(data);\n\t\t }\n\t\n\t\t // Append\n\t\t this._data.concat(data);\n\t\t this._nDataBytes += data.sigBytes;\n\t\t },\n\t\n\t\t /**\n\t\t * Processes available data blocks.\n\t\t *\n\t\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t\t *\n\t\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t\t *\n\t\t * @return {WordArray} The processed data.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var processedData = bufferedBlockAlgorithm._process();\n\t\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t\t */\n\t\t _process: function (doFlush) {\n\t\t // Shortcuts\n\t\t var data = this._data;\n\t\t var dataWords = data.words;\n\t\t var dataSigBytes = data.sigBytes;\n\t\t var blockSize = this.blockSize;\n\t\t var blockSizeBytes = blockSize * 4;\n\t\n\t\t // Count blocks ready\n\t\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t\t if (doFlush) {\n\t\t // Round up to include partial blocks\n\t\t nBlocksReady = Math.ceil(nBlocksReady);\n\t\t } else {\n\t\t // Round down to include only full blocks,\n\t\t // less the number of blocks that must remain in the buffer\n\t\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t\t }\n\t\n\t\t // Count words ready\n\t\t var nWordsReady = nBlocksReady * blockSize;\n\t\n\t\t // Count bytes ready\n\t\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\t\n\t\t // Process blocks\n\t\t if (nWordsReady) {\n\t\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t\t // Perform concrete-algorithm logic\n\t\t this._doProcessBlock(dataWords, offset);\n\t\t }\n\t\n\t\t // Remove processed words\n\t\t var processedWords = dataWords.splice(0, nWordsReady);\n\t\t data.sigBytes -= nBytesReady;\n\t\t }\n\t\n\t\t // Return processed words\n\t\t return new WordArray.init(processedWords, nBytesReady);\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a copy of this object.\n\t\t *\n\t\t * @return {Object} The clone.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var clone = bufferedBlockAlgorithm.clone();\n\t\t */\n\t\t clone: function () {\n\t\t var clone = Base.clone.call(this);\n\t\t clone._data = this._data.clone();\n\t\n\t\t return clone;\n\t\t },\n\t\n\t\t _minBufferSize: 0\n\t\t });\n\t\n\t\t /**\n\t\t * Abstract hasher template.\n\t\t *\n\t\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t\t */\n\t\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t */\n\t\t cfg: Base.extend(),\n\t\n\t\t /**\n\t\t * Initializes a newly created hasher.\n\t\t *\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hasher = CryptoJS.algo.SHA256.create();\n\t\t */\n\t\t init: function (cfg) {\n\t\t // Apply config defaults\n\t\t this.cfg = this.cfg.extend(cfg);\n\t\n\t\t // Set initial values\n\t\t this.reset();\n\t\t },\n\t\n\t\t /**\n\t\t * Resets this hasher to its initial state.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * hasher.reset();\n\t\t */\n\t\t reset: function () {\n\t\t // Reset data buffer\n\t\t BufferedBlockAlgorithm.reset.call(this);\n\t\n\t\t // Perform concrete-hasher logic\n\t\t this._doReset();\n\t\t },\n\t\n\t\t /**\n\t\t * Updates this hasher with a message.\n\t\t *\n\t\t * @param {WordArray|string} messageUpdate The message to append.\n\t\t *\n\t\t * @return {Hasher} This hasher.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * hasher.update('message');\n\t\t * hasher.update(wordArray);\n\t\t */\n\t\t update: function (messageUpdate) {\n\t\t // Append\n\t\t this._append(messageUpdate);\n\t\n\t\t // Update the hash\n\t\t this._process();\n\t\n\t\t // Chainable\n\t\t return this;\n\t\t },\n\t\n\t\t /**\n\t\t * Finalizes the hash computation.\n\t\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t\t *\n\t\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t\t *\n\t\t * @return {WordArray} The hash.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hash = hasher.finalize();\n\t\t * var hash = hasher.finalize('message');\n\t\t * var hash = hasher.finalize(wordArray);\n\t\t */\n\t\t finalize: function (messageUpdate) {\n\t\t // Final message update\n\t\t if (messageUpdate) {\n\t\t this._append(messageUpdate);\n\t\t }\n\t\n\t\t // Perform concrete-hasher logic\n\t\t var hash = this._doFinalize();\n\t\n\t\t return hash;\n\t\t },\n\t\n\t\t blockSize: 512/32,\n\t\n\t\t /**\n\t\t * Creates a shortcut function to a hasher's object interface.\n\t\t *\n\t\t * @param {Hasher} hasher The hasher to create a helper for.\n\t\t *\n\t\t * @return {Function} The shortcut function.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t\t */\n\t\t _createHelper: function (hasher) {\n\t\t return function (message, cfg) {\n\t\t return new hasher.init(cfg).finalize(message);\n\t\t };\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a shortcut function to the HMAC's object interface.\n\t\t *\n\t\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t\t *\n\t\t * @return {Function} The shortcut function.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t\t */\n\t\t _createHmacHelper: function (hasher) {\n\t\t return function (message, key) {\n\t\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t\t };\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Algorithm namespace.\n\t\t */\n\t\t var C_algo = C.algo = {};\n\t\n\t\t return C;\n\t\t}(Math));\n\t\n\t\n\t\treturn CryptoJS;\n\t\n\t}));\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var Hasher = C_lib.Hasher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Reusable object\n\t\t var W = [];\n\t\n\t\t /**\n\t\t * SHA-1 hash algorithm.\n\t\t */\n\t\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t\t _doReset: function () {\n\t\t this._hash = new WordArray.init([\n\t\t 0x67452301, 0xefcdab89,\n\t\t 0x98badcfe, 0x10325476,\n\t\t 0xc3d2e1f0\n\t\t ]);\n\t\t },\n\t\n\t\t _doProcessBlock: function (M, offset) {\n\t\t // Shortcut\n\t\t var H = this._hash.words;\n\t\n\t\t // Working variables\n\t\t var a = H[0];\n\t\t var b = H[1];\n\t\t var c = H[2];\n\t\t var d = H[3];\n\t\t var e = H[4];\n\t\n\t\t // Computation\n\t\t for (var i = 0; i < 80; i++) {\n\t\t if (i < 16) {\n\t\t W[i] = M[offset + i] | 0;\n\t\t } else {\n\t\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t\t W[i] = (n << 1) | (n >>> 31);\n\t\t }\n\t\n\t\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t\t if (i < 20) {\n\t\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t\t } else if (i < 40) {\n\t\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t\t } else if (i < 60) {\n\t\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t\t } else /* if (i < 80) */ {\n\t\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t\t }\n\t\n\t\t e = d;\n\t\t d = c;\n\t\t c = (b << 30) | (b >>> 2);\n\t\t b = a;\n\t\t a = t;\n\t\t }\n\t\n\t\t // Intermediate hash value\n\t\t H[0] = (H[0] + a) | 0;\n\t\t H[1] = (H[1] + b) | 0;\n\t\t H[2] = (H[2] + c) | 0;\n\t\t H[3] = (H[3] + d) | 0;\n\t\t H[4] = (H[4] + e) | 0;\n\t\t },\n\t\n\t\t _doFinalize: function () {\n\t\t // Shortcuts\n\t\t var data = this._data;\n\t\t var dataWords = data.words;\n\t\n\t\t var nBitsTotal = this._nDataBytes * 8;\n\t\t var nBitsLeft = data.sigBytes * 8;\n\t\n\t\t // Add padding\n\t\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t\t data.sigBytes = dataWords.length * 4;\n\t\n\t\t // Hash final blocks\n\t\t this._process();\n\t\n\t\t // Return final computed hash\n\t\t return this._hash;\n\t\t },\n\t\n\t\t clone: function () {\n\t\t var clone = Hasher.clone.call(this);\n\t\t clone._hash = this._hash.clone();\n\t\n\t\t return clone;\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Shortcut function to the hasher's object interface.\n\t\t *\n\t\t * @param {WordArray|string} message The message to hash.\n\t\t *\n\t\t * @return {WordArray} The hash.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hash = CryptoJS.SHA1('message');\n\t\t * var hash = CryptoJS.SHA1(wordArray);\n\t\t */\n\t\t C.SHA1 = Hasher._createHelper(SHA1);\n\t\n\t\t /**\n\t\t * Shortcut function to the HMAC's object interface.\n\t\t *\n\t\t * @param {WordArray|string} message The message to hash.\n\t\t * @param {WordArray|string} key The secret key.\n\t\t *\n\t\t * @return {WordArray} The HMAC.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t\t */\n\t\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.SHA1;\n\t\n\t}));\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var Base = C_lib.Base;\n\t\t var C_enc = C.enc;\n\t\t var Utf8 = C_enc.Utf8;\n\t\t var C_algo = C.algo;\n\t\n\t\t /**\n\t\t * HMAC algorithm.\n\t\t */\n\t\t var HMAC = C_algo.HMAC = Base.extend({\n\t\t /**\n\t\t * Initializes a newly created HMAC.\n\t\t *\n\t\t * @param {Hasher} hasher The hash algorithm to use.\n\t\t * @param {WordArray|string} key The secret key.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t\t */\n\t\t init: function (hasher, key) {\n\t\t // Init hasher\n\t\t hasher = this._hasher = new hasher.init();\n\t\n\t\t // Convert string to WordArray, else assume WordArray already\n\t\t if (typeof key == 'string') {\n\t\t key = Utf8.parse(key);\n\t\t }\n\t\n\t\t // Shortcuts\n\t\t var hasherBlockSize = hasher.blockSize;\n\t\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\t\n\t\t // Allow arbitrary length keys\n\t\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t\t key = hasher.finalize(key);\n\t\t }\n\t\n\t\t // Clamp excess bits\n\t\t key.clamp();\n\t\n\t\t // Clone key for inner and outer pads\n\t\t var oKey = this._oKey = key.clone();\n\t\t var iKey = this._iKey = key.clone();\n\t\n\t\t // Shortcuts\n\t\t var oKeyWords = oKey.words;\n\t\t var iKeyWords = iKey.words;\n\t\n\t\t // XOR keys with pad constants\n\t\t for (var i = 0; i < hasherBlockSize; i++) {\n\t\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t\t iKeyWords[i] ^= 0x36363636;\n\t\t }\n\t\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\t\n\t\t // Set initial values\n\t\t this.reset();\n\t\t },\n\t\n\t\t /**\n\t\t * Resets this HMAC to its initial state.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * hmacHasher.reset();\n\t\t */\n\t\t reset: function () {\n\t\t // Shortcut\n\t\t var hasher = this._hasher;\n\t\n\t\t // Reset\n\t\t hasher.reset();\n\t\t hasher.update(this._iKey);\n\t\t },\n\t\n\t\t /**\n\t\t * Updates this HMAC with a message.\n\t\t *\n\t\t * @param {WordArray|string} messageUpdate The message to append.\n\t\t *\n\t\t * @return {HMAC} This HMAC instance.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * hmacHasher.update('message');\n\t\t * hmacHasher.update(wordArray);\n\t\t */\n\t\t update: function (messageUpdate) {\n\t\t this._hasher.update(messageUpdate);\n\t\n\t\t // Chainable\n\t\t return this;\n\t\t },\n\t\n\t\t /**\n\t\t * Finalizes the HMAC computation.\n\t\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t\t *\n\t\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t\t *\n\t\t * @return {WordArray} The HMAC.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hmac = hmacHasher.finalize();\n\t\t * var hmac = hmacHasher.finalize('message');\n\t\t * var hmac = hmacHasher.finalize(wordArray);\n\t\t */\n\t\t finalize: function (messageUpdate) {\n\t\t // Shortcut\n\t\t var hasher = this._hasher;\n\t\n\t\t // Compute HMAC\n\t\t var innerHash = hasher.finalize(messageUpdate);\n\t\t hasher.reset();\n\t\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\t\n\t\t return hmac;\n\t\t }\n\t\t });\n\t\t}());\n\t\n\t\n\t}));\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/*\n\t ES6 compatible port of CryptoJS - encoding\n\t\n\t Source: https://github.com/brix/crypto-js\n\t LICENSE: MIT\n\t */\n\tvar enc = {};\n\t\n\tenc.Latin1 = {\n\t stringify: function stringify(wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var latin1Chars = [],\n\t i = void 0,\n\t bite = void 0;\n\t\n\t // Convert\n\t for (i = 0; i < sigBytes; i++) {\n\t bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\t\n\t return latin1Chars.join('');\n\t }\n\t};\n\t\n\tenc._Utf8 = {\n\t stringify: function stringify(wordArray) {\n\t try {\n\t return decodeURIComponent(escape(enc.Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t }\n\t};\n\t\n\tmodule.exports = enc;\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar Base64 = {\n\t _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t encode: function encode(e) {\n\t var t = '';\n\t var n = void 0,\n\t r = void 0,\n\t i = void 0,\n\t s = void 0,\n\t o = void 0,\n\t u = void 0,\n\t a = void 0;\n\t var f = 0;\n\t\n\t e = Base64._utf8Encode(e);\n\t while (f < e.length) {\n\t n = e.charCodeAt(f++);\n\t r = e.charCodeAt(f++);\n\t i = e.charCodeAt(f++);\n\t s = n >> 2;\n\t o = (n & 3) << 4 | r >> 4;\n\t u = (r & 15) << 2 | i >> 6;\n\t a = i & 63;\n\t if (isNaN(r)) {\n\t u = a = 64;\n\t } else if (isNaN(i)) {\n\t a = 64;\n\t }\n\t t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a);\n\t }\n\t return t;\n\t },\n\t decode: function decode(e) {\n\t var t = '';\n\t var n = void 0,\n\t r = void 0,\n\t i = void 0;\n\t var s = void 0,\n\t o = void 0,\n\t u = void 0,\n\t a = void 0;\n\t var f = 0;\n\t\n\t e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\t while (f < e.length) {\n\t s = this._keyStr.indexOf(e.charAt(f++));\n\t o = this._keyStr.indexOf(e.charAt(f++));\n\t u = this._keyStr.indexOf(e.charAt(f++));\n\t a = this._keyStr.indexOf(e.charAt(f++));\n\t n = s << 2 | o >> 4;\n\t r = (o & 15) << 4 | u >> 2;\n\t i = (u & 3) << 6 | a;\n\t t = t + String.fromCharCode(n);\n\t if (u !== 64) {\n\t t = t + String.fromCharCode(r);\n\t }\n\t if (a !== 64) {\n\t t = t + String.fromCharCode(i);\n\t }\n\t }\n\t t = Base64._utf8Decode(t);\n\t return t;\n\t },\n\t _utf8Encode: function _utf8Encode(e) {\n\t e = e.replace(/\\r\\n/g, '\\n');\n\t var t = '';\n\t\n\t for (var n = 0; n < e.length; n++) {\n\t var r = e.charCodeAt(n);\n\t\n\t if (r < 128) {\n\t t += String.fromCharCode(r);\n\t } else if (r > 127 && r < 2048) {\n\t t += String.fromCharCode(r >> 6 | 192);\n\t t += String.fromCharCode(r & 63 | 128);\n\t } else {\n\t t += String.fromCharCode(r >> 12 | 224);\n\t t += String.fromCharCode(r >> 6 & 63 | 128);\n\t t += String.fromCharCode(r & 63 | 128);\n\t }\n\t }\n\t return t;\n\t },\n\t _utf8Decode: function _utf8Decode(e) {\n\t var t = '';\n\t var n = 0;\n\t var r = void 0,\n\t c2 = void 0,\n\t c3 = void 0;\n\t\n\t r = c2 = 0;\n\t while (n < e.length) {\n\t r = e.charCodeAt(n);\n\t if (r < 128) {\n\t t += String.fromCharCode(r);\n\t n++;\n\t } else if (r > 191 && r < 224) {\n\t c2 = e.charCodeAt(n + 1);\n\t t += String.fromCharCode((r & 31) << 6 | c2 & 63);\n\t n += 2;\n\t } else {\n\t c2 = e.charCodeAt(n + 1);\n\t c3 = e.charCodeAt(n + 2);\n\t t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);\n\t n += 3;\n\t }\n\t }\n\t return t;\n\t }\n\t};\n\t\n\tmodule.exports = Base64;\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;// Copyright (c) 2013 Pieroxy \n\t// This work is free. You can redistribute it and/or modify it\n\t// under the terms of the WTFPL, Version 2\n\t// For more information see LICENSE.txt or http://www.wtfpl.net/\n\t//\n\t// For more information, the home page:\n\t// http://pieroxy.net/blog/pages/lz-string/testing.html\n\t//\n\t// LZ-based compression algorithm, version 1.4.4\n\tvar LZString = (function() {\n\t\n\t// private property\n\tvar f = String.fromCharCode;\n\tvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\tvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\n\tvar baseReverseDic = {};\n\t\n\tfunction getBaseValue(alphabet, character) {\n\t if (!baseReverseDic[alphabet]) {\n\t baseReverseDic[alphabet] = {};\n\t for (var i=0 ; i>> 8;\n\t buf[i*2+1] = current_value % 256;\n\t }\n\t return buf;\n\t },\n\t\n\t //decompress from uint8array (UCS-2 big endian format)\n\t decompressFromUint8Array:function (compressed) {\n\t if (compressed===null || compressed===undefined){\n\t return LZString.decompress(compressed);\n\t } else {\n\t var buf=new Array(compressed.length/2); // 2 bytes per character\n\t for (var i=0, TotalLen=buf.length; i> 1;\n\t }\n\t } else {\n\t value = 1;\n\t for (i=0 ; i> 1;\n\t }\n\t }\n\t context_enlargeIn--;\n\t if (context_enlargeIn == 0) {\n\t context_enlargeIn = Math.pow(2, context_numBits);\n\t context_numBits++;\n\t }\n\t delete context_dictionaryToCreate[context_w];\n\t } else {\n\t value = context_dictionary[context_w];\n\t for (i=0 ; i> 1;\n\t }\n\t\n\t\n\t }\n\t context_enlargeIn--;\n\t if (context_enlargeIn == 0) {\n\t context_enlargeIn = Math.pow(2, context_numBits);\n\t context_numBits++;\n\t }\n\t // Add wc to the dictionary.\n\t context_dictionary[context_wc] = context_dictSize++;\n\t context_w = String(context_c);\n\t }\n\t }\n\t\n\t // Output the code for w.\n\t if (context_w !== \"\") {\n\t if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n\t if (context_w.charCodeAt(0)<256) {\n\t for (i=0 ; i> 1;\n\t }\n\t } else {\n\t value = 1;\n\t for (i=0 ; i> 1;\n\t }\n\t }\n\t context_enlargeIn--;\n\t if (context_enlargeIn == 0) {\n\t context_enlargeIn = Math.pow(2, context_numBits);\n\t context_numBits++;\n\t }\n\t delete context_dictionaryToCreate[context_w];\n\t } else {\n\t value = context_dictionary[context_w];\n\t for (i=0 ; i> 1;\n\t }\n\t\n\t\n\t }\n\t context_enlargeIn--;\n\t if (context_enlargeIn == 0) {\n\t context_enlargeIn = Math.pow(2, context_numBits);\n\t context_numBits++;\n\t }\n\t }\n\t\n\t // Mark the end of the stream\n\t value = 2;\n\t for (i=0 ; i> 1;\n\t }\n\t\n\t // Flush the last char\n\t while (true) {\n\t context_data_val = (context_data_val << 1);\n\t if (context_data_position == bitsPerChar-1) {\n\t context_data.push(getCharFromInt(context_data_val));\n\t break;\n\t }\n\t else context_data_position++;\n\t }\n\t return context_data.join('');\n\t },\n\t\n\t decompress: function (compressed) {\n\t if (compressed == null) return \"\";\n\t if (compressed == \"\") return null;\n\t return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n\t },\n\t\n\t _decompress: function (length, resetValue, getNextValue) {\n\t var dictionary = [],\n\t next,\n\t enlargeIn = 4,\n\t dictSize = 4,\n\t numBits = 3,\n\t entry = \"\",\n\t result = [],\n\t i,\n\t w,\n\t bits, resb, maxpower, power,\n\t c,\n\t data = {val:getNextValue(0), position:resetValue, index:1};\n\t\n\t for (i = 0; i < 3; i += 1) {\n\t dictionary[i] = i;\n\t }\n\t\n\t bits = 0;\n\t maxpower = Math.pow(2,2);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t\n\t switch (next = bits) {\n\t case 0:\n\t bits = 0;\n\t maxpower = Math.pow(2,8);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t c = f(bits);\n\t break;\n\t case 1:\n\t bits = 0;\n\t maxpower = Math.pow(2,16);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t c = f(bits);\n\t break;\n\t case 2:\n\t return \"\";\n\t }\n\t dictionary[3] = c;\n\t w = c;\n\t result.push(c);\n\t while (true) {\n\t if (data.index > length) {\n\t return \"\";\n\t }\n\t\n\t bits = 0;\n\t maxpower = Math.pow(2,numBits);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t\n\t switch (c = bits) {\n\t case 0:\n\t bits = 0;\n\t maxpower = Math.pow(2,8);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t\n\t dictionary[dictSize++] = f(bits);\n\t c = dictSize-1;\n\t enlargeIn--;\n\t break;\n\t case 1:\n\t bits = 0;\n\t maxpower = Math.pow(2,16);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t dictionary[dictSize++] = f(bits);\n\t c = dictSize-1;\n\t enlargeIn--;\n\t break;\n\t case 2:\n\t return result.join('');\n\t }\n\t\n\t if (enlargeIn == 0) {\n\t enlargeIn = Math.pow(2, numBits);\n\t numBits++;\n\t }\n\t\n\t if (dictionary[c]) {\n\t entry = dictionary[c];\n\t } else {\n\t if (c === dictSize) {\n\t entry = w + w.charAt(0);\n\t } else {\n\t return null;\n\t }\n\t }\n\t result.push(entry);\n\t\n\t // Add w+entry[0] to the dictionary.\n\t dictionary[dictSize++] = w + entry.charAt(0);\n\t enlargeIn--;\n\t\n\t w = entry;\n\t\n\t if (enlargeIn == 0) {\n\t enlargeIn = Math.pow(2, numBits);\n\t numBits++;\n\t }\n\t\n\t }\n\t }\n\t};\n\t return LZString;\n\t})();\n\t\n\tif (true) {\n\t !(__WEBPACK_AMD_DEFINE_RESULT__ = function () { return LZString; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if( typeof module !== 'undefined' && module != null ) {\n\t module.exports = LZString\n\t}\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5), __webpack_require__(12), __webpack_require__(13), __webpack_require__(14), __webpack_require__(15));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var BlockCipher = C_lib.BlockCipher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Lookup tables\n\t\t var SBOX = [];\n\t\t var INV_SBOX = [];\n\t\t var SUB_MIX_0 = [];\n\t\t var SUB_MIX_1 = [];\n\t\t var SUB_MIX_2 = [];\n\t\t var SUB_MIX_3 = [];\n\t\t var INV_SUB_MIX_0 = [];\n\t\t var INV_SUB_MIX_1 = [];\n\t\t var INV_SUB_MIX_2 = [];\n\t\t var INV_SUB_MIX_3 = [];\n\t\n\t\t // Compute lookup tables\n\t\t (function () {\n\t\t // Compute double table\n\t\t var d = [];\n\t\t for (var i = 0; i < 256; i++) {\n\t\t if (i < 128) {\n\t\t d[i] = i << 1;\n\t\t } else {\n\t\t d[i] = (i << 1) ^ 0x11b;\n\t\t }\n\t\t }\n\t\n\t\t // Walk GF(2^8)\n\t\t var x = 0;\n\t\t var xi = 0;\n\t\t for (var i = 0; i < 256; i++) {\n\t\t // Compute sbox\n\t\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t\t SBOX[x] = sx;\n\t\t INV_SBOX[sx] = x;\n\t\n\t\t // Compute multiplication\n\t\t var x2 = d[x];\n\t\t var x4 = d[x2];\n\t\t var x8 = d[x4];\n\t\n\t\t // Compute sub bytes, mix columns tables\n\t\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t\t SUB_MIX_3[x] = t;\n\t\n\t\t // Compute inv sub bytes, inv mix columns tables\n\t\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t\t INV_SUB_MIX_3[sx] = t;\n\t\n\t\t // Compute next counter\n\t\t if (!x) {\n\t\t x = xi = 1;\n\t\t } else {\n\t\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t\t xi ^= d[d[xi]];\n\t\t }\n\t\t }\n\t\t }());\n\t\n\t\t // Precomputed Rcon lookup\n\t\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\t\n\t\t /**\n\t\t * AES block cipher algorithm.\n\t\t */\n\t\t var AES = C_algo.AES = BlockCipher.extend({\n\t\t _doReset: function () {\n\t\t // Skip reset of nRounds has been set before and key did not change\n\t\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t\t return;\n\t\t }\n\t\n\t\t // Shortcuts\n\t\t var key = this._keyPriorReset = this._key;\n\t\t var keyWords = key.words;\n\t\t var keySize = key.sigBytes / 4;\n\t\n\t\t // Compute number of rounds\n\t\t var nRounds = this._nRounds = keySize + 6;\n\t\n\t\t // Compute number of key schedule rows\n\t\t var ksRows = (nRounds + 1) * 4;\n\t\n\t\t // Compute key schedule\n\t\t var keySchedule = this._keySchedule = [];\n\t\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t\t if (ksRow < keySize) {\n\t\t keySchedule[ksRow] = keyWords[ksRow];\n\t\t } else {\n\t\t var t = keySchedule[ksRow - 1];\n\t\n\t\t if (!(ksRow % keySize)) {\n\t\t // Rot word\n\t\t t = (t << 8) | (t >>> 24);\n\t\n\t\t // Sub word\n\t\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t\n\t\t // Mix Rcon\n\t\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t\t // Sub word\n\t\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t\t }\n\t\n\t\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t\t }\n\t\t }\n\t\n\t\t // Compute inv key schedule\n\t\t var invKeySchedule = this._invKeySchedule = [];\n\t\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t\t var ksRow = ksRows - invKsRow;\n\t\n\t\t if (invKsRow % 4) {\n\t\t var t = keySchedule[ksRow];\n\t\t } else {\n\t\t var t = keySchedule[ksRow - 4];\n\t\t }\n\t\n\t\t if (invKsRow < 4 || ksRow <= 4) {\n\t\t invKeySchedule[invKsRow] = t;\n\t\t } else {\n\t\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t\t }\n\t\t }\n\t\t },\n\t\n\t\t encryptBlock: function (M, offset) {\n\t\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t\t },\n\t\n\t\t decryptBlock: function (M, offset) {\n\t\t // Swap 2nd and 4th rows\n\t\t var t = M[offset + 1];\n\t\t M[offset + 1] = M[offset + 3];\n\t\t M[offset + 3] = t;\n\t\n\t\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\t\n\t\t // Inv swap 2nd and 4th rows\n\t\t var t = M[offset + 1];\n\t\t M[offset + 1] = M[offset + 3];\n\t\t M[offset + 3] = t;\n\t\t },\n\t\n\t\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t\t // Shortcut\n\t\t var nRounds = this._nRounds;\n\t\n\t\t // Get input, add round key\n\t\t var s0 = M[offset] ^ keySchedule[0];\n\t\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t\t var s3 = M[offset + 3] ^ keySchedule[3];\n\t\n\t\t // Key schedule row counter\n\t\t var ksRow = 4;\n\t\n\t\t // Rounds\n\t\t for (var round = 1; round < nRounds; round++) {\n\t\t // Shift rows, sub bytes, mix columns, add round key\n\t\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\t\n\t\t // Update state\n\t\t s0 = t0;\n\t\t s1 = t1;\n\t\t s2 = t2;\n\t\t s3 = t3;\n\t\t }\n\t\n\t\t // Shift rows, sub bytes, add round key\n\t\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\t\n\t\t // Set output\n\t\t M[offset] = t0;\n\t\t M[offset + 1] = t1;\n\t\t M[offset + 2] = t2;\n\t\t M[offset + 3] = t3;\n\t\t },\n\t\n\t\t keySize: 256/32\n\t\t });\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.AES = BlockCipher._createHelper(AES);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.AES;\n\t\n\t}));\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var C_enc = C.enc;\n\t\n\t\t /**\n\t\t * Base64 encoding strategy.\n\t\t */\n\t\t var Base64 = C_enc.Base64 = {\n\t\t /**\n\t\t * Converts a word array to a Base64 string.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array.\n\t\t *\n\t\t * @return {string} The Base64 string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t\t */\n\t\t stringify: function (wordArray) {\n\t\t // Shortcuts\n\t\t var words = wordArray.words;\n\t\t var sigBytes = wordArray.sigBytes;\n\t\t var map = this._map;\n\t\n\t\t // Clamp excess bits\n\t\t wordArray.clamp();\n\t\n\t\t // Convert\n\t\t var base64Chars = [];\n\t\t for (var i = 0; i < sigBytes; i += 3) {\n\t\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\t\n\t\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\t\n\t\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t\t }\n\t\t }\n\t\n\t\t // Add padding\n\t\t var paddingChar = map.charAt(64);\n\t\t if (paddingChar) {\n\t\t while (base64Chars.length % 4) {\n\t\t base64Chars.push(paddingChar);\n\t\t }\n\t\t }\n\t\n\t\t return base64Chars.join('');\n\t\t },\n\t\n\t\t /**\n\t\t * Converts a Base64 string to a word array.\n\t\t *\n\t\t * @param {string} base64Str The Base64 string.\n\t\t *\n\t\t * @return {WordArray} The word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t\t */\n\t\t parse: function (base64Str) {\n\t\t // Shortcuts\n\t\t var base64StrLength = base64Str.length;\n\t\t var map = this._map;\n\t\t var reverseMap = this._reverseMap;\n\t\n\t\t if (!reverseMap) {\n\t\t reverseMap = this._reverseMap = [];\n\t\t for (var j = 0; j < map.length; j++) {\n\t\t reverseMap[map.charCodeAt(j)] = j;\n\t\t }\n\t\t }\n\t\n\t\t // Ignore padding\n\t\t var paddingChar = map.charAt(64);\n\t\t if (paddingChar) {\n\t\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t\t if (paddingIndex !== -1) {\n\t\t base64StrLength = paddingIndex;\n\t\t }\n\t\t }\n\t\n\t\t // Convert\n\t\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\t\n\t\t },\n\t\n\t\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t\t };\n\t\n\t\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t\t var words = [];\n\t\t var nBytes = 0;\n\t\t for (var i = 0; i < base64StrLength; i++) {\n\t\t if (i % 4) {\n\t\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t\t nBytes++;\n\t\t }\n\t\t }\n\t\t return WordArray.create(words, nBytes);\n\t\t }\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.enc.Base64;\n\t\n\t}));\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function (Math) {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var Hasher = C_lib.Hasher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Constants table\n\t\t var T = [];\n\t\n\t\t // Compute constants\n\t\t (function () {\n\t\t for (var i = 0; i < 64; i++) {\n\t\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t\t }\n\t\t }());\n\t\n\t\t /**\n\t\t * MD5 hash algorithm.\n\t\t */\n\t\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t\t _doReset: function () {\n\t\t this._hash = new WordArray.init([\n\t\t 0x67452301, 0xefcdab89,\n\t\t 0x98badcfe, 0x10325476\n\t\t ]);\n\t\t },\n\t\n\t\t _doProcessBlock: function (M, offset) {\n\t\t // Swap endian\n\t\t for (var i = 0; i < 16; i++) {\n\t\t // Shortcuts\n\t\t var offset_i = offset + i;\n\t\t var M_offset_i = M[offset_i];\n\t\n\t\t M[offset_i] = (\n\t\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t\t );\n\t\t }\n\t\n\t\t // Shortcuts\n\t\t var H = this._hash.words;\n\t\n\t\t var M_offset_0 = M[offset + 0];\n\t\t var M_offset_1 = M[offset + 1];\n\t\t var M_offset_2 = M[offset + 2];\n\t\t var M_offset_3 = M[offset + 3];\n\t\t var M_offset_4 = M[offset + 4];\n\t\t var M_offset_5 = M[offset + 5];\n\t\t var M_offset_6 = M[offset + 6];\n\t\t var M_offset_7 = M[offset + 7];\n\t\t var M_offset_8 = M[offset + 8];\n\t\t var M_offset_9 = M[offset + 9];\n\t\t var M_offset_10 = M[offset + 10];\n\t\t var M_offset_11 = M[offset + 11];\n\t\t var M_offset_12 = M[offset + 12];\n\t\t var M_offset_13 = M[offset + 13];\n\t\t var M_offset_14 = M[offset + 14];\n\t\t var M_offset_15 = M[offset + 15];\n\t\n\t\t // Working varialbes\n\t\t var a = H[0];\n\t\t var b = H[1];\n\t\t var c = H[2];\n\t\t var d = H[3];\n\t\n\t\t // Computation\n\t\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\t\n\t\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\t\n\t\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\t\n\t\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\t\n\t\t // Intermediate hash value\n\t\t H[0] = (H[0] + a) | 0;\n\t\t H[1] = (H[1] + b) | 0;\n\t\t H[2] = (H[2] + c) | 0;\n\t\t H[3] = (H[3] + d) | 0;\n\t\t },\n\t\n\t\t _doFinalize: function () {\n\t\t // Shortcuts\n\t\t var data = this._data;\n\t\t var dataWords = data.words;\n\t\n\t\t var nBitsTotal = this._nDataBytes * 8;\n\t\t var nBitsLeft = data.sigBytes * 8;\n\t\n\t\t // Add padding\n\t\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t\n\t\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t\t var nBitsTotalL = nBitsTotal;\n\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t\t );\n\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t\t );\n\t\n\t\t data.sigBytes = (dataWords.length + 1) * 4;\n\t\n\t\t // Hash final blocks\n\t\t this._process();\n\t\n\t\t // Shortcuts\n\t\t var hash = this._hash;\n\t\t var H = hash.words;\n\t\n\t\t // Swap endian\n\t\t for (var i = 0; i < 4; i++) {\n\t\t // Shortcut\n\t\t var H_i = H[i];\n\t\n\t\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t\t }\n\t\n\t\t // Return final computed hash\n\t\t return hash;\n\t\t },\n\t\n\t\t clone: function () {\n\t\t var clone = Hasher.clone.call(this);\n\t\t clone._hash = this._hash.clone();\n\t\n\t\t return clone;\n\t\t }\n\t\t });\n\t\n\t\t function FF(a, b, c, d, x, s, t) {\n\t\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t\t return ((n << s) | (n >>> (32 - s))) + b;\n\t\t }\n\t\n\t\t function GG(a, b, c, d, x, s, t) {\n\t\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t\t return ((n << s) | (n >>> (32 - s))) + b;\n\t\t }\n\t\n\t\t function HH(a, b, c, d, x, s, t) {\n\t\t var n = a + (b ^ c ^ d) + x + t;\n\t\t return ((n << s) | (n >>> (32 - s))) + b;\n\t\t }\n\t\n\t\t function II(a, b, c, d, x, s, t) {\n\t\t var n = a + (c ^ (b | ~d)) + x + t;\n\t\t return ((n << s) | (n >>> (32 - s))) + b;\n\t\t }\n\t\n\t\t /**\n\t\t * Shortcut function to the hasher's object interface.\n\t\t *\n\t\t * @param {WordArray|string} message The message to hash.\n\t\t *\n\t\t * @return {WordArray} The hash.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hash = CryptoJS.MD5('message');\n\t\t * var hash = CryptoJS.MD5(wordArray);\n\t\t */\n\t\t C.MD5 = Hasher._createHelper(MD5);\n\t\n\t\t /**\n\t\t * Shortcut function to the HMAC's object interface.\n\t\t *\n\t\t * @param {WordArray|string} message The message to hash.\n\t\t * @param {WordArray|string} key The secret key.\n\t\t *\n\t\t * @return {WordArray} The HMAC.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t\t */\n\t\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t\t}(Math));\n\t\n\t\n\t\treturn CryptoJS.MD5;\n\t\n\t}));\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5), __webpack_require__(6), __webpack_require__(7));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var Base = C_lib.Base;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var C_algo = C.algo;\n\t\t var MD5 = C_algo.MD5;\n\t\n\t\t /**\n\t\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t\t */\n\t\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t\t */\n\t\t cfg: Base.extend({\n\t\t keySize: 128/32,\n\t\t hasher: MD5,\n\t\t iterations: 1\n\t\t }),\n\t\n\t\t /**\n\t\t * Initializes a newly created key derivation function.\n\t\t *\n\t\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t\t */\n\t\t init: function (cfg) {\n\t\t this.cfg = this.cfg.extend(cfg);\n\t\t },\n\t\n\t\t /**\n\t\t * Derives a key from a password.\n\t\t *\n\t\t * @param {WordArray|string} password The password.\n\t\t * @param {WordArray|string} salt A salt.\n\t\t *\n\t\t * @return {WordArray} The derived key.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var key = kdf.compute(password, salt);\n\t\t */\n\t\t compute: function (password, salt) {\n\t\t // Shortcut\n\t\t var cfg = this.cfg;\n\t\n\t\t // Init hasher\n\t\t var hasher = cfg.hasher.create();\n\t\n\t\t // Initial values\n\t\t var derivedKey = WordArray.create();\n\t\n\t\t // Shortcuts\n\t\t var derivedKeyWords = derivedKey.words;\n\t\t var keySize = cfg.keySize;\n\t\t var iterations = cfg.iterations;\n\t\n\t\t // Generate key\n\t\t while (derivedKeyWords.length < keySize) {\n\t\t if (block) {\n\t\t hasher.update(block);\n\t\t }\n\t\t var block = hasher.update(password).finalize(salt);\n\t\t hasher.reset();\n\t\n\t\t // Iterations\n\t\t for (var i = 1; i < iterations; i++) {\n\t\t block = hasher.finalize(block);\n\t\t hasher.reset();\n\t\t }\n\t\n\t\t derivedKey.concat(block);\n\t\t }\n\t\t derivedKey.sigBytes = keySize * 4;\n\t\n\t\t return derivedKey;\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Derives a key from a password.\n\t\t *\n\t\t * @param {WordArray|string} password The password.\n\t\t * @param {WordArray|string} salt A salt.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t\t *\n\t\t * @return {WordArray} The derived key.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var key = CryptoJS.EvpKDF(password, salt);\n\t\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t\t */\n\t\t C.EvpKDF = function (password, salt, cfg) {\n\t\t return EvpKDF.create(cfg).compute(password, salt);\n\t\t };\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.EvpKDF;\n\t\n\t}));\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t/**\n\t\t * Cipher core components.\n\t\t */\n\t\tCryptoJS.lib.Cipher || (function (undefined) {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var Base = C_lib.Base;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t\t var C_enc = C.enc;\n\t\t var Utf8 = C_enc.Utf8;\n\t\t var Base64 = C_enc.Base64;\n\t\t var C_algo = C.algo;\n\t\t var EvpKDF = C_algo.EvpKDF;\n\t\n\t\t /**\n\t\t * Abstract base cipher template.\n\t\t *\n\t\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t\t */\n\t\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {WordArray} iv The IV to use for this operation.\n\t\t */\n\t\t cfg: Base.extend(),\n\t\n\t\t /**\n\t\t * Creates this cipher in encryption mode.\n\t\t *\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {Cipher} A cipher instance.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t\t */\n\t\t createEncryptor: function (key, cfg) {\n\t\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t\t },\n\t\n\t\t /**\n\t\t * Creates this cipher in decryption mode.\n\t\t *\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {Cipher} A cipher instance.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t\t */\n\t\t createDecryptor: function (key, cfg) {\n\t\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t\t },\n\t\n\t\t /**\n\t\t * Initializes a newly created cipher.\n\t\t *\n\t\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t\t */\n\t\t init: function (xformMode, key, cfg) {\n\t\t // Apply config defaults\n\t\t this.cfg = this.cfg.extend(cfg);\n\t\n\t\t // Store transform mode and key\n\t\t this._xformMode = xformMode;\n\t\t this._key = key;\n\t\n\t\t // Set initial values\n\t\t this.reset();\n\t\t },\n\t\n\t\t /**\n\t\t * Resets this cipher to its initial state.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * cipher.reset();\n\t\t */\n\t\t reset: function () {\n\t\t // Reset data buffer\n\t\t BufferedBlockAlgorithm.reset.call(this);\n\t\n\t\t // Perform concrete-cipher logic\n\t\t this._doReset();\n\t\t },\n\t\n\t\t /**\n\t\t * Adds data to be encrypted or decrypted.\n\t\t *\n\t\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t\t *\n\t\t * @return {WordArray} The data after processing.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var encrypted = cipher.process('data');\n\t\t * var encrypted = cipher.process(wordArray);\n\t\t */\n\t\t process: function (dataUpdate) {\n\t\t // Append\n\t\t this._append(dataUpdate);\n\t\n\t\t // Process available blocks\n\t\t return this._process();\n\t\t },\n\t\n\t\t /**\n\t\t * Finalizes the encryption or decryption process.\n\t\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t\t *\n\t\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t\t *\n\t\t * @return {WordArray} The data after final processing.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var encrypted = cipher.finalize();\n\t\t * var encrypted = cipher.finalize('data');\n\t\t * var encrypted = cipher.finalize(wordArray);\n\t\t */\n\t\t finalize: function (dataUpdate) {\n\t\t // Final data update\n\t\t if (dataUpdate) {\n\t\t this._append(dataUpdate);\n\t\t }\n\t\n\t\t // Perform concrete-cipher logic\n\t\t var finalProcessedData = this._doFinalize();\n\t\n\t\t return finalProcessedData;\n\t\t },\n\t\n\t\t keySize: 128/32,\n\t\n\t\t ivSize: 128/32,\n\t\n\t\t _ENC_XFORM_MODE: 1,\n\t\n\t\t _DEC_XFORM_MODE: 2,\n\t\n\t\t /**\n\t\t * Creates shortcut functions to a cipher's object interface.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher to create a helper for.\n\t\t *\n\t\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t\t */\n\t\t _createHelper: (function () {\n\t\t function selectCipherStrategy(key) {\n\t\t if (typeof key == 'string') {\n\t\t return PasswordBasedCipher;\n\t\t } else {\n\t\t return SerializableCipher;\n\t\t }\n\t\t }\n\t\n\t\t return function (cipher) {\n\t\t return {\n\t\t encrypt: function (message, key, cfg) {\n\t\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t\t },\n\t\n\t\t decrypt: function (ciphertext, key, cfg) {\n\t\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t\t }\n\t\t };\n\t\t };\n\t\t }())\n\t\t });\n\t\n\t\t /**\n\t\t * Abstract base stream cipher template.\n\t\t *\n\t\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t\t */\n\t\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t\t _doFinalize: function () {\n\t\t // Process partial blocks\n\t\t var finalProcessedBlocks = this._process(!!'flush');\n\t\n\t\t return finalProcessedBlocks;\n\t\t },\n\t\n\t\t blockSize: 1\n\t\t });\n\t\n\t\t /**\n\t\t * Mode namespace.\n\t\t */\n\t\t var C_mode = C.mode = {};\n\t\n\t\t /**\n\t\t * Abstract base block cipher mode template.\n\t\t */\n\t\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t\t /**\n\t\t * Creates this mode for encryption.\n\t\t *\n\t\t * @param {Cipher} cipher A block cipher instance.\n\t\t * @param {Array} iv The IV words.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t\t */\n\t\t createEncryptor: function (cipher, iv) {\n\t\t return this.Encryptor.create(cipher, iv);\n\t\t },\n\t\n\t\t /**\n\t\t * Creates this mode for decryption.\n\t\t *\n\t\t * @param {Cipher} cipher A block cipher instance.\n\t\t * @param {Array} iv The IV words.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t\t */\n\t\t createDecryptor: function (cipher, iv) {\n\t\t return this.Decryptor.create(cipher, iv);\n\t\t },\n\t\n\t\t /**\n\t\t * Initializes a newly created mode.\n\t\t *\n\t\t * @param {Cipher} cipher A block cipher instance.\n\t\t * @param {Array} iv The IV words.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t\t */\n\t\t init: function (cipher, iv) {\n\t\t this._cipher = cipher;\n\t\t this._iv = iv;\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Cipher Block Chaining mode.\n\t\t */\n\t\t var CBC = C_mode.CBC = (function () {\n\t\t /**\n\t\t * Abstract base CBC mode.\n\t\t */\n\t\t var CBC = BlockCipherMode.extend();\n\t\n\t\t /**\n\t\t * CBC encryptor.\n\t\t */\n\t\t CBC.Encryptor = CBC.extend({\n\t\t /**\n\t\t * Processes the data block at offset.\n\t\t *\n\t\t * @param {Array} words The data words to operate on.\n\t\t * @param {number} offset The offset where the block starts.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * mode.processBlock(data.words, offset);\n\t\t */\n\t\t processBlock: function (words, offset) {\n\t\t // Shortcuts\n\t\t var cipher = this._cipher;\n\t\t var blockSize = cipher.blockSize;\n\t\n\t\t // XOR and encrypt\n\t\t xorBlock.call(this, words, offset, blockSize);\n\t\t cipher.encryptBlock(words, offset);\n\t\n\t\t // Remember this block to use with next block\n\t\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * CBC decryptor.\n\t\t */\n\t\t CBC.Decryptor = CBC.extend({\n\t\t /**\n\t\t * Processes the data block at offset.\n\t\t *\n\t\t * @param {Array} words The data words to operate on.\n\t\t * @param {number} offset The offset where the block starts.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * mode.processBlock(data.words, offset);\n\t\t */\n\t\t processBlock: function (words, offset) {\n\t\t // Shortcuts\n\t\t var cipher = this._cipher;\n\t\t var blockSize = cipher.blockSize;\n\t\n\t\t // Remember this block to use with next block\n\t\t var thisBlock = words.slice(offset, offset + blockSize);\n\t\n\t\t // Decrypt and XOR\n\t\t cipher.decryptBlock(words, offset);\n\t\t xorBlock.call(this, words, offset, blockSize);\n\t\n\t\t // This block becomes the previous block\n\t\t this._prevBlock = thisBlock;\n\t\t }\n\t\t });\n\t\n\t\t function xorBlock(words, offset, blockSize) {\n\t\t // Shortcut\n\t\t var iv = this._iv;\n\t\n\t\t // Choose mixing block\n\t\t if (iv) {\n\t\t var block = iv;\n\t\n\t\t // Remove IV for subsequent blocks\n\t\t this._iv = undefined;\n\t\t } else {\n\t\t var block = this._prevBlock;\n\t\t }\n\t\n\t\t // XOR blocks\n\t\t for (var i = 0; i < blockSize; i++) {\n\t\t words[offset + i] ^= block[i];\n\t\t }\n\t\t }\n\t\n\t\t return CBC;\n\t\t }());\n\t\n\t\t /**\n\t\t * Padding namespace.\n\t\t */\n\t\t var C_pad = C.pad = {};\n\t\n\t\t /**\n\t\t * PKCS #5/7 padding strategy.\n\t\t */\n\t\t var Pkcs7 = C_pad.Pkcs7 = {\n\t\t /**\n\t\t * Pads data using the algorithm defined in PKCS #5/7.\n\t\t *\n\t\t * @param {WordArray} data The data to pad.\n\t\t * @param {number} blockSize The multiple that the data should be padded to.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t\t */\n\t\t pad: function (data, blockSize) {\n\t\t // Shortcut\n\t\t var blockSizeBytes = blockSize * 4;\n\t\n\t\t // Count padding bytes\n\t\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\t\n\t\t // Create padding word\n\t\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\t\n\t\t // Create padding\n\t\t var paddingWords = [];\n\t\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t\t paddingWords.push(paddingWord);\n\t\t }\n\t\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\t\n\t\t // Add padding\n\t\t data.concat(padding);\n\t\t },\n\t\n\t\t /**\n\t\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t\t *\n\t\t * @param {WordArray} data The data to unpad.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t\t */\n\t\t unpad: function (data) {\n\t\t // Get number of padding bytes from last byte\n\t\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\t\n\t\t // Remove padding\n\t\t data.sigBytes -= nPaddingBytes;\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * Abstract base block cipher template.\n\t\t *\n\t\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t\t */\n\t\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {Mode} mode The block mode to use. Default: CBC\n\t\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t\t */\n\t\t cfg: Cipher.cfg.extend({\n\t\t mode: CBC,\n\t\t padding: Pkcs7\n\t\t }),\n\t\n\t\t reset: function () {\n\t\t // Reset cipher\n\t\t Cipher.reset.call(this);\n\t\n\t\t // Shortcuts\n\t\t var cfg = this.cfg;\n\t\t var iv = cfg.iv;\n\t\t var mode = cfg.mode;\n\t\n\t\t // Reset block mode\n\t\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t\t var modeCreator = mode.createEncryptor;\n\t\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t\t var modeCreator = mode.createDecryptor;\n\t\n\t\t // Keep at least one block in the buffer for unpadding\n\t\t this._minBufferSize = 1;\n\t\t }\n\t\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t\t },\n\t\n\t\t _doProcessBlock: function (words, offset) {\n\t\t this._mode.processBlock(words, offset);\n\t\t },\n\t\n\t\t _doFinalize: function () {\n\t\t // Shortcut\n\t\t var padding = this.cfg.padding;\n\t\n\t\t // Finalize\n\t\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t\t // Pad data\n\t\t padding.pad(this._data, this.blockSize);\n\t\n\t\t // Process final blocks\n\t\t var finalProcessedBlocks = this._process(!!'flush');\n\t\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t\t // Process final blocks\n\t\t var finalProcessedBlocks = this._process(!!'flush');\n\t\n\t\t // Unpad data\n\t\t padding.unpad(finalProcessedBlocks);\n\t\t }\n\t\n\t\t return finalProcessedBlocks;\n\t\t },\n\t\n\t\t blockSize: 128/32\n\t\t });\n\t\n\t\t /**\n\t\t * A collection of cipher parameters.\n\t\t *\n\t\t * @property {WordArray} ciphertext The raw ciphertext.\n\t\t * @property {WordArray} key The key to this ciphertext.\n\t\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t\t * @property {WordArray} salt The salt used with a key derivation function.\n\t\t * @property {Cipher} algorithm The cipher algorithm.\n\t\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t\t * @property {number} blockSize The block size of the cipher.\n\t\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t\t */\n\t\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t\t /**\n\t\t * Initializes a newly created cipher params object.\n\t\t *\n\t\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t\t * ciphertext: ciphertextWordArray,\n\t\t * key: keyWordArray,\n\t\t * iv: ivWordArray,\n\t\t * salt: saltWordArray,\n\t\t * algorithm: CryptoJS.algo.AES,\n\t\t * mode: CryptoJS.mode.CBC,\n\t\t * padding: CryptoJS.pad.PKCS7,\n\t\t * blockSize: 4,\n\t\t * formatter: CryptoJS.format.OpenSSL\n\t\t * });\n\t\t */\n\t\t init: function (cipherParams) {\n\t\t this.mixIn(cipherParams);\n\t\t },\n\t\n\t\t /**\n\t\t * Converts this cipher params object to a string.\n\t\t *\n\t\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t\t *\n\t\t * @return {string} The stringified cipher params.\n\t\t *\n\t\t * @throws Error If neither the formatter nor the default formatter is set.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var string = cipherParams + '';\n\t\t * var string = cipherParams.toString();\n\t\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t\t */\n\t\t toString: function (formatter) {\n\t\t return (formatter || this.formatter).stringify(this);\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Format namespace.\n\t\t */\n\t\t var C_format = C.format = {};\n\t\n\t\t /**\n\t\t * OpenSSL formatting strategy.\n\t\t */\n\t\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t\t /**\n\t\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t\t *\n\t\t * @param {CipherParams} cipherParams The cipher params object.\n\t\t *\n\t\t * @return {string} The OpenSSL-compatible string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t\t */\n\t\t stringify: function (cipherParams) {\n\t\t // Shortcuts\n\t\t var ciphertext = cipherParams.ciphertext;\n\t\t var salt = cipherParams.salt;\n\t\n\t\t // Format\n\t\t if (salt) {\n\t\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t\t } else {\n\t\t var wordArray = ciphertext;\n\t\t }\n\t\n\t\t return wordArray.toString(Base64);\n\t\t },\n\t\n\t\t /**\n\t\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t\t *\n\t\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t\t *\n\t\t * @return {CipherParams} The cipher params object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t\t */\n\t\t parse: function (openSSLStr) {\n\t\t // Parse base64\n\t\t var ciphertext = Base64.parse(openSSLStr);\n\t\n\t\t // Shortcut\n\t\t var ciphertextWords = ciphertext.words;\n\t\n\t\t // Test for salt\n\t\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t\t // Extract salt\n\t\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\t\n\t\t // Remove salt from ciphertext\n\t\t ciphertextWords.splice(0, 4);\n\t\t ciphertext.sigBytes -= 16;\n\t\t }\n\t\n\t\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t\t */\n\t\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t\t */\n\t\t cfg: Base.extend({\n\t\t format: OpenSSLFormatter\n\t\t }),\n\t\n\t\t /**\n\t\t * Encrypts a message.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher algorithm to use.\n\t\t * @param {WordArray|string} message The message to encrypt.\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {CipherParams} A cipher params object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t\t */\n\t\t encrypt: function (cipher, message, key, cfg) {\n\t\t // Apply config defaults\n\t\t cfg = this.cfg.extend(cfg);\n\t\n\t\t // Encrypt\n\t\t var encryptor = cipher.createEncryptor(key, cfg);\n\t\t var ciphertext = encryptor.finalize(message);\n\t\n\t\t // Shortcut\n\t\t var cipherCfg = encryptor.cfg;\n\t\n\t\t // Create and return serializable cipher params\n\t\t return CipherParams.create({\n\t\t ciphertext: ciphertext,\n\t\t key: key,\n\t\t iv: cipherCfg.iv,\n\t\t algorithm: cipher,\n\t\t mode: cipherCfg.mode,\n\t\t padding: cipherCfg.padding,\n\t\t blockSize: cipher.blockSize,\n\t\t formatter: cfg.format\n\t\t });\n\t\t },\n\t\n\t\t /**\n\t\t * Decrypts serialized ciphertext.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher algorithm to use.\n\t\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {WordArray} The plaintext.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t\t */\n\t\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t\t // Apply config defaults\n\t\t cfg = this.cfg.extend(cfg);\n\t\n\t\t // Convert string to CipherParams\n\t\t ciphertext = this._parse(ciphertext, cfg.format);\n\t\n\t\t // Decrypt\n\t\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\t\n\t\t return plaintext;\n\t\t },\n\t\n\t\t /**\n\t\t * Converts serialized ciphertext to CipherParams,\n\t\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t\t *\n\t\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t\t *\n\t\t * @return {CipherParams} The unserialized ciphertext.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t\t */\n\t\t _parse: function (ciphertext, format) {\n\t\t if (typeof ciphertext == 'string') {\n\t\t return format.parse(ciphertext, this);\n\t\t } else {\n\t\t return ciphertext;\n\t\t }\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Key derivation function namespace.\n\t\t */\n\t\t var C_kdf = C.kdf = {};\n\t\n\t\t /**\n\t\t * OpenSSL key derivation function.\n\t\t */\n\t\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t\t /**\n\t\t * Derives a key and IV from a password.\n\t\t *\n\t\t * @param {string} password The password to derive from.\n\t\t * @param {number} keySize The size in words of the key to generate.\n\t\t * @param {number} ivSize The size in words of the IV to generate.\n\t\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t\t *\n\t\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t\t */\n\t\t execute: function (password, keySize, ivSize, salt) {\n\t\t // Generate random salt\n\t\t if (!salt) {\n\t\t salt = WordArray.random(64/8);\n\t\t }\n\t\n\t\t // Derive key and IV\n\t\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t\n\t\t // Separate key and IV\n\t\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t\t key.sigBytes = keySize * 4;\n\t\n\t\t // Return params\n\t\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * A serializable cipher wrapper that derives the key from a password,\n\t\t * and returns ciphertext as a serializable cipher params object.\n\t\t */\n\t\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t\t */\n\t\t cfg: SerializableCipher.cfg.extend({\n\t\t kdf: OpenSSLKdf\n\t\t }),\n\t\n\t\t /**\n\t\t * Encrypts a message using a password.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher algorithm to use.\n\t\t * @param {WordArray|string} message The message to encrypt.\n\t\t * @param {string} password The password.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {CipherParams} A cipher params object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t\t */\n\t\t encrypt: function (cipher, message, password, cfg) {\n\t\t // Apply config defaults\n\t\t cfg = this.cfg.extend(cfg);\n\t\n\t\t // Derive key and other params\n\t\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\t\n\t\t // Add IV to config\n\t\t cfg.iv = derivedParams.iv;\n\t\n\t\t // Encrypt\n\t\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\t\n\t\t // Mix in derived params\n\t\t ciphertext.mixIn(derivedParams);\n\t\n\t\t return ciphertext;\n\t\t },\n\t\n\t\t /**\n\t\t * Decrypts serialized ciphertext using a password.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher algorithm to use.\n\t\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t\t * @param {string} password The password.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {WordArray} The plaintext.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t\t */\n\t\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t\t // Apply config defaults\n\t\t cfg = this.cfg.extend(cfg);\n\t\n\t\t // Convert string to CipherParams\n\t\t ciphertext = this._parse(ciphertext, cfg.format);\n\t\n\t\t // Derive key and other params\n\t\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\t\n\t\t // Add IV to config\n\t\t cfg.iv = derivedParams.iv;\n\t\n\t\t // Decrypt\n\t\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\t\n\t\t return plaintext;\n\t\t }\n\t\t });\n\t\t}());\n\t\n\t\n\t}));\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5), __webpack_require__(12), __webpack_require__(13), __webpack_require__(14), __webpack_require__(15));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var BlockCipher = C_lib.BlockCipher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Permuted Choice 1 constants\n\t\t var PC1 = [\n\t\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t\t 29, 21, 13, 5, 28, 20, 12, 4\n\t\t ];\n\t\n\t\t // Permuted Choice 2 constants\n\t\t var PC2 = [\n\t\t 14, 17, 11, 24, 1, 5,\n\t\t 3, 28, 15, 6, 21, 10,\n\t\t 23, 19, 12, 4, 26, 8,\n\t\t 16, 7, 27, 20, 13, 2,\n\t\t 41, 52, 31, 37, 47, 55,\n\t\t 30, 40, 51, 45, 33, 48,\n\t\t 44, 49, 39, 56, 34, 53,\n\t\t 46, 42, 50, 36, 29, 32\n\t\t ];\n\t\n\t\t // Cumulative bit shift constants\n\t\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\t\n\t\t // SBOXes and round permutation constants\n\t\t var SBOX_P = [\n\t\t {\n\t\t 0x0: 0x808200,\n\t\t 0x10000000: 0x8000,\n\t\t 0x20000000: 0x808002,\n\t\t 0x30000000: 0x2,\n\t\t 0x40000000: 0x200,\n\t\t 0x50000000: 0x808202,\n\t\t 0x60000000: 0x800202,\n\t\t 0x70000000: 0x800000,\n\t\t 0x80000000: 0x202,\n\t\t 0x90000000: 0x800200,\n\t\t 0xa0000000: 0x8200,\n\t\t 0xb0000000: 0x808000,\n\t\t 0xc0000000: 0x8002,\n\t\t 0xd0000000: 0x800002,\n\t\t 0xe0000000: 0x0,\n\t\t 0xf0000000: 0x8202,\n\t\t 0x8000000: 0x0,\n\t\t 0x18000000: 0x808202,\n\t\t 0x28000000: 0x8202,\n\t\t 0x38000000: 0x8000,\n\t\t 0x48000000: 0x808200,\n\t\t 0x58000000: 0x200,\n\t\t 0x68000000: 0x808002,\n\t\t 0x78000000: 0x2,\n\t\t 0x88000000: 0x800200,\n\t\t 0x98000000: 0x8200,\n\t\t 0xa8000000: 0x808000,\n\t\t 0xb8000000: 0x800202,\n\t\t 0xc8000000: 0x800002,\n\t\t 0xd8000000: 0x8002,\n\t\t 0xe8000000: 0x202,\n\t\t 0xf8000000: 0x800000,\n\t\t 0x1: 0x8000,\n\t\t 0x10000001: 0x2,\n\t\t 0x20000001: 0x808200,\n\t\t 0x30000001: 0x800000,\n\t\t 0x40000001: 0x808002,\n\t\t 0x50000001: 0x8200,\n\t\t 0x60000001: 0x200,\n\t\t 0x70000001: 0x800202,\n\t\t 0x80000001: 0x808202,\n\t\t 0x90000001: 0x808000,\n\t\t 0xa0000001: 0x800002,\n\t\t 0xb0000001: 0x8202,\n\t\t 0xc0000001: 0x202,\n\t\t 0xd0000001: 0x800200,\n\t\t 0xe0000001: 0x8002,\n\t\t 0xf0000001: 0x0,\n\t\t 0x8000001: 0x808202,\n\t\t 0x18000001: 0x808000,\n\t\t 0x28000001: 0x800000,\n\t\t 0x38000001: 0x200,\n\t\t 0x48000001: 0x8000,\n\t\t 0x58000001: 0x800002,\n\t\t 0x68000001: 0x2,\n\t\t 0x78000001: 0x8202,\n\t\t 0x88000001: 0x8002,\n\t\t 0x98000001: 0x800202,\n\t\t 0xa8000001: 0x202,\n\t\t 0xb8000001: 0x808200,\n\t\t 0xc8000001: 0x800200,\n\t\t 0xd8000001: 0x0,\n\t\t 0xe8000001: 0x8200,\n\t\t 0xf8000001: 0x808002\n\t\t },\n\t\t {\n\t\t 0x0: 0x40084010,\n\t\t 0x1000000: 0x4000,\n\t\t 0x2000000: 0x80000,\n\t\t 0x3000000: 0x40080010,\n\t\t 0x4000000: 0x40000010,\n\t\t 0x5000000: 0x40084000,\n\t\t 0x6000000: 0x40004000,\n\t\t 0x7000000: 0x10,\n\t\t 0x8000000: 0x84000,\n\t\t 0x9000000: 0x40004010,\n\t\t 0xa000000: 0x40000000,\n\t\t 0xb000000: 0x84010,\n\t\t 0xc000000: 0x80010,\n\t\t 0xd000000: 0x0,\n\t\t 0xe000000: 0x4010,\n\t\t 0xf000000: 0x40080000,\n\t\t 0x800000: 0x40004000,\n\t\t 0x1800000: 0x84010,\n\t\t 0x2800000: 0x10,\n\t\t 0x3800000: 0x40004010,\n\t\t 0x4800000: 0x40084010,\n\t\t 0x5800000: 0x40000000,\n\t\t 0x6800000: 0x80000,\n\t\t 0x7800000: 0x40080010,\n\t\t 0x8800000: 0x80010,\n\t\t 0x9800000: 0x0,\n\t\t 0xa800000: 0x4000,\n\t\t 0xb800000: 0x40080000,\n\t\t 0xc800000: 0x40000010,\n\t\t 0xd800000: 0x84000,\n\t\t 0xe800000: 0x40084000,\n\t\t 0xf800000: 0x4010,\n\t\t 0x10000000: 0x0,\n\t\t 0x11000000: 0x40080010,\n\t\t 0x12000000: 0x40004010,\n\t\t 0x13000000: 0x40084000,\n\t\t 0x14000000: 0x40080000,\n\t\t 0x15000000: 0x10,\n\t\t 0x16000000: 0x84010,\n\t\t 0x17000000: 0x4000,\n\t\t 0x18000000: 0x4010,\n\t\t 0x19000000: 0x80000,\n\t\t 0x1a000000: 0x80010,\n\t\t 0x1b000000: 0x40000010,\n\t\t 0x1c000000: 0x84000,\n\t\t 0x1d000000: 0x40004000,\n\t\t 0x1e000000: 0x40000000,\n\t\t 0x1f000000: 0x40084010,\n\t\t 0x10800000: 0x84010,\n\t\t 0x11800000: 0x80000,\n\t\t 0x12800000: 0x40080000,\n\t\t 0x13800000: 0x4000,\n\t\t 0x14800000: 0x40004000,\n\t\t 0x15800000: 0x40084010,\n\t\t 0x16800000: 0x10,\n\t\t 0x17800000: 0x40000000,\n\t\t 0x18800000: 0x40084000,\n\t\t 0x19800000: 0x40000010,\n\t\t 0x1a800000: 0x40004010,\n\t\t 0x1b800000: 0x80010,\n\t\t 0x1c800000: 0x0,\n\t\t 0x1d800000: 0x4010,\n\t\t 0x1e800000: 0x40080010,\n\t\t 0x1f800000: 0x84000\n\t\t },\n\t\t {\n\t\t 0x0: 0x104,\n\t\t 0x100000: 0x0,\n\t\t 0x200000: 0x4000100,\n\t\t 0x300000: 0x10104,\n\t\t 0x400000: 0x10004,\n\t\t 0x500000: 0x4000004,\n\t\t 0x600000: 0x4010104,\n\t\t 0x700000: 0x4010000,\n\t\t 0x800000: 0x4000000,\n\t\t 0x900000: 0x4010100,\n\t\t 0xa00000: 0x10100,\n\t\t 0xb00000: 0x4010004,\n\t\t 0xc00000: 0x4000104,\n\t\t 0xd00000: 0x10000,\n\t\t 0xe00000: 0x4,\n\t\t 0xf00000: 0x100,\n\t\t 0x80000: 0x4010100,\n\t\t 0x180000: 0x4010004,\n\t\t 0x280000: 0x0,\n\t\t 0x380000: 0x4000100,\n\t\t 0x480000: 0x4000004,\n\t\t 0x580000: 0x10000,\n\t\t 0x680000: 0x10004,\n\t\t 0x780000: 0x104,\n\t\t 0x880000: 0x4,\n\t\t 0x980000: 0x100,\n\t\t 0xa80000: 0x4010000,\n\t\t 0xb80000: 0x10104,\n\t\t 0xc80000: 0x10100,\n\t\t 0xd80000: 0x4000104,\n\t\t 0xe80000: 0x4010104,\n\t\t 0xf80000: 0x4000000,\n\t\t 0x1000000: 0x4010100,\n\t\t 0x1100000: 0x10004,\n\t\t 0x1200000: 0x10000,\n\t\t 0x1300000: 0x4000100,\n\t\t 0x1400000: 0x100,\n\t\t 0x1500000: 0x4010104,\n\t\t 0x1600000: 0x4000004,\n\t\t 0x1700000: 0x0,\n\t\t 0x1800000: 0x4000104,\n\t\t 0x1900000: 0x4000000,\n\t\t 0x1a00000: 0x4,\n\t\t 0x1b00000: 0x10100,\n\t\t 0x1c00000: 0x4010000,\n\t\t 0x1d00000: 0x104,\n\t\t 0x1e00000: 0x10104,\n\t\t 0x1f00000: 0x4010004,\n\t\t 0x1080000: 0x4000000,\n\t\t 0x1180000: 0x104,\n\t\t 0x1280000: 0x4010100,\n\t\t 0x1380000: 0x0,\n\t\t 0x1480000: 0x10004,\n\t\t 0x1580000: 0x4000100,\n\t\t 0x1680000: 0x100,\n\t\t 0x1780000: 0x4010004,\n\t\t 0x1880000: 0x10000,\n\t\t 0x1980000: 0x4010104,\n\t\t 0x1a80000: 0x10104,\n\t\t 0x1b80000: 0x4000004,\n\t\t 0x1c80000: 0x4000104,\n\t\t 0x1d80000: 0x4010000,\n\t\t 0x1e80000: 0x4,\n\t\t 0x1f80000: 0x10100\n\t\t },\n\t\t {\n\t\t 0x0: 0x80401000,\n\t\t 0x10000: 0x80001040,\n\t\t 0x20000: 0x401040,\n\t\t 0x30000: 0x80400000,\n\t\t 0x40000: 0x0,\n\t\t 0x50000: 0x401000,\n\t\t 0x60000: 0x80000040,\n\t\t 0x70000: 0x400040,\n\t\t 0x80000: 0x80000000,\n\t\t 0x90000: 0x400000,\n\t\t 0xa0000: 0x40,\n\t\t 0xb0000: 0x80001000,\n\t\t 0xc0000: 0x80400040,\n\t\t 0xd0000: 0x1040,\n\t\t 0xe0000: 0x1000,\n\t\t 0xf0000: 0x80401040,\n\t\t 0x8000: 0x80001040,\n\t\t 0x18000: 0x40,\n\t\t 0x28000: 0x80400040,\n\t\t 0x38000: 0x80001000,\n\t\t 0x48000: 0x401000,\n\t\t 0x58000: 0x80401040,\n\t\t 0x68000: 0x0,\n\t\t 0x78000: 0x80400000,\n\t\t 0x88000: 0x1000,\n\t\t 0x98000: 0x80401000,\n\t\t 0xa8000: 0x400000,\n\t\t 0xb8000: 0x1040,\n\t\t 0xc8000: 0x80000000,\n\t\t 0xd8000: 0x400040,\n\t\t 0xe8000: 0x401040,\n\t\t 0xf8000: 0x80000040,\n\t\t 0x100000: 0x400040,\n\t\t 0x110000: 0x401000,\n\t\t 0x120000: 0x80000040,\n\t\t 0x130000: 0x0,\n\t\t 0x140000: 0x1040,\n\t\t 0x150000: 0x80400040,\n\t\t 0x160000: 0x80401000,\n\t\t 0x170000: 0x80001040,\n\t\t 0x180000: 0x80401040,\n\t\t 0x190000: 0x80000000,\n\t\t 0x1a0000: 0x80400000,\n\t\t 0x1b0000: 0x401040,\n\t\t 0x1c0000: 0x80001000,\n\t\t 0x1d0000: 0x400000,\n\t\t 0x1e0000: 0x40,\n\t\t 0x1f0000: 0x1000,\n\t\t 0x108000: 0x80400000,\n\t\t 0x118000: 0x80401040,\n\t\t 0x128000: 0x0,\n\t\t 0x138000: 0x401000,\n\t\t 0x148000: 0x400040,\n\t\t 0x158000: 0x80000000,\n\t\t 0x168000: 0x80001040,\n\t\t 0x178000: 0x40,\n\t\t 0x188000: 0x80000040,\n\t\t 0x198000: 0x1000,\n\t\t 0x1a8000: 0x80001000,\n\t\t 0x1b8000: 0x80400040,\n\t\t 0x1c8000: 0x1040,\n\t\t 0x1d8000: 0x80401000,\n\t\t 0x1e8000: 0x400000,\n\t\t 0x1f8000: 0x401040\n\t\t },\n\t\t {\n\t\t 0x0: 0x80,\n\t\t 0x1000: 0x1040000,\n\t\t 0x2000: 0x40000,\n\t\t 0x3000: 0x20000000,\n\t\t 0x4000: 0x20040080,\n\t\t 0x5000: 0x1000080,\n\t\t 0x6000: 0x21000080,\n\t\t 0x7000: 0x40080,\n\t\t 0x8000: 0x1000000,\n\t\t 0x9000: 0x20040000,\n\t\t 0xa000: 0x20000080,\n\t\t 0xb000: 0x21040080,\n\t\t 0xc000: 0x21040000,\n\t\t 0xd000: 0x0,\n\t\t 0xe000: 0x1040080,\n\t\t 0xf000: 0x21000000,\n\t\t 0x800: 0x1040080,\n\t\t 0x1800: 0x21000080,\n\t\t 0x2800: 0x80,\n\t\t 0x3800: 0x1040000,\n\t\t 0x4800: 0x40000,\n\t\t 0x5800: 0x20040080,\n\t\t 0x6800: 0x21040000,\n\t\t 0x7800: 0x20000000,\n\t\t 0x8800: 0x20040000,\n\t\t 0x9800: 0x0,\n\t\t 0xa800: 0x21040080,\n\t\t 0xb800: 0x1000080,\n\t\t 0xc800: 0x20000080,\n\t\t 0xd800: 0x21000000,\n\t\t 0xe800: 0x1000000,\n\t\t 0xf800: 0x40080,\n\t\t 0x10000: 0x40000,\n\t\t 0x11000: 0x80,\n\t\t 0x12000: 0x20000000,\n\t\t 0x13000: 0x21000080,\n\t\t 0x14000: 0x1000080,\n\t\t 0x15000: 0x21040000,\n\t\t 0x16000: 0x20040080,\n\t\t 0x17000: 0x1000000,\n\t\t 0x18000: 0x21040080,\n\t\t 0x19000: 0x21000000,\n\t\t 0x1a000: 0x1040000,\n\t\t 0x1b000: 0x20040000,\n\t\t 0x1c000: 0x40080,\n\t\t 0x1d000: 0x20000080,\n\t\t 0x1e000: 0x0,\n\t\t 0x1f000: 0x1040080,\n\t\t 0x10800: 0x21000080,\n\t\t 0x11800: 0x1000000,\n\t\t 0x12800: 0x1040000,\n\t\t 0x13800: 0x20040080,\n\t\t 0x14800: 0x20000000,\n\t\t 0x15800: 0x1040080,\n\t\t 0x16800: 0x80,\n\t\t 0x17800: 0x21040000,\n\t\t 0x18800: 0x40080,\n\t\t 0x19800: 0x21040080,\n\t\t 0x1a800: 0x0,\n\t\t 0x1b800: 0x21000000,\n\t\t 0x1c800: 0x1000080,\n\t\t 0x1d800: 0x40000,\n\t\t 0x1e800: 0x20040000,\n\t\t 0x1f800: 0x20000080\n\t\t },\n\t\t {\n\t\t 0x0: 0x10000008,\n\t\t 0x100: 0x2000,\n\t\t 0x200: 0x10200000,\n\t\t 0x300: 0x10202008,\n\t\t 0x400: 0x10002000,\n\t\t 0x500: 0x200000,\n\t\t 0x600: 0x200008,\n\t\t 0x700: 0x10000000,\n\t\t 0x800: 0x0,\n\t\t 0x900: 0x10002008,\n\t\t 0xa00: 0x202000,\n\t\t 0xb00: 0x8,\n\t\t 0xc00: 0x10200008,\n\t\t 0xd00: 0x202008,\n\t\t 0xe00: 0x2008,\n\t\t 0xf00: 0x10202000,\n\t\t 0x80: 0x10200000,\n\t\t 0x180: 0x10202008,\n\t\t 0x280: 0x8,\n\t\t 0x380: 0x200000,\n\t\t 0x480: 0x202008,\n\t\t 0x580: 0x10000008,\n\t\t 0x680: 0x10002000,\n\t\t 0x780: 0x2008,\n\t\t 0x880: 0x200008,\n\t\t 0x980: 0x2000,\n\t\t 0xa80: 0x10002008,\n\t\t 0xb80: 0x10200008,\n\t\t 0xc80: 0x0,\n\t\t 0xd80: 0x10202000,\n\t\t 0xe80: 0x202000,\n\t\t 0xf80: 0x10000000,\n\t\t 0x1000: 0x10002000,\n\t\t 0x1100: 0x10200008,\n\t\t 0x1200: 0x10202008,\n\t\t 0x1300: 0x2008,\n\t\t 0x1400: 0x200000,\n\t\t 0x1500: 0x10000000,\n\t\t 0x1600: 0x10000008,\n\t\t 0x1700: 0x202000,\n\t\t 0x1800: 0x202008,\n\t\t 0x1900: 0x0,\n\t\t 0x1a00: 0x8,\n\t\t 0x1b00: 0x10200000,\n\t\t 0x1c00: 0x2000,\n\t\t 0x1d00: 0x10002008,\n\t\t 0x1e00: 0x10202000,\n\t\t 0x1f00: 0x200008,\n\t\t 0x1080: 0x8,\n\t\t 0x1180: 0x202000,\n\t\t 0x1280: 0x200000,\n\t\t 0x1380: 0x10000008,\n\t\t 0x1480: 0x10002000,\n\t\t 0x1580: 0x2008,\n\t\t 0x1680: 0x10202008,\n\t\t 0x1780: 0x10200000,\n\t\t 0x1880: 0x10202000,\n\t\t 0x1980: 0x10200008,\n\t\t 0x1a80: 0x2000,\n\t\t 0x1b80: 0x202008,\n\t\t 0x1c80: 0x200008,\n\t\t 0x1d80: 0x0,\n\t\t 0x1e80: 0x10000000,\n\t\t 0x1f80: 0x10002008\n\t\t },\n\t\t {\n\t\t 0x0: 0x100000,\n\t\t 0x10: 0x2000401,\n\t\t 0x20: 0x400,\n\t\t 0x30: 0x100401,\n\t\t 0x40: 0x2100401,\n\t\t 0x50: 0x0,\n\t\t 0x60: 0x1,\n\t\t 0x70: 0x2100001,\n\t\t 0x80: 0x2000400,\n\t\t 0x90: 0x100001,\n\t\t 0xa0: 0x2000001,\n\t\t 0xb0: 0x2100400,\n\t\t 0xc0: 0x2100000,\n\t\t 0xd0: 0x401,\n\t\t 0xe0: 0x100400,\n\t\t 0xf0: 0x2000000,\n\t\t 0x8: 0x2100001,\n\t\t 0x18: 0x0,\n\t\t 0x28: 0x2000401,\n\t\t 0x38: 0x2100400,\n\t\t 0x48: 0x100000,\n\t\t 0x58: 0x2000001,\n\t\t 0x68: 0x2000000,\n\t\t 0x78: 0x401,\n\t\t 0x88: 0x100401,\n\t\t 0x98: 0x2000400,\n\t\t 0xa8: 0x2100000,\n\t\t 0xb8: 0x100001,\n\t\t 0xc8: 0x400,\n\t\t 0xd8: 0x2100401,\n\t\t 0xe8: 0x1,\n\t\t 0xf8: 0x100400,\n\t\t 0x100: 0x2000000,\n\t\t 0x110: 0x100000,\n\t\t 0x120: 0x2000401,\n\t\t 0x130: 0x2100001,\n\t\t 0x140: 0x100001,\n\t\t 0x150: 0x2000400,\n\t\t 0x160: 0x2100400,\n\t\t 0x170: 0x100401,\n\t\t 0x180: 0x401,\n\t\t 0x190: 0x2100401,\n\t\t 0x1a0: 0x100400,\n\t\t 0x1b0: 0x1,\n\t\t 0x1c0: 0x0,\n\t\t 0x1d0: 0x2100000,\n\t\t 0x1e0: 0x2000001,\n\t\t 0x1f0: 0x400,\n\t\t 0x108: 0x100400,\n\t\t 0x118: 0x2000401,\n\t\t 0x128: 0x2100001,\n\t\t 0x138: 0x1,\n\t\t 0x148: 0x2000000,\n\t\t 0x158: 0x100000,\n\t\t 0x168: 0x401,\n\t\t 0x178: 0x2100400,\n\t\t 0x188: 0x2000001,\n\t\t 0x198: 0x2100000,\n\t\t 0x1a8: 0x0,\n\t\t 0x1b8: 0x2100401,\n\t\t 0x1c8: 0x100401,\n\t\t 0x1d8: 0x400,\n\t\t 0x1e8: 0x2000400,\n\t\t 0x1f8: 0x100001\n\t\t },\n\t\t {\n\t\t 0x0: 0x8000820,\n\t\t 0x1: 0x20000,\n\t\t 0x2: 0x8000000,\n\t\t 0x3: 0x20,\n\t\t 0x4: 0x20020,\n\t\t 0x5: 0x8020820,\n\t\t 0x6: 0x8020800,\n\t\t 0x7: 0x800,\n\t\t 0x8: 0x8020000,\n\t\t 0x9: 0x8000800,\n\t\t 0xa: 0x20800,\n\t\t 0xb: 0x8020020,\n\t\t 0xc: 0x820,\n\t\t 0xd: 0x0,\n\t\t 0xe: 0x8000020,\n\t\t 0xf: 0x20820,\n\t\t 0x80000000: 0x800,\n\t\t 0x80000001: 0x8020820,\n\t\t 0x80000002: 0x8000820,\n\t\t 0x80000003: 0x8000000,\n\t\t 0x80000004: 0x8020000,\n\t\t 0x80000005: 0x20800,\n\t\t 0x80000006: 0x20820,\n\t\t 0x80000007: 0x20,\n\t\t 0x80000008: 0x8000020,\n\t\t 0x80000009: 0x820,\n\t\t 0x8000000a: 0x20020,\n\t\t 0x8000000b: 0x8020800,\n\t\t 0x8000000c: 0x0,\n\t\t 0x8000000d: 0x8020020,\n\t\t 0x8000000e: 0x8000800,\n\t\t 0x8000000f: 0x20000,\n\t\t 0x10: 0x20820,\n\t\t 0x11: 0x8020800,\n\t\t 0x12: 0x20,\n\t\t 0x13: 0x800,\n\t\t 0x14: 0x8000800,\n\t\t 0x15: 0x8000020,\n\t\t 0x16: 0x8020020,\n\t\t 0x17: 0x20000,\n\t\t 0x18: 0x0,\n\t\t 0x19: 0x20020,\n\t\t 0x1a: 0x8020000,\n\t\t 0x1b: 0x8000820,\n\t\t 0x1c: 0x8020820,\n\t\t 0x1d: 0x20800,\n\t\t 0x1e: 0x820,\n\t\t 0x1f: 0x8000000,\n\t\t 0x80000010: 0x20000,\n\t\t 0x80000011: 0x800,\n\t\t 0x80000012: 0x8020020,\n\t\t 0x80000013: 0x20820,\n\t\t 0x80000014: 0x20,\n\t\t 0x80000015: 0x8020000,\n\t\t 0x80000016: 0x8000000,\n\t\t 0x80000017: 0x8000820,\n\t\t 0x80000018: 0x8020820,\n\t\t 0x80000019: 0x8000020,\n\t\t 0x8000001a: 0x8000800,\n\t\t 0x8000001b: 0x0,\n\t\t 0x8000001c: 0x20800,\n\t\t 0x8000001d: 0x820,\n\t\t 0x8000001e: 0x20020,\n\t\t 0x8000001f: 0x8020800\n\t\t }\n\t\t ];\n\t\n\t\t // Masks that select the SBOX input\n\t\t var SBOX_MASK = [\n\t\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t\t ];\n\t\n\t\t /**\n\t\t * DES block cipher algorithm.\n\t\t */\n\t\t var DES = C_algo.DES = BlockCipher.extend({\n\t\t _doReset: function () {\n\t\t // Shortcuts\n\t\t var key = this._key;\n\t\t var keyWords = key.words;\n\t\n\t\t // Select 56 bits according to PC1\n\t\t var keyBits = [];\n\t\t for (var i = 0; i < 56; i++) {\n\t\t var keyBitPos = PC1[i] - 1;\n\t\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t\t }\n\t\n\t\t // Assemble 16 subkeys\n\t\t var subKeys = this._subKeys = [];\n\t\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t\t // Create subkey\n\t\t var subKey = subKeys[nSubKey] = [];\n\t\n\t\t // Shortcut\n\t\t var bitShift = BIT_SHIFTS[nSubKey];\n\t\n\t\t // Select 48 bits according to PC2\n\t\t for (var i = 0; i < 24; i++) {\n\t\t // Select from the left 28 key bits\n\t\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\t\n\t\t // Select from the right 28 key bits\n\t\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t\t }\n\t\n\t\t // Since each subkey is applied to an expanded 32-bit input,\n\t\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t\t // which allows the key to be used without expansion\n\t\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t\t for (var i = 1; i < 7; i++) {\n\t\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t\t }\n\t\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t\t }\n\t\n\t\t // Compute inverse subkeys\n\t\t var invSubKeys = this._invSubKeys = [];\n\t\t for (var i = 0; i < 16; i++) {\n\t\t invSubKeys[i] = subKeys[15 - i];\n\t\t }\n\t\t },\n\t\n\t\t encryptBlock: function (M, offset) {\n\t\t this._doCryptBlock(M, offset, this._subKeys);\n\t\t },\n\t\n\t\t decryptBlock: function (M, offset) {\n\t\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t\t },\n\t\n\t\t _doCryptBlock: function (M, offset, subKeys) {\n\t\t // Get input\n\t\t this._lBlock = M[offset];\n\t\t this._rBlock = M[offset + 1];\n\t\n\t\t // Initial permutation\n\t\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t\t exchangeLR.call(this, 16, 0x0000ffff);\n\t\t exchangeRL.call(this, 2, 0x33333333);\n\t\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t\t exchangeLR.call(this, 1, 0x55555555);\n\t\n\t\t // Rounds\n\t\t for (var round = 0; round < 16; round++) {\n\t\t // Shortcuts\n\t\t var subKey = subKeys[round];\n\t\t var lBlock = this._lBlock;\n\t\t var rBlock = this._rBlock;\n\t\n\t\t // Feistel function\n\t\t var f = 0;\n\t\t for (var i = 0; i < 8; i++) {\n\t\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t\t }\n\t\t this._lBlock = rBlock;\n\t\t this._rBlock = lBlock ^ f;\n\t\t }\n\t\n\t\t // Undo swap from last round\n\t\t var t = this._lBlock;\n\t\t this._lBlock = this._rBlock;\n\t\t this._rBlock = t;\n\t\n\t\t // Final permutation\n\t\t exchangeLR.call(this, 1, 0x55555555);\n\t\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t\t exchangeRL.call(this, 2, 0x33333333);\n\t\t exchangeLR.call(this, 16, 0x0000ffff);\n\t\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t\n\t\t // Set output\n\t\t M[offset] = this._lBlock;\n\t\t M[offset + 1] = this._rBlock;\n\t\t },\n\t\n\t\t keySize: 64/32,\n\t\n\t\t ivSize: 64/32,\n\t\n\t\t blockSize: 64/32\n\t\t });\n\t\n\t\t // Swap bits across the left and right words\n\t\t function exchangeLR(offset, mask) {\n\t\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t\t this._rBlock ^= t;\n\t\t this._lBlock ^= t << offset;\n\t\t }\n\t\n\t\t function exchangeRL(offset, mask) {\n\t\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t\t this._lBlock ^= t;\n\t\t this._rBlock ^= t << offset;\n\t\t }\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.DES = BlockCipher._createHelper(DES);\n\t\n\t\t /**\n\t\t * Triple-DES block cipher algorithm.\n\t\t */\n\t\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t\t _doReset: function () {\n\t\t // Shortcuts\n\t\t var key = this._key;\n\t\t var keyWords = key.words;\n\t\n\t\t // Create DES instances\n\t\t this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n\t\t this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n\t\t this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n\t\t },\n\t\n\t\t encryptBlock: function (M, offset) {\n\t\t this._des1.encryptBlock(M, offset);\n\t\t this._des2.decryptBlock(M, offset);\n\t\t this._des3.encryptBlock(M, offset);\n\t\t },\n\t\n\t\t decryptBlock: function (M, offset) {\n\t\t this._des3.decryptBlock(M, offset);\n\t\t this._des2.encryptBlock(M, offset);\n\t\t this._des1.decryptBlock(M, offset);\n\t\t },\n\t\n\t\t keySize: 192/32,\n\t\n\t\t ivSize: 64/32,\n\t\n\t\t blockSize: 64/32\n\t\t });\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.TripleDES;\n\t\n\t}));\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5), __webpack_require__(12), __webpack_require__(13), __webpack_require__(14), __webpack_require__(15));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var StreamCipher = C_lib.StreamCipher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Reusable objects\n\t\t var S = [];\n\t\t var C_ = [];\n\t\t var G = [];\n\t\n\t\t /**\n\t\t * Rabbit stream cipher algorithm\n\t\t */\n\t\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t\t _doReset: function () {\n\t\t // Shortcuts\n\t\t var K = this._key.words;\n\t\t var iv = this.cfg.iv;\n\t\n\t\t // Swap endian\n\t\t for (var i = 0; i < 4; i++) {\n\t\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t\t }\n\t\n\t\t // Generate initial state values\n\t\t var X = this._X = [\n\t\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t\t ];\n\t\n\t\t // Generate initial counter values\n\t\t var C = this._C = [\n\t\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t\t ];\n\t\n\t\t // Carry bit\n\t\t this._b = 0;\n\t\n\t\t // Iterate the system four times\n\t\t for (var i = 0; i < 4; i++) {\n\t\t nextState.call(this);\n\t\t }\n\t\n\t\t // Modify the counters\n\t\t for (var i = 0; i < 8; i++) {\n\t\t C[i] ^= X[(i + 4) & 7];\n\t\t }\n\t\n\t\t // IV setup\n\t\t if (iv) {\n\t\t // Shortcuts\n\t\t var IV = iv.words;\n\t\t var IV_0 = IV[0];\n\t\t var IV_1 = IV[1];\n\t\n\t\t // Generate four subvectors\n\t\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\t\n\t\t // Modify counter values\n\t\t C[0] ^= i0;\n\t\t C[1] ^= i1;\n\t\t C[2] ^= i2;\n\t\t C[3] ^= i3;\n\t\t C[4] ^= i0;\n\t\t C[5] ^= i1;\n\t\t C[6] ^= i2;\n\t\t C[7] ^= i3;\n\t\n\t\t // Iterate the system four times\n\t\t for (var i = 0; i < 4; i++) {\n\t\t nextState.call(this);\n\t\t }\n\t\t }\n\t\t },\n\t\n\t\t _doProcessBlock: function (M, offset) {\n\t\t // Shortcut\n\t\t var X = this._X;\n\t\n\t\t // Iterate the system\n\t\t nextState.call(this);\n\t\n\t\t // Generate four keystream words\n\t\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\t\n\t\t for (var i = 0; i < 4; i++) {\n\t\t // Swap endian\n\t\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\t\n\t\t // Encrypt\n\t\t M[offset + i] ^= S[i];\n\t\t }\n\t\t },\n\t\n\t\t blockSize: 128/32,\n\t\n\t\t ivSize: 64/32\n\t\t });\n\t\n\t\t function nextState() {\n\t\t // Shortcuts\n\t\t var X = this._X;\n\t\t var C = this._C;\n\t\n\t\t // Save old counter values\n\t\t for (var i = 0; i < 8; i++) {\n\t\t C_[i] = C[i];\n\t\t }\n\t\n\t\t // Calculate new counter values\n\t\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\t\n\t\t // Calculate the g-values\n\t\t for (var i = 0; i < 8; i++) {\n\t\t var gx = X[i] + C[i];\n\t\n\t\t // Construct high and low argument for squaring\n\t\t var ga = gx & 0xffff;\n\t\t var gb = gx >>> 16;\n\t\n\t\t // Calculate high and low result of squaring\n\t\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\t\n\t\t // High XOR low\n\t\t G[i] = gh ^ gl;\n\t\t }\n\t\n\t\t // Calculate new state values\n\t\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t\t }\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.Rabbit;\n\t\n\t}));\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(5), __webpack_require__(12), __webpack_require__(13), __webpack_require__(14), __webpack_require__(15));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var StreamCipher = C_lib.StreamCipher;\n\t\t var C_algo = C.algo;\n\t\n\t\t /**\n\t\t * RC4 stream cipher algorithm.\n\t\t */\n\t\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t\t _doReset: function () {\n\t\t // Shortcuts\n\t\t var key = this._key;\n\t\t var keyWords = key.words;\n\t\t var keySigBytes = key.sigBytes;\n\t\n\t\t // Init sbox\n\t\t var S = this._S = [];\n\t\t for (var i = 0; i < 256; i++) {\n\t\t S[i] = i;\n\t\t }\n\t\n\t\t // Key setup\n\t\t for (var i = 0, j = 0; i < 256; i++) {\n\t\t var keyByteIndex = i % keySigBytes;\n\t\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\t\n\t\t j = (j + S[i] + keyByte) % 256;\n\t\n\t\t // Swap\n\t\t var t = S[i];\n\t\t S[i] = S[j];\n\t\t S[j] = t;\n\t\t }\n\t\n\t\t // Counters\n\t\t this._i = this._j = 0;\n\t\t },\n\t\n\t\t _doProcessBlock: function (M, offset) {\n\t\t M[offset] ^= generateKeystreamWord.call(this);\n\t\t },\n\t\n\t\t keySize: 256/32,\n\t\n\t\t ivSize: 0\n\t\t });\n\t\n\t\t function generateKeystreamWord() {\n\t\t // Shortcuts\n\t\t var S = this._S;\n\t\t var i = this._i;\n\t\t var j = this._j;\n\t\n\t\t // Generate keystream word\n\t\t var keystreamWord = 0;\n\t\t for (var n = 0; n < 4; n++) {\n\t\t i = (i + 1) % 256;\n\t\t j = (j + S[i]) % 256;\n\t\n\t\t // Swap\n\t\t var t = S[i];\n\t\t S[i] = S[j];\n\t\t S[j] = t;\n\t\n\t\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t\t }\n\t\n\t\t // Update counters\n\t\t this._i = i;\n\t\t this._j = j;\n\t\n\t\t return keystreamWord;\n\t\t }\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.RC4 = StreamCipher._createHelper(RC4);\n\t\n\t\t /**\n\t\t * Modified RC4 stream cipher algorithm.\n\t\t */\n\t\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {number} drop The number of keystream words to drop. Default 192\n\t\t */\n\t\t cfg: RC4.cfg.extend({\n\t\t drop: 192\n\t\t }),\n\t\n\t\t _doReset: function () {\n\t\t RC4._doReset.call(this);\n\t\n\t\t // Drop\n\t\t for (var i = this.cfg.drop; i > 0; i--) {\n\t\t generateKeystreamWord.call(this);\n\t\t }\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.RC4;\n\t\n\t}));\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** secure-ls.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 6c511215f8f76b5cfa14\n **/","import utils from './utils';\nimport constants from './constants';\nimport enc from './enc-utf8';\n\nimport Base64 from './Base64';\nimport LZString from 'lz-string/libs/lz-string';\nimport AES from 'crypto-js/aes';\nimport DES from 'crypto-js/tripledes';\nimport RABBIT from 'crypto-js/rabbit';\nimport RC4 from 'crypto-js/rc4';\n\nexport default class SecureLS {\n constructor(config) {\n config = config || {};\n this._name = 'secure-ls';\n this.utils = utils;\n this.constants = constants;\n this.Base64 = Base64;\n this.LZString = LZString;\n this.AES = AES;\n this.DES = DES;\n this.RABBIT = RABBIT;\n this.RC4 = RC4;\n this.enc = enc;\n\n this.config = {\n isCompression: true,\n encodingType: constants.EncrytionTypes.BASE64,\n encryptionSecret: config.encryptionSecret,\n encryptionNamespace: config.encryptionNamespace\n };\n this.config.isCompression = typeof config.isCompression !== 'undefined' ?\n config.isCompression :\n true;\n this.config.encodingType = (typeof config.encodingType !== 'undefined' || config.encodingType === '') ?\n config.encodingType.toLowerCase() :\n constants.EncrytionTypes.BASE64;\n\n this.ls = localStorage;\n this.init();\n };\n\n init() {\n let metaData = this.getMetaData();\n\n this.WarningEnum = this.constants.WarningEnum;\n this.WarningTypes = this.constants.WarningTypes;\n this.EncrytionTypes = this.constants.EncrytionTypes;\n\n this._isBase64 = this._isBase64EncryptionType();\n this._isAES = this._isAESEncryptionType();\n this._isDES = this._isDESEncryptionType();\n this._isRabbit = this._isRabbitEncryptionType();\n this._isRC4 = this._isRC4EncryptionType();\n this._isCompression = this._isDataCompressionEnabled();\n\n // fill the already present keys to the list of keys being used by secure-ls\n this.utils.allKeys = metaData.keys || this.resetAllKeys();\n };\n\n _isBase64EncryptionType() {\n return Base64 &&\n (typeof this.config.encodingType === 'undefined' ||\n this.config.encodingType === this.constants.EncrytionTypes.BASE64);\n };\n\n _isAESEncryptionType() {\n return AES &&\n (this.config.encodingType === this.constants.EncrytionTypes.AES);\n };\n\n _isDESEncryptionType() {\n return DES &&\n (this.config.encodingType === this.constants.EncrytionTypes.DES);\n };\n\n _isRabbitEncryptionType() {\n return RABBIT &&\n (this.config.encodingType === this.constants.EncrytionTypes.RABBIT);\n };\n\n _isRC4EncryptionType() {\n return RC4 &&\n (this.config.encodingType === this.constants.EncrytionTypes.RC4);\n };\n\n _isDataCompressionEnabled() {\n return this.config.isCompression;\n }\n\n getEncryptionSecret(key) {\n let metaData = this.getMetaData();\n let obj = this.utils.getObjectFromKey(metaData.keys, key);\n\n if (!obj) {\n return;\n }\n\n if (this._isAES ||\n this._isDES ||\n this._isRabbit ||\n this._isRC4\n ) {\n if (typeof this.config.encryptionSecret === 'undefined') {\n this.utils.encryptionSecret = obj.s;\n\n if (!this.utils.encryptionSecret) {\n this.utils.encryptionSecret = this.utils.generateSecretKey();\n this.setMetaData();\n }\n } else {\n this.utils.encryptionSecret = this.config.encryptionSecret || obj.s || '';\n }\n }\n }\n\n get(key, isAllKeysData) {\n let decodedData = '',\n jsonData = '',\n deCompressedData,\n bytes,\n data;\n\n if (!this.utils.is(key)) {\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n return jsonData;\n }\n\n data = this.getDataFromLocalStorage(key);\n\n if (!data) {\n return jsonData;\n }\n\n deCompressedData = data; // saves else\n if (this._isCompression || isAllKeysData) { // meta data always compressed\n deCompressedData = LZString.decompressFromUTF16(data);\n }\n\n decodedData = deCompressedData; // saves else\n if (this._isBase64 || isAllKeysData) { // meta data always Base64\n decodedData = Base64.decode(deCompressedData);\n } else {\n this.getEncryptionSecret(key);\n if (this._isAES) {\n bytes = AES.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n } else if (this._isDES) {\n bytes = DES.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n } else if (this._isRabbit) {\n bytes = RABBIT.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n } else if (this._isRC4) {\n bytes = RC4.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n }\n\n if (bytes) {\n decodedData = bytes.toString(enc._Utf8);\n }\n }\n\n try {\n jsonData = JSON.parse(decodedData);\n } catch (e) {\n throw new Error('Could not parse JSON');\n }\n\n return jsonData;\n };\n\n getDataFromLocalStorage(key) {\n return this.ls.getItem(key, true);\n };\n\n getAllKeys() {\n let data = this.getMetaData();\n\n return this.utils.extractKeyNames(data) || [];\n };\n\n set(key, data) {\n let dataToStore = '';\n\n if (!this.utils.is(key)) {\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n return;\n }\n\n this.getEncryptionSecret(key);\n\n // add key(s) to Array if not already added, only for keys other than meta key\n if (!(String(key) === String(this.utils.metaKey))) {\n if (!this.utils.isKeyPresent(key)) {\n this.utils.addToKeysList(key);\n this.setMetaData();\n }\n }\n\n dataToStore = this.processData(data);\n // Store the data to localStorage\n this.setDataToLocalStorage(key, dataToStore);\n };\n\n setDataToLocalStorage(key, data) {\n this.ls.setItem(key, data);\n };\n\n remove(key) {\n if (!this.utils.is(key)) {\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n return;\n }\n\n if (key === this.utils.metaKey && this.getAllKeys().length) {\n this.utils.warn(this.WarningEnum.META_KEY_REMOVE);\n return;\n }\n\n if (this.utils.isKeyPresent(key)) {\n this.utils.removeFromKeysList(key);\n this.setMetaData();\n }\n this.ls.removeItem(key);\n };\n\n removeAll() {\n let keys, i;\n\n keys = this.getAllKeys();\n for (i = 0; i < keys.length; i++) {\n this.ls.removeItem(keys[i]);\n }\n this.ls.removeItem(this.utils.metaKey);\n\n this.resetAllKeys();\n };\n\n clear() {\n this.ls.clear();\n this.resetAllKeys();\n };\n\n resetAllKeys() {\n this.utils.allKeys = [];\n return [];\n }\n\n processData(data, isAllKeysData) {\n if (data === null || data === undefined || data === '') {\n return '';\n }\n\n let jsonData, encodedData, compressedData;\n\n try {\n jsonData = JSON.stringify(data);\n } catch (e) {\n throw new Error('Could not stringify data.');\n }\n\n // Encode Based on encoding type\n // If not set, default to Base64 for securing data\n encodedData = jsonData;\n if (this._isBase64 || isAllKeysData) {\n encodedData = Base64.encode(jsonData);\n } else {\n if (this._isAES) {\n encodedData = AES.encrypt(jsonData, this.utils.encryptionSecret);\n } else if (this._isDES) {\n encodedData = DES.encrypt(jsonData, this.utils.encryptionSecret);\n } else if (this._isRabbit) {\n encodedData = RABBIT.encrypt(jsonData, this.utils.encryptionSecret);\n } else if (this._isRC4) {\n encodedData = RC4.encrypt(jsonData, this.utils.encryptionSecret);\n }\n\n encodedData = encodedData && encodedData.toString();\n }\n\n // Compress data if set to true\n compressedData = encodedData;\n if (this._isCompression || isAllKeysData) {\n compressedData = LZString.compressToUTF16(encodedData);\n }\n\n return compressedData;\n };\n\n setMetaData() {\n let dataToStore = this.processData({\n keys: this.utils.allKeys\n }, true);\n\n // Store the data to localStorage\n this.setDataToLocalStorage(this.getMetaKey(), dataToStore);\n };\n\n getMetaData() {\n return this.get(this.getMetaKey(), true) || {};\n };\n\n getMetaKey() {\n return this.utils.metaKey + (this.config.encryptionNamespace ? '__' + this.config.encryptionNamespace : '');\n }\n\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/index.js\n **/","import constants from './constants';\nimport CryptoJSWordArray from './WordArray';\nimport PBKDF2 from 'crypto-js/pbkdf2';\n\nlet utils = {\n metaKey: '_secure__ls__metadata',\n encryptionSecret: '',\n secretPhrase: 's3cr3t$#@135^&*246',\n allKeys: [],\n is: function (key) {\n if (key) {\n return true;\n }\n return false;\n },\n warn: function (reason) {\n reason = reason ? reason : constants.WarningEnum.DEFAULT_TEXT;\n console.warn(constants.WarningTypes[reason]);\n },\n generateSecretKey: function () {\n let salt = CryptoJSWordArray.random(128 / 8);\n let key128Bits = PBKDF2(this.secretPhrase, salt, {keySize: 128 / 32 });\n\n return key128Bits && key128Bits.toString();\n },\n getObjectFromKey: function (data, key) {\n if (!data || !data.length) {\n return {};\n }\n\n let i, obj = {};\n\n for (i = 0; i < data.length; i++) {\n if (data[i].k === key) {\n obj = data[i];\n break;\n }\n }\n\n return obj;\n },\n extractKeyNames: function (data) {\n if (!data || !data.keys || !data.keys.length) {\n return [];\n }\n\n return data.keys.map(keyData => {\n return keyData.k;\n });\n },\n getAllKeys: function () {\n return this.allKeys;\n },\n isKeyPresent: function (key) {\n let isKeyAlreadyPresent = false;\n\n for (let i = 0; i < this.allKeys.length; i++) {\n if (String(this.allKeys[i].k) === String(key)) {\n isKeyAlreadyPresent = true; // found\n break;\n }\n }\n\n return isKeyAlreadyPresent;\n },\n addToKeysList: function (key) {\n this.allKeys.push({\n k: key,\n s: this.encryptionSecret\n });\n },\n removeFromKeysList: function (key) {\n let i, index = -1;\n\n for (i = 0; i < this.allKeys.length; i++) {\n if (this.allKeys[i].k === key) {\n index = i;\n break;\n }\n }\n if (index !== -1) {\n this.allKeys.splice(index, 1);\n }\n return index;\n }\n};\n\nmodule.exports = utils;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/utils.js\n **/","let WarningEnum = {\n KEY_NOT_PROVIDED: 'keyNotProvided',\n META_KEY_REMOVE: 'metaKeyRemove',\n DEFAULT_TEXT: 'defaultText'\n};\n\nlet WarningTypes = {};\n\nWarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!';\nWarningTypes[WarningEnum.META_KEY_REMOVE] = `Secure LS: Meta key can not be removed\nunless all keys created by Secure LS are removed!`;\nWarningTypes[WarningEnum.DEFAULT_TEXT] = `Unexpected output`;\n\nlet constants = {\n WarningEnum: WarningEnum,\n WarningTypes: WarningTypes,\n EncrytionTypes: {\n BASE64: 'base64',\n AES: 'aes',\n DES: 'des',\n RABBIT: 'rabbit',\n RC4: 'rc4'\n }\n};\n\nmodule.exports = constants;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/constants.js\n **/","/*\n ES6 compatible port of CryptoJS - WordArray for PBKDF2 password key generation\n\n Source: https://github.com/brix/crypto-js\n LICENSE: MIT\n */\n\nlet CryptoJSWordArray = {};\n\nCryptoJSWordArray.random = function (nBytes) {\n let words = [];\n let r = (function (mw) {\n let mz = 0x3ade68b1;\n let mask = 0xffffffff;\n\n return function () {\n mz = (0x9069 * (mz & 0xFFFF) + (mz >> 0x10)) & mask;\n mw = (0x4650 * (mw & 0xFFFF) + (mw >> 0x10)) & mask;\n let result = ((mz << 0x10) + mw) & mask;\n\n result /= 0x100000000;\n result += 0.5;\n return result * (Math.random() > 0.5 ? 1 : -1);\n };\n });\n\n for (let i = 0, rcache; i < nBytes; i += 4) {\n let _r = r((rcache || Math.random()) * 0x100000000);\n\n rcache = _r() * 0x3ade67b7;\n words.push((_r() * 0x100000000) | 0);\n }\n\n return new this.Set(words, nBytes);\n};\n\nCryptoJSWordArray.Set = function (words, sigBytes) {\n words = this.words = words || [];\n\n if (sigBytes !== undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 8;\n }\n};\n\nmodule.exports = CryptoJSWordArray;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/WordArray.js\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA1 = C_algo.SHA1;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA1\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA1,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/pbkdf2.js\n ** module id = 4\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t /*\n\t * Local polyfil of Object.create\n\t */\n\t var create = Object.create || (function () {\n\t function F() {};\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }())\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t var r = (function (m_w) {\n\t var m_w = m_w;\n\t var m_z = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\n\t return function () {\n\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t var result = ((m_z << 0x10) + m_w) & mask;\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > .5 ? 1 : -1);\n\t }\n\t });\n\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t rcache = _r() * 0x3ade67b7;\n\t words.push((_r() * 0x100000000) | 0);\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t var processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/core.js\n ** module id = 5\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/sha1.js\n ** module id = 6\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/hmac.js\n ** module id = 7\n ** module chunks = 0\n **/","/*\n ES6 compatible port of CryptoJS - encoding\n\n Source: https://github.com/brix/crypto-js\n LICENSE: MIT\n */\nlet enc = {};\n\nenc.Latin1 = {\n stringify: (wordArray) => {\n // Shortcuts\n let words = wordArray.words;\n let sigBytes = wordArray.sigBytes;\n let latin1Chars = [], i, bite;\n\n // Convert\n for (i = 0; i < sigBytes; i++) {\n bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n\n return latin1Chars.join('');\n }\n};\n\nenc._Utf8 = {\n stringify: (wordArray) => {\n try {\n return decodeURIComponent(escape(enc.Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n }\n};\n\nmodule.exports = enc;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/enc-utf8.js\n **/","let Base64 = {\n _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n encode: function (e) {\n let t = '';\n let n, r, i, s, o, u, a;\n let f = 0;\n\n e = Base64._utf8Encode(e);\n while (f < e.length) {\n n = e.charCodeAt(f++);\n r = e.charCodeAt(f++);\n i = e.charCodeAt(f++);\n s = n >> 2;\n o = (n & 3) << 4 | r >> 4;\n u = (r & 15) << 2 | i >> 6;\n a = i & 63;\n if (isNaN(r)) {\n u = a = 64;\n } else if (isNaN(i)) {\n a = 64;\n }\n t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a);\n }\n return t;\n },\n decode: function (e) {\n let t = '';\n let n, r, i;\n let s, o, u, a;\n let f = 0;\n\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n while (f < e.length) {\n s = this._keyStr.indexOf(e.charAt(f++));\n o = this._keyStr.indexOf(e.charAt(f++));\n u = this._keyStr.indexOf(e.charAt(f++));\n a = this._keyStr.indexOf(e.charAt(f++));\n n = s << 2 | o >> 4;\n r = (o & 15) << 4 | u >> 2;\n i = (u & 3) << 6 | a;\n t = t + String.fromCharCode(n);\n if (u !== 64) {\n t = t + String.fromCharCode(r);\n }\n if (a !== 64) {\n t = t + String.fromCharCode(i);\n }\n }\n t = Base64._utf8Decode(t);\n return t;\n },\n _utf8Encode: function (e) {\n e = e.replace(/\\r\\n/g, '\\n');\n let t = '';\n\n for (let n = 0; n < e.length; n++) {\n let r = e.charCodeAt(n);\n\n if (r < 128) {\n t += String.fromCharCode(r);\n } else if (r > 127 && r < 2048) {\n t += String.fromCharCode(r >> 6 | 192);\n t += String.fromCharCode(r & 63 | 128);\n } else {\n t += String.fromCharCode(r >> 12 | 224);\n t += String.fromCharCode(r >> 6 & 63 | 128);\n t += String.fromCharCode(r & 63 | 128);\n }\n }\n return t;\n },\n _utf8Decode: function (e) {\n let t = '';\n let n = 0;\n let r, c2, c3;\n\n r = c2 = 0;\n while (n < e.length) {\n r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n n++;\n } else if (r > 191 && r < 224) {\n c2 = e.charCodeAt(n + 1);\n t += String.fromCharCode((r & 31) << 6 | c2 & 63);\n n += 2;\n } else {\n c2 = e.charCodeAt(n + 1);\n c3 = e.charCodeAt(n + 2);\n t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);\n n += 3;\n }\n }\n return t;\n }\n};\n\nmodule.exports = Base64;\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/Base64.js\n **/","// Copyright (c) 2013 Pieroxy \n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lz-string/libs/lz-string.js\n ** module id = 10\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/aes.js\n ** module id = 11\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/enc-base64.js\n ** module id = 12\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/md5.js\n ** module id = 13\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t var block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/evpkdf.js\n ** module id = 14\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t var block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t var modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t var modeCreator = mode.createDecryptor;\n\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t var wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/cipher-core.js\n ** module id = 15\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n\t this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n\t this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/tripledes.js\n ** module id = 16\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/rabbit.js\n ** module id = 17\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/rc4.js\n ** module id = 18\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///secure-ls.min.js","webpack:///webpack/bootstrap d69a2c7f42d75a8645d7","webpack:///./src/index.js","webpack:///./src/utils.js","webpack:///./src/constants.js","webpack:///./src/enc-utf8.js","webpack:///./src/Base64.js","webpack:///./~/lz-string/libs/lz-string.js","webpack:///./~/crypto-js/aes.js","webpack:///./~/crypto-js/core.js","webpack:///./~/crypto-js/enc-base64.js","webpack:///./~/crypto-js/md5.js","webpack:///./~/crypto-js/evpkdf.js","webpack:///./~/crypto-js/sha1.js","webpack:///./~/crypto-js/hmac.js","webpack:///./~/crypto-js/cipher-core.js","webpack:///./~/crypto-js/tripledes.js","webpack:///./~/crypto-js/rabbit.js","webpack:///./~/crypto-js/rc4.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","Object","defineProperty","value","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","_utils","_utils2","_constants","_constants2","_encUtf","_encUtf2","_Base","_Base2","_lzString","_lzString2","_aes","_aes2","_tripledes","_tripledes2","_rabbit","_rabbit2","_rc","_rc2","SecureLS","config","_name","utils","constants","Base64","LZString","AES","DES","RABBIT","RC4","enc","isCompression","encodingType","EncrytionTypes","BASE64","encryptionSecret","encryptionNamespace","storage","localStorage","toLowerCase","ls","init","_isBase64","warn","WarningEnum","ENCRYPTION_NAMESPACE_NOT_PROVIDED","INSECURE_PASSWORD","metaData","getMetaData","WarningTypes","_isBase64EncryptionType","_isAES","_isAESEncryptionType","_isDES","_isDESEncryptionType","_isRabbit","_isRabbitEncryptionType","_isRC4","_isRC4EncryptionType","_isCompression","_isDataCompressionEnabled","allKeys","keys","resetAllKeys","setMetaData","isAllKeysData","decodedData","jsonData","deCompressedData","bytes","data","is","KEY_NOT_PROVIDED","getDataFromLocalStorage","decompressFromUTF16","decode","getEncryptionSecret","decrypt","toString","_Utf8","JSON","parse","e","Error","getItem","String","metaKey","isKeyPresent","addToKeysList","setDataToLocalStorage","processData","setItem","getAllKeys","META_KEY_REMOVE","removeFromKeysList","removeItem","clear","undefined","encodedData","compressedData","stringify","encode","encrypt","compressToUTF16","dataToStore","getMetaKey","get","secretPhrase","reason","DEFAULT_TEXT","console","getObjectFromKey","k","isKeyAlreadyPresent","push","index","splice","Latin1","wordArray","words","sigBytes","latin1Chars","bite","fromCharCode","join","decodeURIComponent","escape","_keyStr","t","n","r","s","o","u","a","f","_utf8Encode","charCodeAt","isNaN","charAt","replace","indexOf","_utf8Decode","c2","c3","__WEBPACK_AMD_DEFINE_RESULT__","getBaseValue","alphabet","character","baseReverseDic","keyStrBase64","keyStrUriSafe","compressToBase64","input","res","_compress","decompressFromBase64","_decompress","compressed","compressToUint8Array","uncompressed","compress","buf","Uint8Array","TotalLen","current_value","decompressFromUint8Array","decompress","Array","result","forEach","compressToEncodedURIComponent","decompressFromEncodedURIComponent","bitsPerChar","getCharFromInt","ii","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","hasOwnProperty","Math","pow","resetValue","getNextValue","next","w","bits","resb","maxpower","power","dictionary","enlargeIn","dictSize","numBits","entry","val","position","undef","CryptoJS","C","C_lib","lib","BlockCipher","C_algo","algo","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","d","x","xi","sx","x2","x4","x8","RCON","extend","_doReset","_nRounds","_keyPriorReset","_key","keyWords","keySize","nRounds","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","encryptBlock","M","offset","_doCryptBlock","decryptBlock","s0","s1","s2","s3","round","t0","t1","t2","t3","_createHelper","create","F","subtype","Base","overrides","mixIn","$super","apply","arguments","properties","propertyName","clone","WordArray","encoder","Hex","concat","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","ceil","slice","random","nBytes","rcache","m_w","m_z","mask","_r","C_enc","hexChars","hexStr","hexStrLength","parseInt","substr","latin1Str","latin1StrLength","Utf8","utf8Str","unescape","encodeURIComponent","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","doFlush","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","max","_minBufferSize","nWordsReady","nBytesReady","min","_doProcessBlock","processedWords","Hasher","cfg","update","messageUpdate","finalize","hash","_doFinalize","hasher","message","_createHmacHelper","HMAC","parseLoop","base64Str","base64StrLength","reverseMap","bits1","bits2","map","_map","base64Chars","byte1","byte2","byte3","triplet","j","paddingChar","_reverseMap","paddingIndex","FF","b","GG","HH","II","T","abs","sin","MD5","_hash","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","nBitsTotal","nBitsLeft","nBitsTotalH","floor","nBitsTotalL","H_i","HmacMD5","EvpKDF","iterations","compute","password","salt","derivedKey","derivedKeyWords","block","W","SHA1","HmacSHA1","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","hmac","Cipher","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","process","dataUpdate","finalProcessedData","ivSize","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","cipher","ciphertext","C_mode","StreamCipher","finalProcessedBlocks","mode","BlockCipherMode","iv","Encryptor","Decryptor","_cipher","_iv","CBC","xorBlock","_prevBlock","processBlock","thisBlock","C_pad","pad","Pkcs7","nPaddingBytes","paddingWord","paddingWords","padding","unpad","CipherParams","modeCreator","_mode","cipherParams","formatter","C_format","format","OpenSSLFormatter","OpenSSL","openSSLStr","ciphertextWords","encryptor","cipherCfg","algorithm","_parse","plaintext","C_kdf","kdf","OpenSSLKdf","execute","derivedParams","exchangeLR","_lBlock","_rBlock","exchangeRL","PC1","PC2","BIT_SHIFTS","SBOX_P","0","268435456","536870912","805306368","1073741824","1342177280","1610612736","1879048192","2147483648","2415919104","2684354560","2952790016","3221225472","3489660928","3758096384","4026531840","134217728","402653184","671088640","939524096","1207959552","1476395008","1744830464","2013265920","2281701376","2550136832","2818572288","3087007744","3355443200","3623878656","3892314112","4160749568","1","268435457","536870913","805306369","1073741825","1342177281","1610612737","1879048193","2147483649","2415919105","2684354561","2952790017","3221225473","3489660929","3758096385","4026531841","134217729","402653185","671088641","939524097","1207959553","1476395009","1744830465","2013265921","2281701377","2550136833","2818572289","3087007745","3355443201","3623878657","3892314113","4160749569","16777216","33554432","50331648","67108864","83886080","100663296","117440512","150994944","167772160","184549376","201326592","218103808","234881024","251658240","8388608","25165824","41943040","58720256","75497472","92274688","109051904","125829120","142606336","159383552","176160768","192937984","209715200","226492416","243269632","260046848","285212672","301989888","318767104","335544320","352321536","369098752","385875968","419430400","436207616","452984832","469762048","486539264","503316480","520093696","276824064","293601280","310378496","327155712","343932928","360710144","377487360","394264576","411041792","427819008","444596224","461373440","478150656","494927872","511705088","528482304","1048576","2097152","3145728","4194304","5242880","6291456","7340032","9437184","10485760","11534336","12582912","13631488","14680064","15728640","524288","1572864","2621440","3670016","4718592","5767168","6815744","7864320","8912896","9961472","11010048","12058624","13107200","14155776","15204352","16252928","17825792","18874368","19922944","20971520","22020096","23068672","24117248","26214400","27262976","28311552","29360128","30408704","31457280","32505856","17301504","18350080","19398656","20447232","21495808","22544384","23592960","24641536","25690112","26738688","27787264","28835840","29884416","30932992","31981568","33030144","65536","131072","196608","262144","327680","393216","458752","589824","655360","720896","786432","851968","917504","983040","32768","98304","163840","229376","294912","360448","425984","491520","557056","622592","688128","753664","819200","884736","950272","1015808","1114112","1179648","1245184","1310720","1376256","1441792","1507328","1638400","1703936","1769472","1835008","1900544","1966080","2031616","1081344","1146880","1212416","1277952","1343488","1409024","1474560","1540096","1605632","1671168","1736704","1802240","1867776","1933312","1998848","2064384","4096","8192","12288","16384","20480","24576","28672","36864","40960","45056","49152","53248","57344","61440","2048","6144","10240","14336","18432","22528","26624","30720","34816","38912","43008","47104","51200","55296","59392","63488","69632","73728","77824","81920","86016","90112","94208","102400","106496","110592","114688","118784","122880","126976","67584","71680","75776","79872","83968","88064","92160","96256","100352","104448","108544","112640","116736","120832","124928","129024","256","512","768","1024","1280","1536","1792","2304","2560","2816","3072","3328","3584","3840","128","384","640","896","1152","1408","1664","1920","2176","2432","2688","2944","3200","3456","3712","3968","4352","4608","4864","5120","5376","5632","5888","6400","6656","6912","7168","7424","7680","7936","4224","4480","4736","4992","5248","5504","5760","6016","6272","6528","6784","7040","7296","7552","7808","8064","16","32","48","64","80","96","112","144","160","176","192","208","224","240","8","24","40","56","72","88","104","120","136","152","168","184","200","216","232","248","272","288","304","320","336","352","368","400","416","432","448","464","480","496","264","280","296","312","328","344","360","376","392","408","424","440","456","472","488","504","2","3","4","5","6","7","9","10","11","12","13","14","15","2147483650","2147483651","2147483652","2147483653","2147483654","2147483655","2147483656","2147483657","2147483658","2147483659","2147483660","2147483661","2147483662","2147483663","17","18","19","20","21","22","23","25","26","27","28","29","30","31","2147483664","2147483665","2147483666","2147483667","2147483668","2147483669","2147483670","2147483671","2147483672","2147483673","2147483674","2147483675","2147483676","2147483677","2147483678","2147483679","SBOX_MASK","keyBits","keyBitPos","subKeys","_subKeys","nSubKey","subKey","bitShift","invSubKeys","_invSubKeys","lBlock","rBlock","TripleDES","_des1","_des2","_des3","nextState","X","_X","_C","C_","_b","gx","ga","gb","gh","gl","G","S","Rabbit","K","IV","IV_0","IV_1","i0","i2","i1","i3","generateKeystreamWord","_S","_i","_j","keystreamWord","keySigBytes","keyByteIndex","keyByte","RC4Drop","drop"],"mappings":"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","file":"secure-ls.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"SecureLS\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SecureLS\"] = factory();\n\telse\n\t\troot[\"SecureLS\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"SecureLS\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SecureLS\"] = factory();\n\telse\n\t\troot[\"SecureLS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _utils = __webpack_require__(1);\n\t\n\tvar _utils2 = _interopRequireDefault(_utils);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tvar _constants2 = _interopRequireDefault(_constants);\n\t\n\tvar _encUtf = __webpack_require__(3);\n\t\n\tvar _encUtf2 = _interopRequireDefault(_encUtf);\n\t\n\tvar _Base = __webpack_require__(4);\n\t\n\tvar _Base2 = _interopRequireDefault(_Base);\n\t\n\tvar _lzString = __webpack_require__(5);\n\t\n\tvar _lzString2 = _interopRequireDefault(_lzString);\n\t\n\tvar _aes = __webpack_require__(6);\n\t\n\tvar _aes2 = _interopRequireDefault(_aes);\n\t\n\tvar _tripledes = __webpack_require__(14);\n\t\n\tvar _tripledes2 = _interopRequireDefault(_tripledes);\n\t\n\tvar _rabbit = __webpack_require__(15);\n\t\n\tvar _rabbit2 = _interopRequireDefault(_rabbit);\n\t\n\tvar _rc = __webpack_require__(16);\n\t\n\tvar _rc2 = _interopRequireDefault(_rc);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar SecureLS = function () {\n\t function SecureLS(config) {\n\t _classCallCheck(this, SecureLS);\n\t\n\t config = config || {};\n\t this._name = 'secure-ls';\n\t this.utils = _utils2.default;\n\t this.constants = _constants2.default;\n\t this.Base64 = _Base2.default;\n\t this.LZString = _lzString2.default;\n\t this.AES = _aes2.default;\n\t this.DES = _tripledes2.default;\n\t this.RABBIT = _rabbit2.default;\n\t this.RC4 = _rc2.default;\n\t this.enc = _encUtf2.default;\n\t\n\t this.config = {\n\t isCompression: true,\n\t encodingType: _constants2.default.EncrytionTypes.BASE64,\n\t encryptionSecret: config.encryptionSecret,\n\t encryptionNamespace: config.encryptionNamespace,\n\t storage: config.storage || localStorage\n\t };\n\t this.config.isCompression = typeof config.isCompression !== 'undefined' ? config.isCompression : true;\n\t this.config.encodingType = typeof config.encodingType !== 'undefined' || config.encodingType === '' ? config.encodingType.toLowerCase() : _constants2.default.EncrytionTypes.BASE64;\n\t\n\t this.ls = this.config.storage;\n\t this.init();\n\t\n\t // If a serious encryption is used only one password is allowed for the local storage encryption.\n\t // To make multiple passwords possible a namespace must be set.\n\t // This notifies users that using no namespace may cause issues with multiple passwords.\n\t if (!this._isBase64 && typeof this.config.encryptionNamespace === 'undefined') {\n\t this.utils.warn(this.WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED);\n\t }\n\t // If a serious encryption is wanted a user should pass a password, because the is no default secure password.\n\t // Warn the user if no password is passed\n\t if (!this._isBase64 && (typeof this.config.encryptionSecret === 'undefined' || !this.config.encryptionSecret.length)) {\n\t this.utils.warn(this.WarningEnum.INSECURE_PASSWORD);\n\t }\n\t }\n\t\n\t _createClass(SecureLS, [{\n\t key: 'init',\n\t value: function init() {\n\t var metaData = this.getMetaData();\n\t\n\t this.WarningEnum = this.constants.WarningEnum;\n\t this.WarningTypes = this.constants.WarningTypes;\n\t this.EncrytionTypes = this.constants.EncrytionTypes;\n\t\n\t this._isBase64 = this._isBase64EncryptionType();\n\t this._isAES = this._isAESEncryptionType();\n\t this._isDES = this._isDESEncryptionType();\n\t this._isRabbit = this._isRabbitEncryptionType();\n\t this._isRC4 = this._isRC4EncryptionType();\n\t this._isCompression = this._isDataCompressionEnabled();\n\t\n\t // fill the already present keys to the list of keys being used by secure-ls\n\t this.utils.allKeys = metaData.keys || this.resetAllKeys();\n\t }\n\t }, {\n\t key: '_isBase64EncryptionType',\n\t value: function _isBase64EncryptionType() {\n\t return _Base2.default && (typeof this.config.encodingType === 'undefined' || this.config.encodingType === this.constants.EncrytionTypes.BASE64);\n\t }\n\t }, {\n\t key: '_isAESEncryptionType',\n\t value: function _isAESEncryptionType() {\n\t return _aes2.default && this.config.encodingType === this.constants.EncrytionTypes.AES;\n\t }\n\t }, {\n\t key: '_isDESEncryptionType',\n\t value: function _isDESEncryptionType() {\n\t return _tripledes2.default && this.config.encodingType === this.constants.EncrytionTypes.DES;\n\t }\n\t }, {\n\t key: '_isRabbitEncryptionType',\n\t value: function _isRabbitEncryptionType() {\n\t return _rabbit2.default && this.config.encodingType === this.constants.EncrytionTypes.RABBIT;\n\t }\n\t }, {\n\t key: '_isRC4EncryptionType',\n\t value: function _isRC4EncryptionType() {\n\t return _rc2.default && this.config.encodingType === this.constants.EncrytionTypes.RC4;\n\t }\n\t }, {\n\t key: '_isDataCompressionEnabled',\n\t value: function _isDataCompressionEnabled() {\n\t return this.config.isCompression;\n\t }\n\t }, {\n\t key: 'getEncryptionSecret',\n\t value: function getEncryptionSecret() {\n\t if (this._isAES || this._isDES || this._isRabbit || this._isRC4) {\n\t if (typeof this.config.encryptionSecret === 'undefined') {\n\t if (!this.utils.encryptionSecret) {\n\t this.utils.encryptionSecret = '';\n\t this.setMetaData();\n\t }\n\t } else {\n\t this.utils.encryptionSecret = this.config.encryptionSecret || '';\n\t }\n\t }\n\t }\n\t }, {\n\t key: 'get',\n\t value: function get(key, isAllKeysData) {\n\t var decodedData = void 0,\n\t jsonData = '',\n\t deCompressedData = void 0,\n\t bytes = void 0,\n\t data = void 0;\n\t\n\t if (!this.utils.is(key)) {\n\t this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n\t return jsonData;\n\t }\n\t\n\t data = this.getDataFromLocalStorage(key);\n\t\n\t if (!data) {\n\t return jsonData;\n\t }\n\t\n\t deCompressedData = data; // saves else\n\t if (this._isCompression || isAllKeysData) {\n\t // meta data always compressed\n\t deCompressedData = _lzString2.default.decompressFromUTF16(data);\n\t }\n\t\n\t decodedData = deCompressedData; // saves else\n\t if (this._isBase64) {\n\t decodedData = _Base2.default.decode(deCompressedData);\n\t } else {\n\t this.getEncryptionSecret();\n\t if (this._isAES) {\n\t bytes = _aes2.default.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n\t } else if (this._isDES) {\n\t bytes = _tripledes2.default.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n\t } else if (this._isRabbit) {\n\t bytes = _rabbit2.default.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n\t } else if (this._isRC4) {\n\t bytes = _rc2.default.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\n\t }\n\t\n\t if (bytes) {\n\t decodedData = bytes.toString(_encUtf2.default._Utf8);\n\t }\n\t }\n\t\n\t try {\n\t jsonData = JSON.parse(decodedData);\n\t } catch (e) {\n\t throw new Error('Could not parse JSON');\n\t }\n\t\n\t return jsonData;\n\t }\n\t }, {\n\t key: 'getDataFromLocalStorage',\n\t value: function getDataFromLocalStorage(key) {\n\t return this.ls.getItem(key, true);\n\t }\n\t }, {\n\t key: 'getAllKeys',\n\t value: function getAllKeys() {\n\t return this.getMetaData().keys || [];\n\t }\n\t }, {\n\t key: 'set',\n\t value: function set(key, data) {\n\t if (!this.utils.is(key)) {\n\t this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n\t return;\n\t }\n\t\n\t this.getEncryptionSecret();\n\t\n\t // add key(s) to Array if not already added, only for keys other than meta key\n\t if (!(String(key) === String(this.utils.metaKey))) {\n\t if (!this.utils.isKeyPresent(key)) {\n\t this.utils.addToKeysList(key);\n\t this.setMetaData();\n\t }\n\t }\n\t // Store the data to localStorage\n\t this.setDataToLocalStorage(key, this.processData(data));\n\t }\n\t }, {\n\t key: 'setDataToLocalStorage',\n\t value: function setDataToLocalStorage(key, data) {\n\t this.ls.setItem(key, data);\n\t }\n\t }, {\n\t key: 'remove',\n\t value: function remove(key) {\n\t if (!this.utils.is(key)) {\n\t this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\n\t return;\n\t }\n\t\n\t if (key === this.utils.metaKey && this.getAllKeys().length) {\n\t this.utils.warn(this.WarningEnum.META_KEY_REMOVE);\n\t return;\n\t }\n\t\n\t if (this.utils.isKeyPresent(key)) {\n\t this.utils.removeFromKeysList(key);\n\t this.setMetaData();\n\t }\n\t this.ls.removeItem(key);\n\t }\n\t }, {\n\t key: 'removeAll',\n\t value: function removeAll() {\n\t var keys = void 0,\n\t i = void 0;\n\t\n\t keys = this.getAllKeys();\n\t for (i = 0; i < keys.length; i++) {\n\t this.ls.removeItem(keys[i]);\n\t }\n\t this.ls.removeItem(this.utils.metaKey);\n\t\n\t this.resetAllKeys();\n\t }\n\t }, {\n\t key: 'clear',\n\t value: function clear() {\n\t this.ls.clear();\n\t this.resetAllKeys();\n\t }\n\t }, {\n\t key: 'resetAllKeys',\n\t value: function resetAllKeys() {\n\t this.utils.allKeys = [];\n\t return [];\n\t }\n\t }, {\n\t key: 'processData',\n\t value: function processData(data, isAllKeysData) {\n\t if (data === null || data === undefined || data === '') {\n\t return '';\n\t }\n\t\n\t var jsonData = void 0,\n\t encodedData = void 0,\n\t compressedData = void 0;\n\t\n\t try {\n\t jsonData = JSON.stringify(data);\n\t } catch (e) {\n\t throw new Error('Could not stringify data.');\n\t }\n\t\n\t // Encode Based on encoding type\n\t // If not set, default to Base64 for securing data\n\t encodedData = jsonData;\n\t if (this._isBase64) {\n\t encodedData = _Base2.default.encode(jsonData);\n\t } else {\n\t if (this._isAES) {\n\t encodedData = _aes2.default.encrypt(jsonData, this.utils.encryptionSecret);\n\t } else if (this._isDES) {\n\t encodedData = _tripledes2.default.encrypt(jsonData, this.utils.encryptionSecret);\n\t } else if (this._isRabbit) {\n\t encodedData = _rabbit2.default.encrypt(jsonData, this.utils.encryptionSecret);\n\t } else if (this._isRC4) {\n\t encodedData = _rc2.default.encrypt(jsonData, this.utils.encryptionSecret);\n\t }\n\t\n\t encodedData = encodedData && encodedData.toString();\n\t }\n\t\n\t // Compress data if set to true\n\t compressedData = encodedData;\n\t if (this._isCompression || isAllKeysData) {\n\t compressedData = _lzString2.default.compressToUTF16(encodedData);\n\t }\n\t\n\t return compressedData;\n\t }\n\t }, {\n\t key: 'setMetaData',\n\t value: function setMetaData() {\n\t var dataToStore = this.processData({\n\t keys: this.utils.allKeys\n\t }, true);\n\t\n\t // Store the data to localStorage\n\t this.setDataToLocalStorage(this.getMetaKey(), dataToStore);\n\t }\n\t }, {\n\t key: 'getMetaData',\n\t value: function getMetaData() {\n\t return this.get(this.getMetaKey(), true) || { keys: [] };\n\t }\n\t }, {\n\t key: 'getMetaKey',\n\t value: function getMetaKey() {\n\t return this.utils.metaKey + (this.config.encryptionNamespace ? '__' + this.config.encryptionNamespace : '');\n\t }\n\t }]);\n\t\n\t return SecureLS;\n\t}();\n\t\n\texports.default = SecureLS;\n\t;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tvar _constants2 = _interopRequireDefault(_constants);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar utils = {\n\t metaKey: '_secure__ls__metadata',\n\t encryptionSecret: '',\n\t secretPhrase: 's3cr3t$#@135^&*246',\n\t allKeys: [],\n\t is: function is(key) {\n\t if (key) {\n\t return true;\n\t }\n\t return false;\n\t },\n\t warn: function warn(reason) {\n\t reason = reason ? reason : _constants2.default.WarningEnum.DEFAULT_TEXT;\n\t console.warn(_constants2.default.WarningTypes[reason]);\n\t },\n\t getObjectFromKey: function getObjectFromKey(data, key) {\n\t if (!data || !data.length) {\n\t return {};\n\t }\n\t\n\t var i = void 0,\n\t obj = {};\n\t\n\t for (i = 0; i < data.length; i++) {\n\t if (data[i].k === key) {\n\t obj = data[i];\n\t break;\n\t }\n\t }\n\t\n\t return obj;\n\t },\n\t getAllKeys: function getAllKeys() {\n\t return this.allKeys;\n\t },\n\t isKeyPresent: function isKeyPresent(key) {\n\t var isKeyAlreadyPresent = false;\n\t\n\t for (var i = 0; i < this.allKeys.length; i++) {\n\t if (String(this.allKeys[i]) === String(key)) {\n\t isKeyAlreadyPresent = true; // found\n\t break;\n\t }\n\t }\n\t\n\t return isKeyAlreadyPresent;\n\t },\n\t addToKeysList: function addToKeysList(key) {\n\t this.allKeys.push(key);\n\t },\n\t removeFromKeysList: function removeFromKeysList(key) {\n\t var i = void 0,\n\t index = -1;\n\t\n\t for (i = 0; i < this.allKeys.length; i++) {\n\t if (this.allKeys[i] === key) {\n\t index = i;\n\t break;\n\t }\n\t }\n\t if (index !== -1) {\n\t this.allKeys.splice(index, 1);\n\t }\n\t return index;\n\t }\n\t};\n\t\n\tmodule.exports = utils;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar WarningEnum = {\n\t KEY_NOT_PROVIDED: 'keyNotProvided',\n\t ENCRYPTION_NAMESPACE_NOT_PROVIDED: 'encryptionNameSpaceNotProvided',\n\t INSECURE_PASSWORD: 'insecurePassword',\n\t META_KEY_REMOVE: 'metaKeyRemove',\n\t DEFAULT_TEXT: 'defaultText'\n\t};\n\t\n\tvar WarningTypes = {};\n\t\n\tWarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!';\n\tWarningTypes[WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED] = 'Secure LS: If no encryption namespace is provided, only\\none password per domain and local storage will be usable!';\n\tWarningTypes[WarningEnum.INSECURE_PASSWORD] = 'Secure LS: You are using an insecure password!\\nChoose a strong password to encrypt your data!';\n\tWarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!';\n\tWarningTypes[WarningEnum.META_KEY_REMOVE] = 'Secure LS: Meta key can not be removed\\nunless all keys created by Secure LS are removed!';\n\tWarningTypes[WarningEnum.DEFAULT_TEXT] = 'Unexpected output';\n\t\n\tvar constants = {\n\t WarningEnum: WarningEnum,\n\t WarningTypes: WarningTypes,\n\t EncrytionTypes: {\n\t BASE64: 'base64',\n\t AES: 'aes',\n\t DES: 'des',\n\t RABBIT: 'rabbit',\n\t RC4: 'rc4'\n\t }\n\t};\n\t\n\tmodule.exports = constants;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/*\r\n\t ES6 compatible port of CryptoJS - encoding\r\n\t\r\n\t Source: https://github.com/brix/crypto-js\r\n\t LICENSE: MIT\r\n\t */\n\tvar enc = {};\n\t\n\tenc.Latin1 = {\n\t stringify: function stringify(wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var latin1Chars = [],\n\t i = void 0,\n\t bite = void 0;\n\t\n\t // Convert\n\t for (i = 0; i < sigBytes; i++) {\n\t bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\t\n\t return latin1Chars.join('');\n\t }\n\t};\n\t\n\tenc._Utf8 = {\n\t stringify: function stringify(wordArray) {\n\t try {\n\t return decodeURIComponent(escape(enc.Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t }\n\t};\n\t\n\tmodule.exports = enc;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar Base64 = {\n\t _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t encode: function encode(e) {\n\t var t = '';\n\t var n = void 0,\n\t r = void 0,\n\t i = void 0,\n\t s = void 0,\n\t o = void 0,\n\t u = void 0,\n\t a = void 0;\n\t var f = 0;\n\t\n\t e = Base64._utf8Encode(e);\n\t while (f < e.length) {\n\t n = e.charCodeAt(f++);\n\t r = e.charCodeAt(f++);\n\t i = e.charCodeAt(f++);\n\t s = n >> 2;\n\t o = (n & 3) << 4 | r >> 4;\n\t u = (r & 15) << 2 | i >> 6;\n\t a = i & 63;\n\t if (isNaN(r)) {\n\t u = a = 64;\n\t } else if (isNaN(i)) {\n\t a = 64;\n\t }\n\t t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a);\n\t }\n\t return t;\n\t },\n\t decode: function decode(e) {\n\t var t = '';\n\t var n = void 0,\n\t r = void 0,\n\t i = void 0;\n\t var s = void 0,\n\t o = void 0,\n\t u = void 0,\n\t a = void 0;\n\t var f = 0;\n\t\n\t e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\t while (f < e.length) {\n\t s = this._keyStr.indexOf(e.charAt(f++));\n\t o = this._keyStr.indexOf(e.charAt(f++));\n\t u = this._keyStr.indexOf(e.charAt(f++));\n\t a = this._keyStr.indexOf(e.charAt(f++));\n\t n = s << 2 | o >> 4;\n\t r = (o & 15) << 4 | u >> 2;\n\t i = (u & 3) << 6 | a;\n\t t = t + String.fromCharCode(n);\n\t if (u !== 64) {\n\t t = t + String.fromCharCode(r);\n\t }\n\t if (a !== 64) {\n\t t = t + String.fromCharCode(i);\n\t }\n\t }\n\t t = Base64._utf8Decode(t);\n\t return t;\n\t },\n\t _utf8Encode: function _utf8Encode(e) {\n\t e = e.replace(/\\r\\n/g, '\\n');\n\t var t = '';\n\t\n\t for (var n = 0; n < e.length; n++) {\n\t var r = e.charCodeAt(n);\n\t\n\t if (r < 128) {\n\t t += String.fromCharCode(r);\n\t } else if (r > 127 && r < 2048) {\n\t t += String.fromCharCode(r >> 6 | 192);\n\t t += String.fromCharCode(r & 63 | 128);\n\t } else {\n\t t += String.fromCharCode(r >> 12 | 224);\n\t t += String.fromCharCode(r >> 6 & 63 | 128);\n\t t += String.fromCharCode(r & 63 | 128);\n\t }\n\t }\n\t return t;\n\t },\n\t _utf8Decode: function _utf8Decode(e) {\n\t var t = '';\n\t var n = 0;\n\t var r = void 0,\n\t c2 = void 0,\n\t c3 = void 0;\n\t\n\t r = c2 = 0;\n\t while (n < e.length) {\n\t r = e.charCodeAt(n);\n\t if (r < 128) {\n\t t += String.fromCharCode(r);\n\t n++;\n\t } else if (r > 191 && r < 224) {\n\t c2 = e.charCodeAt(n + 1);\n\t t += String.fromCharCode((r & 31) << 6 | c2 & 63);\n\t n += 2;\n\t } else {\n\t c2 = e.charCodeAt(n + 1);\n\t c3 = e.charCodeAt(n + 2);\n\t t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);\n\t n += 3;\n\t }\n\t }\n\t return t;\n\t }\n\t};\n\t\n\tmodule.exports = Base64;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;// Copyright (c) 2013 Pieroxy \n\t// This work is free. You can redistribute it and/or modify it\n\t// under the terms of the WTFPL, Version 2\n\t// For more information see LICENSE.txt or http://www.wtfpl.net/\n\t//\n\t// For more information, the home page:\n\t// http://pieroxy.net/blog/pages/lz-string/testing.html\n\t//\n\t// LZ-based compression algorithm, version 1.4.4\n\tvar LZString = (function() {\n\t\n\t// private property\n\tvar f = String.fromCharCode;\n\tvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\tvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\n\tvar baseReverseDic = {};\n\t\n\tfunction getBaseValue(alphabet, character) {\n\t if (!baseReverseDic[alphabet]) {\n\t baseReverseDic[alphabet] = {};\n\t for (var i=0 ; i>> 8;\n\t buf[i*2+1] = current_value % 256;\n\t }\n\t return buf;\n\t },\n\t\n\t //decompress from uint8array (UCS-2 big endian format)\n\t decompressFromUint8Array:function (compressed) {\n\t if (compressed===null || compressed===undefined){\n\t return LZString.decompress(compressed);\n\t } else {\n\t var buf=new Array(compressed.length/2); // 2 bytes per character\n\t for (var i=0, TotalLen=buf.length; i> 1;\n\t }\n\t } else {\n\t value = 1;\n\t for (i=0 ; i> 1;\n\t }\n\t }\n\t context_enlargeIn--;\n\t if (context_enlargeIn == 0) {\n\t context_enlargeIn = Math.pow(2, context_numBits);\n\t context_numBits++;\n\t }\n\t delete context_dictionaryToCreate[context_w];\n\t } else {\n\t value = context_dictionary[context_w];\n\t for (i=0 ; i> 1;\n\t }\n\t\n\t\n\t }\n\t context_enlargeIn--;\n\t if (context_enlargeIn == 0) {\n\t context_enlargeIn = Math.pow(2, context_numBits);\n\t context_numBits++;\n\t }\n\t // Add wc to the dictionary.\n\t context_dictionary[context_wc] = context_dictSize++;\n\t context_w = String(context_c);\n\t }\n\t }\n\t\n\t // Output the code for w.\n\t if (context_w !== \"\") {\n\t if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n\t if (context_w.charCodeAt(0)<256) {\n\t for (i=0 ; i> 1;\n\t }\n\t } else {\n\t value = 1;\n\t for (i=0 ; i> 1;\n\t }\n\t }\n\t context_enlargeIn--;\n\t if (context_enlargeIn == 0) {\n\t context_enlargeIn = Math.pow(2, context_numBits);\n\t context_numBits++;\n\t }\n\t delete context_dictionaryToCreate[context_w];\n\t } else {\n\t value = context_dictionary[context_w];\n\t for (i=0 ; i> 1;\n\t }\n\t\n\t\n\t }\n\t context_enlargeIn--;\n\t if (context_enlargeIn == 0) {\n\t context_enlargeIn = Math.pow(2, context_numBits);\n\t context_numBits++;\n\t }\n\t }\n\t\n\t // Mark the end of the stream\n\t value = 2;\n\t for (i=0 ; i> 1;\n\t }\n\t\n\t // Flush the last char\n\t while (true) {\n\t context_data_val = (context_data_val << 1);\n\t if (context_data_position == bitsPerChar-1) {\n\t context_data.push(getCharFromInt(context_data_val));\n\t break;\n\t }\n\t else context_data_position++;\n\t }\n\t return context_data.join('');\n\t },\n\t\n\t decompress: function (compressed) {\n\t if (compressed == null) return \"\";\n\t if (compressed == \"\") return null;\n\t return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n\t },\n\t\n\t _decompress: function (length, resetValue, getNextValue) {\n\t var dictionary = [],\n\t next,\n\t enlargeIn = 4,\n\t dictSize = 4,\n\t numBits = 3,\n\t entry = \"\",\n\t result = [],\n\t i,\n\t w,\n\t bits, resb, maxpower, power,\n\t c,\n\t data = {val:getNextValue(0), position:resetValue, index:1};\n\t\n\t for (i = 0; i < 3; i += 1) {\n\t dictionary[i] = i;\n\t }\n\t\n\t bits = 0;\n\t maxpower = Math.pow(2,2);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t\n\t switch (next = bits) {\n\t case 0:\n\t bits = 0;\n\t maxpower = Math.pow(2,8);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t c = f(bits);\n\t break;\n\t case 1:\n\t bits = 0;\n\t maxpower = Math.pow(2,16);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t c = f(bits);\n\t break;\n\t case 2:\n\t return \"\";\n\t }\n\t dictionary[3] = c;\n\t w = c;\n\t result.push(c);\n\t while (true) {\n\t if (data.index > length) {\n\t return \"\";\n\t }\n\t\n\t bits = 0;\n\t maxpower = Math.pow(2,numBits);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t\n\t switch (c = bits) {\n\t case 0:\n\t bits = 0;\n\t maxpower = Math.pow(2,8);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t\n\t dictionary[dictSize++] = f(bits);\n\t c = dictSize-1;\n\t enlargeIn--;\n\t break;\n\t case 1:\n\t bits = 0;\n\t maxpower = Math.pow(2,16);\n\t power=1;\n\t while (power!=maxpower) {\n\t resb = data.val & data.position;\n\t data.position >>= 1;\n\t if (data.position == 0) {\n\t data.position = resetValue;\n\t data.val = getNextValue(data.index++);\n\t }\n\t bits |= (resb>0 ? 1 : 0) * power;\n\t power <<= 1;\n\t }\n\t dictionary[dictSize++] = f(bits);\n\t c = dictSize-1;\n\t enlargeIn--;\n\t break;\n\t case 2:\n\t return result.join('');\n\t }\n\t\n\t if (enlargeIn == 0) {\n\t enlargeIn = Math.pow(2, numBits);\n\t numBits++;\n\t }\n\t\n\t if (dictionary[c]) {\n\t entry = dictionary[c];\n\t } else {\n\t if (c === dictSize) {\n\t entry = w + w.charAt(0);\n\t } else {\n\t return null;\n\t }\n\t }\n\t result.push(entry);\n\t\n\t // Add w+entry[0] to the dictionary.\n\t dictionary[dictSize++] = w + entry.charAt(0);\n\t enlargeIn--;\n\t\n\t w = entry;\n\t\n\t if (enlargeIn == 0) {\n\t enlargeIn = Math.pow(2, numBits);\n\t numBits++;\n\t }\n\t\n\t }\n\t }\n\t};\n\t return LZString;\n\t})();\n\t\n\tif (true) {\n\t !(__WEBPACK_AMD_DEFINE_RESULT__ = function () { return LZString; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if( typeof module !== 'undefined' && module != null ) {\n\t module.exports = LZString\n\t}\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10), __webpack_require__(13));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var BlockCipher = C_lib.BlockCipher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Lookup tables\n\t\t var SBOX = [];\n\t\t var INV_SBOX = [];\n\t\t var SUB_MIX_0 = [];\n\t\t var SUB_MIX_1 = [];\n\t\t var SUB_MIX_2 = [];\n\t\t var SUB_MIX_3 = [];\n\t\t var INV_SUB_MIX_0 = [];\n\t\t var INV_SUB_MIX_1 = [];\n\t\t var INV_SUB_MIX_2 = [];\n\t\t var INV_SUB_MIX_3 = [];\n\t\n\t\t // Compute lookup tables\n\t\t (function () {\n\t\t // Compute double table\n\t\t var d = [];\n\t\t for (var i = 0; i < 256; i++) {\n\t\t if (i < 128) {\n\t\t d[i] = i << 1;\n\t\t } else {\n\t\t d[i] = (i << 1) ^ 0x11b;\n\t\t }\n\t\t }\n\t\n\t\t // Walk GF(2^8)\n\t\t var x = 0;\n\t\t var xi = 0;\n\t\t for (var i = 0; i < 256; i++) {\n\t\t // Compute sbox\n\t\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t\t SBOX[x] = sx;\n\t\t INV_SBOX[sx] = x;\n\t\n\t\t // Compute multiplication\n\t\t var x2 = d[x];\n\t\t var x4 = d[x2];\n\t\t var x8 = d[x4];\n\t\n\t\t // Compute sub bytes, mix columns tables\n\t\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t\t SUB_MIX_3[x] = t;\n\t\n\t\t // Compute inv sub bytes, inv mix columns tables\n\t\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t\t INV_SUB_MIX_3[sx] = t;\n\t\n\t\t // Compute next counter\n\t\t if (!x) {\n\t\t x = xi = 1;\n\t\t } else {\n\t\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t\t xi ^= d[d[xi]];\n\t\t }\n\t\t }\n\t\t }());\n\t\n\t\t // Precomputed Rcon lookup\n\t\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\t\n\t\t /**\n\t\t * AES block cipher algorithm.\n\t\t */\n\t\t var AES = C_algo.AES = BlockCipher.extend({\n\t\t _doReset: function () {\n\t\t // Skip reset of nRounds has been set before and key did not change\n\t\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t\t return;\n\t\t }\n\t\n\t\t // Shortcuts\n\t\t var key = this._keyPriorReset = this._key;\n\t\t var keyWords = key.words;\n\t\t var keySize = key.sigBytes / 4;\n\t\n\t\t // Compute number of rounds\n\t\t var nRounds = this._nRounds = keySize + 6;\n\t\n\t\t // Compute number of key schedule rows\n\t\t var ksRows = (nRounds + 1) * 4;\n\t\n\t\t // Compute key schedule\n\t\t var keySchedule = this._keySchedule = [];\n\t\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t\t if (ksRow < keySize) {\n\t\t keySchedule[ksRow] = keyWords[ksRow];\n\t\t } else {\n\t\t var t = keySchedule[ksRow - 1];\n\t\n\t\t if (!(ksRow % keySize)) {\n\t\t // Rot word\n\t\t t = (t << 8) | (t >>> 24);\n\t\n\t\t // Sub word\n\t\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t\n\t\t // Mix Rcon\n\t\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t\t // Sub word\n\t\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t\t }\n\t\n\t\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t\t }\n\t\t }\n\t\n\t\t // Compute inv key schedule\n\t\t var invKeySchedule = this._invKeySchedule = [];\n\t\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t\t var ksRow = ksRows - invKsRow;\n\t\n\t\t if (invKsRow % 4) {\n\t\t var t = keySchedule[ksRow];\n\t\t } else {\n\t\t var t = keySchedule[ksRow - 4];\n\t\t }\n\t\n\t\t if (invKsRow < 4 || ksRow <= 4) {\n\t\t invKeySchedule[invKsRow] = t;\n\t\t } else {\n\t\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t\t }\n\t\t }\n\t\t },\n\t\n\t\t encryptBlock: function (M, offset) {\n\t\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t\t },\n\t\n\t\t decryptBlock: function (M, offset) {\n\t\t // Swap 2nd and 4th rows\n\t\t var t = M[offset + 1];\n\t\t M[offset + 1] = M[offset + 3];\n\t\t M[offset + 3] = t;\n\t\n\t\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\t\n\t\t // Inv swap 2nd and 4th rows\n\t\t var t = M[offset + 1];\n\t\t M[offset + 1] = M[offset + 3];\n\t\t M[offset + 3] = t;\n\t\t },\n\t\n\t\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t\t // Shortcut\n\t\t var nRounds = this._nRounds;\n\t\n\t\t // Get input, add round key\n\t\t var s0 = M[offset] ^ keySchedule[0];\n\t\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t\t var s3 = M[offset + 3] ^ keySchedule[3];\n\t\n\t\t // Key schedule row counter\n\t\t var ksRow = 4;\n\t\n\t\t // Rounds\n\t\t for (var round = 1; round < nRounds; round++) {\n\t\t // Shift rows, sub bytes, mix columns, add round key\n\t\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\t\n\t\t // Update state\n\t\t s0 = t0;\n\t\t s1 = t1;\n\t\t s2 = t2;\n\t\t s3 = t3;\n\t\t }\n\t\n\t\t // Shift rows, sub bytes, add round key\n\t\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\t\n\t\t // Set output\n\t\t M[offset] = t0;\n\t\t M[offset + 1] = t1;\n\t\t M[offset + 2] = t2;\n\t\t M[offset + 3] = t3;\n\t\t },\n\t\n\t\t keySize: 256/32\n\t\t });\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.AES = BlockCipher._createHelper(AES);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.AES;\n\t\n\t}));\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory();\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\troot.CryptoJS = factory();\n\t\t}\n\t}(this, function () {\n\t\n\t\t/**\n\t\t * CryptoJS core components.\n\t\t */\n\t\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t\t /*\n\t\t * Local polyfil of Object.create\n\t\t */\n\t\t var create = Object.create || (function () {\n\t\t function F() {};\n\t\n\t\t return function (obj) {\n\t\t var subtype;\n\t\n\t\t F.prototype = obj;\n\t\n\t\t subtype = new F();\n\t\n\t\t F.prototype = null;\n\t\n\t\t return subtype;\n\t\t };\n\t\t }())\n\t\n\t\t /**\n\t\t * CryptoJS namespace.\n\t\t */\n\t\t var C = {};\n\t\n\t\t /**\n\t\t * Library namespace.\n\t\t */\n\t\t var C_lib = C.lib = {};\n\t\n\t\t /**\n\t\t * Base object for prototypal inheritance.\n\t\t */\n\t\t var Base = C_lib.Base = (function () {\n\t\n\t\n\t\t return {\n\t\t /**\n\t\t * Creates a new object that inherits from this object.\n\t\t *\n\t\t * @param {Object} overrides Properties to copy into the new object.\n\t\t *\n\t\t * @return {Object} The new object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var MyType = CryptoJS.lib.Base.extend({\n\t\t * field: 'value',\n\t\t *\n\t\t * method: function () {\n\t\t * }\n\t\t * });\n\t\t */\n\t\t extend: function (overrides) {\n\t\t // Spawn\n\t\t var subtype = create(this);\n\t\n\t\t // Augment\n\t\t if (overrides) {\n\t\t subtype.mixIn(overrides);\n\t\t }\n\t\n\t\t // Create default initializer\n\t\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t\t subtype.init = function () {\n\t\t subtype.$super.init.apply(this, arguments);\n\t\t };\n\t\t }\n\t\n\t\t // Initializer's prototype is the subtype object\n\t\t subtype.init.prototype = subtype;\n\t\n\t\t // Reference supertype\n\t\t subtype.$super = this;\n\t\n\t\t return subtype;\n\t\t },\n\t\n\t\t /**\n\t\t * Extends this object and runs the init method.\n\t\t * Arguments to create() will be passed to init().\n\t\t *\n\t\t * @return {Object} The new object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var instance = MyType.create();\n\t\t */\n\t\t create: function () {\n\t\t var instance = this.extend();\n\t\t instance.init.apply(instance, arguments);\n\t\n\t\t return instance;\n\t\t },\n\t\n\t\t /**\n\t\t * Initializes a newly created object.\n\t\t * Override this method to add some logic when your objects are created.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var MyType = CryptoJS.lib.Base.extend({\n\t\t * init: function () {\n\t\t * // ...\n\t\t * }\n\t\t * });\n\t\t */\n\t\t init: function () {\n\t\t },\n\t\n\t\t /**\n\t\t * Copies properties into this object.\n\t\t *\n\t\t * @param {Object} properties The properties to mix in.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * MyType.mixIn({\n\t\t * field: 'value'\n\t\t * });\n\t\t */\n\t\t mixIn: function (properties) {\n\t\t for (var propertyName in properties) {\n\t\t if (properties.hasOwnProperty(propertyName)) {\n\t\t this[propertyName] = properties[propertyName];\n\t\t }\n\t\t }\n\t\n\t\t // IE won't copy toString using the loop above\n\t\t if (properties.hasOwnProperty('toString')) {\n\t\t this.toString = properties.toString;\n\t\t }\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a copy of this object.\n\t\t *\n\t\t * @return {Object} The clone.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var clone = instance.clone();\n\t\t */\n\t\t clone: function () {\n\t\t return this.init.prototype.extend(this);\n\t\t }\n\t\t };\n\t\t }());\n\t\n\t\t /**\n\t\t * An array of 32-bit words.\n\t\t *\n\t\t * @property {Array} words The array of 32-bit words.\n\t\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t\t */\n\t\t var WordArray = C_lib.WordArray = Base.extend({\n\t\t /**\n\t\t * Initializes a newly created word array.\n\t\t *\n\t\t * @param {Array} words (Optional) An array of 32-bit words.\n\t\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t\t */\n\t\t init: function (words, sigBytes) {\n\t\t words = this.words = words || [];\n\t\n\t\t if (sigBytes != undefined) {\n\t\t this.sigBytes = sigBytes;\n\t\t } else {\n\t\t this.sigBytes = words.length * 4;\n\t\t }\n\t\t },\n\t\n\t\t /**\n\t\t * Converts this word array to a string.\n\t\t *\n\t\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t\t *\n\t\t * @return {string} The stringified word array.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var string = wordArray + '';\n\t\t * var string = wordArray.toString();\n\t\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t\t */\n\t\t toString: function (encoder) {\n\t\t return (encoder || Hex).stringify(this);\n\t\t },\n\t\n\t\t /**\n\t\t * Concatenates a word array to this word array.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array to append.\n\t\t *\n\t\t * @return {WordArray} This word array.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * wordArray1.concat(wordArray2);\n\t\t */\n\t\t concat: function (wordArray) {\n\t\t // Shortcuts\n\t\t var thisWords = this.words;\n\t\t var thatWords = wordArray.words;\n\t\t var thisSigBytes = this.sigBytes;\n\t\t var thatSigBytes = wordArray.sigBytes;\n\t\n\t\t // Clamp excess bits\n\t\t this.clamp();\n\t\n\t\t // Concat\n\t\t if (thisSigBytes % 4) {\n\t\t // Copy one byte at a time\n\t\t for (var i = 0; i < thatSigBytes; i++) {\n\t\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t\t }\n\t\t } else {\n\t\t // Copy one word at a time\n\t\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t\t }\n\t\t }\n\t\t this.sigBytes += thatSigBytes;\n\t\n\t\t // Chainable\n\t\t return this;\n\t\t },\n\t\n\t\t /**\n\t\t * Removes insignificant bits.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * wordArray.clamp();\n\t\t */\n\t\t clamp: function () {\n\t\t // Shortcuts\n\t\t var words = this.words;\n\t\t var sigBytes = this.sigBytes;\n\t\n\t\t // Clamp\n\t\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t\t words.length = Math.ceil(sigBytes / 4);\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a copy of this word array.\n\t\t *\n\t\t * @return {WordArray} The clone.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var clone = wordArray.clone();\n\t\t */\n\t\t clone: function () {\n\t\t var clone = Base.clone.call(this);\n\t\t clone.words = this.words.slice(0);\n\t\n\t\t return clone;\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a word array filled with random bytes.\n\t\t *\n\t\t * @param {number} nBytes The number of random bytes to generate.\n\t\t *\n\t\t * @return {WordArray} The random word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t\t */\n\t\t random: function (nBytes) {\n\t\t var words = [];\n\t\n\t\t var r = (function (m_w) {\n\t\t var m_w = m_w;\n\t\t var m_z = 0x3ade68b1;\n\t\t var mask = 0xffffffff;\n\t\n\t\t return function () {\n\t\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t\t var result = ((m_z << 0x10) + m_w) & mask;\n\t\t result /= 0x100000000;\n\t\t result += 0.5;\n\t\t return result * (Math.random() > .5 ? 1 : -1);\n\t\t }\n\t\t });\n\t\n\t\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t\t var _r = r((rcache || Math.random()) * 0x100000000);\n\t\n\t\t rcache = _r() * 0x3ade67b7;\n\t\t words.push((_r() * 0x100000000) | 0);\n\t\t }\n\t\n\t\t return new WordArray.init(words, nBytes);\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Encoder namespace.\n\t\t */\n\t\t var C_enc = C.enc = {};\n\t\n\t\t /**\n\t\t * Hex encoding strategy.\n\t\t */\n\t\t var Hex = C_enc.Hex = {\n\t\t /**\n\t\t * Converts a word array to a hex string.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array.\n\t\t *\n\t\t * @return {string} The hex string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t\t */\n\t\t stringify: function (wordArray) {\n\t\t // Shortcuts\n\t\t var words = wordArray.words;\n\t\t var sigBytes = wordArray.sigBytes;\n\t\n\t\t // Convert\n\t\t var hexChars = [];\n\t\t for (var i = 0; i < sigBytes; i++) {\n\t\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t hexChars.push((bite >>> 4).toString(16));\n\t\t hexChars.push((bite & 0x0f).toString(16));\n\t\t }\n\t\n\t\t return hexChars.join('');\n\t\t },\n\t\n\t\t /**\n\t\t * Converts a hex string to a word array.\n\t\t *\n\t\t * @param {string} hexStr The hex string.\n\t\t *\n\t\t * @return {WordArray} The word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t\t */\n\t\t parse: function (hexStr) {\n\t\t // Shortcut\n\t\t var hexStrLength = hexStr.length;\n\t\n\t\t // Convert\n\t\t var words = [];\n\t\t for (var i = 0; i < hexStrLength; i += 2) {\n\t\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t\t }\n\t\n\t\t return new WordArray.init(words, hexStrLength / 2);\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * Latin1 encoding strategy.\n\t\t */\n\t\t var Latin1 = C_enc.Latin1 = {\n\t\t /**\n\t\t * Converts a word array to a Latin1 string.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array.\n\t\t *\n\t\t * @return {string} The Latin1 string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t\t */\n\t\t stringify: function (wordArray) {\n\t\t // Shortcuts\n\t\t var words = wordArray.words;\n\t\t var sigBytes = wordArray.sigBytes;\n\t\n\t\t // Convert\n\t\t var latin1Chars = [];\n\t\t for (var i = 0; i < sigBytes; i++) {\n\t\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t latin1Chars.push(String.fromCharCode(bite));\n\t\t }\n\t\n\t\t return latin1Chars.join('');\n\t\t },\n\t\n\t\t /**\n\t\t * Converts a Latin1 string to a word array.\n\t\t *\n\t\t * @param {string} latin1Str The Latin1 string.\n\t\t *\n\t\t * @return {WordArray} The word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t\t */\n\t\t parse: function (latin1Str) {\n\t\t // Shortcut\n\t\t var latin1StrLength = latin1Str.length;\n\t\n\t\t // Convert\n\t\t var words = [];\n\t\t for (var i = 0; i < latin1StrLength; i++) {\n\t\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t\t }\n\t\n\t\t return new WordArray.init(words, latin1StrLength);\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * UTF-8 encoding strategy.\n\t\t */\n\t\t var Utf8 = C_enc.Utf8 = {\n\t\t /**\n\t\t * Converts a word array to a UTF-8 string.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array.\n\t\t *\n\t\t * @return {string} The UTF-8 string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t\t */\n\t\t stringify: function (wordArray) {\n\t\t try {\n\t\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t\t } catch (e) {\n\t\t throw new Error('Malformed UTF-8 data');\n\t\t }\n\t\t },\n\t\n\t\t /**\n\t\t * Converts a UTF-8 string to a word array.\n\t\t *\n\t\t * @param {string} utf8Str The UTF-8 string.\n\t\t *\n\t\t * @return {WordArray} The word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t\t */\n\t\t parse: function (utf8Str) {\n\t\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * Abstract buffered block algorithm template.\n\t\t *\n\t\t * The property blockSize must be implemented in a concrete subtype.\n\t\t *\n\t\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t\t */\n\t\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t\t /**\n\t\t * Resets this block algorithm's data buffer to its initial state.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * bufferedBlockAlgorithm.reset();\n\t\t */\n\t\t reset: function () {\n\t\t // Initial values\n\t\t this._data = new WordArray.init();\n\t\t this._nDataBytes = 0;\n\t\t },\n\t\n\t\t /**\n\t\t * Adds new data to this block algorithm's buffer.\n\t\t *\n\t\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * bufferedBlockAlgorithm._append('data');\n\t\t * bufferedBlockAlgorithm._append(wordArray);\n\t\t */\n\t\t _append: function (data) {\n\t\t // Convert string to WordArray, else assume WordArray already\n\t\t if (typeof data == 'string') {\n\t\t data = Utf8.parse(data);\n\t\t }\n\t\n\t\t // Append\n\t\t this._data.concat(data);\n\t\t this._nDataBytes += data.sigBytes;\n\t\t },\n\t\n\t\t /**\n\t\t * Processes available data blocks.\n\t\t *\n\t\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t\t *\n\t\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t\t *\n\t\t * @return {WordArray} The processed data.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var processedData = bufferedBlockAlgorithm._process();\n\t\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t\t */\n\t\t _process: function (doFlush) {\n\t\t // Shortcuts\n\t\t var data = this._data;\n\t\t var dataWords = data.words;\n\t\t var dataSigBytes = data.sigBytes;\n\t\t var blockSize = this.blockSize;\n\t\t var blockSizeBytes = blockSize * 4;\n\t\n\t\t // Count blocks ready\n\t\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t\t if (doFlush) {\n\t\t // Round up to include partial blocks\n\t\t nBlocksReady = Math.ceil(nBlocksReady);\n\t\t } else {\n\t\t // Round down to include only full blocks,\n\t\t // less the number of blocks that must remain in the buffer\n\t\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t\t }\n\t\n\t\t // Count words ready\n\t\t var nWordsReady = nBlocksReady * blockSize;\n\t\n\t\t // Count bytes ready\n\t\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\t\n\t\t // Process blocks\n\t\t if (nWordsReady) {\n\t\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t\t // Perform concrete-algorithm logic\n\t\t this._doProcessBlock(dataWords, offset);\n\t\t }\n\t\n\t\t // Remove processed words\n\t\t var processedWords = dataWords.splice(0, nWordsReady);\n\t\t data.sigBytes -= nBytesReady;\n\t\t }\n\t\n\t\t // Return processed words\n\t\t return new WordArray.init(processedWords, nBytesReady);\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a copy of this object.\n\t\t *\n\t\t * @return {Object} The clone.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var clone = bufferedBlockAlgorithm.clone();\n\t\t */\n\t\t clone: function () {\n\t\t var clone = Base.clone.call(this);\n\t\t clone._data = this._data.clone();\n\t\n\t\t return clone;\n\t\t },\n\t\n\t\t _minBufferSize: 0\n\t\t });\n\t\n\t\t /**\n\t\t * Abstract hasher template.\n\t\t *\n\t\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t\t */\n\t\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t */\n\t\t cfg: Base.extend(),\n\t\n\t\t /**\n\t\t * Initializes a newly created hasher.\n\t\t *\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hasher = CryptoJS.algo.SHA256.create();\n\t\t */\n\t\t init: function (cfg) {\n\t\t // Apply config defaults\n\t\t this.cfg = this.cfg.extend(cfg);\n\t\n\t\t // Set initial values\n\t\t this.reset();\n\t\t },\n\t\n\t\t /**\n\t\t * Resets this hasher to its initial state.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * hasher.reset();\n\t\t */\n\t\t reset: function () {\n\t\t // Reset data buffer\n\t\t BufferedBlockAlgorithm.reset.call(this);\n\t\n\t\t // Perform concrete-hasher logic\n\t\t this._doReset();\n\t\t },\n\t\n\t\t /**\n\t\t * Updates this hasher with a message.\n\t\t *\n\t\t * @param {WordArray|string} messageUpdate The message to append.\n\t\t *\n\t\t * @return {Hasher} This hasher.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * hasher.update('message');\n\t\t * hasher.update(wordArray);\n\t\t */\n\t\t update: function (messageUpdate) {\n\t\t // Append\n\t\t this._append(messageUpdate);\n\t\n\t\t // Update the hash\n\t\t this._process();\n\t\n\t\t // Chainable\n\t\t return this;\n\t\t },\n\t\n\t\t /**\n\t\t * Finalizes the hash computation.\n\t\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t\t *\n\t\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t\t *\n\t\t * @return {WordArray} The hash.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hash = hasher.finalize();\n\t\t * var hash = hasher.finalize('message');\n\t\t * var hash = hasher.finalize(wordArray);\n\t\t */\n\t\t finalize: function (messageUpdate) {\n\t\t // Final message update\n\t\t if (messageUpdate) {\n\t\t this._append(messageUpdate);\n\t\t }\n\t\n\t\t // Perform concrete-hasher logic\n\t\t var hash = this._doFinalize();\n\t\n\t\t return hash;\n\t\t },\n\t\n\t\t blockSize: 512/32,\n\t\n\t\t /**\n\t\t * Creates a shortcut function to a hasher's object interface.\n\t\t *\n\t\t * @param {Hasher} hasher The hasher to create a helper for.\n\t\t *\n\t\t * @return {Function} The shortcut function.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t\t */\n\t\t _createHelper: function (hasher) {\n\t\t return function (message, cfg) {\n\t\t return new hasher.init(cfg).finalize(message);\n\t\t };\n\t\t },\n\t\n\t\t /**\n\t\t * Creates a shortcut function to the HMAC's object interface.\n\t\t *\n\t\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t\t *\n\t\t * @return {Function} The shortcut function.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t\t */\n\t\t _createHmacHelper: function (hasher) {\n\t\t return function (message, key) {\n\t\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t\t };\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Algorithm namespace.\n\t\t */\n\t\t var C_algo = C.algo = {};\n\t\n\t\t return C;\n\t\t}(Math));\n\t\n\t\n\t\treturn CryptoJS;\n\t\n\t}));\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var C_enc = C.enc;\n\t\n\t\t /**\n\t\t * Base64 encoding strategy.\n\t\t */\n\t\t var Base64 = C_enc.Base64 = {\n\t\t /**\n\t\t * Converts a word array to a Base64 string.\n\t\t *\n\t\t * @param {WordArray} wordArray The word array.\n\t\t *\n\t\t * @return {string} The Base64 string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t\t */\n\t\t stringify: function (wordArray) {\n\t\t // Shortcuts\n\t\t var words = wordArray.words;\n\t\t var sigBytes = wordArray.sigBytes;\n\t\t var map = this._map;\n\t\n\t\t // Clamp excess bits\n\t\t wordArray.clamp();\n\t\n\t\t // Convert\n\t\t var base64Chars = [];\n\t\t for (var i = 0; i < sigBytes; i += 3) {\n\t\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\t\n\t\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\t\n\t\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t\t }\n\t\t }\n\t\n\t\t // Add padding\n\t\t var paddingChar = map.charAt(64);\n\t\t if (paddingChar) {\n\t\t while (base64Chars.length % 4) {\n\t\t base64Chars.push(paddingChar);\n\t\t }\n\t\t }\n\t\n\t\t return base64Chars.join('');\n\t\t },\n\t\n\t\t /**\n\t\t * Converts a Base64 string to a word array.\n\t\t *\n\t\t * @param {string} base64Str The Base64 string.\n\t\t *\n\t\t * @return {WordArray} The word array.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t\t */\n\t\t parse: function (base64Str) {\n\t\t // Shortcuts\n\t\t var base64StrLength = base64Str.length;\n\t\t var map = this._map;\n\t\t var reverseMap = this._reverseMap;\n\t\n\t\t if (!reverseMap) {\n\t\t reverseMap = this._reverseMap = [];\n\t\t for (var j = 0; j < map.length; j++) {\n\t\t reverseMap[map.charCodeAt(j)] = j;\n\t\t }\n\t\t }\n\t\n\t\t // Ignore padding\n\t\t var paddingChar = map.charAt(64);\n\t\t if (paddingChar) {\n\t\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t\t if (paddingIndex !== -1) {\n\t\t base64StrLength = paddingIndex;\n\t\t }\n\t\t }\n\t\n\t\t // Convert\n\t\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\t\n\t\t },\n\t\n\t\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t\t };\n\t\n\t\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t\t var words = [];\n\t\t var nBytes = 0;\n\t\t for (var i = 0; i < base64StrLength; i++) {\n\t\t if (i % 4) {\n\t\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t\t nBytes++;\n\t\t }\n\t\t }\n\t\t return WordArray.create(words, nBytes);\n\t\t }\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.enc.Base64;\n\t\n\t}));\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function (Math) {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var Hasher = C_lib.Hasher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Constants table\n\t\t var T = [];\n\t\n\t\t // Compute constants\n\t\t (function () {\n\t\t for (var i = 0; i < 64; i++) {\n\t\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t\t }\n\t\t }());\n\t\n\t\t /**\n\t\t * MD5 hash algorithm.\n\t\t */\n\t\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t\t _doReset: function () {\n\t\t this._hash = new WordArray.init([\n\t\t 0x67452301, 0xefcdab89,\n\t\t 0x98badcfe, 0x10325476\n\t\t ]);\n\t\t },\n\t\n\t\t _doProcessBlock: function (M, offset) {\n\t\t // Swap endian\n\t\t for (var i = 0; i < 16; i++) {\n\t\t // Shortcuts\n\t\t var offset_i = offset + i;\n\t\t var M_offset_i = M[offset_i];\n\t\n\t\t M[offset_i] = (\n\t\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t\t );\n\t\t }\n\t\n\t\t // Shortcuts\n\t\t var H = this._hash.words;\n\t\n\t\t var M_offset_0 = M[offset + 0];\n\t\t var M_offset_1 = M[offset + 1];\n\t\t var M_offset_2 = M[offset + 2];\n\t\t var M_offset_3 = M[offset + 3];\n\t\t var M_offset_4 = M[offset + 4];\n\t\t var M_offset_5 = M[offset + 5];\n\t\t var M_offset_6 = M[offset + 6];\n\t\t var M_offset_7 = M[offset + 7];\n\t\t var M_offset_8 = M[offset + 8];\n\t\t var M_offset_9 = M[offset + 9];\n\t\t var M_offset_10 = M[offset + 10];\n\t\t var M_offset_11 = M[offset + 11];\n\t\t var M_offset_12 = M[offset + 12];\n\t\t var M_offset_13 = M[offset + 13];\n\t\t var M_offset_14 = M[offset + 14];\n\t\t var M_offset_15 = M[offset + 15];\n\t\n\t\t // Working varialbes\n\t\t var a = H[0];\n\t\t var b = H[1];\n\t\t var c = H[2];\n\t\t var d = H[3];\n\t\n\t\t // Computation\n\t\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\t\n\t\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\t\n\t\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\t\n\t\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\t\n\t\t // Intermediate hash value\n\t\t H[0] = (H[0] + a) | 0;\n\t\t H[1] = (H[1] + b) | 0;\n\t\t H[2] = (H[2] + c) | 0;\n\t\t H[3] = (H[3] + d) | 0;\n\t\t },\n\t\n\t\t _doFinalize: function () {\n\t\t // Shortcuts\n\t\t var data = this._data;\n\t\t var dataWords = data.words;\n\t\n\t\t var nBitsTotal = this._nDataBytes * 8;\n\t\t var nBitsLeft = data.sigBytes * 8;\n\t\n\t\t // Add padding\n\t\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t\n\t\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t\t var nBitsTotalL = nBitsTotal;\n\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t\t );\n\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t\t );\n\t\n\t\t data.sigBytes = (dataWords.length + 1) * 4;\n\t\n\t\t // Hash final blocks\n\t\t this._process();\n\t\n\t\t // Shortcuts\n\t\t var hash = this._hash;\n\t\t var H = hash.words;\n\t\n\t\t // Swap endian\n\t\t for (var i = 0; i < 4; i++) {\n\t\t // Shortcut\n\t\t var H_i = H[i];\n\t\n\t\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t\t }\n\t\n\t\t // Return final computed hash\n\t\t return hash;\n\t\t },\n\t\n\t\t clone: function () {\n\t\t var clone = Hasher.clone.call(this);\n\t\t clone._hash = this._hash.clone();\n\t\n\t\t return clone;\n\t\t }\n\t\t });\n\t\n\t\t function FF(a, b, c, d, x, s, t) {\n\t\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t\t return ((n << s) | (n >>> (32 - s))) + b;\n\t\t }\n\t\n\t\t function GG(a, b, c, d, x, s, t) {\n\t\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t\t return ((n << s) | (n >>> (32 - s))) + b;\n\t\t }\n\t\n\t\t function HH(a, b, c, d, x, s, t) {\n\t\t var n = a + (b ^ c ^ d) + x + t;\n\t\t return ((n << s) | (n >>> (32 - s))) + b;\n\t\t }\n\t\n\t\t function II(a, b, c, d, x, s, t) {\n\t\t var n = a + (c ^ (b | ~d)) + x + t;\n\t\t return ((n << s) | (n >>> (32 - s))) + b;\n\t\t }\n\t\n\t\t /**\n\t\t * Shortcut function to the hasher's object interface.\n\t\t *\n\t\t * @param {WordArray|string} message The message to hash.\n\t\t *\n\t\t * @return {WordArray} The hash.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hash = CryptoJS.MD5('message');\n\t\t * var hash = CryptoJS.MD5(wordArray);\n\t\t */\n\t\t C.MD5 = Hasher._createHelper(MD5);\n\t\n\t\t /**\n\t\t * Shortcut function to the HMAC's object interface.\n\t\t *\n\t\t * @param {WordArray|string} message The message to hash.\n\t\t * @param {WordArray|string} key The secret key.\n\t\t *\n\t\t * @return {WordArray} The HMAC.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t\t */\n\t\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t\t}(Math));\n\t\n\t\n\t\treturn CryptoJS.MD5;\n\t\n\t}));\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7), __webpack_require__(11), __webpack_require__(12));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var Base = C_lib.Base;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var C_algo = C.algo;\n\t\t var MD5 = C_algo.MD5;\n\t\n\t\t /**\n\t\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t\t */\n\t\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t\t */\n\t\t cfg: Base.extend({\n\t\t keySize: 128/32,\n\t\t hasher: MD5,\n\t\t iterations: 1\n\t\t }),\n\t\n\t\t /**\n\t\t * Initializes a newly created key derivation function.\n\t\t *\n\t\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t\t */\n\t\t init: function (cfg) {\n\t\t this.cfg = this.cfg.extend(cfg);\n\t\t },\n\t\n\t\t /**\n\t\t * Derives a key from a password.\n\t\t *\n\t\t * @param {WordArray|string} password The password.\n\t\t * @param {WordArray|string} salt A salt.\n\t\t *\n\t\t * @return {WordArray} The derived key.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var key = kdf.compute(password, salt);\n\t\t */\n\t\t compute: function (password, salt) {\n\t\t // Shortcut\n\t\t var cfg = this.cfg;\n\t\n\t\t // Init hasher\n\t\t var hasher = cfg.hasher.create();\n\t\n\t\t // Initial values\n\t\t var derivedKey = WordArray.create();\n\t\n\t\t // Shortcuts\n\t\t var derivedKeyWords = derivedKey.words;\n\t\t var keySize = cfg.keySize;\n\t\t var iterations = cfg.iterations;\n\t\n\t\t // Generate key\n\t\t while (derivedKeyWords.length < keySize) {\n\t\t if (block) {\n\t\t hasher.update(block);\n\t\t }\n\t\t var block = hasher.update(password).finalize(salt);\n\t\t hasher.reset();\n\t\n\t\t // Iterations\n\t\t for (var i = 1; i < iterations; i++) {\n\t\t block = hasher.finalize(block);\n\t\t hasher.reset();\n\t\t }\n\t\n\t\t derivedKey.concat(block);\n\t\t }\n\t\t derivedKey.sigBytes = keySize * 4;\n\t\n\t\t return derivedKey;\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Derives a key from a password.\n\t\t *\n\t\t * @param {WordArray|string} password The password.\n\t\t * @param {WordArray|string} salt A salt.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t\t *\n\t\t * @return {WordArray} The derived key.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var key = CryptoJS.EvpKDF(password, salt);\n\t\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t\t */\n\t\t C.EvpKDF = function (password, salt, cfg) {\n\t\t return EvpKDF.create(cfg).compute(password, salt);\n\t\t };\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.EvpKDF;\n\t\n\t}));\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var Hasher = C_lib.Hasher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Reusable object\n\t\t var W = [];\n\t\n\t\t /**\n\t\t * SHA-1 hash algorithm.\n\t\t */\n\t\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t\t _doReset: function () {\n\t\t this._hash = new WordArray.init([\n\t\t 0x67452301, 0xefcdab89,\n\t\t 0x98badcfe, 0x10325476,\n\t\t 0xc3d2e1f0\n\t\t ]);\n\t\t },\n\t\n\t\t _doProcessBlock: function (M, offset) {\n\t\t // Shortcut\n\t\t var H = this._hash.words;\n\t\n\t\t // Working variables\n\t\t var a = H[0];\n\t\t var b = H[1];\n\t\t var c = H[2];\n\t\t var d = H[3];\n\t\t var e = H[4];\n\t\n\t\t // Computation\n\t\t for (var i = 0; i < 80; i++) {\n\t\t if (i < 16) {\n\t\t W[i] = M[offset + i] | 0;\n\t\t } else {\n\t\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t\t W[i] = (n << 1) | (n >>> 31);\n\t\t }\n\t\n\t\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t\t if (i < 20) {\n\t\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t\t } else if (i < 40) {\n\t\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t\t } else if (i < 60) {\n\t\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t\t } else /* if (i < 80) */ {\n\t\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t\t }\n\t\n\t\t e = d;\n\t\t d = c;\n\t\t c = (b << 30) | (b >>> 2);\n\t\t b = a;\n\t\t a = t;\n\t\t }\n\t\n\t\t // Intermediate hash value\n\t\t H[0] = (H[0] + a) | 0;\n\t\t H[1] = (H[1] + b) | 0;\n\t\t H[2] = (H[2] + c) | 0;\n\t\t H[3] = (H[3] + d) | 0;\n\t\t H[4] = (H[4] + e) | 0;\n\t\t },\n\t\n\t\t _doFinalize: function () {\n\t\t // Shortcuts\n\t\t var data = this._data;\n\t\t var dataWords = data.words;\n\t\n\t\t var nBitsTotal = this._nDataBytes * 8;\n\t\t var nBitsLeft = data.sigBytes * 8;\n\t\n\t\t // Add padding\n\t\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t\t data.sigBytes = dataWords.length * 4;\n\t\n\t\t // Hash final blocks\n\t\t this._process();\n\t\n\t\t // Return final computed hash\n\t\t return this._hash;\n\t\t },\n\t\n\t\t clone: function () {\n\t\t var clone = Hasher.clone.call(this);\n\t\t clone._hash = this._hash.clone();\n\t\n\t\t return clone;\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Shortcut function to the hasher's object interface.\n\t\t *\n\t\t * @param {WordArray|string} message The message to hash.\n\t\t *\n\t\t * @return {WordArray} The hash.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hash = CryptoJS.SHA1('message');\n\t\t * var hash = CryptoJS.SHA1(wordArray);\n\t\t */\n\t\t C.SHA1 = Hasher._createHelper(SHA1);\n\t\n\t\t /**\n\t\t * Shortcut function to the HMAC's object interface.\n\t\t *\n\t\t * @param {WordArray|string} message The message to hash.\n\t\t * @param {WordArray|string} key The secret key.\n\t\t *\n\t\t * @return {WordArray} The HMAC.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t\t */\n\t\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.SHA1;\n\t\n\t}));\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var Base = C_lib.Base;\n\t\t var C_enc = C.enc;\n\t\t var Utf8 = C_enc.Utf8;\n\t\t var C_algo = C.algo;\n\t\n\t\t /**\n\t\t * HMAC algorithm.\n\t\t */\n\t\t var HMAC = C_algo.HMAC = Base.extend({\n\t\t /**\n\t\t * Initializes a newly created HMAC.\n\t\t *\n\t\t * @param {Hasher} hasher The hash algorithm to use.\n\t\t * @param {WordArray|string} key The secret key.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t\t */\n\t\t init: function (hasher, key) {\n\t\t // Init hasher\n\t\t hasher = this._hasher = new hasher.init();\n\t\n\t\t // Convert string to WordArray, else assume WordArray already\n\t\t if (typeof key == 'string') {\n\t\t key = Utf8.parse(key);\n\t\t }\n\t\n\t\t // Shortcuts\n\t\t var hasherBlockSize = hasher.blockSize;\n\t\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\t\n\t\t // Allow arbitrary length keys\n\t\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t\t key = hasher.finalize(key);\n\t\t }\n\t\n\t\t // Clamp excess bits\n\t\t key.clamp();\n\t\n\t\t // Clone key for inner and outer pads\n\t\t var oKey = this._oKey = key.clone();\n\t\t var iKey = this._iKey = key.clone();\n\t\n\t\t // Shortcuts\n\t\t var oKeyWords = oKey.words;\n\t\t var iKeyWords = iKey.words;\n\t\n\t\t // XOR keys with pad constants\n\t\t for (var i = 0; i < hasherBlockSize; i++) {\n\t\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t\t iKeyWords[i] ^= 0x36363636;\n\t\t }\n\t\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\t\n\t\t // Set initial values\n\t\t this.reset();\n\t\t },\n\t\n\t\t /**\n\t\t * Resets this HMAC to its initial state.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * hmacHasher.reset();\n\t\t */\n\t\t reset: function () {\n\t\t // Shortcut\n\t\t var hasher = this._hasher;\n\t\n\t\t // Reset\n\t\t hasher.reset();\n\t\t hasher.update(this._iKey);\n\t\t },\n\t\n\t\t /**\n\t\t * Updates this HMAC with a message.\n\t\t *\n\t\t * @param {WordArray|string} messageUpdate The message to append.\n\t\t *\n\t\t * @return {HMAC} This HMAC instance.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * hmacHasher.update('message');\n\t\t * hmacHasher.update(wordArray);\n\t\t */\n\t\t update: function (messageUpdate) {\n\t\t this._hasher.update(messageUpdate);\n\t\n\t\t // Chainable\n\t\t return this;\n\t\t },\n\t\n\t\t /**\n\t\t * Finalizes the HMAC computation.\n\t\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t\t *\n\t\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t\t *\n\t\t * @return {WordArray} The HMAC.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var hmac = hmacHasher.finalize();\n\t\t * var hmac = hmacHasher.finalize('message');\n\t\t * var hmac = hmacHasher.finalize(wordArray);\n\t\t */\n\t\t finalize: function (messageUpdate) {\n\t\t // Shortcut\n\t\t var hasher = this._hasher;\n\t\n\t\t // Compute HMAC\n\t\t var innerHash = hasher.finalize(messageUpdate);\n\t\t hasher.reset();\n\t\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\t\n\t\t return hmac;\n\t\t }\n\t\t });\n\t\t}());\n\t\n\t\n\t}));\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t/**\n\t\t * Cipher core components.\n\t\t */\n\t\tCryptoJS.lib.Cipher || (function (undefined) {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var Base = C_lib.Base;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t\t var C_enc = C.enc;\n\t\t var Utf8 = C_enc.Utf8;\n\t\t var Base64 = C_enc.Base64;\n\t\t var C_algo = C.algo;\n\t\t var EvpKDF = C_algo.EvpKDF;\n\t\n\t\t /**\n\t\t * Abstract base cipher template.\n\t\t *\n\t\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t\t */\n\t\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {WordArray} iv The IV to use for this operation.\n\t\t */\n\t\t cfg: Base.extend(),\n\t\n\t\t /**\n\t\t * Creates this cipher in encryption mode.\n\t\t *\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {Cipher} A cipher instance.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t\t */\n\t\t createEncryptor: function (key, cfg) {\n\t\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t\t },\n\t\n\t\t /**\n\t\t * Creates this cipher in decryption mode.\n\t\t *\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {Cipher} A cipher instance.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t\t */\n\t\t createDecryptor: function (key, cfg) {\n\t\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t\t },\n\t\n\t\t /**\n\t\t * Initializes a newly created cipher.\n\t\t *\n\t\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t\t */\n\t\t init: function (xformMode, key, cfg) {\n\t\t // Apply config defaults\n\t\t this.cfg = this.cfg.extend(cfg);\n\t\n\t\t // Store transform mode and key\n\t\t this._xformMode = xformMode;\n\t\t this._key = key;\n\t\n\t\t // Set initial values\n\t\t this.reset();\n\t\t },\n\t\n\t\t /**\n\t\t * Resets this cipher to its initial state.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * cipher.reset();\n\t\t */\n\t\t reset: function () {\n\t\t // Reset data buffer\n\t\t BufferedBlockAlgorithm.reset.call(this);\n\t\n\t\t // Perform concrete-cipher logic\n\t\t this._doReset();\n\t\t },\n\t\n\t\t /**\n\t\t * Adds data to be encrypted or decrypted.\n\t\t *\n\t\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t\t *\n\t\t * @return {WordArray} The data after processing.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var encrypted = cipher.process('data');\n\t\t * var encrypted = cipher.process(wordArray);\n\t\t */\n\t\t process: function (dataUpdate) {\n\t\t // Append\n\t\t this._append(dataUpdate);\n\t\n\t\t // Process available blocks\n\t\t return this._process();\n\t\t },\n\t\n\t\t /**\n\t\t * Finalizes the encryption or decryption process.\n\t\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t\t *\n\t\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t\t *\n\t\t * @return {WordArray} The data after final processing.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var encrypted = cipher.finalize();\n\t\t * var encrypted = cipher.finalize('data');\n\t\t * var encrypted = cipher.finalize(wordArray);\n\t\t */\n\t\t finalize: function (dataUpdate) {\n\t\t // Final data update\n\t\t if (dataUpdate) {\n\t\t this._append(dataUpdate);\n\t\t }\n\t\n\t\t // Perform concrete-cipher logic\n\t\t var finalProcessedData = this._doFinalize();\n\t\n\t\t return finalProcessedData;\n\t\t },\n\t\n\t\t keySize: 128/32,\n\t\n\t\t ivSize: 128/32,\n\t\n\t\t _ENC_XFORM_MODE: 1,\n\t\n\t\t _DEC_XFORM_MODE: 2,\n\t\n\t\t /**\n\t\t * Creates shortcut functions to a cipher's object interface.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher to create a helper for.\n\t\t *\n\t\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t\t */\n\t\t _createHelper: (function () {\n\t\t function selectCipherStrategy(key) {\n\t\t if (typeof key == 'string') {\n\t\t return PasswordBasedCipher;\n\t\t } else {\n\t\t return SerializableCipher;\n\t\t }\n\t\t }\n\t\n\t\t return function (cipher) {\n\t\t return {\n\t\t encrypt: function (message, key, cfg) {\n\t\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t\t },\n\t\n\t\t decrypt: function (ciphertext, key, cfg) {\n\t\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t\t }\n\t\t };\n\t\t };\n\t\t }())\n\t\t });\n\t\n\t\t /**\n\t\t * Abstract base stream cipher template.\n\t\t *\n\t\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t\t */\n\t\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t\t _doFinalize: function () {\n\t\t // Process partial blocks\n\t\t var finalProcessedBlocks = this._process(!!'flush');\n\t\n\t\t return finalProcessedBlocks;\n\t\t },\n\t\n\t\t blockSize: 1\n\t\t });\n\t\n\t\t /**\n\t\t * Mode namespace.\n\t\t */\n\t\t var C_mode = C.mode = {};\n\t\n\t\t /**\n\t\t * Abstract base block cipher mode template.\n\t\t */\n\t\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t\t /**\n\t\t * Creates this mode for encryption.\n\t\t *\n\t\t * @param {Cipher} cipher A block cipher instance.\n\t\t * @param {Array} iv The IV words.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t\t */\n\t\t createEncryptor: function (cipher, iv) {\n\t\t return this.Encryptor.create(cipher, iv);\n\t\t },\n\t\n\t\t /**\n\t\t * Creates this mode for decryption.\n\t\t *\n\t\t * @param {Cipher} cipher A block cipher instance.\n\t\t * @param {Array} iv The IV words.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t\t */\n\t\t createDecryptor: function (cipher, iv) {\n\t\t return this.Decryptor.create(cipher, iv);\n\t\t },\n\t\n\t\t /**\n\t\t * Initializes a newly created mode.\n\t\t *\n\t\t * @param {Cipher} cipher A block cipher instance.\n\t\t * @param {Array} iv The IV words.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t\t */\n\t\t init: function (cipher, iv) {\n\t\t this._cipher = cipher;\n\t\t this._iv = iv;\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Cipher Block Chaining mode.\n\t\t */\n\t\t var CBC = C_mode.CBC = (function () {\n\t\t /**\n\t\t * Abstract base CBC mode.\n\t\t */\n\t\t var CBC = BlockCipherMode.extend();\n\t\n\t\t /**\n\t\t * CBC encryptor.\n\t\t */\n\t\t CBC.Encryptor = CBC.extend({\n\t\t /**\n\t\t * Processes the data block at offset.\n\t\t *\n\t\t * @param {Array} words The data words to operate on.\n\t\t * @param {number} offset The offset where the block starts.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * mode.processBlock(data.words, offset);\n\t\t */\n\t\t processBlock: function (words, offset) {\n\t\t // Shortcuts\n\t\t var cipher = this._cipher;\n\t\t var blockSize = cipher.blockSize;\n\t\n\t\t // XOR and encrypt\n\t\t xorBlock.call(this, words, offset, blockSize);\n\t\t cipher.encryptBlock(words, offset);\n\t\n\t\t // Remember this block to use with next block\n\t\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * CBC decryptor.\n\t\t */\n\t\t CBC.Decryptor = CBC.extend({\n\t\t /**\n\t\t * Processes the data block at offset.\n\t\t *\n\t\t * @param {Array} words The data words to operate on.\n\t\t * @param {number} offset The offset where the block starts.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * mode.processBlock(data.words, offset);\n\t\t */\n\t\t processBlock: function (words, offset) {\n\t\t // Shortcuts\n\t\t var cipher = this._cipher;\n\t\t var blockSize = cipher.blockSize;\n\t\n\t\t // Remember this block to use with next block\n\t\t var thisBlock = words.slice(offset, offset + blockSize);\n\t\n\t\t // Decrypt and XOR\n\t\t cipher.decryptBlock(words, offset);\n\t\t xorBlock.call(this, words, offset, blockSize);\n\t\n\t\t // This block becomes the previous block\n\t\t this._prevBlock = thisBlock;\n\t\t }\n\t\t });\n\t\n\t\t function xorBlock(words, offset, blockSize) {\n\t\t // Shortcut\n\t\t var iv = this._iv;\n\t\n\t\t // Choose mixing block\n\t\t if (iv) {\n\t\t var block = iv;\n\t\n\t\t // Remove IV for subsequent blocks\n\t\t this._iv = undefined;\n\t\t } else {\n\t\t var block = this._prevBlock;\n\t\t }\n\t\n\t\t // XOR blocks\n\t\t for (var i = 0; i < blockSize; i++) {\n\t\t words[offset + i] ^= block[i];\n\t\t }\n\t\t }\n\t\n\t\t return CBC;\n\t\t }());\n\t\n\t\t /**\n\t\t * Padding namespace.\n\t\t */\n\t\t var C_pad = C.pad = {};\n\t\n\t\t /**\n\t\t * PKCS #5/7 padding strategy.\n\t\t */\n\t\t var Pkcs7 = C_pad.Pkcs7 = {\n\t\t /**\n\t\t * Pads data using the algorithm defined in PKCS #5/7.\n\t\t *\n\t\t * @param {WordArray} data The data to pad.\n\t\t * @param {number} blockSize The multiple that the data should be padded to.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t\t */\n\t\t pad: function (data, blockSize) {\n\t\t // Shortcut\n\t\t var blockSizeBytes = blockSize * 4;\n\t\n\t\t // Count padding bytes\n\t\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\t\n\t\t // Create padding word\n\t\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\t\n\t\t // Create padding\n\t\t var paddingWords = [];\n\t\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t\t paddingWords.push(paddingWord);\n\t\t }\n\t\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\t\n\t\t // Add padding\n\t\t data.concat(padding);\n\t\t },\n\t\n\t\t /**\n\t\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t\t *\n\t\t * @param {WordArray} data The data to unpad.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t\t */\n\t\t unpad: function (data) {\n\t\t // Get number of padding bytes from last byte\n\t\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\t\n\t\t // Remove padding\n\t\t data.sigBytes -= nPaddingBytes;\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * Abstract base block cipher template.\n\t\t *\n\t\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t\t */\n\t\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {Mode} mode The block mode to use. Default: CBC\n\t\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t\t */\n\t\t cfg: Cipher.cfg.extend({\n\t\t mode: CBC,\n\t\t padding: Pkcs7\n\t\t }),\n\t\n\t\t reset: function () {\n\t\t // Reset cipher\n\t\t Cipher.reset.call(this);\n\t\n\t\t // Shortcuts\n\t\t var cfg = this.cfg;\n\t\t var iv = cfg.iv;\n\t\t var mode = cfg.mode;\n\t\n\t\t // Reset block mode\n\t\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t\t var modeCreator = mode.createEncryptor;\n\t\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t\t var modeCreator = mode.createDecryptor;\n\t\n\t\t // Keep at least one block in the buffer for unpadding\n\t\t this._minBufferSize = 1;\n\t\t }\n\t\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t\t },\n\t\n\t\t _doProcessBlock: function (words, offset) {\n\t\t this._mode.processBlock(words, offset);\n\t\t },\n\t\n\t\t _doFinalize: function () {\n\t\t // Shortcut\n\t\t var padding = this.cfg.padding;\n\t\n\t\t // Finalize\n\t\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t\t // Pad data\n\t\t padding.pad(this._data, this.blockSize);\n\t\n\t\t // Process final blocks\n\t\t var finalProcessedBlocks = this._process(!!'flush');\n\t\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t\t // Process final blocks\n\t\t var finalProcessedBlocks = this._process(!!'flush');\n\t\n\t\t // Unpad data\n\t\t padding.unpad(finalProcessedBlocks);\n\t\t }\n\t\n\t\t return finalProcessedBlocks;\n\t\t },\n\t\n\t\t blockSize: 128/32\n\t\t });\n\t\n\t\t /**\n\t\t * A collection of cipher parameters.\n\t\t *\n\t\t * @property {WordArray} ciphertext The raw ciphertext.\n\t\t * @property {WordArray} key The key to this ciphertext.\n\t\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t\t * @property {WordArray} salt The salt used with a key derivation function.\n\t\t * @property {Cipher} algorithm The cipher algorithm.\n\t\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t\t * @property {number} blockSize The block size of the cipher.\n\t\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t\t */\n\t\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t\t /**\n\t\t * Initializes a newly created cipher params object.\n\t\t *\n\t\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t\t * ciphertext: ciphertextWordArray,\n\t\t * key: keyWordArray,\n\t\t * iv: ivWordArray,\n\t\t * salt: saltWordArray,\n\t\t * algorithm: CryptoJS.algo.AES,\n\t\t * mode: CryptoJS.mode.CBC,\n\t\t * padding: CryptoJS.pad.PKCS7,\n\t\t * blockSize: 4,\n\t\t * formatter: CryptoJS.format.OpenSSL\n\t\t * });\n\t\t */\n\t\t init: function (cipherParams) {\n\t\t this.mixIn(cipherParams);\n\t\t },\n\t\n\t\t /**\n\t\t * Converts this cipher params object to a string.\n\t\t *\n\t\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t\t *\n\t\t * @return {string} The stringified cipher params.\n\t\t *\n\t\t * @throws Error If neither the formatter nor the default formatter is set.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var string = cipherParams + '';\n\t\t * var string = cipherParams.toString();\n\t\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t\t */\n\t\t toString: function (formatter) {\n\t\t return (formatter || this.formatter).stringify(this);\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Format namespace.\n\t\t */\n\t\t var C_format = C.format = {};\n\t\n\t\t /**\n\t\t * OpenSSL formatting strategy.\n\t\t */\n\t\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t\t /**\n\t\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t\t *\n\t\t * @param {CipherParams} cipherParams The cipher params object.\n\t\t *\n\t\t * @return {string} The OpenSSL-compatible string.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t\t */\n\t\t stringify: function (cipherParams) {\n\t\t // Shortcuts\n\t\t var ciphertext = cipherParams.ciphertext;\n\t\t var salt = cipherParams.salt;\n\t\n\t\t // Format\n\t\t if (salt) {\n\t\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t\t } else {\n\t\t var wordArray = ciphertext;\n\t\t }\n\t\n\t\t return wordArray.toString(Base64);\n\t\t },\n\t\n\t\t /**\n\t\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t\t *\n\t\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t\t *\n\t\t * @return {CipherParams} The cipher params object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t\t */\n\t\t parse: function (openSSLStr) {\n\t\t // Parse base64\n\t\t var ciphertext = Base64.parse(openSSLStr);\n\t\n\t\t // Shortcut\n\t\t var ciphertextWords = ciphertext.words;\n\t\n\t\t // Test for salt\n\t\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t\t // Extract salt\n\t\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\t\n\t\t // Remove salt from ciphertext\n\t\t ciphertextWords.splice(0, 4);\n\t\t ciphertext.sigBytes -= 16;\n\t\t }\n\t\n\t\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t\t */\n\t\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t\t */\n\t\t cfg: Base.extend({\n\t\t format: OpenSSLFormatter\n\t\t }),\n\t\n\t\t /**\n\t\t * Encrypts a message.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher algorithm to use.\n\t\t * @param {WordArray|string} message The message to encrypt.\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {CipherParams} A cipher params object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t\t */\n\t\t encrypt: function (cipher, message, key, cfg) {\n\t\t // Apply config defaults\n\t\t cfg = this.cfg.extend(cfg);\n\t\n\t\t // Encrypt\n\t\t var encryptor = cipher.createEncryptor(key, cfg);\n\t\t var ciphertext = encryptor.finalize(message);\n\t\n\t\t // Shortcut\n\t\t var cipherCfg = encryptor.cfg;\n\t\n\t\t // Create and return serializable cipher params\n\t\t return CipherParams.create({\n\t\t ciphertext: ciphertext,\n\t\t key: key,\n\t\t iv: cipherCfg.iv,\n\t\t algorithm: cipher,\n\t\t mode: cipherCfg.mode,\n\t\t padding: cipherCfg.padding,\n\t\t blockSize: cipher.blockSize,\n\t\t formatter: cfg.format\n\t\t });\n\t\t },\n\t\n\t\t /**\n\t\t * Decrypts serialized ciphertext.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher algorithm to use.\n\t\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t\t * @param {WordArray} key The key.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {WordArray} The plaintext.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t\t */\n\t\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t\t // Apply config defaults\n\t\t cfg = this.cfg.extend(cfg);\n\t\n\t\t // Convert string to CipherParams\n\t\t ciphertext = this._parse(ciphertext, cfg.format);\n\t\n\t\t // Decrypt\n\t\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\t\n\t\t return plaintext;\n\t\t },\n\t\n\t\t /**\n\t\t * Converts serialized ciphertext to CipherParams,\n\t\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t\t *\n\t\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t\t *\n\t\t * @return {CipherParams} The unserialized ciphertext.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t\t */\n\t\t _parse: function (ciphertext, format) {\n\t\t if (typeof ciphertext == 'string') {\n\t\t return format.parse(ciphertext, this);\n\t\t } else {\n\t\t return ciphertext;\n\t\t }\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Key derivation function namespace.\n\t\t */\n\t\t var C_kdf = C.kdf = {};\n\t\n\t\t /**\n\t\t * OpenSSL key derivation function.\n\t\t */\n\t\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t\t /**\n\t\t * Derives a key and IV from a password.\n\t\t *\n\t\t * @param {string} password The password to derive from.\n\t\t * @param {number} keySize The size in words of the key to generate.\n\t\t * @param {number} ivSize The size in words of the IV to generate.\n\t\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t\t *\n\t\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t\t */\n\t\t execute: function (password, keySize, ivSize, salt) {\n\t\t // Generate random salt\n\t\t if (!salt) {\n\t\t salt = WordArray.random(64/8);\n\t\t }\n\t\n\t\t // Derive key and IV\n\t\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t\n\t\t // Separate key and IV\n\t\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t\t key.sigBytes = keySize * 4;\n\t\n\t\t // Return params\n\t\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t\t }\n\t\t };\n\t\n\t\t /**\n\t\t * A serializable cipher wrapper that derives the key from a password,\n\t\t * and returns ciphertext as a serializable cipher params object.\n\t\t */\n\t\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t\t */\n\t\t cfg: SerializableCipher.cfg.extend({\n\t\t kdf: OpenSSLKdf\n\t\t }),\n\t\n\t\t /**\n\t\t * Encrypts a message using a password.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher algorithm to use.\n\t\t * @param {WordArray|string} message The message to encrypt.\n\t\t * @param {string} password The password.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {CipherParams} A cipher params object.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t\t */\n\t\t encrypt: function (cipher, message, password, cfg) {\n\t\t // Apply config defaults\n\t\t cfg = this.cfg.extend(cfg);\n\t\n\t\t // Derive key and other params\n\t\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\t\n\t\t // Add IV to config\n\t\t cfg.iv = derivedParams.iv;\n\t\n\t\t // Encrypt\n\t\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\t\n\t\t // Mix in derived params\n\t\t ciphertext.mixIn(derivedParams);\n\t\n\t\t return ciphertext;\n\t\t },\n\t\n\t\t /**\n\t\t * Decrypts serialized ciphertext using a password.\n\t\t *\n\t\t * @param {Cipher} cipher The cipher algorithm to use.\n\t\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t\t * @param {string} password The password.\n\t\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t\t *\n\t\t * @return {WordArray} The plaintext.\n\t\t *\n\t\t * @static\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t\t */\n\t\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t\t // Apply config defaults\n\t\t cfg = this.cfg.extend(cfg);\n\t\n\t\t // Convert string to CipherParams\n\t\t ciphertext = this._parse(ciphertext, cfg.format);\n\t\n\t\t // Derive key and other params\n\t\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\t\n\t\t // Add IV to config\n\t\t cfg.iv = derivedParams.iv;\n\t\n\t\t // Decrypt\n\t\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\t\n\t\t return plaintext;\n\t\t }\n\t\t });\n\t\t}());\n\t\n\t\n\t}));\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10), __webpack_require__(13));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var WordArray = C_lib.WordArray;\n\t\t var BlockCipher = C_lib.BlockCipher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Permuted Choice 1 constants\n\t\t var PC1 = [\n\t\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t\t 29, 21, 13, 5, 28, 20, 12, 4\n\t\t ];\n\t\n\t\t // Permuted Choice 2 constants\n\t\t var PC2 = [\n\t\t 14, 17, 11, 24, 1, 5,\n\t\t 3, 28, 15, 6, 21, 10,\n\t\t 23, 19, 12, 4, 26, 8,\n\t\t 16, 7, 27, 20, 13, 2,\n\t\t 41, 52, 31, 37, 47, 55,\n\t\t 30, 40, 51, 45, 33, 48,\n\t\t 44, 49, 39, 56, 34, 53,\n\t\t 46, 42, 50, 36, 29, 32\n\t\t ];\n\t\n\t\t // Cumulative bit shift constants\n\t\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\t\n\t\t // SBOXes and round permutation constants\n\t\t var SBOX_P = [\n\t\t {\n\t\t 0x0: 0x808200,\n\t\t 0x10000000: 0x8000,\n\t\t 0x20000000: 0x808002,\n\t\t 0x30000000: 0x2,\n\t\t 0x40000000: 0x200,\n\t\t 0x50000000: 0x808202,\n\t\t 0x60000000: 0x800202,\n\t\t 0x70000000: 0x800000,\n\t\t 0x80000000: 0x202,\n\t\t 0x90000000: 0x800200,\n\t\t 0xa0000000: 0x8200,\n\t\t 0xb0000000: 0x808000,\n\t\t 0xc0000000: 0x8002,\n\t\t 0xd0000000: 0x800002,\n\t\t 0xe0000000: 0x0,\n\t\t 0xf0000000: 0x8202,\n\t\t 0x8000000: 0x0,\n\t\t 0x18000000: 0x808202,\n\t\t 0x28000000: 0x8202,\n\t\t 0x38000000: 0x8000,\n\t\t 0x48000000: 0x808200,\n\t\t 0x58000000: 0x200,\n\t\t 0x68000000: 0x808002,\n\t\t 0x78000000: 0x2,\n\t\t 0x88000000: 0x800200,\n\t\t 0x98000000: 0x8200,\n\t\t 0xa8000000: 0x808000,\n\t\t 0xb8000000: 0x800202,\n\t\t 0xc8000000: 0x800002,\n\t\t 0xd8000000: 0x8002,\n\t\t 0xe8000000: 0x202,\n\t\t 0xf8000000: 0x800000,\n\t\t 0x1: 0x8000,\n\t\t 0x10000001: 0x2,\n\t\t 0x20000001: 0x808200,\n\t\t 0x30000001: 0x800000,\n\t\t 0x40000001: 0x808002,\n\t\t 0x50000001: 0x8200,\n\t\t 0x60000001: 0x200,\n\t\t 0x70000001: 0x800202,\n\t\t 0x80000001: 0x808202,\n\t\t 0x90000001: 0x808000,\n\t\t 0xa0000001: 0x800002,\n\t\t 0xb0000001: 0x8202,\n\t\t 0xc0000001: 0x202,\n\t\t 0xd0000001: 0x800200,\n\t\t 0xe0000001: 0x8002,\n\t\t 0xf0000001: 0x0,\n\t\t 0x8000001: 0x808202,\n\t\t 0x18000001: 0x808000,\n\t\t 0x28000001: 0x800000,\n\t\t 0x38000001: 0x200,\n\t\t 0x48000001: 0x8000,\n\t\t 0x58000001: 0x800002,\n\t\t 0x68000001: 0x2,\n\t\t 0x78000001: 0x8202,\n\t\t 0x88000001: 0x8002,\n\t\t 0x98000001: 0x800202,\n\t\t 0xa8000001: 0x202,\n\t\t 0xb8000001: 0x808200,\n\t\t 0xc8000001: 0x800200,\n\t\t 0xd8000001: 0x0,\n\t\t 0xe8000001: 0x8200,\n\t\t 0xf8000001: 0x808002\n\t\t },\n\t\t {\n\t\t 0x0: 0x40084010,\n\t\t 0x1000000: 0x4000,\n\t\t 0x2000000: 0x80000,\n\t\t 0x3000000: 0x40080010,\n\t\t 0x4000000: 0x40000010,\n\t\t 0x5000000: 0x40084000,\n\t\t 0x6000000: 0x40004000,\n\t\t 0x7000000: 0x10,\n\t\t 0x8000000: 0x84000,\n\t\t 0x9000000: 0x40004010,\n\t\t 0xa000000: 0x40000000,\n\t\t 0xb000000: 0x84010,\n\t\t 0xc000000: 0x80010,\n\t\t 0xd000000: 0x0,\n\t\t 0xe000000: 0x4010,\n\t\t 0xf000000: 0x40080000,\n\t\t 0x800000: 0x40004000,\n\t\t 0x1800000: 0x84010,\n\t\t 0x2800000: 0x10,\n\t\t 0x3800000: 0x40004010,\n\t\t 0x4800000: 0x40084010,\n\t\t 0x5800000: 0x40000000,\n\t\t 0x6800000: 0x80000,\n\t\t 0x7800000: 0x40080010,\n\t\t 0x8800000: 0x80010,\n\t\t 0x9800000: 0x0,\n\t\t 0xa800000: 0x4000,\n\t\t 0xb800000: 0x40080000,\n\t\t 0xc800000: 0x40000010,\n\t\t 0xd800000: 0x84000,\n\t\t 0xe800000: 0x40084000,\n\t\t 0xf800000: 0x4010,\n\t\t 0x10000000: 0x0,\n\t\t 0x11000000: 0x40080010,\n\t\t 0x12000000: 0x40004010,\n\t\t 0x13000000: 0x40084000,\n\t\t 0x14000000: 0x40080000,\n\t\t 0x15000000: 0x10,\n\t\t 0x16000000: 0x84010,\n\t\t 0x17000000: 0x4000,\n\t\t 0x18000000: 0x4010,\n\t\t 0x19000000: 0x80000,\n\t\t 0x1a000000: 0x80010,\n\t\t 0x1b000000: 0x40000010,\n\t\t 0x1c000000: 0x84000,\n\t\t 0x1d000000: 0x40004000,\n\t\t 0x1e000000: 0x40000000,\n\t\t 0x1f000000: 0x40084010,\n\t\t 0x10800000: 0x84010,\n\t\t 0x11800000: 0x80000,\n\t\t 0x12800000: 0x40080000,\n\t\t 0x13800000: 0x4000,\n\t\t 0x14800000: 0x40004000,\n\t\t 0x15800000: 0x40084010,\n\t\t 0x16800000: 0x10,\n\t\t 0x17800000: 0x40000000,\n\t\t 0x18800000: 0x40084000,\n\t\t 0x19800000: 0x40000010,\n\t\t 0x1a800000: 0x40004010,\n\t\t 0x1b800000: 0x80010,\n\t\t 0x1c800000: 0x0,\n\t\t 0x1d800000: 0x4010,\n\t\t 0x1e800000: 0x40080010,\n\t\t 0x1f800000: 0x84000\n\t\t },\n\t\t {\n\t\t 0x0: 0x104,\n\t\t 0x100000: 0x0,\n\t\t 0x200000: 0x4000100,\n\t\t 0x300000: 0x10104,\n\t\t 0x400000: 0x10004,\n\t\t 0x500000: 0x4000004,\n\t\t 0x600000: 0x4010104,\n\t\t 0x700000: 0x4010000,\n\t\t 0x800000: 0x4000000,\n\t\t 0x900000: 0x4010100,\n\t\t 0xa00000: 0x10100,\n\t\t 0xb00000: 0x4010004,\n\t\t 0xc00000: 0x4000104,\n\t\t 0xd00000: 0x10000,\n\t\t 0xe00000: 0x4,\n\t\t 0xf00000: 0x100,\n\t\t 0x80000: 0x4010100,\n\t\t 0x180000: 0x4010004,\n\t\t 0x280000: 0x0,\n\t\t 0x380000: 0x4000100,\n\t\t 0x480000: 0x4000004,\n\t\t 0x580000: 0x10000,\n\t\t 0x680000: 0x10004,\n\t\t 0x780000: 0x104,\n\t\t 0x880000: 0x4,\n\t\t 0x980000: 0x100,\n\t\t 0xa80000: 0x4010000,\n\t\t 0xb80000: 0x10104,\n\t\t 0xc80000: 0x10100,\n\t\t 0xd80000: 0x4000104,\n\t\t 0xe80000: 0x4010104,\n\t\t 0xf80000: 0x4000000,\n\t\t 0x1000000: 0x4010100,\n\t\t 0x1100000: 0x10004,\n\t\t 0x1200000: 0x10000,\n\t\t 0x1300000: 0x4000100,\n\t\t 0x1400000: 0x100,\n\t\t 0x1500000: 0x4010104,\n\t\t 0x1600000: 0x4000004,\n\t\t 0x1700000: 0x0,\n\t\t 0x1800000: 0x4000104,\n\t\t 0x1900000: 0x4000000,\n\t\t 0x1a00000: 0x4,\n\t\t 0x1b00000: 0x10100,\n\t\t 0x1c00000: 0x4010000,\n\t\t 0x1d00000: 0x104,\n\t\t 0x1e00000: 0x10104,\n\t\t 0x1f00000: 0x4010004,\n\t\t 0x1080000: 0x4000000,\n\t\t 0x1180000: 0x104,\n\t\t 0x1280000: 0x4010100,\n\t\t 0x1380000: 0x0,\n\t\t 0x1480000: 0x10004,\n\t\t 0x1580000: 0x4000100,\n\t\t 0x1680000: 0x100,\n\t\t 0x1780000: 0x4010004,\n\t\t 0x1880000: 0x10000,\n\t\t 0x1980000: 0x4010104,\n\t\t 0x1a80000: 0x10104,\n\t\t 0x1b80000: 0x4000004,\n\t\t 0x1c80000: 0x4000104,\n\t\t 0x1d80000: 0x4010000,\n\t\t 0x1e80000: 0x4,\n\t\t 0x1f80000: 0x10100\n\t\t },\n\t\t {\n\t\t 0x0: 0x80401000,\n\t\t 0x10000: 0x80001040,\n\t\t 0x20000: 0x401040,\n\t\t 0x30000: 0x80400000,\n\t\t 0x40000: 0x0,\n\t\t 0x50000: 0x401000,\n\t\t 0x60000: 0x80000040,\n\t\t 0x70000: 0x400040,\n\t\t 0x80000: 0x80000000,\n\t\t 0x90000: 0x400000,\n\t\t 0xa0000: 0x40,\n\t\t 0xb0000: 0x80001000,\n\t\t 0xc0000: 0x80400040,\n\t\t 0xd0000: 0x1040,\n\t\t 0xe0000: 0x1000,\n\t\t 0xf0000: 0x80401040,\n\t\t 0x8000: 0x80001040,\n\t\t 0x18000: 0x40,\n\t\t 0x28000: 0x80400040,\n\t\t 0x38000: 0x80001000,\n\t\t 0x48000: 0x401000,\n\t\t 0x58000: 0x80401040,\n\t\t 0x68000: 0x0,\n\t\t 0x78000: 0x80400000,\n\t\t 0x88000: 0x1000,\n\t\t 0x98000: 0x80401000,\n\t\t 0xa8000: 0x400000,\n\t\t 0xb8000: 0x1040,\n\t\t 0xc8000: 0x80000000,\n\t\t 0xd8000: 0x400040,\n\t\t 0xe8000: 0x401040,\n\t\t 0xf8000: 0x80000040,\n\t\t 0x100000: 0x400040,\n\t\t 0x110000: 0x401000,\n\t\t 0x120000: 0x80000040,\n\t\t 0x130000: 0x0,\n\t\t 0x140000: 0x1040,\n\t\t 0x150000: 0x80400040,\n\t\t 0x160000: 0x80401000,\n\t\t 0x170000: 0x80001040,\n\t\t 0x180000: 0x80401040,\n\t\t 0x190000: 0x80000000,\n\t\t 0x1a0000: 0x80400000,\n\t\t 0x1b0000: 0x401040,\n\t\t 0x1c0000: 0x80001000,\n\t\t 0x1d0000: 0x400000,\n\t\t 0x1e0000: 0x40,\n\t\t 0x1f0000: 0x1000,\n\t\t 0x108000: 0x80400000,\n\t\t 0x118000: 0x80401040,\n\t\t 0x128000: 0x0,\n\t\t 0x138000: 0x401000,\n\t\t 0x148000: 0x400040,\n\t\t 0x158000: 0x80000000,\n\t\t 0x168000: 0x80001040,\n\t\t 0x178000: 0x40,\n\t\t 0x188000: 0x80000040,\n\t\t 0x198000: 0x1000,\n\t\t 0x1a8000: 0x80001000,\n\t\t 0x1b8000: 0x80400040,\n\t\t 0x1c8000: 0x1040,\n\t\t 0x1d8000: 0x80401000,\n\t\t 0x1e8000: 0x400000,\n\t\t 0x1f8000: 0x401040\n\t\t },\n\t\t {\n\t\t 0x0: 0x80,\n\t\t 0x1000: 0x1040000,\n\t\t 0x2000: 0x40000,\n\t\t 0x3000: 0x20000000,\n\t\t 0x4000: 0x20040080,\n\t\t 0x5000: 0x1000080,\n\t\t 0x6000: 0x21000080,\n\t\t 0x7000: 0x40080,\n\t\t 0x8000: 0x1000000,\n\t\t 0x9000: 0x20040000,\n\t\t 0xa000: 0x20000080,\n\t\t 0xb000: 0x21040080,\n\t\t 0xc000: 0x21040000,\n\t\t 0xd000: 0x0,\n\t\t 0xe000: 0x1040080,\n\t\t 0xf000: 0x21000000,\n\t\t 0x800: 0x1040080,\n\t\t 0x1800: 0x21000080,\n\t\t 0x2800: 0x80,\n\t\t 0x3800: 0x1040000,\n\t\t 0x4800: 0x40000,\n\t\t 0x5800: 0x20040080,\n\t\t 0x6800: 0x21040000,\n\t\t 0x7800: 0x20000000,\n\t\t 0x8800: 0x20040000,\n\t\t 0x9800: 0x0,\n\t\t 0xa800: 0x21040080,\n\t\t 0xb800: 0x1000080,\n\t\t 0xc800: 0x20000080,\n\t\t 0xd800: 0x21000000,\n\t\t 0xe800: 0x1000000,\n\t\t 0xf800: 0x40080,\n\t\t 0x10000: 0x40000,\n\t\t 0x11000: 0x80,\n\t\t 0x12000: 0x20000000,\n\t\t 0x13000: 0x21000080,\n\t\t 0x14000: 0x1000080,\n\t\t 0x15000: 0x21040000,\n\t\t 0x16000: 0x20040080,\n\t\t 0x17000: 0x1000000,\n\t\t 0x18000: 0x21040080,\n\t\t 0x19000: 0x21000000,\n\t\t 0x1a000: 0x1040000,\n\t\t 0x1b000: 0x20040000,\n\t\t 0x1c000: 0x40080,\n\t\t 0x1d000: 0x20000080,\n\t\t 0x1e000: 0x0,\n\t\t 0x1f000: 0x1040080,\n\t\t 0x10800: 0x21000080,\n\t\t 0x11800: 0x1000000,\n\t\t 0x12800: 0x1040000,\n\t\t 0x13800: 0x20040080,\n\t\t 0x14800: 0x20000000,\n\t\t 0x15800: 0x1040080,\n\t\t 0x16800: 0x80,\n\t\t 0x17800: 0x21040000,\n\t\t 0x18800: 0x40080,\n\t\t 0x19800: 0x21040080,\n\t\t 0x1a800: 0x0,\n\t\t 0x1b800: 0x21000000,\n\t\t 0x1c800: 0x1000080,\n\t\t 0x1d800: 0x40000,\n\t\t 0x1e800: 0x20040000,\n\t\t 0x1f800: 0x20000080\n\t\t },\n\t\t {\n\t\t 0x0: 0x10000008,\n\t\t 0x100: 0x2000,\n\t\t 0x200: 0x10200000,\n\t\t 0x300: 0x10202008,\n\t\t 0x400: 0x10002000,\n\t\t 0x500: 0x200000,\n\t\t 0x600: 0x200008,\n\t\t 0x700: 0x10000000,\n\t\t 0x800: 0x0,\n\t\t 0x900: 0x10002008,\n\t\t 0xa00: 0x202000,\n\t\t 0xb00: 0x8,\n\t\t 0xc00: 0x10200008,\n\t\t 0xd00: 0x202008,\n\t\t 0xe00: 0x2008,\n\t\t 0xf00: 0x10202000,\n\t\t 0x80: 0x10200000,\n\t\t 0x180: 0x10202008,\n\t\t 0x280: 0x8,\n\t\t 0x380: 0x200000,\n\t\t 0x480: 0x202008,\n\t\t 0x580: 0x10000008,\n\t\t 0x680: 0x10002000,\n\t\t 0x780: 0x2008,\n\t\t 0x880: 0x200008,\n\t\t 0x980: 0x2000,\n\t\t 0xa80: 0x10002008,\n\t\t 0xb80: 0x10200008,\n\t\t 0xc80: 0x0,\n\t\t 0xd80: 0x10202000,\n\t\t 0xe80: 0x202000,\n\t\t 0xf80: 0x10000000,\n\t\t 0x1000: 0x10002000,\n\t\t 0x1100: 0x10200008,\n\t\t 0x1200: 0x10202008,\n\t\t 0x1300: 0x2008,\n\t\t 0x1400: 0x200000,\n\t\t 0x1500: 0x10000000,\n\t\t 0x1600: 0x10000008,\n\t\t 0x1700: 0x202000,\n\t\t 0x1800: 0x202008,\n\t\t 0x1900: 0x0,\n\t\t 0x1a00: 0x8,\n\t\t 0x1b00: 0x10200000,\n\t\t 0x1c00: 0x2000,\n\t\t 0x1d00: 0x10002008,\n\t\t 0x1e00: 0x10202000,\n\t\t 0x1f00: 0x200008,\n\t\t 0x1080: 0x8,\n\t\t 0x1180: 0x202000,\n\t\t 0x1280: 0x200000,\n\t\t 0x1380: 0x10000008,\n\t\t 0x1480: 0x10002000,\n\t\t 0x1580: 0x2008,\n\t\t 0x1680: 0x10202008,\n\t\t 0x1780: 0x10200000,\n\t\t 0x1880: 0x10202000,\n\t\t 0x1980: 0x10200008,\n\t\t 0x1a80: 0x2000,\n\t\t 0x1b80: 0x202008,\n\t\t 0x1c80: 0x200008,\n\t\t 0x1d80: 0x0,\n\t\t 0x1e80: 0x10000000,\n\t\t 0x1f80: 0x10002008\n\t\t },\n\t\t {\n\t\t 0x0: 0x100000,\n\t\t 0x10: 0x2000401,\n\t\t 0x20: 0x400,\n\t\t 0x30: 0x100401,\n\t\t 0x40: 0x2100401,\n\t\t 0x50: 0x0,\n\t\t 0x60: 0x1,\n\t\t 0x70: 0x2100001,\n\t\t 0x80: 0x2000400,\n\t\t 0x90: 0x100001,\n\t\t 0xa0: 0x2000001,\n\t\t 0xb0: 0x2100400,\n\t\t 0xc0: 0x2100000,\n\t\t 0xd0: 0x401,\n\t\t 0xe0: 0x100400,\n\t\t 0xf0: 0x2000000,\n\t\t 0x8: 0x2100001,\n\t\t 0x18: 0x0,\n\t\t 0x28: 0x2000401,\n\t\t 0x38: 0x2100400,\n\t\t 0x48: 0x100000,\n\t\t 0x58: 0x2000001,\n\t\t 0x68: 0x2000000,\n\t\t 0x78: 0x401,\n\t\t 0x88: 0x100401,\n\t\t 0x98: 0x2000400,\n\t\t 0xa8: 0x2100000,\n\t\t 0xb8: 0x100001,\n\t\t 0xc8: 0x400,\n\t\t 0xd8: 0x2100401,\n\t\t 0xe8: 0x1,\n\t\t 0xf8: 0x100400,\n\t\t 0x100: 0x2000000,\n\t\t 0x110: 0x100000,\n\t\t 0x120: 0x2000401,\n\t\t 0x130: 0x2100001,\n\t\t 0x140: 0x100001,\n\t\t 0x150: 0x2000400,\n\t\t 0x160: 0x2100400,\n\t\t 0x170: 0x100401,\n\t\t 0x180: 0x401,\n\t\t 0x190: 0x2100401,\n\t\t 0x1a0: 0x100400,\n\t\t 0x1b0: 0x1,\n\t\t 0x1c0: 0x0,\n\t\t 0x1d0: 0x2100000,\n\t\t 0x1e0: 0x2000001,\n\t\t 0x1f0: 0x400,\n\t\t 0x108: 0x100400,\n\t\t 0x118: 0x2000401,\n\t\t 0x128: 0x2100001,\n\t\t 0x138: 0x1,\n\t\t 0x148: 0x2000000,\n\t\t 0x158: 0x100000,\n\t\t 0x168: 0x401,\n\t\t 0x178: 0x2100400,\n\t\t 0x188: 0x2000001,\n\t\t 0x198: 0x2100000,\n\t\t 0x1a8: 0x0,\n\t\t 0x1b8: 0x2100401,\n\t\t 0x1c8: 0x100401,\n\t\t 0x1d8: 0x400,\n\t\t 0x1e8: 0x2000400,\n\t\t 0x1f8: 0x100001\n\t\t },\n\t\t {\n\t\t 0x0: 0x8000820,\n\t\t 0x1: 0x20000,\n\t\t 0x2: 0x8000000,\n\t\t 0x3: 0x20,\n\t\t 0x4: 0x20020,\n\t\t 0x5: 0x8020820,\n\t\t 0x6: 0x8020800,\n\t\t 0x7: 0x800,\n\t\t 0x8: 0x8020000,\n\t\t 0x9: 0x8000800,\n\t\t 0xa: 0x20800,\n\t\t 0xb: 0x8020020,\n\t\t 0xc: 0x820,\n\t\t 0xd: 0x0,\n\t\t 0xe: 0x8000020,\n\t\t 0xf: 0x20820,\n\t\t 0x80000000: 0x800,\n\t\t 0x80000001: 0x8020820,\n\t\t 0x80000002: 0x8000820,\n\t\t 0x80000003: 0x8000000,\n\t\t 0x80000004: 0x8020000,\n\t\t 0x80000005: 0x20800,\n\t\t 0x80000006: 0x20820,\n\t\t 0x80000007: 0x20,\n\t\t 0x80000008: 0x8000020,\n\t\t 0x80000009: 0x820,\n\t\t 0x8000000a: 0x20020,\n\t\t 0x8000000b: 0x8020800,\n\t\t 0x8000000c: 0x0,\n\t\t 0x8000000d: 0x8020020,\n\t\t 0x8000000e: 0x8000800,\n\t\t 0x8000000f: 0x20000,\n\t\t 0x10: 0x20820,\n\t\t 0x11: 0x8020800,\n\t\t 0x12: 0x20,\n\t\t 0x13: 0x800,\n\t\t 0x14: 0x8000800,\n\t\t 0x15: 0x8000020,\n\t\t 0x16: 0x8020020,\n\t\t 0x17: 0x20000,\n\t\t 0x18: 0x0,\n\t\t 0x19: 0x20020,\n\t\t 0x1a: 0x8020000,\n\t\t 0x1b: 0x8000820,\n\t\t 0x1c: 0x8020820,\n\t\t 0x1d: 0x20800,\n\t\t 0x1e: 0x820,\n\t\t 0x1f: 0x8000000,\n\t\t 0x80000010: 0x20000,\n\t\t 0x80000011: 0x800,\n\t\t 0x80000012: 0x8020020,\n\t\t 0x80000013: 0x20820,\n\t\t 0x80000014: 0x20,\n\t\t 0x80000015: 0x8020000,\n\t\t 0x80000016: 0x8000000,\n\t\t 0x80000017: 0x8000820,\n\t\t 0x80000018: 0x8020820,\n\t\t 0x80000019: 0x8000020,\n\t\t 0x8000001a: 0x8000800,\n\t\t 0x8000001b: 0x0,\n\t\t 0x8000001c: 0x20800,\n\t\t 0x8000001d: 0x820,\n\t\t 0x8000001e: 0x20020,\n\t\t 0x8000001f: 0x8020800\n\t\t }\n\t\t ];\n\t\n\t\t // Masks that select the SBOX input\n\t\t var SBOX_MASK = [\n\t\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t\t ];\n\t\n\t\t /**\n\t\t * DES block cipher algorithm.\n\t\t */\n\t\t var DES = C_algo.DES = BlockCipher.extend({\n\t\t _doReset: function () {\n\t\t // Shortcuts\n\t\t var key = this._key;\n\t\t var keyWords = key.words;\n\t\n\t\t // Select 56 bits according to PC1\n\t\t var keyBits = [];\n\t\t for (var i = 0; i < 56; i++) {\n\t\t var keyBitPos = PC1[i] - 1;\n\t\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t\t }\n\t\n\t\t // Assemble 16 subkeys\n\t\t var subKeys = this._subKeys = [];\n\t\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t\t // Create subkey\n\t\t var subKey = subKeys[nSubKey] = [];\n\t\n\t\t // Shortcut\n\t\t var bitShift = BIT_SHIFTS[nSubKey];\n\t\n\t\t // Select 48 bits according to PC2\n\t\t for (var i = 0; i < 24; i++) {\n\t\t // Select from the left 28 key bits\n\t\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\t\n\t\t // Select from the right 28 key bits\n\t\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t\t }\n\t\n\t\t // Since each subkey is applied to an expanded 32-bit input,\n\t\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t\t // which allows the key to be used without expansion\n\t\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t\t for (var i = 1; i < 7; i++) {\n\t\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t\t }\n\t\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t\t }\n\t\n\t\t // Compute inverse subkeys\n\t\t var invSubKeys = this._invSubKeys = [];\n\t\t for (var i = 0; i < 16; i++) {\n\t\t invSubKeys[i] = subKeys[15 - i];\n\t\t }\n\t\t },\n\t\n\t\t encryptBlock: function (M, offset) {\n\t\t this._doCryptBlock(M, offset, this._subKeys);\n\t\t },\n\t\n\t\t decryptBlock: function (M, offset) {\n\t\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t\t },\n\t\n\t\t _doCryptBlock: function (M, offset, subKeys) {\n\t\t // Get input\n\t\t this._lBlock = M[offset];\n\t\t this._rBlock = M[offset + 1];\n\t\n\t\t // Initial permutation\n\t\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t\t exchangeLR.call(this, 16, 0x0000ffff);\n\t\t exchangeRL.call(this, 2, 0x33333333);\n\t\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t\t exchangeLR.call(this, 1, 0x55555555);\n\t\n\t\t // Rounds\n\t\t for (var round = 0; round < 16; round++) {\n\t\t // Shortcuts\n\t\t var subKey = subKeys[round];\n\t\t var lBlock = this._lBlock;\n\t\t var rBlock = this._rBlock;\n\t\n\t\t // Feistel function\n\t\t var f = 0;\n\t\t for (var i = 0; i < 8; i++) {\n\t\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t\t }\n\t\t this._lBlock = rBlock;\n\t\t this._rBlock = lBlock ^ f;\n\t\t }\n\t\n\t\t // Undo swap from last round\n\t\t var t = this._lBlock;\n\t\t this._lBlock = this._rBlock;\n\t\t this._rBlock = t;\n\t\n\t\t // Final permutation\n\t\t exchangeLR.call(this, 1, 0x55555555);\n\t\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t\t exchangeRL.call(this, 2, 0x33333333);\n\t\t exchangeLR.call(this, 16, 0x0000ffff);\n\t\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t\n\t\t // Set output\n\t\t M[offset] = this._lBlock;\n\t\t M[offset + 1] = this._rBlock;\n\t\t },\n\t\n\t\t keySize: 64/32,\n\t\n\t\t ivSize: 64/32,\n\t\n\t\t blockSize: 64/32\n\t\t });\n\t\n\t\t // Swap bits across the left and right words\n\t\t function exchangeLR(offset, mask) {\n\t\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t\t this._rBlock ^= t;\n\t\t this._lBlock ^= t << offset;\n\t\t }\n\t\n\t\t function exchangeRL(offset, mask) {\n\t\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t\t this._lBlock ^= t;\n\t\t this._rBlock ^= t << offset;\n\t\t }\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.DES = BlockCipher._createHelper(DES);\n\t\n\t\t /**\n\t\t * Triple-DES block cipher algorithm.\n\t\t */\n\t\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t\t _doReset: function () {\n\t\t // Shortcuts\n\t\t var key = this._key;\n\t\t var keyWords = key.words;\n\t\n\t\t // Create DES instances\n\t\t this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n\t\t this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n\t\t this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n\t\t },\n\t\n\t\t encryptBlock: function (M, offset) {\n\t\t this._des1.encryptBlock(M, offset);\n\t\t this._des2.decryptBlock(M, offset);\n\t\t this._des3.encryptBlock(M, offset);\n\t\t },\n\t\n\t\t decryptBlock: function (M, offset) {\n\t\t this._des3.decryptBlock(M, offset);\n\t\t this._des2.encryptBlock(M, offset);\n\t\t this._des1.decryptBlock(M, offset);\n\t\t },\n\t\n\t\t keySize: 192/32,\n\t\n\t\t ivSize: 64/32,\n\t\n\t\t blockSize: 64/32\n\t\t });\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.TripleDES;\n\t\n\t}));\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10), __webpack_require__(13));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var StreamCipher = C_lib.StreamCipher;\n\t\t var C_algo = C.algo;\n\t\n\t\t // Reusable objects\n\t\t var S = [];\n\t\t var C_ = [];\n\t\t var G = [];\n\t\n\t\t /**\n\t\t * Rabbit stream cipher algorithm\n\t\t */\n\t\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t\t _doReset: function () {\n\t\t // Shortcuts\n\t\t var K = this._key.words;\n\t\t var iv = this.cfg.iv;\n\t\n\t\t // Swap endian\n\t\t for (var i = 0; i < 4; i++) {\n\t\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t\t }\n\t\n\t\t // Generate initial state values\n\t\t var X = this._X = [\n\t\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t\t ];\n\t\n\t\t // Generate initial counter values\n\t\t var C = this._C = [\n\t\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t\t ];\n\t\n\t\t // Carry bit\n\t\t this._b = 0;\n\t\n\t\t // Iterate the system four times\n\t\t for (var i = 0; i < 4; i++) {\n\t\t nextState.call(this);\n\t\t }\n\t\n\t\t // Modify the counters\n\t\t for (var i = 0; i < 8; i++) {\n\t\t C[i] ^= X[(i + 4) & 7];\n\t\t }\n\t\n\t\t // IV setup\n\t\t if (iv) {\n\t\t // Shortcuts\n\t\t var IV = iv.words;\n\t\t var IV_0 = IV[0];\n\t\t var IV_1 = IV[1];\n\t\n\t\t // Generate four subvectors\n\t\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\t\n\t\t // Modify counter values\n\t\t C[0] ^= i0;\n\t\t C[1] ^= i1;\n\t\t C[2] ^= i2;\n\t\t C[3] ^= i3;\n\t\t C[4] ^= i0;\n\t\t C[5] ^= i1;\n\t\t C[6] ^= i2;\n\t\t C[7] ^= i3;\n\t\n\t\t // Iterate the system four times\n\t\t for (var i = 0; i < 4; i++) {\n\t\t nextState.call(this);\n\t\t }\n\t\t }\n\t\t },\n\t\n\t\t _doProcessBlock: function (M, offset) {\n\t\t // Shortcut\n\t\t var X = this._X;\n\t\n\t\t // Iterate the system\n\t\t nextState.call(this);\n\t\n\t\t // Generate four keystream words\n\t\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\t\n\t\t for (var i = 0; i < 4; i++) {\n\t\t // Swap endian\n\t\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\t\n\t\t // Encrypt\n\t\t M[offset + i] ^= S[i];\n\t\t }\n\t\t },\n\t\n\t\t blockSize: 128/32,\n\t\n\t\t ivSize: 64/32\n\t\t });\n\t\n\t\t function nextState() {\n\t\t // Shortcuts\n\t\t var X = this._X;\n\t\t var C = this._C;\n\t\n\t\t // Save old counter values\n\t\t for (var i = 0; i < 8; i++) {\n\t\t C_[i] = C[i];\n\t\t }\n\t\n\t\t // Calculate new counter values\n\t\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\t\n\t\t // Calculate the g-values\n\t\t for (var i = 0; i < 8; i++) {\n\t\t var gx = X[i] + C[i];\n\t\n\t\t // Construct high and low argument for squaring\n\t\t var ga = gx & 0xffff;\n\t\t var gb = gx >>> 16;\n\t\n\t\t // Calculate high and low result of squaring\n\t\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\t\n\t\t // High XOR low\n\t\t G[i] = gh ^ gl;\n\t\t }\n\t\n\t\t // Calculate new state values\n\t\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t\t }\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.Rabbit;\n\t\n\t}));\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t;(function (root, factory, undef) {\n\t\tif (true) {\n\t\t\t// CommonJS\n\t\t\tmodule.exports = exports = factory(__webpack_require__(7), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10), __webpack_require__(13));\n\t\t}\n\t\telse if (typeof define === \"function\" && define.amd) {\n\t\t\t// AMD\n\t\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t\t}\n\t\telse {\n\t\t\t// Global (browser)\n\t\t\tfactory(root.CryptoJS);\n\t\t}\n\t}(this, function (CryptoJS) {\n\t\n\t\t(function () {\n\t\t // Shortcuts\n\t\t var C = CryptoJS;\n\t\t var C_lib = C.lib;\n\t\t var StreamCipher = C_lib.StreamCipher;\n\t\t var C_algo = C.algo;\n\t\n\t\t /**\n\t\t * RC4 stream cipher algorithm.\n\t\t */\n\t\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t\t _doReset: function () {\n\t\t // Shortcuts\n\t\t var key = this._key;\n\t\t var keyWords = key.words;\n\t\t var keySigBytes = key.sigBytes;\n\t\n\t\t // Init sbox\n\t\t var S = this._S = [];\n\t\t for (var i = 0; i < 256; i++) {\n\t\t S[i] = i;\n\t\t }\n\t\n\t\t // Key setup\n\t\t for (var i = 0, j = 0; i < 256; i++) {\n\t\t var keyByteIndex = i % keySigBytes;\n\t\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\t\n\t\t j = (j + S[i] + keyByte) % 256;\n\t\n\t\t // Swap\n\t\t var t = S[i];\n\t\t S[i] = S[j];\n\t\t S[j] = t;\n\t\t }\n\t\n\t\t // Counters\n\t\t this._i = this._j = 0;\n\t\t },\n\t\n\t\t _doProcessBlock: function (M, offset) {\n\t\t M[offset] ^= generateKeystreamWord.call(this);\n\t\t },\n\t\n\t\t keySize: 256/32,\n\t\n\t\t ivSize: 0\n\t\t });\n\t\n\t\t function generateKeystreamWord() {\n\t\t // Shortcuts\n\t\t var S = this._S;\n\t\t var i = this._i;\n\t\t var j = this._j;\n\t\n\t\t // Generate keystream word\n\t\t var keystreamWord = 0;\n\t\t for (var n = 0; n < 4; n++) {\n\t\t i = (i + 1) % 256;\n\t\t j = (j + S[i]) % 256;\n\t\n\t\t // Swap\n\t\t var t = S[i];\n\t\t S[i] = S[j];\n\t\t S[j] = t;\n\t\n\t\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t\t }\n\t\n\t\t // Update counters\n\t\t this._i = i;\n\t\t this._j = j;\n\t\n\t\t return keystreamWord;\n\t\t }\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.RC4 = StreamCipher._createHelper(RC4);\n\t\n\t\t /**\n\t\t * Modified RC4 stream cipher algorithm.\n\t\t */\n\t\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t\t /**\n\t\t * Configuration options.\n\t\t *\n\t\t * @property {number} drop The number of keystream words to drop. Default 192\n\t\t */\n\t\t cfg: RC4.cfg.extend({\n\t\t drop: 192\n\t\t }),\n\t\n\t\t _doReset: function () {\n\t\t RC4._doReset.call(this);\n\t\n\t\t // Drop\n\t\t for (var i = this.cfg.drop; i > 0; i--) {\n\t\t generateKeystreamWord.call(this);\n\t\t }\n\t\t }\n\t\t });\n\t\n\t\t /**\n\t\t * Shortcut functions to the cipher's object interface.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t\t */\n\t\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t\t}());\n\t\n\t\n\t\treturn CryptoJS.RC4;\n\t\n\t}));\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** secure-ls.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap d69a2c7f42d75a8645d7\n **/","import utils from './utils';\r\nimport constants from './constants';\r\nimport enc from './enc-utf8';\r\n\r\nimport Base64 from './Base64';\r\nimport LZString from 'lz-string/libs/lz-string';\r\nimport AES from 'crypto-js/aes';\r\nimport DES from 'crypto-js/tripledes';\r\nimport RABBIT from 'crypto-js/rabbit';\r\nimport RC4 from 'crypto-js/rc4';\r\n\r\nexport default class SecureLS {\r\n constructor(config) {\r\n config = config || {};\r\n this._name = 'secure-ls';\r\n this.utils = utils;\r\n this.constants = constants;\r\n this.Base64 = Base64;\r\n this.LZString = LZString;\r\n this.AES = AES;\r\n this.DES = DES;\r\n this.RABBIT = RABBIT;\r\n this.RC4 = RC4;\r\n this.enc = enc;\r\n\r\n this.config = {\r\n isCompression: true,\r\n encodingType: constants.EncrytionTypes.BASE64,\r\n encryptionSecret: config.encryptionSecret,\r\n encryptionNamespace: config.encryptionNamespace,\r\n storage: config.storage || localStorage\r\n };\r\n this.config.isCompression = typeof config.isCompression !== 'undefined' ?\r\n config.isCompression :\r\n true;\r\n this.config.encodingType = (typeof config.encodingType !== 'undefined' || config.encodingType === '') ?\r\n config.encodingType.toLowerCase() :\r\n constants.EncrytionTypes.BASE64;\r\n\r\n this.ls = this.config.storage;\r\n this.init();\r\n\r\n // If a serious encryption is used only one password is allowed for the local storage encryption.\r\n // To make multiple passwords possible a namespace must be set.\r\n // This notifies users that using no namespace may cause issues with multiple passwords.\r\n if (!this._isBase64 && typeof this.config.encryptionNamespace === 'undefined') {\r\n this.utils.warn(this.WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED);\r\n }\r\n // If a serious encryption is wanted a user should pass a password, because the is no default secure password.\r\n // Warn the user if no password is passed\r\n if (\r\n !this._isBase64 &&\r\n (\r\n typeof this.config.encryptionSecret === 'undefined' ||\r\n !this.config.encryptionSecret.length\r\n )\r\n ) {\r\n this.utils.warn(this.WarningEnum.INSECURE_PASSWORD);\r\n }\r\n };\r\n\r\n init() {\r\n let metaData = this.getMetaData();\r\n\r\n this.WarningEnum = this.constants.WarningEnum;\r\n this.WarningTypes = this.constants.WarningTypes;\r\n this.EncrytionTypes = this.constants.EncrytionTypes;\r\n\r\n this._isBase64 = this._isBase64EncryptionType();\r\n this._isAES = this._isAESEncryptionType();\r\n this._isDES = this._isDESEncryptionType();\r\n this._isRabbit = this._isRabbitEncryptionType();\r\n this._isRC4 = this._isRC4EncryptionType();\r\n this._isCompression = this._isDataCompressionEnabled();\r\n\r\n // fill the already present keys to the list of keys being used by secure-ls\r\n this.utils.allKeys = metaData.keys || this.resetAllKeys();\r\n };\r\n\r\n _isBase64EncryptionType() {\r\n return Base64 &&\r\n (typeof this.config.encodingType === 'undefined' ||\r\n this.config.encodingType === this.constants.EncrytionTypes.BASE64);\r\n };\r\n\r\n _isAESEncryptionType() {\r\n return AES &&\r\n (this.config.encodingType === this.constants.EncrytionTypes.AES);\r\n };\r\n\r\n _isDESEncryptionType() {\r\n return DES &&\r\n (this.config.encodingType === this.constants.EncrytionTypes.DES);\r\n };\r\n\r\n _isRabbitEncryptionType() {\r\n return RABBIT &&\r\n (this.config.encodingType === this.constants.EncrytionTypes.RABBIT);\r\n };\r\n\r\n _isRC4EncryptionType() {\r\n return RC4 &&\r\n (this.config.encodingType === this.constants.EncrytionTypes.RC4);\r\n };\r\n\r\n _isDataCompressionEnabled() {\r\n return this.config.isCompression;\r\n }\r\n\r\n getEncryptionSecret() {\r\n if (\r\n this._isAES ||\r\n this._isDES ||\r\n this._isRabbit ||\r\n this._isRC4\r\n ) {\r\n if (typeof this.config.encryptionSecret === 'undefined') {\r\n if (!this.utils.encryptionSecret) {\r\n this.utils.encryptionSecret = '';\r\n this.setMetaData();\r\n }\r\n } else {\r\n this.utils.encryptionSecret = this.config.encryptionSecret || '';\r\n }\r\n }\r\n }\r\n\r\n get(key, isAllKeysData) {\r\n let decodedData,\r\n jsonData = '',\r\n deCompressedData,\r\n bytes,\r\n data;\r\n\r\n if (!this.utils.is(key)) {\r\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\r\n return jsonData;\r\n }\r\n\r\n data = this.getDataFromLocalStorage(key);\r\n\r\n if (!data) {\r\n return jsonData;\r\n }\r\n\r\n deCompressedData = data; // saves else\r\n if (this._isCompression || isAllKeysData) { // meta data always compressed\r\n deCompressedData = LZString.decompressFromUTF16(data);\r\n }\r\n\r\n decodedData = deCompressedData; // saves else\r\n if (this._isBase64) {\r\n decodedData = Base64.decode(deCompressedData);\r\n } else {\r\n this.getEncryptionSecret();\r\n if (this._isAES) {\r\n bytes = AES.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\r\n } else if (this._isDES) {\r\n bytes = DES.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\r\n } else if (this._isRabbit) {\r\n bytes = RABBIT.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\r\n } else if (this._isRC4) {\r\n bytes = RC4.decrypt(deCompressedData.toString(), this.utils.encryptionSecret);\r\n }\r\n\r\n if (bytes) {\r\n decodedData = bytes.toString(enc._Utf8);\r\n }\r\n }\r\n\r\n try {\r\n jsonData = JSON.parse(decodedData);\r\n } catch (e) {\r\n throw new Error('Could not parse JSON');\r\n }\r\n\r\n return jsonData;\r\n };\r\n\r\n getDataFromLocalStorage(key) {\r\n return this.ls.getItem(key, true);\r\n };\r\n\r\n getAllKeys() {\r\n return this.getMetaData().keys || [];\r\n };\r\n\r\n set(key, data) {\r\n if (!this.utils.is(key)) {\r\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\r\n return;\r\n }\r\n\r\n this.getEncryptionSecret();\r\n\r\n // add key(s) to Array if not already added, only for keys other than meta key\r\n if (!(String(key) === String(this.utils.metaKey))) {\r\n if (!this.utils.isKeyPresent(key)) {\r\n this.utils.addToKeysList(key);\r\n this.setMetaData();\r\n }\r\n }\r\n // Store the data to localStorage\r\n this.setDataToLocalStorage(key, this.processData(data));\r\n };\r\n\r\n setDataToLocalStorage(key, data) {\r\n this.ls.setItem(key, data);\r\n };\r\n\r\n remove(key) {\r\n if (!this.utils.is(key)) {\r\n this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED);\r\n return;\r\n }\r\n\r\n if (key === this.utils.metaKey && this.getAllKeys().length) {\r\n this.utils.warn(this.WarningEnum.META_KEY_REMOVE);\r\n return;\r\n }\r\n\r\n if (this.utils.isKeyPresent(key)) {\r\n this.utils.removeFromKeysList(key);\r\n this.setMetaData();\r\n }\r\n this.ls.removeItem(key);\r\n };\r\n\r\n removeAll() {\r\n let keys, i;\r\n\r\n keys = this.getAllKeys();\r\n for (i = 0; i < keys.length; i++) {\r\n this.ls.removeItem(keys[i]);\r\n }\r\n this.ls.removeItem(this.utils.metaKey);\r\n\r\n this.resetAllKeys();\r\n };\r\n\r\n clear() {\r\n this.ls.clear();\r\n this.resetAllKeys();\r\n };\r\n\r\n resetAllKeys() {\r\n this.utils.allKeys = [];\r\n return [];\r\n }\r\n\r\n processData(data, isAllKeysData) {\r\n if (data === null || data === undefined || data === '') {\r\n return '';\r\n }\r\n\r\n let jsonData, encodedData, compressedData;\r\n\r\n try {\r\n jsonData = JSON.stringify(data);\r\n } catch (e) {\r\n throw new Error('Could not stringify data.');\r\n }\r\n\r\n // Encode Based on encoding type\r\n // If not set, default to Base64 for securing data\r\n encodedData = jsonData;\r\n if (this._isBase64) {\r\n encodedData = Base64.encode(jsonData);\r\n } else {\r\n if (this._isAES) {\r\n encodedData = AES.encrypt(jsonData, this.utils.encryptionSecret);\r\n } else if (this._isDES) {\r\n encodedData = DES.encrypt(jsonData, this.utils.encryptionSecret);\r\n } else if (this._isRabbit) {\r\n encodedData = RABBIT.encrypt(jsonData, this.utils.encryptionSecret);\r\n } else if (this._isRC4) {\r\n encodedData = RC4.encrypt(jsonData, this.utils.encryptionSecret);\r\n }\r\n\r\n encodedData = encodedData && encodedData.toString();\r\n }\r\n\r\n // Compress data if set to true\r\n compressedData = encodedData;\r\n if (this._isCompression || isAllKeysData) {\r\n compressedData = LZString.compressToUTF16(encodedData);\r\n }\r\n\r\n return compressedData;\r\n };\r\n\r\n setMetaData() {\r\n let dataToStore = this.processData({\r\n keys: this.utils.allKeys\r\n }, true);\r\n\r\n // Store the data to localStorage\r\n this.setDataToLocalStorage(this.getMetaKey(), dataToStore);\r\n };\r\n\r\n getMetaData() {\r\n return this.get(this.getMetaKey(), true) || {keys: []};\r\n };\r\n\r\n getMetaKey() {\r\n return this.utils.metaKey + (this.config.encryptionNamespace ? '__' + this.config.encryptionNamespace : '');\r\n }\r\n\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/index.js\n **/","import constants from './constants';\r\n\r\nlet utils = {\r\n metaKey: '_secure__ls__metadata',\r\n encryptionSecret: '',\r\n secretPhrase: 's3cr3t$#@135^&*246',\r\n allKeys: [],\r\n is: function (key) {\r\n if (key) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n warn: function (reason) {\r\n reason = reason ? reason : constants.WarningEnum.DEFAULT_TEXT;\r\n console.warn(constants.WarningTypes[reason]);\r\n },\r\n getObjectFromKey: function (data, key) {\r\n if (!data || !data.length) {\r\n return {};\r\n }\r\n\r\n let i, obj = {};\r\n\r\n for (i = 0; i < data.length; i++) {\r\n if (data[i].k === key) {\r\n obj = data[i];\r\n break;\r\n }\r\n }\r\n\r\n return obj;\r\n },\r\n getAllKeys: function () {\r\n return this.allKeys;\r\n },\r\n isKeyPresent: function (key) {\r\n let isKeyAlreadyPresent = false;\r\n\r\n for (let i = 0; i < this.allKeys.length; i++) {\r\n if (String(this.allKeys[i]) === String(key)) {\r\n isKeyAlreadyPresent = true; // found\r\n break;\r\n }\r\n }\r\n\r\n return isKeyAlreadyPresent;\r\n },\r\n addToKeysList: function (key) {\r\n this.allKeys.push(key);\r\n },\r\n removeFromKeysList: function (key) {\r\n let i, index = -1;\r\n\r\n for (i = 0; i < this.allKeys.length; i++) {\r\n if (this.allKeys[i] === key) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n if (index !== -1) {\r\n this.allKeys.splice(index, 1);\r\n }\r\n return index;\r\n }\r\n};\r\n\r\nmodule.exports = utils;\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/utils.js\n **/","let WarningEnum = {\r\n KEY_NOT_PROVIDED: 'keyNotProvided',\r\n ENCRYPTION_NAMESPACE_NOT_PROVIDED: 'encryptionNameSpaceNotProvided',\r\n INSECURE_PASSWORD: 'insecurePassword',\r\n META_KEY_REMOVE: 'metaKeyRemove',\r\n DEFAULT_TEXT: 'defaultText'\r\n};\r\n\r\nlet WarningTypes = {};\r\n\r\nWarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!';\r\nWarningTypes[WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED] = `Secure LS: If no encryption namespace is provided, only\r\none password per domain and local storage will be usable!`;\r\nWarningTypes[WarningEnum.INSECURE_PASSWORD] = `Secure LS: You are using an insecure password!\r\nChoose a strong password to encrypt your data!`;\r\nWarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!';\r\nWarningTypes[WarningEnum.META_KEY_REMOVE] = `Secure LS: Meta key can not be removed\r\nunless all keys created by Secure LS are removed!`;\r\nWarningTypes[WarningEnum.DEFAULT_TEXT] = `Unexpected output`;\r\n\r\nlet constants = {\r\n WarningEnum: WarningEnum,\r\n WarningTypes: WarningTypes,\r\n EncrytionTypes: {\r\n BASE64: 'base64',\r\n AES: 'aes',\r\n DES: 'des',\r\n RABBIT: 'rabbit',\r\n RC4: 'rc4'\r\n }\r\n};\r\n\r\nmodule.exports = constants;\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/constants.js\n **/","/*\r\n ES6 compatible port of CryptoJS - encoding\r\n\r\n Source: https://github.com/brix/crypto-js\r\n LICENSE: MIT\r\n */\r\nlet enc = {};\r\n\r\nenc.Latin1 = {\r\n stringify: (wordArray) => {\r\n // Shortcuts\r\n let words = wordArray.words;\r\n let sigBytes = wordArray.sigBytes;\r\n let latin1Chars = [], i, bite;\r\n\r\n // Convert\r\n for (i = 0; i < sigBytes; i++) {\r\n bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\r\n latin1Chars.push(String.fromCharCode(bite));\r\n }\r\n\r\n return latin1Chars.join('');\r\n }\r\n};\r\n\r\nenc._Utf8 = {\r\n stringify: (wordArray) => {\r\n try {\r\n return decodeURIComponent(escape(enc.Latin1.stringify(wordArray)));\r\n } catch (e) {\r\n throw new Error('Malformed UTF-8 data');\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = enc;\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/enc-utf8.js\n **/","let Base64 = {\r\n _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\r\n encode: function (e) {\r\n let t = '';\r\n let n, r, i, s, o, u, a;\r\n let f = 0;\r\n\r\n e = Base64._utf8Encode(e);\r\n while (f < e.length) {\r\n n = e.charCodeAt(f++);\r\n r = e.charCodeAt(f++);\r\n i = e.charCodeAt(f++);\r\n s = n >> 2;\r\n o = (n & 3) << 4 | r >> 4;\r\n u = (r & 15) << 2 | i >> 6;\r\n a = i & 63;\r\n if (isNaN(r)) {\r\n u = a = 64;\r\n } else if (isNaN(i)) {\r\n a = 64;\r\n }\r\n t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a);\r\n }\r\n return t;\r\n },\r\n decode: function (e) {\r\n let t = '';\r\n let n, r, i;\r\n let s, o, u, a;\r\n let f = 0;\r\n\r\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\r\n while (f < e.length) {\r\n s = this._keyStr.indexOf(e.charAt(f++));\r\n o = this._keyStr.indexOf(e.charAt(f++));\r\n u = this._keyStr.indexOf(e.charAt(f++));\r\n a = this._keyStr.indexOf(e.charAt(f++));\r\n n = s << 2 | o >> 4;\r\n r = (o & 15) << 4 | u >> 2;\r\n i = (u & 3) << 6 | a;\r\n t = t + String.fromCharCode(n);\r\n if (u !== 64) {\r\n t = t + String.fromCharCode(r);\r\n }\r\n if (a !== 64) {\r\n t = t + String.fromCharCode(i);\r\n }\r\n }\r\n t = Base64._utf8Decode(t);\r\n return t;\r\n },\r\n _utf8Encode: function (e) {\r\n e = e.replace(/\\r\\n/g, '\\n');\r\n let t = '';\r\n\r\n for (let n = 0; n < e.length; n++) {\r\n let r = e.charCodeAt(n);\r\n\r\n if (r < 128) {\r\n t += String.fromCharCode(r);\r\n } else if (r > 127 && r < 2048) {\r\n t += String.fromCharCode(r >> 6 | 192);\r\n t += String.fromCharCode(r & 63 | 128);\r\n } else {\r\n t += String.fromCharCode(r >> 12 | 224);\r\n t += String.fromCharCode(r >> 6 & 63 | 128);\r\n t += String.fromCharCode(r & 63 | 128);\r\n }\r\n }\r\n return t;\r\n },\r\n _utf8Decode: function (e) {\r\n let t = '';\r\n let n = 0;\r\n let r, c2, c3;\r\n\r\n r = c2 = 0;\r\n while (n < e.length) {\r\n r = e.charCodeAt(n);\r\n if (r < 128) {\r\n t += String.fromCharCode(r);\r\n n++;\r\n } else if (r > 191 && r < 224) {\r\n c2 = e.charCodeAt(n + 1);\r\n t += String.fromCharCode((r & 31) << 6 | c2 & 63);\r\n n += 2;\r\n } else {\r\n c2 = e.charCodeAt(n + 1);\r\n c3 = e.charCodeAt(n + 2);\r\n t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);\r\n n += 3;\r\n }\r\n }\r\n return t;\r\n }\r\n};\r\n\r\nmodule.exports = Base64;\r\n\n\n\n/** WEBPACK FOOTER **\n ** C:/Users/Richard Burkhardt/websites/secure-ls/~/eslint-loader!./src/Base64.js\n **/","// Copyright (c) 2013 Pieroxy \n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lz-string/libs/lz-string.js\n ** module id = 5\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/aes.js\n ** module id = 6\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t /*\n\t * Local polyfil of Object.create\n\t */\n\t var create = Object.create || (function () {\n\t function F() {};\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }())\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t var r = (function (m_w) {\n\t var m_w = m_w;\n\t var m_z = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\n\t return function () {\n\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t var result = ((m_z << 0x10) + m_w) & mask;\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > .5 ? 1 : -1);\n\t }\n\t });\n\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t rcache = _r() * 0x3ade67b7;\n\t words.push((_r() * 0x100000000) | 0);\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t var processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/core.js\n ** module id = 7\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/enc-base64.js\n ** module id = 8\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/md5.js\n ** module id = 9\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t var block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/evpkdf.js\n ** module id = 10\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/sha1.js\n ** module id = 11\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/hmac.js\n ** module id = 12\n ** module chunks = 0\n **/",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t var block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t var modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t var modeCreator = mode.createDecryptor;\n\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t var wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/cipher-core.js\n ** module id = 13\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n\t this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n\t this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/tripledes.js\n ** module id = 14\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/rabbit.js\n ** module id = 15\n ** module chunks = 0\n **/",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/crypto-js/rc4.js\n ** module id = 16\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/src/constants.js b/src/constants.js index 012bb74..316ff28 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,11 +1,18 @@ let WarningEnum = { KEY_NOT_PROVIDED: 'keyNotProvided', + ENCRYPTION_NAMESPACE_NOT_PROVIDED: 'encryptionNameSpaceNotProvided', + INSECURE_PASSWORD: 'insecurePassword', META_KEY_REMOVE: 'metaKeyRemove', DEFAULT_TEXT: 'defaultText' }; let WarningTypes = {}; +WarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!'; +WarningTypes[WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED] = `Secure LS: If no encryption namespace is provided, only +one password per domain and local storage will be usable!`; +WarningTypes[WarningEnum.INSECURE_PASSWORD] = `Secure LS: You are using an insecure password! +Choose a strong password to encrypt your data!`; WarningTypes[WarningEnum.KEY_NOT_PROVIDED] = 'Secure LS: Key not provided. Aborting operation!'; WarningTypes[WarningEnum.META_KEY_REMOVE] = `Secure LS: Meta key can not be removed unless all keys created by Secure LS are removed!`; diff --git a/src/index.js b/src/index.js index ab9da75..13238a0 100644 --- a/src/index.js +++ b/src/index.js @@ -27,7 +27,8 @@ export default class SecureLS { isCompression: true, encodingType: constants.EncrytionTypes.BASE64, encryptionSecret: config.encryptionSecret, - encryptionNamespace: config.encryptionNamespace + encryptionNamespace: config.encryptionNamespace, + storage: config.storage || localStorage }; this.config.isCompression = typeof config.isCompression !== 'undefined' ? config.isCompression : @@ -36,8 +37,26 @@ export default class SecureLS { config.encodingType.toLowerCase() : constants.EncrytionTypes.BASE64; - this.ls = localStorage; + this.ls = this.config.storage; this.init(); + + // If a serious encryption is used only one password is allowed for the local storage encryption. + // To make multiple passwords possible a namespace must be set. + // This notifies users that using no namespace may cause issues with multiple passwords. + if (!this._isBase64 && typeof this.config.encryptionNamespace === 'undefined') { + this.utils.warn(this.WarningEnum.ENCRYPTION_NAMESPACE_NOT_PROVIDED); + } + // If a serious encryption is wanted a user should pass a password, because the is no default secure password. + // Warn the user if no password is passed + if ( + !this._isBase64 && + ( + typeof this.config.encryptionSecret === 'undefined' || + !this.config.encryptionSecret.length + ) + ) { + this.utils.warn(this.WarningEnum.INSECURE_PASSWORD); + } }; init() { @@ -88,34 +107,26 @@ export default class SecureLS { return this.config.isCompression; } - getEncryptionSecret(key) { - let metaData = this.getMetaData(); - let obj = this.utils.getObjectFromKey(metaData.keys, key); - - if (!obj) { - return; - } - - if (this._isAES || - this._isDES || - this._isRabbit || - this._isRC4 + getEncryptionSecret() { + if ( + this._isAES || + this._isDES || + this._isRabbit || + this._isRC4 ) { if (typeof this.config.encryptionSecret === 'undefined') { - this.utils.encryptionSecret = obj.s; - if (!this.utils.encryptionSecret) { - this.utils.encryptionSecret = this.utils.generateSecretKey(); + this.utils.encryptionSecret = ''; this.setMetaData(); } } else { - this.utils.encryptionSecret = this.config.encryptionSecret || obj.s || ''; + this.utils.encryptionSecret = this.config.encryptionSecret || ''; } } } get(key, isAllKeysData) { - let decodedData = '', + let decodedData, jsonData = '', deCompressedData, bytes, @@ -138,10 +149,10 @@ export default class SecureLS { } decodedData = deCompressedData; // saves else - if (this._isBase64 || isAllKeysData) { // meta data always Base64 + if (this._isBase64) { decodedData = Base64.decode(deCompressedData); } else { - this.getEncryptionSecret(key); + this.getEncryptionSecret(); if (this._isAES) { bytes = AES.decrypt(deCompressedData.toString(), this.utils.encryptionSecret); } else if (this._isDES) { @@ -171,20 +182,16 @@ export default class SecureLS { }; getAllKeys() { - let data = this.getMetaData(); - - return this.utils.extractKeyNames(data) || []; + return this.getMetaData().keys || []; }; set(key, data) { - let dataToStore = ''; - if (!this.utils.is(key)) { this.utils.warn(this.WarningEnum.KEY_NOT_PROVIDED); return; } - this.getEncryptionSecret(key); + this.getEncryptionSecret(); // add key(s) to Array if not already added, only for keys other than meta key if (!(String(key) === String(this.utils.metaKey))) { @@ -193,10 +200,8 @@ export default class SecureLS { this.setMetaData(); } } - - dataToStore = this.processData(data); // Store the data to localStorage - this.setDataToLocalStorage(key, dataToStore); + this.setDataToLocalStorage(key, this.processData(data)); }; setDataToLocalStorage(key, data) { @@ -259,7 +264,7 @@ export default class SecureLS { // Encode Based on encoding type // If not set, default to Base64 for securing data encodedData = jsonData; - if (this._isBase64 || isAllKeysData) { + if (this._isBase64) { encodedData = Base64.encode(jsonData); } else { if (this._isAES) { @@ -294,7 +299,7 @@ export default class SecureLS { }; getMetaData() { - return this.get(this.getMetaKey(), true) || {}; + return this.get(this.getMetaKey(), true) || {keys: []}; }; getMetaKey() { diff --git a/src/utils.js b/src/utils.js index 62624c4..f96b7b5 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,6 +1,4 @@ import constants from './constants'; -import CryptoJSWordArray from './WordArray'; -import PBKDF2 from 'crypto-js/pbkdf2'; let utils = { metaKey: '_secure__ls__metadata', @@ -17,12 +15,6 @@ let utils = { reason = reason ? reason : constants.WarningEnum.DEFAULT_TEXT; console.warn(constants.WarningTypes[reason]); }, - generateSecretKey: function () { - let salt = CryptoJSWordArray.random(128 / 8); - let key128Bits = PBKDF2(this.secretPhrase, salt, {keySize: 128 / 32 }); - - return key128Bits && key128Bits.toString(); - }, getObjectFromKey: function (data, key) { if (!data || !data.length) { return {}; @@ -39,15 +31,6 @@ let utils = { return obj; }, - extractKeyNames: function (data) { - if (!data || !data.keys || !data.keys.length) { - return []; - } - - return data.keys.map(keyData => { - return keyData.k; - }); - }, getAllKeys: function () { return this.allKeys; }, @@ -55,7 +38,7 @@ let utils = { let isKeyAlreadyPresent = false; for (let i = 0; i < this.allKeys.length; i++) { - if (String(this.allKeys[i].k) === String(key)) { + if (String(this.allKeys[i]) === String(key)) { isKeyAlreadyPresent = true; // found break; } @@ -64,16 +47,13 @@ let utils = { return isKeyAlreadyPresent; }, addToKeysList: function (key) { - this.allKeys.push({ - k: key, - s: this.encryptionSecret - }); + this.allKeys.push(key); }, removeFromKeysList: function (key) { let i, index = -1; for (i = 0; i < this.allKeys.length; i++) { - if (this.allKeys[i].k === key) { + if (this.allKeys[i] === key) { index = i; break; } diff --git a/test/functional.spec.js b/test/functional.spec.js index f8ae71d..c8f8572 100644 --- a/test/functional.spec.js +++ b/test/functional.spec.js @@ -11,10 +11,12 @@ let lib; describe('Functional tests', () => { beforeEach(() => { + sinon.spy(console, 'warn'); lib = new SecureLS(); }); afterEach(() => { + console.warn.restore(); lib.removeAll(); }); @@ -31,14 +33,26 @@ describe('Functional tests', () => { }); }); - describe('Config test: is AES encryption', () => { + describe('Config test: show password usage warnings', () => { it('should verify encryption type with data encryption', () => { lib = new SecureLS({encodingType: 'aes'}); + expect(console.warn.calledWith(`Secure LS: If no encryption namespace is provided, only +one password per domain and local storage will be usable!`)).to.be.ok; + expect(console.warn.calledWith(`Secure LS: You are using an insecure password! +Choose a strong password to encrypt your data!`)).to.be.ok; + }); + }); + + describe('Config test: is AES encryption', () => { + it('should verify encryption type with data encryption', () => { + lib = new SecureLS({encodingType: 'aes', encryptionSecret: 'some', encryptionNamespace: 'some'}); expect(lib._isAESEncryptionType()).to.equal(true); expect(lib._isDataCompressionEnabled()).to.equal(true); }); it('should verify encryption type with no data compression', () => { - lib = new SecureLS({encodingType: 'aes', isCompression: false}); + lib = new SecureLS({ + encodingType: 'aes', isCompression: false, encryptionSecret: 'some', encryptionNamespace: 'some' + }); expect(lib._isAESEncryptionType()).to.equal(true); expect(lib._isDataCompressionEnabled()).to.equal(false); }); @@ -46,12 +60,14 @@ describe('Functional tests', () => { describe('Config test: is DES encryption', () => { it('should verify encryption type with data encryption', () => { - lib = new SecureLS({encodingType: 'des'}); + lib = new SecureLS({encodingType: 'des', encryptionSecret: 'some', encryptionNamespace: 'some'}); expect(lib._isDESEncryptionType()).to.equal(true); expect(lib._isDataCompressionEnabled()).to.equal(true); }); it('should verify encryption type with no data compression', () => { - lib = new SecureLS({encodingType: 'des', isCompression: false}); + lib = new SecureLS({ + encodingType: 'des', isCompression: false, encryptionSecret: 'some', encryptionNamespace: 'some' + }); expect(lib._isDESEncryptionType()).to.equal(true); expect(lib._isDataCompressionEnabled()).to.equal(false); }); @@ -59,12 +75,14 @@ describe('Functional tests', () => { describe('Config test: is RABBIT encryption', () => { it('should verify encryption type with data encryption', () => { - lib = new SecureLS({encodingType: 'rabbit'}); + lib = new SecureLS({encodingType: 'rabbit', encryptionSecret: 'some', encryptionNamespace: 'some'}); expect(lib._isRabbitEncryptionType()).to.equal(true); expect(lib._isDataCompressionEnabled()).to.equal(true); }); it('should verify encryption type with no data compression', () => { - lib = new SecureLS({encodingType: 'rabbit', isCompression: false}); + lib = new SecureLS({ + encodingType: 'rabbit', isCompression: false, encryptionSecret: 'some', encryptionNamespace: 'some' + }); expect(lib._isRabbitEncryptionType()).to.equal(true); expect(lib._isDataCompressionEnabled()).to.equal(false); }); @@ -72,12 +90,14 @@ describe('Functional tests', () => { describe('Config test: is RC4 encryption', () => { it('should verify encryption type with data encryption', () => { - lib = new SecureLS({encodingType: 'rc4'}); + lib = new SecureLS({encodingType: 'rc4', encryptionSecret: 'some', encryptionNamespace: 'some'}); expect(lib._isRC4EncryptionType()).to.equal(true); expect(lib._isDataCompressionEnabled()).to.equal(true); }); it('should verify encryption type with no data compression', () => { - lib = new SecureLS({encodingType: 'rc4', isCompression: false}); + lib = new SecureLS({ + encodingType: 'rc4', isCompression: false, encryptionSecret: 'some', encryptionNamespace: 'some' + }); expect(lib._isRC4EncryptionType()).to.equal(true); expect(lib._isDataCompressionEnabled()).to.equal(false); }); @@ -94,7 +114,7 @@ describe('Functional tests', () => { }); it('should call AES encrypt if encoding is AES', () => { - lib = new SecureLS({encodingType: 'aes'}); + lib = new SecureLS({encodingType: 'aes', encryptionSecret: 'some', encryptionNamespace: 'some'}); let spyOnLZStringCompress = sinon.spy(lib.LZString, 'compressToUTF16'); let spyOnAESEncrypt = sinon.spy(lib.AES, 'encrypt'); @@ -116,7 +136,7 @@ describe('Functional tests', () => { }); it('should call DES encrypt if encoding is DES', () => { - lib = new SecureLS({encodingType: 'DES'}); + lib = new SecureLS({encodingType: 'DES', encryptionSecret: 'some', encryptionNamespace: 'some'}); let spyOnLZStringCompress = sinon.spy(lib.LZString, 'compressToUTF16'); let spyOnDESEncrypt = sinon.spy(lib.DES, 'encrypt'); @@ -138,7 +158,7 @@ describe('Functional tests', () => { }); it('should call RABBIT encrypt if encoding is RABBIT', () => { - lib = new SecureLS({encodingType: 'RABBIT'}); + lib = new SecureLS({encodingType: 'RABBIT', encryptionSecret: 'some', encryptionNamespace: 'some'}); let spyOnLZStringCompress = sinon.spy(lib.LZString, 'compressToUTF16'); let spyOnRABBITEncrypt = sinon.spy(lib.RABBIT, 'encrypt'); @@ -160,7 +180,7 @@ describe('Functional tests', () => { }); it('should call RC4 encrypt if encoding is RC4', () => { - lib = new SecureLS({encodingType: 'RC4'}); + lib = new SecureLS({encodingType: 'RC4', encryptionSecret: 'some', encryptionNamespace: 'some'}); let spyOnLZStringCompress = sinon.spy(lib.LZString, 'compressToUTF16'); let spyOnRC4Encrypt = sinon.spy(lib.RC4, 'encrypt'); @@ -182,7 +202,9 @@ describe('Functional tests', () => { }); it('should not call LZString compress if compression OFF', () => { - lib = new SecureLS({encodingType: 'aes', isCompression: false}); + lib = new SecureLS({ + encodingType: 'aes', isCompression: false, encryptionSecret: 'some', encryptionNamespace: 'some' + }); let spyOnLZStringCompress = sinon.spy(lib.LZString, 'compressToUTF16'); let data = { @@ -198,7 +220,9 @@ describe('Functional tests', () => { }); it('should call LZString compress if compression in ON', () => { - lib = new SecureLS({encodingType: 'aes', isCompression: true}); + lib = new SecureLS({ + encodingType: 'aes', isCompression: true, encryptionSecret: 'some', encryptionNamespace: 'some' + }); let spyOnLZStringCompress = sinon.spy(lib.LZString, 'compressToUTF16'); let data = { diff --git a/test/localStorage.spec.js b/test/localStorage.spec.js index 20f8fdb..5c93ad6 100644 --- a/test/localStorage.spec.js +++ b/test/localStorage.spec.js @@ -8,14 +8,14 @@ chai.expect(); describe('LocalSorage API Tests ->', () => { let lib; - beforeEach(function() { + beforeEach(function () { let mockStorage = mockLS.storageMock(); lib = new SecureLS(); lib.ls = mockStorage; }); - afterEach(function() { + afterEach(function () { lib.removeAll(); }); diff --git a/test/ls-data-enc-dec.spec.js b/test/ls-data-enc-dec.spec.js index b0788c2..a3ebb96 100644 --- a/test/ls-data-enc-dec.spec.js +++ b/test/ls-data-enc-dec.spec.js @@ -70,7 +70,9 @@ describe('Encryption / Decryption Tests ->', () => { let data = [1, 2, 3]; let key = 'key-1'; - lib = new SecureLS({encodingType: 'aes', isCompression: false}); + lib = new SecureLS({ + encodingType: 'aes', isCompression: false, encryptionSecret: 'some', encryptionNamespace: 'some' + }); lib.ls = mockStorage; lib.set(key, data); @@ -96,7 +98,9 @@ describe('Encryption / Decryption Tests ->', () => { let data = [1, 2, 3]; let key = 'key-1'; - lib = new SecureLS({encodingType: 'aes', isCompression: true}); + lib = new SecureLS({ + encodingType: 'aes', isCompression: true, encryptionSecret: 'some', encryptionNamespace: 'some' + }); lib.ls = mockStorage; lib.set(key, data); @@ -128,7 +132,8 @@ describe('Encryption / Decryption Tests ->', () => { lib = new SecureLS({ encodingType: 'aes', isCompression: true, - encryptionSecret: 'mySecretKey123' + encryptionSecret: 'mySecretKey123', + encryptionNamespace: 'some' }); lib.ls = mockStorage; lib.set(key, data); @@ -161,7 +166,9 @@ describe('Encryption / Decryption Tests ->', () => { let data = [1, 2, 3]; let key = 'key-1'; - lib = new SecureLS({encodingType: 'DES', isCompression: false}); + lib = new SecureLS({ + encodingType: 'DES', isCompression: false, encryptionSecret: 'some', encryptionNamespace: 'some' + }); lib.ls = mockStorage; lib.set(key, data); @@ -190,7 +197,8 @@ describe('Encryption / Decryption Tests ->', () => { lib = new SecureLS({ encodingType: 'DES', isCompression: false, - encryptionSecret: 'mySecretKey123' + encryptionSecret: 'mySecretKey123', + encryptionNamespace: 'some' }); lib.ls = mockStorage; lib.set(key, data); @@ -220,7 +228,9 @@ describe('Encryption / Decryption Tests ->', () => { let data = [1, 2, 3]; let key = 'key-1'; - lib = new SecureLS({encodingType: 'DES', isCompression: true}); + lib = new SecureLS({ + encodingType: 'DES', isCompression: true, encryptionSecret: 'some', encryptionNamespace: 'some' + }); lib.ls = mockStorage; lib.set(key, data); @@ -249,7 +259,9 @@ describe('Encryption / Decryption Tests ->', () => { let data = [1, 2, 3]; let key = 'key-1'; - lib = new SecureLS({encodingType: 'RABBIT', isCompression: false}); + lib = new SecureLS({ + encodingType: 'RABBIT', isCompression: false, encryptionSecret: 'some', encryptionNamespace: 'some' + }); lib.ls = mockStorage; lib.set(key, data); @@ -275,7 +287,9 @@ describe('Encryption / Decryption Tests ->', () => { let data = [1, 2, 3]; let key = 'key-1'; - lib = new SecureLS({encodingType: 'RABBIT', isCompression: true}); + lib = new SecureLS({ + encodingType: 'RABBIT', isCompression: true, encryptionSecret: 'some', encryptionNamespace: 'some' + }); lib.ls = mockStorage; lib.set(key, data); @@ -307,7 +321,8 @@ describe('Encryption / Decryption Tests ->', () => { lib = new SecureLS({ encodingType: 'RABBIT', isCompression: true, - encryptionSecret: '' + encryptionSecret: '', + encryptionNamespace: 'some' }); lib.ls = mockStorage; lib.set(key, data); @@ -343,7 +358,9 @@ describe('Encryption / Decryption Tests ->', () => { let data = [1, 2, 3]; let key = 'key-1'; - lib = new SecureLS({encodingType: 'RC4', isCompression: false}); + lib = new SecureLS({ + encodingType: 'RC4', isCompression: false, encryptionSecret: 'some', encryptionNamespace: 'some' + }); lib.ls = mockStorage; lib.set(key, data); @@ -369,7 +386,9 @@ describe('Encryption / Decryption Tests ->', () => { let data = [1, 2, 3]; let key = 'key-1'; - lib = new SecureLS({encodingType: 'RC4', isCompression: true}); + lib = new SecureLS({ + encodingType: 'RC4', isCompression: true, encryptionSecret: 'some', encryptionNamespace: 'some' + }); lib.ls = mockStorage; lib.set(key, data); diff --git a/test/standard.spec.js b/test/standard.spec.js index 4019575..9655b15 100644 --- a/test/standard.spec.js +++ b/test/standard.spec.js @@ -60,12 +60,14 @@ describe('Standard SecureLS API Tests ->', () => { describe('secure-ls: getAllKeys method', () => { it('should return [] if nothing set', () => { let keys = lib.getAllKeys(); + expect(keys).to.be.an('array'); expect(keys.length).to.equal(0); }); it('should return keys when there are', () => { let keys = lib.getAllKeys(); + expect(keys.length).to.equal(0); lib.set('key-1'); @@ -122,8 +124,9 @@ describe('Standard SecureLS API Tests ->', () => { }); it('should update the list of stored keys', () => { - let spy = sinon.spy(lib, 'setMetaData'); - lib.set('key-1'); + const spy = sinon.spy(lib, 'setMetaData'); + + lib.set('key-1'); lib.remove('key-1'); expect(spy).to.be.called; }); @@ -132,8 +135,9 @@ describe('Standard SecureLS API Tests ->', () => { describe('secure-ls: removeAll method', function () { it('verify allKeys length on removal', () => { let spy = sinon.spy(lib, 'getAllKeys'); + lib.set('key-1', {data: 'data'}); - lib.set('key-2', [1, 2, 3]) + lib.set('key-2', [1, 2, 3]); expect(lib.utils.allKeys.length).to.equal(2); diff --git a/test/utils.spec.js b/test/utils.spec.js index 7e24ec4..5034c23 100644 --- a/test/utils.spec.js +++ b/test/utils.spec.js @@ -10,95 +10,86 @@ const expect = chai.expect; let lib; describe('Utils tests', () => { - beforeEach(() => { - sinon.spy(console, 'warn'); - lib = new SecureLS(); + beforeEach(() => { + sinon.spy(console, 'warn'); + lib = new SecureLS(); + }); + + afterEach(() => { + console.warn.restore(); + lib.removeAll(); + }); + + describe('variables initialization', () => { + it('should verify meta-key', () => { + expect(lib.utils.metaKey).to.be.a('string'); + expect(lib.utils.metaKey).to.equal('_secure__ls__metadata'); }); - - afterEach(() => { - console.warn.restore(); - lib.removeAll(); + it('should verify encryptionSecret', () => { + expect(lib.utils.encryptionSecret).to.be.a('string'); + expect(lib.utils.encryptionSecret).to.equal(''); }); - - describe('variables initialization', () => { - it('should verify meta-key', () => { - expect(lib.utils.metaKey).to.be.a('string'); - expect(lib.utils.metaKey).to.equal('_secure__ls__metadata'); - }); - it('should verify encryptionSecret', () => { - expect(lib.utils.encryptionSecret).to.be.a('string'); - expect(lib.utils.encryptionSecret).to.equal(''); - }); - it('should verify secretPhrase', () => { - expect(lib.utils.secretPhrase).to.be.a('string'); - expect(lib.utils.secretPhrase).to.equal('s3cr3t$#@135^&*246'); - }); - it('should verify allKeys', () => { - expect(lib.utils.allKeys).to.be.an('array'); - expect(lib.utils.allKeys.length).to.equal(0); - }); + it('should verify secretPhrase', () => { + expect(lib.utils.secretPhrase).to.be.a('string'); + expect(lib.utils.secretPhrase).to.equal('s3cr3t$#@135^&*246'); + }); + it('should verify allKeys', () => { + expect(lib.utils.allKeys).to.be.an('array'); + expect(lib.utils.allKeys.length).to.equal(0); }); + }); - describe('method: is ->', () => { - it('return true if key is present', () => { - let response; + describe('method: is ->', () => { + it('return true if key is present', () => { + let response; - response = lib.utils.is('yes') - expect(response).to.equal(true); - }); - it('return false if key is present', () => { - let response; + response = lib.utils.is('yes') + expect(response).to.equal(true); + }); + it('return false if key is present', () => { + let response; - response = lib.utils.is() - expect(response).to.equal(false); - }); + response = lib.utils.is() + expect(response).to.equal(false); }); + }); - describe('method: warn ->', () => { - it('warn with default warning msg if no reason provided', () => { - lib.utils.warn(); - expect(console.warn).to.be.called; - expect(console.warn.calledWith('Unexpected output')).to.be.ok; - }); - it('warn with undefined warning msg if wrong reason provided', () => { - lib.utils.warn('wrong'); - expect(console.warn).to.be.called; - expect(console.warn.calledWith('Unexpected output')).to.not.be.ok; - }); - it('warn with warning msg as per reason provided', () => { - lib.utils.warn('keyNotProvided'); - expect(console.warn).to.be.called; - expect(console.warn.calledWith('Secure LS: Key not provided. Aborting operation!')).to.be.ok; - }); + describe('method: warn ->', () => { + it('warn with default warning msg if no reason provided', () => { + lib.utils.warn(); + expect(console.warn).to.be.called; + expect(console.warn.calledWith('Unexpected output')).to.be.ok; + }); + it('warn with undefined warning msg if wrong reason provided', () => { + lib.utils.warn('wrong'); + expect(console.warn).to.be.called; + expect(console.warn.calledWith('Unexpected output')).to.not.be.ok; + }); + it('warn with warning msg as per reason provided', () => { + lib.utils.warn('keyNotProvided'); + expect(console.warn).to.be.called; + expect(console.warn.calledWith('Secure LS: Key not provided. Aborting operation!')).to.be.ok; + }); - describe('method: generateSecretKey ->', () => { - it('validate PBKDF2 key generated', () => { - let encryptionKey = lib.utils.generateSecretKey() + describe('method: getObjectFromKey ->', () => { + it('if no data provided, return', () => { + let response; - expect(encryptionKey).to.be.a('string'); - expect(encryptionKey.length).to.be.above(30); - }); + response = lib.utils.getObjectFromKey(); + expect(response).to.be.an('object'); + expect(response).to.be.empty; }); - describe('method: getObjectFromKey ->', () => { - it('if no data provided, return', () => { - let response; - - response = lib.utils.getObjectFromKey(); - expect(response).to.be.an('object'); - expect(response).to.be.empty; - }); - - it('if data provided is empty array, return', () => { - let response; + it('if data provided is empty array, return', () => { + let response; - response = lib.utils.getObjectFromKey([]); - expect(response).to.be.an('object'); - expect(response).to.be.empty; - }); + response = lib.utils.getObjectFromKey([]); + expect(response).to.be.an('object'); + expect(response).to.be.empty; + }); - it('should return obj matching the key provided', () => { - let response, key = 'name', data = [{ + it('should return obj matching the key provided', () => { + let response, key = 'name', data = [{ k: 'name', test: 'case1' }, { @@ -106,86 +97,53 @@ describe('Utils tests', () => { test: 'case2' }]; - response = lib.utils.getObjectFromKey(data, key); + response = lib.utils.getObjectFromKey(data, key); - expect(response).to.be.an('object'); - expect(response).to.not.be.empty; - expect(response).to.include.keys('k'); - expect(response).to.include.keys('test'); - expect(response).to.equal(data[0]); - }); + expect(response).to.be.an('object'); + expect(response).to.not.be.empty; + expect(response).to.include.keys('k'); + expect(response).to.include.keys('test'); + expect(response).to.equal(data[0]); }); + }); - describe('method: extractKeyNames ->', () => { - it('should return just the `k` values', () => { - let response, key = 'name', data = { - keys: [{ - k: 'name', - test: 'case1' - }, { - k: 'age', - test: 'case2' - }] - }; - - response = lib.utils.extractKeyNames(data); - - expect(response).to.be.an('array'); - expect(response).to.include('name'); - expect(response).to.not.include('test'); - }); - }); + describe('method: isKeyPresent ->', () => { + it('should return the boolean based on key presence', () => { + let response, key = 'name'; - describe('method: isKeyPresent ->', () => { - it('should return the boolean based on key presence', () => { - let response, key = 'name'; + lib.utils.allKeys = ['name', 'age']; - lib.utils.allKeys = [{ - k: 'name', - test: 'case1' - }, { - k: 'age', - test: 'case2' - }]; + response = lib.utils.isKeyPresent(key); - response = lib.utils.isKeyPresent(key); - - expect(response).to.be.a('boolean'); - expect(response).to.equal(true); + expect(response).to.be.a('boolean'); + expect(response).to.equal(true); - response = lib.utils.isKeyPresent('wrong-key'); + response = lib.utils.isKeyPresent('wrong-key'); - expect(response).to.be.a('boolean'); - expect(response).to.equal(false); - }); + expect(response).to.be.a('boolean'); + expect(response).to.equal(false); }); + }); - describe('method: removeFromKeysList ->', () => { - it('should remove object from array if key matches', () => { - let response; + describe('method: removeFromKeysList ->', () => { + it('should remove object from array if key matches', () => { - lib.utils.allKeys = [{ - k: 'name', - test: 'case1' - }, { - k: 'age', - test: 'case2' - }]; + lib.utils.allKeys = ['name', 'age']; - expect(lib.utils.allKeys.length).to.equal(2); + expect(lib.utils.allKeys.length).to.equal(2); - // length should dec by 1 - response = lib.utils.removeFromKeysList('name'); - expect(lib.utils.allKeys.length).to.equal(1); + // length should dec by 1 + lib.utils.removeFromKeysList('name'); + expect(lib.utils.allKeys.length).to.equal(1); - // length should not change - response = lib.utils.removeFromKeysList('wrong-key'); - expect(lib.utils.allKeys.length).to.equal(1); + // length should not change + lib.utils.removeFromKeysList('wrong-key'); + expect(lib.utils.allKeys.length).to.equal(1); - // length should be 0 - response = lib.utils.removeFromKeysList('age'); - expect(lib.utils.allKeys.length).to.equal(0); - }); + // length should be 0 + lib.utils.removeFromKeysList('age'); + expect(lib.utils.allKeys.length).to.equal(0); }); }); -}); \ No newline at end of file + }); +});